(3)CMP OPl,OP2
(4)CMP AX,OPl
答:(1) CMP 15,BX
非法,两个操作数不能一个为字,一个为字节
(2)CMP OP1,25 正确
(3)CMP OP1,OP2 正确
(4)CMP AX,OP1
非法,两操作数不能一个为字,一个为字节
3.假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么?
(1)MOV BP,AL
(2)MOV WORD_OP[BX+4*3][DI],SP
(3)MOV WORD_OPl,WORD_OP2
(4)MOV AX,WORD_OPl[DX]
(5)MOV SAVE_WORD,DS
(6)MOV SP,SS:DATA_WORD[BX][SI]
(7)MOV [BX][SI],2
(8)MOV AX,WORD_ OPl+WORD_OP2
(9)MOV AX,WORD_ OPl-WORD_OP2+100
(10)MOV WORD_ OPl,WORD_ OPl-WORD_OP2
答:(1)MOV BP,AL
非法,BP为16位 AL为八位
(2)MOV WORD_OP[BX+4*3][DI] ,SP
正确
(3)MOV WORD_OP1 ,WORD_OP2
非法,两个操作数不能都是变量
(4)MOV AX , WORD_OP1[DX]
非法,[DX]应改为[BX],[BP],[SI]或[DI],则为寄存器相对寻址。
(5)MOV SAVE_WORD ,DS
非法,未指明数据段地址DS的偏移量
(6)MOV SP,SS:DATA_WORD[BX][SI]
非法,SS与[BX],[SI]不匹配,SS的偏移量用SP
(7)MOV [BX][SI] ,2
正确
(8) MOV AX,WORD_OP1+WORD_OP2 正确
(9) MOV AX, WORD_OP1—WORD_OP2+100 正确
(10)MOV WORD_OP1,WORD_OP1—WORD_OP2
非法
4.假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处:
(1)ADD VAR1,VAR2
(2)SUB AL,VAR1
(3)JMP LAB[SI]
(4)JNZ VARl
(5)JMP NEAR LAB