判断题(指令正误)
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
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 AL×PUSH操作对象是字属性 (8)OUT CX , AL×在OUT指令中用DX寄存器存放端口地址而不是CX (9)IN AL , [80H]×在IN指令中端口直接表示时,不加[] (10)MOV CL , 3300H×3300H数太大,AL寄存器不能存放 (11)MOV DS , ES×段寄存器之间不能直接传送数据 (12)MOV IP , 2000H×IP寄存器不能直接赋值,不能使用MOV指令 (13)POP CS×POP指令不能使用CS寄存器,不能向CS寄存器中赋值 2、 已知3个变量的数据定义如下所示,分析给定的指令是否正确,有错误时加以改正。 DATA SEGMENT VAR1 DB ? VAR2 DB 10 VAR3 EQU 100 DATA ENDS (1)MOV VAR1 , AX×源操作数和目的操作数类型不匹配 (2) MOV VAR3 , AX×VAR3是一个常量,值不变,不能赋值 (3)MOV BX , VAR1 MOV [BX] , 10×源操作数和目的操作数类型不匹配 (4)CMP VAR1 , VAR2×存储器之间不能直接传送数据 (5)VAR3 EQU 20×EQU不能重复定义 3、 设VAR1和VAR2为字变量,LAB为标号,分析下列指令错误之处,并加以改正 (1)ADD VAR1 , VAR2×2个数都是存储器操作数,不能直接放在指令中,指令要求必须有一个是寄存器操作数 (2)MOV AL , VAR2×源操作数和目的操作数类型不匹配 (3)SUB AL , VAR1×源操作数和目的操作数类型不匹配 (4)JMP LAB[SI] ×标号LAB位于代码段,[SI]位于数据段,两个不同的段,LAB[SI]不能确定是代码段还是数据段 (5)JNZ VAR1×JNZ指令的操作数应该是标号 (6)JMP NEAR LAB×正确指令是JMP NEAR PTR LAB 4、 说明下面指令哪些需要加PTR伪操作。 BVAL DB 10H , 20H WVAL DW 1000H (1) SUB [BX] , 2×目的操作数不能确定是字节属性还是字属性等 (2) MOV CL , WVAL×源操作数和目的操作数类型不匹配,正确指令是MOV CL , BYTE PTR WVAL 5、 程序在数据段中定义的数组如下 NAMES DB ‘TOM.’ DB 20 DB ‘ROSE.’ DB 30 DB ‘KATE.’ DB 25 请指出下列指令是否正确,为什么 (2)MOV AX , NAMES×源操作数和目的操作数类型不匹配 (4)MOV BX , 6 MOV SI , 5 MOV AX , NAMES[BX][SI] ×类型不匹配,如果目的操作数变为AL正确 (5)MOV BX , 6*2 MOV SI , 5 MOV AX , OFFSET NAMES[BX][SI] INC [AX] ×①在汇编过程中,OFFSET伪指令将得到变量的偏移值,但对于相对基址变址形成的值在汇编时值还未知②使用AX存放地址不对,但如果使用BX存放地址,由于有第①个原因也是不对的 6、 下面有4条等值语句 C1 EQU 1000 C2 EQU 1 C3 EQU 20000 C4 EQU 25000 下面指令哪些不对,请说明原因 (1)ADD AL , C1-C2×C1-C2的值是999,超出字节表示范围 (4)SUB AH , C4-C3-C1 × C4-C3-C1的值超出字节表示范围 7、 分析下列指令正误,并加以改正 (1)MOV AH , BX× (2)MOV [BX] , [SI] × (3)MOV AX , [SI][DI] × (4)MOV MYDAT[BX][SI] , ES:AX× (5)MOV BYTE PTR [BX] , 1000× (7)MOV CS , AX× (9)MOV AX,70 MUL 56 × 8、 下面哪些指令错误的?(假设OP1、OP2是已经用DB定义的变量) (1)CMP 15 , BX× (2)CMP OP1 , OP2× (3)CMP AX , OP1× 9、 假设VAR1和VAR2为字变量,LAB为程序中的一个标号,试找出指令错误之处 (1) ADD VAR1 , VAR2×存储器中2个数不能直接相加 (2) SUB AL , VAR1×类型不匹配 (3) JNZ VAR1×转移指令后应该存放标号 (4) JMP LAB[SI] ×[SI]是数据段中一个数,LAB是代码段中标号,LAB[SI]不能确定是数据段还是代码段 (5) JMP NEAR LAB×正确指令是JMP NEAR PTR LAB 10、 对于下面符号的定义,指出下面指令的正误 A1 DB ? A2 DB 10 K1 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 2048×EQU不能重复定义 11、 指出下面伪指令表达式的错误,并改正之 (1)STACK-SEG SEGMENT ‘STACK’ ×应改为STACK_SEG SEGMENT ‘STACK’ (2)DATA_SEG SEG×应改为DATA_SEG SEGMENT (3)SEGMENT ’CODE’ ×没有段名 (4)MYDATA SEGMENT ’DATA’ ENDS × 应改为MYDATA ENDS (5)MAIN_PROC PROC FAR END MAIN_PROC MAIN_PROC ENDP×不要END MAIN_PROC 12、 DATA DW 1234H MOV AL , HIGH DATA×DATA是变量,HIGH伪指令不能这样使用 13、 JMP [BX] ×不能判断[BX]是段内还是段间,应改为JMP WORD PTR [BX]或JMP DWORD PTR [BX] 14、 MUL AL , BL × MUL BL MUL指令只有一个操作数 SHL AL , 3×如果移位次数不是1,使用CL寄存器 15、 mov cx, 50 shl ax , cx×应使用CL寄存器 16、 JMP BYTE PTR [BX] × 17、 ORG 100H NAMES DB ‘TOM..’,20 DB ‘ROSE.’,25 DB ‘KATE.’,22 (1)MOV BX , OFFSET NAMES MOV AX , [BX+5] √ (2)MOV BX , OFFSET NAMES+11 CMP [BX] , BYTE PTR NAMES+5×存储器中2个数不能直接进行比较 18、 PUSH 5 ×不能放立即数 19、 XCHG AX , DS×XCHG指令中的段寄存器不能作为操作数 XCHG AX , [SI] √ XCHG [BX] , [SI] ×XCHG指令中操作数必须有一个是寄存器,不能2个操作数都是存储器操作数 XCHG AX , CX√ 20、 78 MOV AL , FFH × 十六进制数如果以A~F或a~f开头时,则前面加上0 本文来源:https://www.wddqw.com/doc/16225ded8aeb172ded630b1c59eef8c75fbf9562.html