【組合語言】(王爽著第三版)實驗二
實驗二
實驗任務(一)
實驗前要求我們將書本P74的程式段按理論分析,將結果進行填空。之後用Debug,將該程式段寫入記憶體,逐條執行之後,
根據指令執行後的實際執行的結果填空如下。
mov ax,0021
mov ax , ffff
mov ds , ax
mov ax , 2200
mov ss , ax
mov sp , 0100
mov ax , [0] ;ax=3130
add ax , [2] ;ax=6462
mov bx , [4] ;bx=3534
add bx , [6] ;bx=6C6A
push ax ;sp=00FEH ;修改的記憶體單元的地址是2200:00FE內容為6462
push bx ;sp=00FCH ;修改的記憶體單元的地址是2200:00FC內容為6C6A
pop ax ;sp=00FEH ;ax=6C6A
pop bx ;sp=0100H ;bx=6462
push [4] ;sp=00FE ;修改的記憶體單元的地址是2200:00FE內容為3534
push [6] ;sp=00FC ;修改的記憶體單元的地址是2200:00FC內容為3736
在使用a指令除錯前,先使用e命令將記憶體單元0021:0~0021:7連續8個位元組資料修改為30H,31H,32H,33H,34H,35H,36H,37H,最後用D命令檢視是否正確。
接著我們再使用a指令去除錯每一步的指令
實驗任務(二)
使用 a命令輸入 7 行指令,使用 e 命令修改 2000:0~2000:f 的值,及修改後檢視的部分
單步執行除錯,並且每步除錯後都用d命令檢視2000:0~2000:f的值:
從中我們發現前三行的指令的功能為:把0~2000:f這段空間當做棧段,初始化棧頂
mov sp,0010H :設定棧頂的偏移地址,棧為空,sp=0010H
棧頂為2000:0010,棧底為2000:000E
小結
在完成實驗的過程中,由於操作不熟練經常出現失誤,例如多敲回車。。(輸完一行總是情不自禁敲一個回車)每週如果只花課堂上一節課的時間去學習彙編,好像是真的不可能學好的。課外還需要自己學習。這一章實驗依舊花了很久時間,自己思考的也不夠,繼續努力吧。