前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​

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

作者头像
命运之光
发布2024-08-17 08:35:59
860
发布2024-08-17 08:35:59
举报
文章被收录于专栏:我在本科期间写的文章

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

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 不能涉及段寄存器。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 立即数不能作为目标操作数
  • 2. 操作数位数必须匹配
  • 3. 需要指定存储器操作数的字节或字
  • 4. 两个操作数不能同时为存储器操作数
  • 5. 循环次数超过1必须使用CL寄存器
  • 6. 段寄存器限制(特别是CS寄存器)
  • 7. 基址变址相对寻址中的寄存器使用
  • 8. 立即数不能直接赋值给段寄存器
  • 9. 端口直接寻址范围
  • 10. ES和SS段寄存器结合的正确用法
  • 11. 明确指定存储器操作数的类型
  • 12. 堆栈指令不能使用立即数
  • 13. 堆栈操作数类型限制
  • 14. 端口间接寻址的寄存器限制
  • 15. 交换指令中的寄存器限制
  • 16. ADD 指令要求两操作数等字长
  • 17. 寄存器操作数不能有段重设符
  • 18. 转移地址的字长要求
  • 19. 输出指令的端口地址要求
  • 20. MUL 指令不允许使用立即数
  • 21. 操作数类型的指定要求
  • 总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档