汇编语言基础知识Word格式.docx
- 文档编号:17383333
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:13
- 大小:110.75KB
汇编语言基础知识Word格式.docx
《汇编语言基础知识Word格式.docx》由会员分享,可在线阅读,更多相关《汇编语言基础知识Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
具有多个16位的寄存器、8位数据总线和20位地址总线,可以寻址1MB的内存。
虽然这些寄存器一次可以处理2个字节,但数据总线一次只能传送1个字节。
该处理器只能工作在实模式。
2)8086微处理器
指令系统与8088完全相同,具有多个16位的寄存器、16位数据总线和20位地址总线,可以寻址1MB的内存,一次可以传送2个字节。
3)80286微处理器
比8086运行更快,具有多个16位的寄存器、16位数据总线和24位地址总线,可以寻址16MB内存。
它既可以工作在实模式,也可以工作在保护模式。
4)80386微处理器
具有多个32位的寄存器、32位数据总线和32位地址总线,可以寻址4GB内存。
它提供了较高的时钟速度,增加了存储器管理和相应的硬件电路,减少了软件开销,提高了效率。
5)80486微处理器
具有多个32位的寄存器、32位数据总线和32位地址总线。
它比80386增加了数字协处理器和8KB的高速缓存,提高了处理速度。
6)Pentium(奔腾)
具有多个32位的寄存器、64位数据总线和36位地址总线。
因为它采用了超标量体系结构,所以每个时钟周期允许同时执行两条指令,处理速度得到了进一步提高,性能比80486优越得多。
以上介绍了Intel80x86系列的一些主要微处理器,表1.1给出了该系列部分微处理器的数据总线和地址总线宽度。
实际上80x86系列的功能还在不断改进和增强,它们的速度将会更快,性能将会更优越。
但无论怎样变化,它们总会被设计成是完全向下兼容的,就像在8086上设计和运行的软件可以不加任何改变地在Pentium4机上运行一样。
对于汇编语言编程人员来讲,掌握16位计算机的编程十分重要,它是学习高档计算机及保护模式编程的基础,也是掌握实模式程序设计的唯一方法。
2.CPU的主要性能指标
1)机器字长
机器字长和CPU内部寄存器、运算器、内部数据总线的位宽相一致。
如8086CPU,它的内部寄存器是16位的、运算器能完成两个16位二进制数的并行运算、数据总线的位宽为16位,则它的机器字长为16位,也称其为16位计算机。
通常,机器字长越长,计算机的运算能力越强,其运算精度也越高。
2)速度
CPU的速度是指单位时间内能够执行指令的条数。
速度的计算单位不一,若以单字长定点指令的平均执行时间计算,用每秒百万条指令(MillionIstructionsPerSecond,MIPS)作为单位;
若以单字长浮点指令的平均执行时间计算,则用每秒百万条浮点运算指令(MillionFloating-pointOperationsPerSecond,MFLOPS)表示。
现在,采用计算机中各种指令的平均执行时间和相应的指令运行权重的加权平均法求出等效速度作为计算机运算速度。
3)主频
主频又称为主时钟频率,是指CPU在单位时间内产生的时钟脉冲数,以MHz/s(兆赫兹每秒)为单位。
由于计算机中的一切操作都是在时钟控制下完成的,因此,对于机器结构相同或相近的计算机,CPU的时钟频率越高,运算速度越快。
表1.1Intel80x86系列微处理器总线宽度
CPU
数据总线宽度
地址总线宽度
8086
16
20
Pentium
64
36
8088
8
Pentium Ⅱ
80286
24
Pentium Ⅲ
80386SX
Pentium4
80386DX
32
Itanium
44
80486
1.3计算机语言及汇编语言特点
1.3.1计算机语言概述
计算机语言的发展经历了由机器语言、汇编语言到高级语言这样一个由低级到高级的发展过程。
1.机器语言
机器语言是计算机唯一能直接识别和执行的计算机语言。
由于计算机硬件本身只能识别二进制代码,在计算机发展的初期,人们使用二进制代码构成机器指令来编写程序,这种二进制编码的计算机语言就是机器语言。
机器语言描述的程序称为目标程序,只有目标程序才能被CPU直接执行。
指令用于指出计算机所进行的操作和操作对象的代码,一条指令通常由操作码和操作数两部分组成。
其中,操作码指出计算机所进行的具体操作,如加法、减法等;
操作数说明操作的对象。
操作码比较简单,只需对每一种操作指定确定的二进制代码就可以了;
操作数比较复杂,首先它可以有一个、两个或三个,分别称为单操作数、双操作数或三操作数,其次,操作数可能存放在不同的地方,既可以存放在寄存器中,也可以存放在存储器中,甚至直接存放在指令中,通常要用寻址方式来说明。
一台计算机全部指令的集合构成该计算机的指令系统。
指令系统是计算机基本功能的体现,不同的机器指令对应的二进制代码序列各不相同。
机器语言是面向机器的,不同机器之间的语言是不通用的,这也是机器语言是“低级”语言的含义所在。
用二进制代码编写程序相当麻烦,写出的程序也难以阅读和调试。
2.汇编语言
早期的程序员们很快就发现了使用机器语言带来的麻烦,它是如此难于辨别和记忆,给整个产业的发展带来了障碍,于是产生了汇编语言。
汇编语言是一种采用指令助记符、符号地址、标号等符号书写程序的语言,它便于人们书写、阅读和检查。
汇编语言指令与计算机指令基本上是一一对应的,汇编语言与计算机有着密不可分的关系,处理器不同,汇编语言就不同,因此它是一种低级语言,同时它也是唯一能够充分利用计算机硬件特性并直接控制硬件设备的语言。
利用汇编语言进行程序设计体现了计算机硬件和软件的结合。
用汇编语言编写的程序称为汇编源程序(或称汇编语言程序),计算机不能直接识别,必须将其翻译成由计算机指令组成的程序后,CPU才能执行,这一过程称为“汇编”。
用于将汇编源程序翻译成计算机语言的程序称为汇编程序,这种由源程序经过计算机翻译转换成的计算机语言程序也称为目标程序。
目标程序还不能直接交给CPU执行,它还需要通过连接程序装配成可执行程序才能被执行。
连接程序具有将多个目标程序装配在一起的功能,它也可以将目标程序与预先编写好的一些放在子程序库中的子程序连接在一起,构成较大的可执行程序。
它们之间的关系如图1.2所示。
图1.2汇编程序与目标程序、可执行程序之间的关系
3.高级语言
高级语言是一种与具体的计算机硬件无关,独立于计算机类型的通用语言,比较接近人类自然语言的语法,用高级语言编程不必了解和熟悉计算机的指令系统,更容易掌握和使用。
高级语言采用接近自然语言的词汇,其程序的通用性强,易学易用,这些语言面向求解问题的过程,不依赖具体计算机。
高级语言也要翻译成机器语言才能在计算机上执行。
其翻译有两种方式,一种是把高级语言程序翻译成机器语言程序,然后经过连接程序连接成可执行文件,再在计算机上执行,这种翻译方式称为编译方式,大多数高级语言如PASCAL语言、C语言等都是采用这种方式;
另一种是直接把高级语言程序在计算机上运行,一边解释一边执行,这种翻译方式称为解释方式,如BASIC语言就采用这种方式。
高级语言源程序是在未考虑计算机结构特点情况下编写的,经过翻译后的目标程序往往不够精练,过于冗长,加大了目标程序的长度,占用较大存储空间,执行时间较长。
1.3.2汇编语言的特点
汇编语言使用助记符和符号地址,所以它要比机器语言易于掌握,与高级语言相比较,汇编语言有以下特点。
1)汇编语言与计算机关系密切
汇编语言中的指令是机器指令的符号表示,与机器指令是一一对应的,因此它与计算机有着密切的关系,不同类型的CPU有不同的汇编语言,也就有各种不同的汇编程序。
汇编语言源程序与高级语言源程序相比,其通用性和可移植性要差得多。
2)汇编语言程序效率高
由于构成汇编语言主体的指令是用机器指令的符号表示的,每一条指令都对应一条机器指令,且汇编语言程序能直接利用计算机硬件系统的许多特性,如它允许程序员利用寄存器、标志位等编程。
用汇编语言编写的源程序在编译后得到的目标程序效率高,主要体现在空间效率和时间效率上,即目标程序短、运行速度快这两个方面,在采用相同算法的前提下,任何高级语言程序在这两个方面的效率与汇编语言相比都望尘莫及。
3)特殊的使用场合
汇编语言可以实现高级语言难以胜任甚至不能完成的任务。
汇编语言具有直接和简捷的特点,用它编制程序能精确地描述算法,充分发挥计算机硬件的功能。
在过程控制、多媒体接口、设备通信、内存管理、硬件控制等方面的程序设计中,用汇编语言直接方便,执行速度快,效率高。
汇编语言提供了一些模块间相互连接的方法,一个大的任务可以分解成若干模块,将其中执行频率高的模块用汇编语言编写,可以大大提高大型软件的性能。
1.4程序可见寄存器组
80386(含80386)以上型号的CPU能够处理32位数据,其寄存器长度是32位的,但为了与早期的8086等16位机CPU保持良好的兼容性,80386以上型号的CPU中程序可见寄存器组包括多个8位、16位和32位寄存器,如图1.3所示。
1.通用寄存器
8086~80286CPU各有8个16位通用寄存器AX、BX、CX、DX、SP、BP、SI、DI。
对于4个16位数据寄存器AX、BX、CX、DX,其每个又可以作为2个独立的8位寄存器使用,它们被分别命名为AH、AL、BH、BL、CH、CL、DH、DL。
80386以上型号的CPU各有8个32位通用寄存器,它们是相应16位寄存器的扩展,被分别命名为EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI。
在程序中每个8位、16位、32位寄存器都可以独立使用。
图1.38086~PentiumCPU程序可见寄存器组
SP、ESP叫做堆栈指针寄存器,其中存放当前堆栈段栈顶的偏移量,它们总是与SS堆栈段寄存器配合存取堆栈中的数据。
在实模式方式下使用SP,在80386以上的保护模式下使用ESP。
除SP、ESP堆栈指针不能随意修改、需要慎用外,其他通用寄存器都可以直接在指令中使用,用以存放操作数,这是它们的通用之处。
在后边讨论指令系统时,可以看到某些通用寄存器在具体的指令中还有其他用途,例如EAX、AX、AL(通常分别被称为32位、16位、8位累加器),它们在乘除法、十进制运算、输入输出指令中有专门用途。
另外有些通用寄存器也可以存放地址用以间接寻址内存单元,例如在实模式中BX、BP、SI、DI可以作为间接寻址的寄存器,用以寻址64KB以内的内存单元。
在保护模式中EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI可以作为间接寻址的寄存器,用以寻址4GB以内的内存单元,详细内容见3.1节和6.3节。
2.段寄存器
在IBMPC机中存储器采用分段管理的方法,因此一个物理地址需要用段基地址和偏移量表示。
一个程序可以由多个段组成,但对于8086~80286CPU,由于只有4个段寄存器,所以在某一时刻正在运行的程序只可以访问4个当前段,而对于80386及其以上的计算机,由于有6个段寄存器,则可以访问6个当前段。
在实模式下段寄存器存放当前正在运行程序的段基地址的高16位,在保护模式下存放当前正在运行程序的段选择子,段选择子用以选择描述符表中的一个描述符,描述符描述段的基地址、长度和访问权限等,显然在保护模式下段寄存器仍然是选择一个内存段,只是不像实模式那样直接存放段基址罢了。
代码段寄存器CS指定当前代码段,代码段中存放当前正在运行的程序段。
堆栈段寄存器SS指定当前堆栈段,堆栈段是在内存开辟的一块特殊区域,其中的数据访问按照后进先出(LastinFirstout,LIFO)的原则进行,允许插入和删除的一端叫做栈顶。
IBMPC机中SP(或ESP)指向栈顶,SS指向堆栈段基地址。
数据段寄存器DS指定当前运行程序所使用的数据段。
附加数据段寄存器ES指定当前运行程序所使用的附加数据段。
段寄存器FS和GS只对80386以上CPU有效,它们没有对应的中文名称,用于指定当前运行程序的另外两个存放数据的存储段。
虽然DS、ES、FS、GS(甚至于CS、SS)所指定的段中都可以存放数据,但DS是主数据段寄存器,在默认情况下使用DS所指向段的数据。
若要引用其他段中的数据,需要显式地说明。
3.控制寄存器
控制寄存器包括指令指针寄存器和标志寄存器。
在程序中不能直接引用控制寄存器名。
1)IP、EIP
IP、EIP叫做指令指针寄存器,它总是与CS段寄存器配合指出下一条要执行指令的地址,其中存放偏移量部分。
在实模式方式下使用IP,在80386以上的保护模式下使用EIP。
2)标志寄存器(FLAGS)
标志寄存器也被称为状态寄存器,由运算结果特征标志和控制标志组成。
8086~80286CPU为16位,80386以上为32位。
如图1.4所示,可以看出它们完全向下兼容。
空白位为将来保留,暂未定义。
图1.4标志寄存器
(1)运算结果特征标志:
用于记录程序中运行结果的特征,8086~PentiumCPU的标志寄存器均含有这6位标志。
CF(CarryFlag):
进位标志,记录运算结果的最高位向前产生的进位或借位。
若有进位或借位则置CF=1,否则清零。
可用于检测无符号数二进制加减法运算时是否发生溢出(溢出时CF=1)。
PF(ParityFlag):
奇偶标志,记录运算结果中含1的个数。
若个数为偶数则
OF
置PF=1,否则清零。
可用于检测数据传送过程中是否发生错误。
AF(AuxiliarycarryFlag):
辅助进位标志,记录运算结果最低4位(低半字节)向前产生的进位或借位。
若有进位或借位则置AF=1,否则清零。
只有在执行十进制运算指令时才关心此位。
ZF(ZeroFlag):
零标志,记录运算结果是否为零,若结果为零则置1,否则清零。
SF(SignFlag):
符号标志,记录运算结果的符号,若结果为负则置1,否则清零。
OF(OverflowFlag):
溢出标志,记录运算结果是否超出了操作数所能表示的范围。
若超出则置1,否则清零。
可用于检测带符号数运算时是否发生溢出。
(2)控制标志:
控制标志控制处理器的操作,要通过专门的指令才能使控制标志发生变化。
以下控制标志对8086~PentiumCPU均有效。
IF(InterruptFlag):
中断允许标志,当IF=1时允许CPU响应外部可屏蔽中断请求(INTR);
当IF=0时禁止响应INTR。
IF的控制只对INTR起作用。
DF(DirectionFlag):
方向标志,专门服务于字符串操作指令。
当DF=1时,表示串操作指令中操作数地址为自动减量,这样使得对字符串的处理是从高地址向低地址方向进行;
当DF=0时,表示串操作指令中操作数地址为自动增量。
TF(TrapFlag):
陷阱标志,用于程序调试。
当TF=1时,CPU处于单步方式;
TF=0时,CPU处于连续方式。
状态标志位的符号表示见表1.2。
表1.2状态标志位的符号表示
标志位
标志为1
标志为0
CF进位(有/否)
CY
NC
PF奇偶(偶/奇)
PE
PO
AF半进位
AC
NA
ZF全零(是/否)
ZR
NZ
SF符号(负/正)
NG
PL
IF中断(允许/禁止)
EI
DI
DF方向(增量/减量)
DN
UP
OF溢出(是/否)
OV
NV
以下控制标志只对80286以上CPU有效。
IOPL(I/OPrivilegeLevel):
特权标志,占D13和D12两位。
当在保护模式下工作时,IOPL指定要求执行I/O指令的特权级。
若当前任务的特权级比IOPL高(级数越小特权级越高,OO级是最高级),则执行I/O指令;
否则会检查该任务的I/O许可位图,若位图中的值为1则发生一个保护异常,导致执行程序被挂起。
NT(NestedTask):
嵌套任务标志,用于保护模式操作,在执行中断返回指令IRET时要测试NT值。
当NT=1时,表示当前执行的任务嵌套于另一任务之中,执行完该任务后要返回到另一任务,IRET指令的执行是通过任务切换实现的。
当NT=0时,用堆栈中保存的值恢复标志寄存器、代码段寄存器和指令指针寄存器的内容,以执行常规的IRET中断返回操作。
以下控制标志只对80386以上CPU有效。
RF(ResumeFlag):
重启动标志,该标志控制是否接受调试故障,它与调试寄存器一起使用。
当RF=0时接受,RF=1时忽略。
VM(Virtual8086Model):
虚拟方式标志,当CPU处于保护模式时,若VM=1则切换到虚拟方式,以允许执行多个DOS程序,否则CPU工作在实模式或保护模式。
以下控制标志只对80486SX以上CPU有效。
AC(AlignmentCheck):
地址对齐检查标志,若AC=1时进行地址对齐检查,当出现地址不对齐时会引起地址对齐异常,只有在特权级3运行的应用程序才检查引起地址对齐故障。
若AC=0时不进行地址对齐检查。
只有80486SX微处理器使用该位,主要用来同它配套的协处理器80487SX同步工作。
所谓地址不对齐是指以下情形:
1个字从奇地址开始,或1个双字不是从4的倍数的地址开始。
以下控制标志只对Pentium以上CPU有效。
ID(Identification):
标识标志,若ID=1,则表示Pentium支持CPUID指令,CPUID指令给系统提供Pentium微处理器有关版本号及制造商等信息。
VIP(VirtualInterruptPending):
虚拟中断挂起标志,与VIF配合,用于多任务环境下,给操作系统提供虚拟中断挂起信息。
VIF(VirtualInterruptFlag):
虚拟中断标志,是虚拟方式下中断标志位的映像。
1.5存储器
1.5.1基本概念
计算机中存储信息的基本单位是1个二进制位,简称位(bit),可用小写字母b表示,一位可存储一位二进制数。
IBMPC机中常用的数据类型如下。
字节(byte):
IBMPC机中存取信息的基本单位,可用大写字母B表示。
1个字节由8位二进制数组成,其位编号自左至右为b7、b6、b5、b4、b3、b2、b1、b0。
1个字节占用1个存储单元。
字:
1个字16位,其位编号为b15~b0。
1个字占用2个存储单元。
双字:
1个双字32位,其位编号为b31~b0。
1个双字占用4个存储单元。
四字:
1个四字64位,其位编号为b63~b0。
1个四字占用8个存储单元。
为了正确地区分不同的内存单元,给每个单元分配一个存储器地址,地址从0开始编号,顺序递增1。
在计算机中地址用无符号二进制数表示,可简写为十六进制数形式。
一个存储单元中存放的信息称为该单元的内容。
例如2号单元中存放了一个数字8,则表示为:
(2)=8。
对于字、双字、四字数据类型,由于它们每个数据都要占用多个单元,访问时只需给出最低单元的地址号即可,然后依次存取后续字节。
注意按照Intel公司的习惯,对于字、双字、四字数据类型,其低地址中存放低位字节数据,高地址中存放高位字节数据,这就是有些资料中称为“逆序存放”的含义。
图1.5存储单元的地址和内容
例如内存现有以下数据(后缀H表示是十六进制数)。
地址:
01 2345…
内容:
12H34H45H67H89H0AH…
存储情况如图1.5所示,则对于不同的数据类型,从1号单元取到的数据是:
(1)字节=34H
(1)字=4534H
(1)双字=89674534H
1.5.2实模式存储器寻址
IBMPC机的存储器采用分段管理的方法。
存储器采用分段管理后,一个内存单元地址要用段基地址和偏移量两个逻辑地址来描述,表示为段地址 :
偏移量,其段地址和偏移量的限定、物理地址的形成要视CPU工作模式决定。
80386以上型号的CPU有3种工作模式:
实模式、保护模式和虚拟86模式。
在实模式下,这些CPU就相当于一个快速的8086处理器,DOS操作系统运行在实模式。
计算机在启动时,也自动进入实模式。
保护模式是它们的主要工作模式,提供了4GB的段尺寸、多任务、内存分段分页管理和特权级保护等功能,Windows和Linux等操作系统都需要在保护模式下运行。
为了既能充分发挥处理器的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 基础知识