跟大家一起复习汇编语言之一(实模式)【原创】
前沿:今年的前些时候,在杂志的一篇文章看到如下一句:“掌握汇编,仍是高手必经之路”。然而在实际的学习中,汇编往往因为其应用太难而被初学者忽视。熟悉汇编语言,将是自己在软件调试时的“倚天剑”,重要性实不言而喻。也有很多在学习的过程中几次三番,最终退却。希望这一篇文章可以与你一起,重拾汇编这把双刃剑。文档转载请注明“天衣有缝”原创。
0.本文讲述汇编语言的基础知识,寻址方式,指令系统,宏汇编,结构化程序设计,堆栈,函数,中断等知识
1.
汇编简介:
汇编语言是一种符号语言,比机器语言容易理解和掌握,也容易调试和维护。但是,汇编语言源程序要翻译成机器语言程序才可以由计算机执行。这个翻译的过程称为“汇编”,这种把汇编源程序翻译成目标程序的语言加工程序称为汇编程序。汇编语言虽然较机器语言直观,但仍然烦琐难懂。于是人们研制出了高级程序设计语言。高级程序设计语言接近于人类自然语言的语法习惯,与计算机硬件无关,易被用户掌握和使用。
汇编语言的特点:
(1)汇编语言与处理器密切相关。
(2)汇编语言程序效率高。
(3)编写汇编语言源程序比编写高级语言源程序烦琐。
(4)调试汇编语言程序比调试高级语言程序困难。
(1)汇编语言与处理器密切相关。
(2)汇编语言程序效率高。
(3)编写汇编语言源程序比编写高级语言源程序烦琐。
(4)调试汇编语言程序比调试高级语言程序困难。
汇编语言的主要应用场合:
(1)程序执行占用较短的时间,或者占用较小存储容量的场合。
(2)程序与计算机硬件密切相关,程序直接控制硬件的场合。
(3)需提高大型软件性能的场合。
(4)没有合适的高级语言的场合。
2.
数值数据:
数值数据分为有符号数和无符号数。无符号数最高位表示数值,而有符号数最高位表示符号。有符号数有不同的编码方式,常用的是补码。
n位二进制数能够表示的无符号整数的范围是:
0 ≤I ≤ 2n-1
n位二进制数能够表示的有符号整数的范围是:
-2(n-1) ≤ I ≤+2(n-1)-1
ASCII码:
标准ASCII码用7位二进制数编码,共有128个。
计算机存储器基本单位为8位,ASCII码的最高位通常为0,通信时,最高位用作奇偶校验位。
ASCII码表中的前32个和最后1个编码是不能显示的控制字符,用于表示某种操作。
ASCII码表中20H后的94个编码是可显示和打印的字符,其中包括数码0~9,英文字母,标点符号等。
标准ASCII码用7位二进制数编码,共有128个。
计算机存储器基本单位为8位,ASCII码的最高位通常为0,通信时,最高位用作奇偶校验位。
ASCII码表中的前32个和最后1个编码是不能显示的控制字符,用于表示某种操作。
ASCII码表中20H后的94个编码是可显示和打印的字符,其中包括数码0~9,英文字母,标点符号等。
BCD码:
虽然二进制数实现容易,但不符合人们的使用习惯,且书写阅读不方便,所以在计算机输入输出时通常还是采用十进制来表示数,这就需要实现十进制与二进制间的转换。为了转换方便,常采用二进制编码的十进制,简称为BCD码。
BCD码就是用4位二进制数表示1位十进制整数。表示的方法有多种,常用的是8421BCD码。
虽然二进制数实现容易,但不符合人们的使用习惯,且书写阅读不方便,所以在计算机输入输出时通常还是采用十进制来表示数,这就需要实现十进制与二进制间的转换。为了转换方便,常采用二进制编码的十进制,简称为BCD码。
BCD码就是用4位二进制数表示1位十进制整数。表示的方法有多种,常用的是8421BCD码。
3.
8086体系结构:
总线接口部件(BIU) 执行部件(EU)
_________________ ___________________
| 段寄存器 | | |
|________________| | 通用寄存器组 |
| 指令指针 | | |
|________________| |___________________|
|| || || ||
|| || || ||
|| || || ||
_________________ || ||
| |__________________________________________________
| 地址产生与 |________________________________________________ |
| 总线控制 | || || | |
|________________| __________________ | |
|| || | 操作数 | | |
|| || __________________ | |
|| || || || | |
|| || || || | |
_________________ ___________________ | |
| | | | | |
| 指令队列 |_____________| 标志寄存器 |______________| |
| |_____________| |_______________ |
|________________| |___________________|
|| ||
|| ||
|| ||
___________________
| |
| 逻辑算术单元 |
| |
___________________
_________________ ___________________
| 段寄存器 | | |
|________________| | 通用寄存器组 |
| 指令指针 | | |
|________________| |___________________|
|| || || ||
|| || || ||
|| || || ||
_________________ || ||
| |__________________________________________________
| 地址产生与 |________________________________________________ |
| 总线控制 | || || | |
|________________| __________________ | |
|| || | 操作数 | | |
|| || __________________ | |
|| || || || | |
|| || || || | |
_________________ ___________________ | |
| | | | | |
| 指令队列 |_____________| 标志寄存器 |______________| |
| |_____________| |_______________ |
|________________| |___________________|
|| ||
|| ||
|| ||
___________________
| |
| 逻辑算术单元 |
| |
___________________
4.
8086寄存器组:
AX:
累加器,常用于保存临时数据 §
BX:基址寄存器,主要用作指针,也可用作数据存储 §__数据寄存器______§
CX:
计数器 § §
DX:
数据寄存器,用于端口操作或临时数据 § §
§ §_通用寄存器
SP:
堆栈指针,指向堆栈当前地址 §__堆栈指针寄存器__§
BP:
基址指针,常用于指向高级语言堆栈帧 § §