組合語言用指令pusha到底把哪些壓棧了呢

2021-03-04 06:11:23 字數 5804 閱讀 2235

1樓:清風迎明月

如果是51微控制器,那麼沒有push a指令,可以是push acc。進棧時,看你的sp開在什麼地方,先要對sp加1,再進棧。

例如:mov sp,#60h

push acc

那麼,執行push acc時,先sp+1,那麼sp指向61h,然後將acc的內容推入61h中!

2樓:水墨御風

是51微控制器的吧,應該是將直接位址所指向的目的運算元送入sp所指向的單元吧!實現入棧操作。

3樓:匿名使用者

通用暫存器的內容壓入堆疊。這些暫存器按以下順序儲存到堆疊:eax、ecx、edx、ebx、ebp、esp(原始值)、ebp、esi 及 edi(如果當前運算元大小屬性為 32)

組合語言中什麼是壓棧出棧?

4樓:匿名使用者

棧是一種線性資料結構,它遵循後進先出的順序。有乙個指標總指向棧頂。打個比方:

乙個棧就相當於乙個桶,入棧就是向裡面裝東西,先裝的在下面後裝的在上面,裝乙個指標就會加1,指向新裝的東西,出棧就相當於取出東西,只有先取上面的,再取下面的,當取乙個後指標就會減一,即指標始終指向桶裡最上面那個東西。

5樓:匿名使用者

可以理解成機槍的彈夾,彈夾就是乙個棧,子彈一顆一顆壓進去,就是壓棧,有個順序特點就是先進後出,後進先出,出棧就是子彈裝號了一顆一顆打出來,棧的清理就是把彈夾清空,清掉彈夾裡的子彈。堆疊就是把子彈放到彈夾裡,堆在那裡了,實際意思都差不多。

c語言裡棧就可以用陣列來做,把資料像子彈一樣壓陣列裡就是了。

6樓:匿名使用者

壓棧就是乙個指令,遵循先進先出,後進後出原理,為了在產生中斷時候,可以儲存資料用的。

組合語言指令大全,要詳細的 !!!!

7樓:匿名使用者

最佳答案ibm-pc組合語言指令集

資料傳送指令集

mov功能: 把源運算元送給目的運算元

8樓:蟹蟹沒有蟹黃堡

一、資料位傳送指令:

1、mov   c,  bit     ;bit  可直接定址位 c←(bit)

2、mov   bit,c     ;c    進製位 (bit) ← c

二、位變數修改指令:

1、clr    c          ; 將c=0

2、clr    bit

3、cpl    c           ; 將c求反再存入c

4、cpl    bit          ; 將bit求反再存入bit

5、setb   c          ; 將c=1

6、setb   bit          ; (bit) ← 1

三、位變數邏輯指令:

anl   c,   bit    anl   c,   bit    orl   c,   bit   orl   c,   bit

延展閱讀:

彙編指令是組合語言中使用的一些操作符和助記符,還包括一些偽指令(如assume,end)。用於告訴匯程式設計序如何進行彙編的指令,它既不控制機器的操作也不被彙編成機器**,只能為匯程式設計序所識別並指導彙編如何進行。

通用資料傳送指令:

1、mov 傳送字或位元組;

2、movsx 先符號擴充套件,再傳送;

3、movzx 先零擴充套件,再傳送;

4、push 把字壓入堆疊;

5、pop 把字彈出堆疊;

6、pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓入堆疊;

7、popa 把di,si,bp,sp,bx,dx,cx,ax依次彈出堆疊;

8、pushad 把eax,ecx,edx,ebx,esp,ebp,esi,edi依次壓入堆疊;

9、popad 把edi,esi,ebp,esp,ebx,edx,ecx,eax依次彈出堆疊;

10、bswap 交換32位暫存器裡位元組的順序;

11、xchg 交換字或位元組( 至少有乙個運算元為暫存器,段暫存器不可作為運算元);

12、cmpxchg 比較並交換運算元( 第二個運算元必須為累加器al/ax/eax );

13、xadd 先交換再累加( 結果在第乙個運算元裡 );

14、xlat 位元組查表轉換;

15、bx 指向一張 256 位元組的表的起點, al 為表的索引值 (0-255,即0-ffh);

16、返回 al 為查表結果。( [bx+al]->al )

關於組合語言問題,入棧出棧什麼用

9樓:匿名使用者

組合語言中堆疊的操作有專門的語句指令。

入棧指令是:push

出棧指令是:pop

比如:mov a,30h ;將乙個壓縮bcd碼送累加器apush acc ;壓棧保護

anl a,#0fh ;保留低四位

mov 30h,a ;回送給30h

pop acc ;出棧

swap a ;高低四位互換

anl a,#0fh ;保留低四位

mov b,#10 ;b送10

mul ab ;乘10

add a,30h ;與個位相加

mov 30h,a ;回送給30h

以上程式段將乙個壓縮bcd碼轉換為十六進位制。

10樓:匿名使用者

保護資料用。就是將ds ax 裡的資料先暫存在堆疊裡,這就是入棧(指令為push)。然後,可以對它們進行操作而不會影響原來的資料。到需要原來的資料時,再出棧(pop) 。

11樓:匿名使用者

對於現代的計算機來說,棧是一種非常關鍵、極其重要的資料結構。

棧就相當於乙個細長的裝彈珠的瓶子(瓶口、瓶身內部截面均只能通過乙個彈珠),不同顏色的彈珠只能從瓶口裝入,也只能從瓶口取出,在瓶內的彈珠的順序是不能改變的。這些彈珠具有「先進後出、後進先出」的特性。瓶子有一定的長度,裝滿彈珠後就不能再裝了,再裝就直接滾跑了(溢位)。

程式不都是線性的,有分支、有迴圈,有主程式、也有子程式。在子程式中,棧通常用來儲存現場(進棧--push、pusha、pushf),在棧中定義區域性變數,執行完成後要恢復現場(出棧--popf、popa、pop)。沒有棧這種資料結構,很難想象現在的軟體是個什麼樣子。

例:用組合語言(ma**)編寫程式段,實現從鍵盤輸入十個一位10進製數後累加以非壓縮bcd碼形式存放在ah和al中。

code segment

assume cs:code

*** 100h

start:

jmp bbb

lfcr db 13,10,'$'

bbb:

push cs

pop ds

call inputnum

mov ah,9

lea dx,lfcr

int 21h

lea si,array

mov ch,0

mov cl,byte ptr[num]

mov ax,0

lp:add ax,word ptr[si]

daa ; 十進位制加法調整指令

inc si

inc si

loop lp

call dispnum

mov ah,4ch

int 21h

dispnum proc near

; 將要顯示的資料放入al中

mov dl,al ; 將al暫存在dl中

and al,0fh ; 取al的低4位

mov bl,al ; 非壓縮的bcd碼

add bl,30h ; 轉成ascii碼

mov al,dl ; 取回al 並經以下4次右移取出al的高4位

shr al,1

shr al,1

shr al,1

shr al,1

mov bh,al ; 非壓縮的bcd碼

add bh,30h ; 轉成ascii碼

mov ax,bx ; 非壓縮的兩位數的ascii碼存放在ax中

mov byte ptr[y+4],al

mov byte ptr[y+3],ah

mov ah,9

lea dx,y

int 21h

rety db 10,13,0,0,0,'$'

dispnum endp

inputnum proc near

; 輸入的資料以乙個空格分隔,以回車符結束輸入

lea di,array ;將陣列第乙個元素的有效位址置入di

mov byte ptr[num],0

stin:

mov ax,0

push ax

again1:

mov ah,1

int 21h

mov byte ptr[char],al

cmp al,13

je line0

cmp al,' '

je line0

sub al,30h

mov ah,0

mov si,ax

pop ax

mov cl,10

mov ch,0

mul cx

add ax,si

push ax

jmp again1

line0:

pop ax

mov word ptr[di],ax

inc byte ptr[num]

cmp byte ptr[char],13

je stinend

inc di

inc di

jmp stin

stinend:

retarray dw 100 dup(0)

num db 0

char db ?

inputnum endp

code ends

end start

請注意inputnum子程式,在開始部分執行了 push ax,就是為了儲存暫存器ax的值,因為在int 21h中斷子程式中要用ax進行入口引數設定。

12樓:匿名使用者

用於快取資料,保護暫存器或者進行暫存器與暫存器間資料傳輸。而且有些暫存器的值只能通過堆疊操作完成。比如程式暫存器的值cs只能通過堆疊操作完成讀取:

push cs

pop bx; 或者 pop ds之類。

也用於子函式(子例程,通過call指令呼叫)的引數傳遞。

call _sub

_sub: push ax ; 儲存axpush bx ; 儲存bx

mov ax, 128; 因為下面會改寫這兩個暫存器mov bx, 125;

.... ; 進行相關功能操作pop bx ; 完成後恢復bx值pop ax ; 完成後恢復ax值ret

13樓:娃哈哈ab鈣奶

push ds ;把ds壓入棧中

sub ax, ax ;ax—ax 結果存放在ax中,就是把0放在ax中

push ax ;把ax壓入棧中

mov ax, dat ;把dat段位址放到ax中mov ds, ax ;把ax值放到ds中pop入棧是把資料壓入棧段中;push出棧是把資料從棧段中拿出來;入棧與出棧是遵循先進後出的原則!入棧出棧其實是個臨時儲存資料作用!ss指向棧段的段位址,sp指向棧段的頂端。

希望我的回答對您有幫助,呵呵!

組合語言中db指令的意義,組合語言中DB指令的意義

db作為組合語言中的偽操作命令,它用來定義運算元佔用的位元組數。在這裡b是byte的縮寫,即位元組,所以,該偽操作所定義的每個運算元佔有1個位元組 8位 如 message db hello 此時,字串 hello 中每個字元會佔用1個位元組,51微控制器中,用於定義位元組的內容。db 指令以表示式...

求彙編的基本命令,組合語言指令的基本格式是什麼

裡面。intel 64 and ia 32 architectures software developer s manual volume 2a 和。intel 64 and ia 32 architectures software developer s manual volume 2b 是in...

為什麼組合語言中MOV指令佔3位ADD指令佔兩位

不對呀,如果是51的話,mov指令佔一位 兩位 三位的都有,add指令也有佔一位和兩位。如 mov a,r0 佔一位 mov a,20h 佔兩位 mov 30h,40h 佔三位 add a,r1 佔一位 add a,23h 佔兩位 這些都是規定死的東西。屁股太大了乙個座位做不下去的。這個都是inte...