王爽《汇编语言第2版》懂汇编的来帮忙。谢谢

assume cs:code,ds:data,ss,stack
data segment
dw 0123H,0456H
data ends
stack segment
dw 0,0
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start

问题1是
SP为什么是16?
dw 0123H,0456H
dw 0,0
这不是定义4个字,8个字节吗? 不是应该栈顶SP为08吗? 为什么是16啊

问题2是
对于如下定义的段:

name segment

name ends

如果段中的数据占N个字节,则程序加载后,这段实际占有的空间为?

我知道答案 (N/16+1)*16. 但是我不知道为什么是这个答案 能帮忙解释一下吗

问题1:dw 0123H,0456H是在数据段定义的不会影响到堆栈,dw 0,0是在堆栈段定义的,如果程序运行到mov sp,16之前栈顶偏移是04,这句的作用就是重新设定栈顶指针,使栈顶指针定位到偏移16的位置。
问题2:实际占用的空间要看数据占用多少个段,每个段16字节。N/16取整,舍去小数,就是被数据占满的段数,不满1段的数据按占用1满段计算,所以(N/16+1)是占用的段数,16是段长度
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-16
什么情况追问

刚补充了

追答

额 很遗憾,楼主俺是学java的 上面的实在看不懂,不好意思哦~~~~

相似回答
大家正在搜