永发信息网

汇编王爽老师书本中“检测点10.2”有不明白

答案:2  悬赏:40  手机版
解决时间 2021-02-23 14:20
内存地址 机器码 汇编指令 ;我调试过,有问题
1000:0 b8 00 00 mov ax,0 ;ax=0理解
1000:3 e8 01 00 call s ;这条执行ip=7,压入栈的内容是6了。为什么?
1000: 6 40 inc ax ;我这里多加几个inc ax,ip就好像减几个。
1000:7 58 s:pop ax ;于是出栈ax=6
网上的答案:说call s的时候ip的值是6,可调试时明明是7.
(ip)=(ip)+16位位移。这里16位位移是什么意思。我知道(*16)是左移1位。16位位移我没明白。
书上解释16位位移=标号处地址-call指令后的第一个字节地址。按照上面应该是1了。是哇?还是不能解释IP是7,可是进栈都是6.
希望前辈能指导一下,我再看下去要混乱了。万分感谢
最佳答案
内存地址那一行很重要,在call s的时候,紧接着它后面的指令的地址将被入栈作为返回地址,也就是6,然后跳到7执行pop ax也就是把刚才压入堆栈的返回地址作为值弹出到ax中了
至于你说的你加几个inc ax,ip就减 我敢说在这段程序里是不可能出现的,会出现的只是ip比7大
全部回答
争议之所以执行完call s后IP=7是因为call的执行过程是首先会将当前IP压栈,然后jmp,而jmp会修改IP寄存器的值。这也就是为什么你看到的压栈内容是6,而IP是7的原因。call是一个两步操作。 执行call s时IP=6,压栈后ss栈顶为6,call指令会触发jmp操作导致IP被定向到s,此时IP=7 再看看别人怎么说的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
最近运动,脚的小指的指甲疼
鸿源铸造公司这个地址在什么地方,我要处理点
求动漫。。类似于《彩云国物语》、《十二国记
重庆金考拉杨建明拖欠员工工资
云南省国际旅行社地址在哪,我要去那里办事
在实验过程中,刻度手轮朝一个方向旋转,为什么
淘宝怎么解除实名认证
我想找一个像筱崎爱那样清纯可爱的女生,身材
将纯种高茎豌豆与矮茎豌豆杂交得到的F1代与矮
大班心理健康微笑的魅力需要注意什么
为什么追悼会一般要送毛巾
听网上说蛆可以吃,我在厕所里挖了一碗,请问
请问新疆师范大学和西北师范大学哪个好一点啊
紫轩名店地址在哪,我要去那里办事
可不可不要这么样,徘徊在目光内
推荐资讯
做宫颈癌筛查要多少钱?几天能拿到检查报告?
移动硬盘usb3.0接口接到有3.0接口主板上可以
如何计算离职率,公式怎样?并简单说一下离职率
自己动手用暖气管做床
种植农作物时,应该合理密植,这主要是考虑CA
使用逐水方药,时间不可过久,应遵循A.攻补兼
尿结石吃什么药能快速止疼
金盛宾馆在哪里啊,我有事要去这个地方
造成牙周炎的牙菌斑主要为A.龈上菌斑B.龈下菌
一天三顿吃稀饭对肠胃好吗
平板root后有什么好处
江苏历史有举重世界冠军吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?