2)debug執行t1.exe之後:
可以看出 ds = 075a; cs=076a,兩個段位址相差10h,是因為psp的256個位元組的原因;
疑惑:ds和cs的不同,有什麼用嘛?
cx=0016是t1的位元組長度,16h個位元組;
從mov ax,2000到int 21的每個指令的位元組長度為:3,2,3,3,1,1,1,1,1,1,3,2,sum之後是22個位元組,寫成16進製制就是16h (16*1+6=22).
以下為執行mov ax, 2000h
mov ss, ax
mov sp, 0
add sp, 4
很容易看出來 mov ss, ax 和 mov sp, 0000同時執行了
以下為執行pop ax
pop bx
push ax
push bx
很容易看出來 每次pop之後 sp+2; 每次push之後,sp-2, 初始為sp=0004
pop ax, 把棧頂內容存入暫存器ax,所以ax從2000程式設計0000, sp=0006
pop bx, 把棧頂內容存入暫存器bx,sp=0008
push ax, 把暫存器ax內容壓入棧頂, sp=0006
猜測一下:push bx, 把暫存器bx內容壓入棧頂, sp=0004
以下為執行pop ax
pop bx
mov ax,4c00h
int 21h
最後program terminated normally, 一切正常。
3)psp的頭兩個位元組是cd20,用debug載入t1.exe,檢視psp的內容
也就是說要檢視記憶體075a:0的內容嘛;
使用命令: -d ds:0 , 答案bingo!
組合語言(王爽)實驗十(3)
答案在最後面 有兩個答案,建議直接看第二個 div bx ax bx 商存在ax中,餘數存在dx中 add dx,30h 由題意得要 30h mov si dx 把該值存到記憶體data segment mov cx,ax jcxz k 用cx判斷是否跳出此迴圈 inc si 迴圈加一 inc cx...
組合語言 《組合語言》王爽 實驗一
從 1000 0 開始寫入命令 a 1000 0 mov ax,4e20 add ax,1416 mov bx,2000 add ax,bx mov bx,ax add ax,bx mov ax,001a mov bx,0026 add al,bl add ah,bl add bh,al mov a...
組合語言 王爽 實驗4
這學期在學彙編,沒怎麼自己動手程式設計過,結果到了中期編不出程式來,實在太尷尬了 特此來補各個實驗。4 11 0 200 0 20b 為什麼等同於 0020 0 0020b?0 200 0x16h 200 00200h 所以拆分成不同的形式即可轉換 assume cs code code segme...