1. 程式人生 > >關於《組合語言(王爽)》程式6.3使用16個dw 0的問題

關於《組合語言(王爽)》程式6.3使用16個dw 0的問題

在學習王爽老師《組合語言》的第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,2
14 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。