当前位置: 代码迷 >> 汇编语言 >> 【处女帖】【请问】关于8086的MOV指令:)
  详细解决方案

【处女帖】【请问】关于8086的MOV指令:)

热度:3013   发布时间:2013-02-26 00:00:00.0
【处女帖】【请教】关于8086的MOV指令:)

第一个问题:
MOV [BX],55H
这条语句正确吗?
如果正确的话它和 MOV BYTE PTR[BX],55H有什么区别,执行后的结果相同吗?
有同学说,在8086中,内存操作数作为目的操作数时接受数据默认是16bit,所以MOV [BX],55H 是错误的,MOV [BX],5555H 就正确了,这样认为吗?

第二个问题:
MOV DS,AX 中MOV指令的机器码是多少?
MOV AX,DS ,这条指令没错吧,它的机器码和上条语句的机器码的区别在哪里?

现在正在学习中科大编的《微型计算机原理与接口技术》,感觉好多东西说的都不透彻,学的很迷惑,呵呵

------解决方案--------------------------------------------------------
一、
这纯粹是个写法问题,看你的汇编器怎么处理了。毕竟汇编指令还不是最终的机器码,在具体翻译的问题上汇编器多少还是做点主的。

多数汇编器不会根据立即数来判断操作数长度。如果你的汇编器允许默认长度,那这条指令也是可以的。不过这样的汇编器还真的不多……

二、
yasm 实际汇编结果(16 位代码):
Assembly code
00000000  8ED8              mov ds,ax00000002  8CD8              mov ax,ds
------解决方案--------------------------------------------------------
1.1正确
1.2不同,一个放入0055H,一个放入55H
2.1机器码见楼上
2.2都是从后面寄存器放到前面寄存器
------解决方案--------------------------------------------------------
1、不正确。必须指定操作数的类型(例如mov WORD PTR [bx], 55H),否则汇编器无法确定是字操作、字节操作或双字操作。
2、你用Debug输入代码反汇编看一下就知道了。
------解决方案--------------------------------------------------------
高人真不少,MOV应该就是赋值就像c中的=一样,我想还是指定类型比较好,不管汇编器这么样,起码那是属于显示转换吧,减少汇编器工作量
------解决方案--------------------------------------------------------
这也太难了吧!
向楼主学习,我也看这本书,但是我的学习要求是:只要能看懂汇编是怎么运行的就可以了。
看来我的要求有点低~~
------解决方案--------------------------------------------------------
学习了