鱼C论坛

 找回密码
 立即注册
查看: 3351|回复: 1

关于王爽汇编书和“王爽《汇编语言》第二版习题答案.chm”中的错误

[复制链接]
发表于 2018-6-24 11:08:03 | 显示全部楼层 |阅读模式

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

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

x
书中说到,call指令不可以实现短转移,但如果我call指令转2个字节呢,可以吗?算短转移吗?不是的话,那2是-128~127之间吗?不是吗?他这样表示他的意思行吗?

王爽《汇编语言》第二版习题答案.chm中告诉我这段内容:
题中特别关照别用debug跟踪,跟踪结果不一定正确,但还是忍不住去试试,看是什么结果。
根据单步跟踪发现,执行call word ptr ds:[0eh]指令时,显示ds:[0eh]=065D。
ds:0000~ds:0010不是已设置成stack数据段了嘛,不是应该全都是0的嘛。
于是进行了更详细的单步跟踪,发现初始数据段中数据确实为0,但执行完mov ss,ax;mov sp,16这两条指令后,数据段中数据发生改变。这是为什么呢?中断呗~~~~

程序开始,程序知道栈段在哪,然后自动地把栈段的段地址给ss,是吗?不是的话,你为什么说“发现初始数据段中数据确实为0,但执行完mov ss,ax;mov sp,16这两条指令后,数据段中数据发生改变。”你还没有执行mov ss,ax, ss中的内容是栈段的段地址吗?是的话,你还要执行mov ss,ax干嘛?有个屁用!

王爽《汇编语言》第二版习题答案.chm还告诉我这段内容:
执行call word ptr ds:[0eh]指令时,先cs入栈,再ip=11入栈,最后ip转移到(ds:[0eh])。(ds:[0eh])=11h,执行inc ax……最终ax=3

你鸦的你call word ptr后会将cs推入栈?不是只有call dword ptr和call far ptr才推吗?你怎么都推?书上明明白白写的是只推ip,不推cs,你看了书没有啊!

很久没来拜访这里了,发现这网站搞得越来越不爽了,手机验证,邮箱验证。。。。浪费时间。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-24 17:25:14 | 显示全部楼层
call不能实现短转移,指的是不能实现8位的转移如call al
最少是16位的转移如 call ax 这里的ax你想是什么16位地址都行0001也可以


这个题目是检测点10.5的把?我当时也对这段代码进行过调试
直接用G指令执行结果AX=3,单步执行AX的值就变得不确定了
不同的电脑不同的值,原因是我们单步执行的时候用到了DOS的相关中断指令
这些中断指令改变了栈的值,ds:[0eh]的值变了我们的程序就执行到未知的地方了


“发现初始数据段中数据确实为0,但执行完mov ss,ax;mov sp,16这两条指令后,数据段中数据发生改变。”
这话不难理解因为:
stack segment
     dw 8 dup (0)
stack ends
在你运行debug调试程序的时候,这段代码已经执行了的
也就是让CPU给我们分配一段空间做数据段或栈段用
而第一行指令mov ax,stack 这里stack对应的地址就是我们分配到的空间的第1个偏移地址
DEBUG调试时一开始用R指令查看就会知道STACK对应的地址
然后在用D 指令查看这个地址,就会发现这地址是空的


“执行call word ptr ds:[0eh]指令时,先cs入栈,再ip=11入栈,最后ip转移到(ds:[0eh])。(ds:[0eh])=11h,执行inc ax……最终ax=3”
call word ptr确实不入栈CS,这里可能是写的人习惯CS先入栈了,没反应过来,不必太在意
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 08:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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