1. 兩個操作數的類型不一致:例如源操作數是字節,而目的操作數是字;或相反
絕大多數雙操作數指令(包括傳送指令),除非特別說明,目的操作數與源操作數必須類型一致,或者同為字,或者同為字節,否則為非法指令。例如:
MOV AL,050AH ;非法指令:050Ah為字,而AL為字節
寄存器有明確的字節或字類型,有寄存器參與的指令其操作數類型就是寄存器的類型。對于存儲器單元與立即數同時作為操作數的情況,必須顯式指明。用byte ptr指示字節類型,用word ptr指示字類型。
2. 兩個操作數不能都是存儲器:傳送指令很靈活,但主存之間的直接傳送卻不允許
8086指令系統不允許兩個操作數都是存儲單元(除串操作指令),沒有主存至主存的數據傳送。要實現這種傳送,可通過寄存器間接實現。
3. 段寄存器的操作有一些限制:段寄存器屬專用寄存器,對他們的操作能力有限
不允許立即數傳送給段寄存器,例如:
MOV DS,100H ;非法指令:立即數不能傳送段寄存器
不要直接改變CS值,例如:
MOV CS,[SI] ;不允許使用的指令
不允許段寄存器之間的直接數據傳送,例如:
MOV DS,ES ;非法指令:不允許段寄存器間傳送
絕大多數雙操作數指令(包括傳送指令),除非特別說明,目的操作數與源操作數必須類型一致,或者同為字,或者同為字節,否則為非法指令。例如:
MOV AL,050AH ;非法指令:050Ah為字,而AL為字節
寄存器有明確的字節或字類型,有寄存器參與的指令其操作數類型就是寄存器的類型。對于存儲器單元與立即數同時作為操作數的情況,必須顯式指明。用byte ptr指示字節類型,用word ptr指示字類型。
2. 兩個操作數不能都是存儲器:傳送指令很靈活,但主存之間的直接傳送卻不允許
8086指令系統不允許兩個操作數都是存儲單元(除串操作指令),沒有主存至主存的數據傳送。要實現這種傳送,可通過寄存器間接實現。
3. 段寄存器的操作有一些限制:段寄存器屬專用寄存器,對他們的操作能力有限
不允許立即數傳送給段寄存器,例如:
MOV DS,100H ;非法指令:立即數不能傳送段寄存器
不要直接改變CS值,例如:
MOV CS,[SI] ;不允許使用的指令
不允許段寄存器之間的直接數據傳送,例如:
MOV DS,ES ;非法指令:不允許段寄存器間傳送