鱼C论坛

 找回密码
 立即注册
查看: 3325|回复: 9

[汇编作业] 检测点10.4作业练习

[复制链接]
发表于 2020-3-6 00:08:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:code

code segment

start:        mov ax,6
                call ax
                inc ax
                mov bp,sp
                add ax,[bp]
                mov ax,4c00h
                int 21h
code ends
end start

;最终的ax值为000Bh
;因为sp的值为FFFE,所以把FFFE赋值给了bp
;执行add ax,[bp]时,[bp]=SS:FFFE=0005h
;所以ax=6+5=000Bh
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-28 15:17:55 | 显示全部楼层
为什么sp的值是fffe
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-28 15:22:52 | 显示全部楼层
我知道了因为是空栈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-28 15:39:15 | 显示全部楼层
不对不对,应该是因为把call   ax
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-28 15:52:26 | 显示全部楼层
assume cs:code

code segment

start:        mov ax,6
                call ax
                inc ax
                mov bp,sp
                add ax,[bp]
                mov ax,4c00h
                int 21h
code ends
end start

;最终的ax值为000Bh
;因为sp的值为FFFE,所以把FFFE赋值给了bp
;执行add ax,[bp]时,[bp]=SS:FFFE=0005h/为什么这里是0005h
;所以ax=6+5=000Bh
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-30 16:34:46 | 显示全部楼层
文小诗 发表于 2020-3-28 15:52
assume cs:code

code segment

你可以直接上程序看一下;

因为SP的值为FFFE;
然后赋值给了bp;
执行add ax,[bp]时,[bp]=SS:FFFE;
所以add ax,[bp]等于add ax,SS:[bp]等于add ax,SS:FFFE;
而SS:FFFE的值为0005h;
所以最后结果就是000Bh。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 23:01:31 From FishC Mobile | 显示全部楼层
call  ax
功能  push  ip
      jmp  16位寄存器
ip不是应该等于6吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-30 23:30:52 | 显示全部楼层
文小诗 发表于 2020-3-30 23:01
call  ax
功能  push  ip
      jmp  16位寄存器

是的,ip是等于6;

call ax的功能就是:

当执行这条代码之后,直接跳转到ip值为6的代码段那里去了,你没发现call ax下面的inc ax没有执行到吗?

直接执行ip等于6 的代码段那里了,而刚好就是mov bp,sp。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-31 19:31:48 From FishC Mobile | 显示全部楼层
懂了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-9 18:07:31 | 显示全部楼层
文小诗 发表于 2020-3-30 23:01
call  ax
功能  push  ip
      jmp  16位寄存器

push ip的ip是这条指令的下一个
call ax的地址为3,此时ip已经指向下一条指令了,所以入栈的ip为5.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表