第一个,dx没指明段寄存器,应该是mov ax,ds:[dx]
第二个,偏移地址地址没加[],应该是mov dx,es:[ax]
叫“乌月风随”只答对了一部分,而且与你说的提问不相干!算是牛头对马嘴!
望采纳!
看你是初学者,就再补充点,如果偏移地址是bx,那就默认段地址在ds中,如果是ax,cx.dx,则必须指明段寄存器是什么
还有,汇编指令不区分大小写,用小写就行了!
寄存器间接寻址
寄存器间接寻址是指操作数的偏移地址在BX,BP,SI,DI四个寄存器之一中
当以BX,SI或DI寄存器进行间接寻址时,操作数的物理地址 有DS中的段地址与BX,SI或DI中的偏移地址构成
当以BP寄存器进行间接寻址时,操作数的物理i地址有SS中的段地址与BP中的偏移地址构成
MOV AX,[BX,SI或DI]
EA = BX,SI或DI,SA = DS
MOV AX,[BP] EA(偏移地址) = BP,SA(段地址) = SS
所以MOV AX, [DX]错在不应该将偏移地址存入DX,
而是存入BX,BP,SI,DI四个寄存器之一中
MOV DX, ES:AX
这样写肯定是错的。AX是寄存器,它前面不能有段的标志。
还有ES是段寄存器,AX是通用寄存器,ES:AX表示es*16+ax的存储器地址,”是不对的,AX与[AX]不同。
所以要这样写MOV DX, ES:[AX]
PS:若有不明白的地方,可以追问
寄存器间接寻址只能用SI和DI或BX,即MOV AX,[SI](或[DI]),后面那个一般是
MOV DX,ES:[BX]
dx为数据寄存器,默认基址就是在ds,根本不需要加ds:[dx],题目中错误原因是错在不应该将偏移地址存入DX
火炫龙飞的回答不正确