关于汇编语言中的 立即数 与 指令中的第二操作数的问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 06:41:14
这两天看看关于汇编的书籍,有如下一段不知道是什么意思请各位大虾拆解:
3.1 立即寻址方式
操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
立即数可以是8位、16位或32位,该数值紧跟在操作码之后。如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。例如:
MOV AH, 80H ADD AX, 1234H MOV ECX, 123456H
MOV B1, 12H MOV W1, 3456H ADD D1, 32123456H
其中:B1、W1和D1分别是字节、字和双字单元。
以上指令中的第二操作数都是立即数,在汇编语言中,规定:立即数不能作为指令中的第二操作数。该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。
上面是书籍中所说的内容,其中 “以上指令中的第二操作数都是立即数,在汇编语言中,规定:立即数不能作为指令中的第二操作数。”这句话倒底是什么意思,按照它前面讲的指令中的第二操作数是立即数,为什么后面又写了一句立即数不能作为指令中的第二操作数呢!那他前面的那例子中的第二个操作数倒底是不是立即数呢!???

汇编语言中,如果是双操作数指令,逗号前面的为目标操作数(可能是你的书上所谓的第二操作数),逗号后面的为源操作数。例如:MOV指令中,
MOV AX,BX;AX为目标操作数,BX为源操作数,此指令的功能,将BX(源)的值送到AX(目标)。

在汇编中,立即数不能做为目标操作数的。可以作为源操作数
例如:MOV AX,1234H;这是正确的
MOV 1234H,AX;这是错误的,无法将AX(源)的值送给一个数据

你完全没有必要死扣这些东西,比如MOV AX,80H哪个是第一操作数哪个是第二操作数,指令的意思就是把80H MOV到AX,正如你所说赋值语句的左边不能是常量,它就是这么个意思,看书只要明白意思就可以了没必要理会那些东西浪费时间