3.3 语法规则
🎓 微机原理考点专栏(通篇免费)
欢迎来到我的微机原理专栏!我将帮助你在最短时间内掌握微机原理的核心内容,为你的考研或期末考试保驾护航。
为什么选择我的视频?
- 全程考点讲解:每一节视频都紧扣考试要点,拒绝冗余,专注于最关键的知识点。
- 系统且高效:我已经为你精心准备了系统的学习资料,让你不再迷茫。
🔗 点击这里观看我的视频讲解 🔗
我需要你的支持
我为这套视频投入了大量精力,希望它能对你的学习有所帮助。如果你觉得内容有用,请给我的视频点个赞、评论、并关注我,这将是我继续创作的最大动力!
🙏 感谢你的支持!祝你学有所成! 🙏
3.3 语法规则
📘 8086 汇编语言中的常见错误及其修正
1. 源操作数与目的操作数的长度与类型要一致
-
错误示例:
MOV AX, BL
问题: 操作数长度不一致,AX
是 16 位寄存器,BL
是 8 位寄存器。
修正: 操作数长度应一致,确保两个寄存器的位数相同。 -
错误示例:
MOV [0200H], 56H
问题: 操作数类型不明确。没有明确指定内存地址的大小。
修正: 指定操作数类型,如MOV WORD PTR [0200H], 56H
,表示将 16 位数据写入指定地址。
2. 寄存器寻址与段地址要对应
- 错误示例:
MOV ES:AX, DX
问题: 段寄存器和一般寄存器不能混用。
修正: 段寄存器操作必须与段相关。例如,用MOV ES, AX
来加载段寄存器ES
。
3. [] 中只能使用特定的寄存器
- 错误示例:
MOV CX, [AX]
问题:AX
不能用于内存寻址。
修正: 只能在[]
中使用BX
、BP
、SI
、DI
等寄存器。
4. 同一组内的寄存器不能同时出现在一个 []
- 错误示例:
MOV AX, [BX + BP]
问题:BX
和BP
同属基址寄存器,不能同时用于地址计算。
修正: 使用一个基址寄存器和一个变址寄存器,如MOV AX, [BX + SI]
。
5. 两个存储单元之间不能直接操作
- 错误示例:
MOV [BX], [SI]
问题: 汇编中不能直接操作两个内存地址。
修正: 需要通过寄存器进行中转,如MOV AX, [SI]
,然后MOV [BX], AX
。
6. CS、IP、立即数不能作为目的操作数
- 错误示例:
MOV CS, AX
问题:CS
和IP
是特殊寄存器,不能直接作为目的操作数。
修正: 不能直接修改CS
或IP
,通常通过段寄存器指令或跳转指令来间接影响它们。
7. 当 DS、ES、SS 作为目的操作数时,不能使用立即数作为源操作数
- 错误示例:
MOV DS, [1500H]
问题:DS
、ES
、SS
不能直接从立即数加载。
修正: 需要通过AX
或其他寄存器中转,如MOV AX, 1500H
然后MOV DS, AX
。
8. 使用段超越前缀修改默认段
-
正确示例:
MOV AX, ES:[BX]
解释: 通过段超越前缀ES:
指定用ES
段寄存器访问内存地址,物理地址计算为ES × 16H + BX
。 -
正确示例:
MOV AX, ES:[2000H]
解释: 通过段超越前缀访问内存,物理地址为ES × 16H + 2000H
。