sannnnnd 发表于 2018-8-26 10:05:38

检测点10.4


下面的程序执行后,ax中的数值为多少

内存地址         机器码          汇编指令
1000:0            b8 06 00      mov ax, 6
1000:2            ff d0             call ax
1000:5            40                inc ax
1000:6                                  mov bp, sp
                                             add ax,

答案是 ax=0BH

当时第一时间没有看明白,觉得没有定义栈段,sp的内容是多少我不知道,实际上默认sp为0;
call ax后,将sp-2=fffe,将ip=5入栈;此时ss:=5

然后错误的以为bx是和bp联系在一起的,实际上是和ss联系在一起的,所以就是ss:。

mov bp,sp
add ax,
这句话可以修改为
pop bx
add ax,bx
效果是一样的

wuyantao 发表于 2018-8-29 06:47:20

看了你的分析,明白了{:7_146:}

wuyantao 发表于 2018-8-29 21:47:04

我想,sp是多少并不重要,默认也不一定是0,重要的是 sp 指向栈顶的那个内存单元址里存的数据。

CHAOZHANG283 发表于 2018-9-28 15:43:18

wuyantao 发表于 2018-8-29 21:47
我想,sp是多少并不重要,默认也不一定是0,重要的是 sp 指向栈顶的那个内存单元址里存的数据。

是的,刚学的时候会忽略压栈要sp自减这个事情
页: [1]
查看完整版本: 检测点10.4