本文汇集了 80x86 汇编语言的指令判断/改错题,将随着作者的复习进度不断更新。
新人博主,大家的每一次阅读都会激励我继续创作,大家的点赞将会是我继续更新的巨大动力,对文中内容或实验过程中有任何疑问欢迎留言!
单条指令指出错误题目汇总
寻址方式相关错误
MOV AX, [CX] ; 间接寻址 16 位寄存器只能用 BX DI SI BP 中的一个
SUB WORD PTR [AX], 3 ; 间接寻址 16 位寄存器只能用 BX DI SI BP 中的一个
SUB [CX], DX ; 间接寻址 16 位寄存器只能用 BX DI SI BP 中的一个
MOV [ADRT], AX ; [ADRT] 直接寻址未指明段寄存器
MOV WORD PTR [SI], [DI] ; 源操作数和目的操作数不能同时用存储器方式表示
MOV BYTE PTR [EAX+4], DS:[100] ; 源操作数和目的操作数不能同时用存储器方式表示
; COUNT 为字变量
ADD [EBX+EDI*4+10], COUNT ; 源操作数和目的操作数不能同时用存储器方式表示
MOV ES:[DX], BX ; 间接寻址 16 位寄存器只能用 BX DI SI BP 中的一个
SUB 2[DX], AX ; 变址寻址与间接寻址一致,16 位寄存器只能用 BX DI SI BP 中的一个
MOV [AX+2], BX ; 变址寻址与间接寻址一致,16 位寄存器只能用 BX DI SI BP 中的一个
MOV [CX-100H], AX ; 变址寻址与间接寻址一致,16 位寄存器只能用 BX DI SI BP 中的一个
MOV [DX+60], AX ; 变址寻址与间接寻址一致,16 位寄存器只能用 BX DI SI BP 中的一个
MOV [DI+SI], DX ; 基址变址寻址 BR 只能选用 BX 、BP 之一;IR 只能选用 SI 、DI 之一
数据类型与表达式定义错误
MOV AL, 1200H ; 数据类型不匹配,AL 为 8 位,1200H 为 16 位
MOV AL, BX ; 数据类型不匹配,AL 为 8 位,BX 为 16 位
MOV SI, AL ; 数据类型不匹配,SI 为 16 位,AL 为 8 位
MOV BL, WORD PTR [BP] ; 数据类型不匹配, BL 为字节类型, SS:[BP] 被指定为字类型
MOV [BX+DI] , 10H ; 未指明操作数类型
机器指令语句使用错误
MOV EAX, EIP ; IP/EIP 不能供程序直接访问
程序段指出错误题目汇总
题目 1
阅读下列程序段,指出其中的错误语句。
.386
DATA SEGMENT USE16
NUM DB 11H, 22H, 33H, 44H
LEN EQU LEN - NUM ; 定义符号常量 LEN , 其值为以变量 NUM 为首
; 址的数据存储区所占的字节数
DATA ENDS
; ...
MOV AX, NUM ; 类型不一致,出错
MOV EAX, DWORD PTR NUM ; 临时改变 NUM 为双字类型
; (NUM) = 44332211H → EAX
MOV SI, OFFSET NUM ; NUM 的 EA → SI
ADD 2[SI], LEN ; 操作数类型不明确
MOVE BYTE PTR 2[SI], 'A' ; 41H → NUM + 2
INC [SI] ; 操作数类型不明确
DEC BYTE PTR [SI] ; OPD = [SI] = NUM, 由 PTR 指定为字节类型