关于《汇编语言(王爽)》程序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。

猜你喜欢

转载自www.cnblogs.com/pluse/p/10198677.html