鱼C论坛

 找回密码
 立即注册
查看: 3099|回复: 3

关于王爽老师检测点10.5不明白,

[复制链接]
发表于 2018-4-22 23:48:03 | 显示全部楼层 |阅读模式

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

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

x
(1)下面的程序执行后,ax中的数值为多少?

assume cs:code

stack segment

     dw 8 dup (0)

stack ends

code segment

start:   mov ax,stack

     mov ss,ax

     mov sp,16

     mov ds,ax

     mov ax,0

     call word ptr ds:[0eh]

     inc ax

     inc ax

     inc ax

     mov ax,4c00h

     int 21h

code ends

end start


这里设置了很多的0,后面用AX把栈段跟数据段设置成同一个,这段是设置的那些0吧,到后面, call word ptr ds:[0eh]这里,我不太明白ds:[0eh]这个指向的是哪里,其实都比较乱,希望大神详细讲解一下,十分感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-27 10:57:12 | 显示全部楼层
最终ax = 3
=================
call word ptr ds:[0eh]

word表示字单位转移(2字节),call指令改变IP的值。
代码跳转到inc那里,inc ax三次,于是结果为3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-26 21:48:11 | 显示全部楼层
首先,取call指令后,第一件事是将ip指向下一条要执行的指令,由于前期将DS和STACK做了关联,此时DS指向的是栈段的低地址,那么call ds:0eh就相当于跳转到stack:14这样一个位置,即取到了压栈之后的IP值,而此时IP值正好就是inc ax的偏移地址,那么理所当然是执行了第一个inc ax指令,往下依次再执行两次,就得到了ax=3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-2-7 12:48:40 | 显示全部楼层
开始 ds:[0eh]处存放的是00,但执行到“call word ptr ds:[0eh]”,首先push ip ,此时的 ip 是值是11h,入栈,因此 ss:[0eh]的值是11h,而ss栈与数据ds是相关联的,故ds:[0eh]与ss:[0eh]值一样是11h,故“call word ptr ds:[0eh]”命令就是跳转至11h处,即inc ax处,因上面“mov ax,0”,故最终ax=3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 15:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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