常见的汇编语言错误:
序列 | 出错原因 | 错误举例 | 补充说明 |
1. | 两个操作数的类型不一致 | MOV AL,0510H | 对于存储器单元与立即数同时作为操作数的情况,必须显式指明,如byte ptr等; |
2. | 两个操作数不能都是存储器 | MOV [1000H],[2000H] | 串操作指令除外 |
3. | 指令指针不能作为源/目的操作数 | MOV IP,2 | |
4. | 段寄存器的操作有一些限制: A.不允许立即数传送给段寄存器 B.不允许直接改变CS值 C.不允许段寄存器之间的直接数据传送 | MOV DS,100H MOV CS,[BP] MOV DS,ES | |
5. | 移位指令的操作数问题,当移位位数大于1时要采用CL寄存器 | SAL AX,2 | 可能存在某些编译器支持错误举例当中的语句,但是标准汇编是不能这样操作的 |
6. | 堆栈操作是以字为单位 | PUSH AL | |
7. | 乘法操作的一个操作数总是隐藏在AL/AX | MUL AX,10 | |
8. | 乘法操作的被除数总是隐藏在AX或DX和AX中 | DIV BX,10 | |
9. | 条件转移和循环指令只能实现段内转移;无条件转移和过程调用/返回既可以是段内,也可以是段间 | (略) | |
10. | I/O操作指令读取16位数据是需要考虑都是从哪个端口读取的数据 | IN AX,PORT ;AX<=(PORT+1:PORT) ;而不是AX<=PORT汇编语言清华大学出版社 | |
11. | |||
12. | |||
推荐书籍和软件:
1.《IBM PC汇编语言程序设计》作者:沈美明 温冬婵/编著 出版社:清华大学出版社
以前学习汇编必备的一本书,相当不错。
2.《Intel汇编语言程序设计(第四版)》作者:[美]Kip R.Irvine 译者:温玉杰 张家生 罗云彬 针对Intel系列写的比较全面,翻译的人也不错,作为参考资料应该不错
3.Win32下的汇编书籍罗云彬写的《Windows环境下32位汇编语言程序设计》,32位环境下的汇编开发必备书
3.Emu8086开发环境(提供一些简单例子,并有单步执行和虚拟视窗模拟输入输出,比较直观)
4.简单的编译环境(Microsoft公司的,和Windows自带的Debug.Exe调试)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论