请高手指教,汇编指令MOV AX, [DX]和MOV DX, ES:AX分别错误在哪里?谢谢

2024-12-23 13:43:23
推荐回答(5个)
回答1:

第一个,dx没指明段寄存器,应该是mov ax,ds:[dx]
第二个,偏移地址地址没加[],应该是mov dx,es:[ax]
叫“乌月风随”只答对了一部分,而且与你说的提问不相干!算是牛头对马嘴!
望采纳!
看你是初学者,就再补充点,如果偏移地址是bx,那就默认段地址在ds中,如果是ax,cx.dx,则必须指明段寄存器是什么
还有,汇编指令不区分大小写,用小写就行了!

回答2:

  寄存器间接寻址

  寄存器间接寻址是指操作数的偏移地址在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:若有不明白的地方,可以追问

回答3:

寄存器间接寻址只能用SI和DI或BX,即MOV AX,[SI](或[DI]),后面那个一般是
MOV DX,ES:[BX]

回答4:

dx为数据寄存器,默认基址就是在ds,根本不需要加ds:[dx],题目中错误原因是错在不应该将偏移地址存入DX

回答5:

火炫龙飞的回答不正确