为什么AX中的值是0000,不是期望的期望的00BE?

巴士 2016-09-02 04:12:32
题目如下:

参考答案如下:

通过理论的学习,自己所做的演算与所给答案一致。在兴奋之余本着动手实践的精神,将上面的程序上机验证。不过很可惜,始终不能得到自己想要的结果,甚是纠结,心情急转直下。特来发个帖:向诸位求助。拜托了!
下面便是上机操作的截图:
创建了名为 wenti5_1.asm 的文件,内容如题目所给(略微添加了必要的语句),如下图所示

接着将 wenti5_1.asm、MASM.EXE、LINK.EXE、ML.EXE 这四个文件放到了一个名叫TRY4的文件夹里下图显示了文件夹中的文件信息:

接下来通过ml wenti5_1.asm 编译和连接成功,如图所示:

再次查看TRY4文件夹里的信息,欣喜的发现有了wenti5_1.obj 和wenti5_1.exe文件,如下图所示:

接着很高兴,终于要debug wenti5_1.exe 了,并且我也这样做了,如下图所示:
可以看到已经进入
我用r命令和d命令查看了一些基本的信息(确保2000:0000中是BE 内存其余单元为00 )观察显然是符合题目要求的,如下图所示:
下面就开始执行程序了:
执行第一条指令 mov ax, 2000H 之后 ax 中的值不出所料变为2000如图所示:

接着执行第二条指令 mov ds,ax 之后,ds中的值也不出所料的变为2000如图所示:

接着执行第三条指令 mov bx, 1000H 之后,bx中的值不出所料的变为1000如图所示:

下面来问题了
执行第四条指令 mov ax, [bx] (该程序的意思是将bx中的值作为偏移地址,并将其所指的内存单元中字传给通用寄存器ax.)如下图所示:
我纳闷的是AX=1000,难道不应该是00BE吗?请诸位指明其中奥秘,感谢
下面是继续执行第五第六两条指令,实现bx 的两次自增1,很好如约编程了1002。 如下图所示:

我此时查看了21000内存单元后面的内容,没有想象中的变化,如图所示

很是苦恼!!!

不明白为什么?向各位前辈请教!谢谢
...全文
196 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
巴士 2016-09-02
  • 打赏
  • 举报
回复
哎呀,几笔点醒梦中人啊!善!
zara 2016-09-02
  • 打赏
  • 举报
回复
你手工处理的,以及后来查看的地方不对吧,题目里要求的是 2000:1000 而你手工操作的却是 2000:0000
巴士 2016-09-02
  • 打赏
  • 举报
回复
自己顶一下

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧