組合語言呼叫子程式前為什麼要pusha之後再

2021-05-12 00:33:19 字數 1536 閱讀 3631

1樓:匿名使用者

push ax ; ax 的資料壓入堆疊

pop ax ; 出棧 恢復 ax 資料呼叫子程式前為了 儲存 ax 的資料 不 受到影響,返回內時 恢復原來的容資料。

如果子程式不用到 ax 則可以 省去上述操作。

2樓:匿名使用者

堆疊的作用!bai

**********===

假設程式du結構如下zhi,用到dao

了回ax

-----------------

主程式**1【假設ax=5】

呼叫子答程式【假設子程式用到了ax,且使的ax=7】主程式**2【ax=7,不是5了】

子程式**

********************=使用push ax 儲存ax

使用pop ax 恢復ax

再看-------------------------主程式**1【假設ax=5】

呼叫子程式【先儲存ax,用到了ax,且使的ax=7,但恢復ax,ax=5】

主程式**2【ax=5】

子程式**

3樓:匿名使用者

在呼叫抄子程式前,ax裡有一個值,而且是有用的。

在呼叫子程式之後,要輸出什麼結果,有一句mov ah, 2,這裡改變了ax裡的值。當然,在呼叫子程式的過程中,可能也改變ax中的值了。

程式希望在呼叫子程式、列印結果之後,還要用原來的ax值,所以就在呼叫之前把ax的值存到棧中,之後又恢復ax原來的值。

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

4樓:永恆

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

5樓:做而論道

在程式的開始,bai

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

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

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

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

6樓:匿名使用者

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

7樓:小裙裙

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

什麼是組合語言,什麼是彙編和組合語言?

組合語言就是計算機語言,它是有0,1組成的.通俗的說就是我們人和計算機交流的語言.介於機器語言和高階語言之間的一種 什麼是彙編和組合語言?彙編語copy言是一種低階計算bai機程式語言,說 低階du 並不是指語言的功能和複雜程度,而是它zhi出現在計算機發展史dao的早期,但現在仍廣泛應用於計算機開...

彙編指令延時的精確解釋,組合語言延時程式怎麼解釋?

2 123 2 248us中,的 2即分別是指令mov r6,123 和指令nop各一秒,即是所內迴圈。248 2 200 1 50.001ms 中 2即是指令djnz r7,dly1的用時,248 2 200即外迴圈,最後那個 1即指令mov r7,200的用時,不是ret的用時。我也喜歡微控制器...

求大神幫我分析下這個組合語言程式源程式

這段 的功能是將資料段定義的 字元常量 string1中的字元 count 逐個複製到由string2的偏移量 string2的偏移量為 05h 開始的記憶體單元中,並輸出到顯示器上。因為 mov cx,10 設定的迴圈次數為10次 前五次的迴圈為 將字元常量 string1中的字元 count 逐...