1、1、 指出下面指令正误,对错误指令说明错误原因(1)MOV DS ,100立即数不能直接送到段寄存器 (2)MOV 1200H , 23H目的操作数不能确定是字节属性还是字属性等(3)MOV 1000H , 2000H 存储器之间不能直接传送数据 (4)MOV 1020H , CX立即数不能作为目的操作数(5)MOV AX , BX+BP+0100H 目的操作数的寻址方式错误 BX 和 BP 都是基址寄存器 (6)MOV CS , AX不能直接对 CS 赋值(7)PUSH ALPUSH 操作对象是字属性 (8)OUT CX , AL在 OUT 指令中用 DX 寄存器存放端口地址而不是 CX(9
2、)IN AL , 80H在 IN 指令中端口直接表示时,不加 (10)MOV CL , 3300H3300H 数太大,AL 寄存器不能存放(11)MOV DS , ES段寄存器之间不能直接传送数据 (12)MOV IP , 2000HIP 寄存器不能直接赋值,不能使用 MOV 指令(13)POP CSPOP 指令不能使用 CS 寄存器,不能向 CS 寄存器中赋值2、 已知 3 个变量的数据定义如下所示,分析给定的指令是否正确,有错误时加以改正。DATA SEGMENTVAR1 DB ?VAR2 DB 10VAR3 EQU 100DATA ENDS(1)MOV VAR1 , AX源操作数和目的操
3、作数类型不匹配 (2) MOV VAR3 , AXVAR3 是一个常量,值不变,不能赋值(3)MOV BX , VAR1MOV BX , 10源操作数和目的操作数类型不匹配(4)CMP VAR1 , VAR2存储器之间不能直接传送数据 (5)VAR3 EQU 20EQU 不能重复定义3、 设 VAR1 和 VAR2 为字变量,LAB 为标号,分析下列指令错误之处,并加以改正(1)ADD VAR1 , VAR22 个数都是存储器操作数,不能直接放在指令中 ,指令要求必须有一个是寄存器操作数(2)MOV AL , VAR2源操作数和目的操作数类型不匹配(3)SUB AL , VAR1源操作数和目的
4、操作数类型不匹配(4)JMP LABSI 标号 LAB 位于代码段,SI位于数据段,两个不同的段,LABSI不能确定是代码段还是数据段(5)JNZ VAR1JNZ 指令的操作数应该是标号(6)JMP NEAR LAB正确指令是 JMP NEAR PTR LAB4、 说明下面指令哪些需要加 PTR 伪操作。BVAL DB 10H , 20HWVAL DW 1000H(1) SUB BX , 2目的操作数不能确定是字节属性还是字属性等(2) MOV CL , WVAL源操作数和目的操作数类型不匹配,正确指令是 MOV CL , BYTE PTR WVAL5、 程序在数据段中定义的数组如下NAMES
5、 DB TOM.DB 20DB ROSE.DB 30DB KATE.DB 25请指出下列指令是否正确,为什么(2)MOV AX , NAMES源操作数和目的操作数类型不匹配(4)MOV BX , 6MOV SI , 5MOV AX , NAMESBXSI 类型不匹配,如果目的操作数变为 AL 正确(5)MOV BX , 6*2MOV SI , 5MOV AX , OFFSET NAMESBXSIINC AX 在汇编过程中, OFFSET 伪指令将得到变量的偏移值,但对于相对基址变址形成的值在汇编时值还未知使用 AX 存放地址不对,但如果使用 BX存放地址,由于有第个原因也是不对的6、 下面有
6、4 条等值语句C1 EQU 1000C2 EQU 1C3 EQU 20000C4 EQU 25000下面指令哪些不对,请说明原因(1)ADD AL , C1-C2C1-C2 的值是 999,超出字节表示范围 (4)SUB AH , C4-C3-C1 C4-C3-C1 的值超出字节表示范围7、 分析下列指令正误,并加以改正(1)MOV AH , BX (2)MOV BX , SI (3)MOV AX , SIDI (4)MOV MYDATBXSI , ES:AX(5)MOV BYTE PTR BX , 1000 (7)MOV CS , AX(9)MOV AX,70MUL 56 8、 下面哪些指令
7、错误的?(假设 OP1、OP2 是已经用 DB 定义的变量)(1)CMP 15 , BX (2)CMP OP1 , OP2 (3)CMP AX , OP19、 假设 VAR1 和 VAR2 为字变量,LAB 为程序中的一个标号,试找出指令错误之处(1) ADD VAR1 , VAR2存储器中 2 个数不能直接相加(2) SUB AL , VAR1类型不匹配(3) JNZ VAR1转移指令后应该存放标号(4) JMP LABSI SI是数据段中一个数,LAB 是代码段中标号,LABSI 不能确定是数据段还是代码段(5) JMP NEAR LAB正确指令是 JMP NEAR PTR LAB10、
8、对于下面符号的定义,指出下面指令的正误A1 DB ?A2 DB 10K1 EQU 1024(1)MOV K1 , AX常量不能作为目的操作数 (2)MOV A1 , AX类型不匹配(3)MOV BX , A1类型不匹配MOV BX , 1000目的操作数BX 对象是字节|字|双字,不确定(4)CMP A1 , A2存储器中 2 个数不能直接进行比较 (5) K1 EQU 2048EQU 不能重复定义11、 指出下面伪指令表达式的错误,并改正之(1)STACK-SEG SEGMENT STACK 应改为 STACK_SEG SEGMENT STACK (2)DATA_SEG SEG应改为 DAT
9、A_SEG SEGMENT(3)SEGMENT CODE 没有段名(4)MYDATA SEGMENT DATAENDS 应改为 MYDATA ENDS(5)MAIN_PROC PROC FAREND MAIN_PROCMAIN_PROC ENDP不要 END MAIN_PROC12、 DATA DW 1234HMOV AL , HIGH DATADATA 是变量,HIGH 伪指令不能这样使用13、 JMP BX 不能判断 BX是段内还是段间,应改为 JMP WORD PTR BX或 JMP DWORD PTR BX14、 MUL AL , BL MUL BL MUL 指令只有一个操作数SHL
10、AL , 3如果移位次数不是 1,使用 CL 寄存器15、 mov cx, 50shl ax , cx应使用 CL 寄存器16、 JMP BYTE PTR BX 17、 ORG 100HNAMES DB TOM,20DB ROSE.,25DB KATE.,22(1)MOV BX , OFFSET NAMESMOV AX , BX+5 (2)MOV BX , OFFSET NAMES+11CMP BX , BYTE PTR NAMES+5存储器中 2 个数不能直接进行比较18、 PUSH 5 不能放立即数19、 XCHG AX , DSXCHG 指令中的段寄存器不能作为操作数XCHG AX , SI XCHG BX , SI XCHG 指令中操作数必须有一个是寄存器,不能 2 个操作数都是存储器操作数XCHG AX , CX20、 78 MOV AL , FFH 十六进制数如果以 AF 或 af 开头时,则前面加上 0