+ -
当前位置:首页 → 问答吧 → debug中寻址问题

debug中寻址问题

时间:2011-02-15

来源:互联网

在《汇编语言》程序5.3中的程序题目:计算ffff:0006单元中的数乘以3,结果存储在dx中。
这是我的写法:
assume cs:code
code segment
  mov ax,0ffffh
  mov ds,ax
  mov al,[6]
  mov ah,0
  mov dx,0
  mov cx,3
  s:add dx,ax
  loop s
   
  mov ax,4c00h
  int 21h
code ends
end
masm编译连接生成后,用debug跟踪:
将mov al,[6] 指令显示是mov al,06 执行也是al=6
这是debug的问题还是masm的问题?(如果用 直接用a指令写 mov al,[6] debug正确编译)

我的问题和他一样:
http://topic.csdn.net/u/20070222/21/0d203119-64f0-49a4-b2b5-83f02ee69d50.html

作者: yxinxin1989   发布时间: 2011-02-15

这个,老问题了,是个 Masm 的历史遗留问题。对 Masm 来说,mov al, [6] 如果 6 是直接的地址,那就需要写成 mov al, ds:[6] ;否则,6 将被理解我立即数。

作者: zara   发布时间: 2011-02-15

masm的问题,他就把你当立即数处理了,你可以看生成的exe文件最后几行会有B8 FF FF 8E D8 B0 06
B0 06说明mov al,[6]被编译成mov al,6 是编译器干的.DEBUG没干坏事.

作者: va_zaixuexi   发布时间: 2011-02-15

mov al, ds:[6]会加上段覆盖前缀
用这个mov al, word ptr[6]就不会,省一个字节

作者: Lactoferrin   发布时间: 2011-02-15

以上都对

作者: znxllyuan   发布时间: 2011-02-15

引用 3 楼 lactoferrin 的回复:mov al, ds:[6]会加上段覆盖前缀
用这个mov al, word ptr[6]就不会,省一个字节

mov al, ds:[6] 不会被加上段前缀的,因为这时 ds: 就是缺省的段。
mov al, word ptr [6] 应该是 mov al, byte ptr [6] 吧?还是被解释成了 mov al, 6
以上在 Masm5/6 以及 Masm32v8 下的表现都是这样的。

作者: zara   发布时间: 2011-02-15

看错了
mov al, byte ptr [6]

作者: Lactoferrin   发布时间: 2011-02-15

热门下载

更多