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...