關於《組合語言(王爽)》程式6.3使用16個dw 0的問題
阿新 • • 發佈:2018-12-30
在學習王爽老師《組合語言》的第6.2節時,在程式6.3程式碼中,給出瞭如下的程式碼:
1 assume cs:code 2 code segment 3 dw 0123h, 0456h, 0789h, 0abch, 0123h, 0456h, 0789h, 0abch 4 dw 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 5 6 start: mov ax,cs 7 mov ss,ax 8 mov sp,30h 9 10 mov bx,0h 11 mov cx,8 12 s: push cs:[bx] 13 add bx,214 loop s 15 16 mov bx,0 17 mov cx,8 18 s0: pop cs:[bx] 19 add bx,2 20 loop s0 21 22 mov ax,4c00h 23 int 21h 24 code ends 25 end start
可以看到第4行中定義了16個dw 0,也就是16個字型資料(32個位元組型),隨後將該32個位元組記憶體空間當做棧來使用。初始棧頂為30h,結構圖如下:
從上圖可以看到,總共花費了48個位元組,48轉換成16進位制值為30H,而記憶體地址從0開始計數,因此這2個dw的記憶體起止地址為0~2F,上面的程式碼將第二個dw段視作棧空間,初始棧為空,因此指向棧下面的記憶體空間,結構如下:
所以程式碼的第8行將棧偏移地址暫存器SP設定為30h。