汇编语言错误 mov ax,es:[bx]

2024-12-15 15:37:47
推荐回答(5个)
回答1:

用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的区别建议看看王爽编著的《汇编语言》,里面有写到,而且很详细。

回答2:

在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

回答3:

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]

回答4:

有如下代码:
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]

回答5:

Win32是flat模式啊,没事你修改段寄存器干嘛