​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​

2024-08-17 08:35:59 浏览数 (3)

微机原理判断指令是否正确【见的多了,你就懂了~】

1. 立即数不能作为目标操作数
  • 错误示例MOV 1000H, BX
  • 规则:立即数只能作为源操作数,不能直接赋值给寄存器或存储器。
2. 操作数位数必须匹配
  • 错误示例MOV BX, CL
  • 规则:两个操作数的位数必须一致,不能将16位寄存器与8位寄存器混用。
3. 需要指定存储器操作数的字节或字
  • 错误示例INC [BX]
  • 规则:在操作存储器时,必须明确指定操作数是字节还是字(BYTE PTRWORD PTR)。
4. 两个操作数不能同时为存储器操作数
  • 错误示例MOV [BX], [6014H]
  • 规则:在一条指令中,两个操作数不能同时为存储器地址。
5. 循环次数超过1必须使用CL寄存器
  • 错误示例ROL AL, 2
  • 规则:当循环次数超过1时,必须使用 CL 寄存器指定次数。
6. 段寄存器限制(特别是CS寄存器)
  • 错误示例MOV CS, AX
  • 规则:段寄存器(尤其是 CS)通常只能作为源操作数,不能直接修改。
7. 基址变址相对寻址中的寄存器使用
  • 错误示例MOV AL, [SI DI]
  • 规则:基址寄存器只能是 BX/BP,变址寄存器只能是 SI/DI,不能同时使用两个变址寄存器。
8. 立即数不能直接赋值给段寄存器
  • 错误示例MOV DS, 0100H
  • 规则:立即数不能直接赋值给段寄存器,需要通过中间寄存器实现。
9. 端口直接寻址范围
  • 错误示例OUT 310H, AL
  • 规则:端口直接寻址的范围应在 0~FFH 之间,超过此范围时必须使用 DX 间接寻址。
10. ES和SS段寄存器结合的正确用法
  • 正确示例MOV ES:[BX DI], AXMOV SS:[BX SI 100H], BX
  • 规则:在进行段寄存器和偏移地址结合时,确保使用合法的寄存器组合。
11. 明确指定存储器操作数的类型
  • 错误示例ADD [SI], 20H
  • 规则:必须指定操作数是 BYTE PTRWORD PTR
12. 堆栈指令不能使用立即数
  • 错误示例PUSH 2000H
  • 规则:堆栈指令(如 PUSHPOP)的操作数不能是立即数。
13. 堆栈操作数类型限制
  • 错误示例POP AL
  • 规则:堆栈操作数必须是16位,不能是8位寄存器。
14. 端口间接寻址的寄存器限制
  • 错误示例OUT BX, AL
  • 规则:端口间接寻址的寄存器只能是 DX
15. 交换指令中的寄存器限制
  • 错误示例XCHG CX, DS
  • 规则:交换指令中不能涉及段寄存器。
16. ADD 指令要求两操作数等字长
  • 错误示例ADD BYTE PTR [BP], 256
  • 规则:在 ADD 指令中,操作数必须有相同的字长。
17. 寄存器操作数不能有段重设符
  • 错误示例MOV DATA[SI], ES:AX
  • 规则:寄存器操作数不能加段重设符,只能对存储器操作数使用段重设符。
18. 转移地址的字长要求
  • 错误示例JMP BYTE PTR [BX]
  • 规则:转移地址的字长至少应是16位,不能使用8位地址。
19. 输出指令的端口地址要求
  • 错误示例OUT 230H, AX
  • 规则:端口地址超出8位范围时,必须用 DX 间接寻址。
20. MUL 指令不允许使用立即数
  • 错误示例MUL 39H
  • 规则:MUL 指令的操作数不能是立即数。
21. 操作数类型的指定要求
  • 错误示例INC [BP]
  • 规则:在某些指令中必须指定操作数的类型,如 INC [BP] 需要 BYTE PTRWORD PTR
总结:
  • 立即数限制:立即数不能作为目标操作数,且不能直接赋值给段寄存器。
  • 操作数位数匹配:操作数位数必须一致。
  • 存储器操作数限制:两个操作数不能同时为存储器地址。
  • 段寄存器限制:段寄存器通常只能作为源操作数。
  • 堆栈指令要求:堆栈操作数必须是16位,且不能是立即数。
  • 寻址模式限制:基址和变址寄存器的组合必须合法。
  • 端口操作限制:端口直接寻址必须在0~FFH范围内,超出需用DX间接寻址。
  • 操作数类型明确性:某些指令必须明确指定操作数的类型。
  • 特定指令限制:如 MUL 不允许立即数,XCHG 不能涉及段寄存器。

通过这些规则可以系统化地判断一条指令的正确性。

0 人点赞