用debug时默认数据的段地址存放在DS里的,
mov ax,es:[bx]
mov ax,ds:[bx]
如果用MASM可以通过编译,没有问题。但在debug里这种语法是错误的,mov ax, [bx]可以,实际上就相当于在MASM里mov ax,ds:[bx]语句。如果要换个数据段用ES存储段地址可以之前写“ES:”,debug就会默认ES的值作为数据段地址。
关于debug和MASM的区别建议看看王爽编著的《汇编语言》,里面有写到,而且很详细。
在DEBUG中,段超越前缀要作为单独一行输入。如,
-a
0AF1:0100 es:
0AF1:0101 mov ax,[bx]
0AF1:0103 ds:
0AF1:0104 mov ax,[bx]
0AF1:0106 mov ax,[bx]
0AF1:0108
-q
debug本身和debug调试的程序都不是Win32程序,需要用到段
就像二楼说的如果段是DS的话不要加段前缀
如果不是DS的话要在需要改变段的那条指令前加ES,CS,SS等
-a
0B4A:0100 ES:
0B4A:0101 mov ax,[bx]
0B4A:0103
-u
0B4A:0100 26 ES:
0B4A:0101 8B07 MOV AX,[BX]
有如下代码:
mov ax,ds:[bx]
mov ax,es:[bx]
编译后:
用debug 查看(如下):
13EE:0000 8B07 MOV AX,[BX]
13EE:0002 26 ES:
13EE:0003 8B07 MOV AX,[BX]
Win32是flat模式啊,没事你修改段寄存器干嘛