組合語言中的push的用法,組合語言中的PUSH的用法

2021-08-14 23:02:23 字數 4294 閱讀 2570

1樓:非常可愛

push的操作過程是: (sp)<--(sp)-2,((sp))<--oprd 即先修改堆疊指標sp(壓入時為自動減2),然後,將指定 的運算元送入新的棧頂位置。

此處的((sp))<--oprd,也可以理解為:

[(ss)*16+(sp)]<--oprd 或 [ss:sp]<--oprd

示例: push dx

push bp

push cs

push data1

push alfa[bx][si]

注意: 每進行一次壓入操作,都壓入一個字(16位)。

擴充套件資料push 指令

push 指令首先減少esp的值,再將源運算元複製到堆疊。運算元是16位的,則esp減 2,運算元是32位的,則 esp減4,push指令有3種格式:

push reg/mem16

push reg/mem32

push inm32

2樓:匿名使用者

減2就是指標上移2個單元, 題中例子裡, push ax後, sp=000eh。

3樓:匿名使用者

push,彙編術語,實現壓入操作的指令是push指令;實現彈出操作的指令是pop指令。

push的操作過程是:

(sp)<--(sp)-2,((sp))<--oprd 即先修改堆疊指標sp(壓入時為自動減2),然後,將指定 的運算元送入新的棧頂位置,簡單來說:減2就是指標上移2個單元。

此處的((sp))<--oprd,也可以理解為:

[(ss)*16+(sp)]<--oprd 或 [ss:sp]<--oprd

3. 示例: push dx

push bp

push cs

push data1

push alfa[bx][si]

注意: 每進行一次壓入操作,都壓入一個字(16位)。

4樓:文刀舍予

相當於sub sp,2

關於組合語言中的push問題。

5樓:匿名使用者

每次repet開始,來cx是需要檢測的字元數自,si是需要bai檢測字元系列du

一端地址

如對字zhi符系列檢測時:abcdefaceda

首次進入,

daocx=11,si指向第一個字元

push cx在堆疊儲存cx,

迴圈利用cx,結合loop comp實現整個字元系列遍歷檢測(所謂的內迴圈)

取出cx賦予dx,--dx,檢測是否為零,即是否還有字元需要檢測

【事實上push,pop這些操作你只需當它是引數傳遞與儲存即可】事實上

第二行與第三行push cx,pop dx完全沒意義,可以去掉

事實上,在next1子指令系列中

可以不用dx,直接使用 pop cx, 掉dec dx與mov cx,dx,將jnz repet 改為loop repet

順便說一句,事實上該程式的si事實上是:第一次遍歷先指向最後一個字元,然後向前遍歷;第二次遍歷指向倒數第二個字元,然後向前遍歷;。。。

6樓:

基本的copy框架bai如下自

du己分析下不難

zhi理解!dao

repet:

push si

push cx

push cx

pop dx

......

next1: pop dx

pop si

dec si

dec dx

mov cx,dx

jnz repet

7樓:匿名使用者

推ds小斧頭,斧頭

push ax

com程式通常使用,儲存在ds:0000一個int 20h指令,執行上面的**,以便使用retf int 20h ,從而使該程式結束。

8樓:匿名使用者

第一次是儲存cx,第二次是將cx值傳遞給dx

9樓:匿名使用者

所以專業,你為什麼不讀書了嗎?

資料暫存器累加器,通用暫存器。累加器保

回存的計算結答果,通用暫存器儲存資料。

**段,當然,是儲存當前正在執行的**;

資料段的資料儲存在當前程式;

儲存的返回地址和程式引數(地址堆疊段)子程式呼叫;

的其他部分也儲存資料,但一般儲存的批處理計算的結果。

彙編裡的"push"和"pop"起了什麼功能,,誰能用通俗點的話告訴我嗎??

10樓:

sh」指令的功能是實現將一個暫存器中的資料壓入棧操作。push的操作過程是: (sp)(sp)-2,((sp))<-oprd。

先修改堆疊指標sp(壓入時為自動減2),然後,將指定的運算元送入新的棧頂位置。

彙編裡的"pop"指令的功能是實現將一個暫存器中的資料彈出棧操作。pop的操作過程是:將堆疊段中當前ss:

sp所指的字內容彈出到某個暫存器或段暫存器或記憶體單元。再 sp←sp+2。

11樓:匿名使用者

進出棧,棧是filo(first in last out),先進後出也就是把暫存器裡的資料臨時儲存一下,相當與一個倉庫不是你說的那樣子

假設eax=4,ebx=5

push eax

push ebx

pop eax

pop ebx

結果eax=5 ebx=4(體現了先進後出)

12樓:雍朔

push和pop是堆疊操作指令,push [reg]/[num] 是將reg暫存器中的值或是數字num壓入堆疊中,而pop [reg]是將堆疊棧頂的值彈出到reg暫存器中,並將這個值從堆疊中刪去.

堆疊可以看成是一個陣列,但只能在棧頂(可以認為是陣列的一端)對資料進行操作,起臨時儲存資料的作用,32位彙編中,ss:esp指向堆疊棧頂,16位則是ss:sp.

13樓:鯤鵬展翅

堆疊是一端固定,另一端變化的特殊儲存空間,你可以把它想像成裝固體的桶,桶底(棧底)固定,桶裡面所裝固體的最高處定義為桶頂(棧頂)。如果什麼都沒有裝時,桶頂和桶底相等,當裝一層沙子後,桶頂升高(即棧頂地址-2,相當於入棧push),再裝一層水泥,桶頂再次升高,(即棧頂地址又-2),當你往出倒東西的時候,你先倒出最上層的水泥,桶頂下降(即棧頂地址+2,相當出棧pop),然後你才能倒出沙子。所以堆疊是先進來的先出去。

組合語言的程式開始都有 push ds mov ax,0 push ax 這三段有什麼作用?

14樓:永恆

code  segment

assume    cs:code

main  proc      far

push      ds

mov       ax,0

push      ax

mov       ah,2

mov       dl,'l'

int       21h

retmain  endp

code  ends

end       main

15樓:做而論道

在程式的開始,bai

在堆疊中壓入了du兩次,分zhi別是ds和0;

在程式的末dao尾,使用了專ret,就用到了壓入屬的內容,這樣就能結束程式,安全的返回dos。

想要弄清這幾個操作,就必須瞭解「磁碟作業系統」,即dos才行。

這已經不是「組合語言」的內容了。

16樓:匿名使用者

壓棧保護,作業系統的規範,要了解其意義,就必須知道作業系統,這個是作業系統的程式設計的"標準"...當然不同的作業系統之間是不一樣的了,所以才說彙編是可移植性依存於系統的....

17樓:小裙裙

起到現場保護的作用,push ds是把ds壓入棧保護,,,,

組合語言問題:用push指令將a段中的前8個字型資料,逆序儲存到b段中

18樓:

mov bx,0

;...

s:push [bx]

add bx,2

loop s

;-------->

xor si,si

;...

clds:

lodsw

push ax

loop s

組合語言中test的用法,彙編中的TEST指令

test對兩個引數 目標,源 執行and邏輯操作,並根據結果設定標誌暫存器,結果本身不會儲存。test ax,bx 與 and ax,bx 命令有相同效果,只是test指令不改變ax和bx的內容,而and指令會把結果儲存到ax中。test命令將兩個運算元進行邏輯與運算,並根據運算結果設定相關的標誌位...

組合語言資料段問題,組合語言中定義的資料段的問題

如果1000h只是偏移地址,段地址由系統指定,可用下面方法 data segment org 1000h 用來指定下面資料或指令的偏移地址從該值開始 db 38h,4ah,2bh,80h,64h,0a7h,0bbh,9ch,83h,0f6h data ends 如果1000h是實體地址,則要先把它轉...

組合語言程式設計,組合語言程式設計

教你一個小招,用vc6.0編好一個c的程式,然後alt 8可以檢視彙編程式 1 include 2 void main void 3 00401055 jmp main 21h 00401031 10 for i 0 i 4 i 00401057 mov dword ptr ebp 14h 0 00...