1. 两个操作数的类型不一致:例如源操作数是字节,而目的操作数是字;或相反
绝大多数双操作数指令(包括传送指令),除非特别说明,目的操作数与源操作数必须类型一致,或者同为字,或者同为字节,否则为非法指令。例如:
MOV AL,050AH ;非法指令:050Ah为字,而AL为字节
寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型。对于存储器单元与立即数同时作为操作数的情况,必须显式指明。用byte ptr指示字节类型,用word ptr指示字类型。
2. 两个操作数不能都是存储器:传送指令很灵活,但主存之间的直接传送却不允许
8086指令系统不允许两个操作数都是存储单元(除串操作指令),没有主存至主存的数据传送。要实现这种传送,可通过寄存器间接实现。
3. 段寄存器的操作有一些限制:段寄存器属专用寄存器,对他们的操作能力有限
不允许立即数传送给段寄存器,例如:
MOV DS,100H ;非法指令:立即数不能传送段寄存器
不要直接改变CS值,例如:
MOV CS,[SI] ;不允许使用的指令
不允许段寄存器之间的直接数据传送,例如:
MOV DS,ES ;非法指令:不允许段寄存器间传送