当前位置:文档之家› 汇编语言程序设计

汇编语言程序设计

汇编语言程序设计课程介绍1.属于低级语言的程序设计2.硬件类课程和操作系统先行课3.软件开发的一个组成部分(加密解密、逆向工程、有害代码的分析防治)4.高级语言程序设计的扩展(硬件资源的管理、驱动等)5.对计算机专业:专业基础课、必修课第一章汇编语言基础知识§1.1计算机语言基本概念一、机器语言:(0、1代码)1.机器指令:是指挥计算机完成某一基本操作的命令,是由硬件电路设计决定的,也叫硬指令。

由操作码和地址码组成。

2.指令系统:每台计算机所特有的、全部指令的集合构成该CPU的指令系统。

3.机器语言程序:机器指令的集合构成了机器语言,用机器语言编写的程序就是机器语言程序。

4.特点:计算机能直接识别,执行速度快,但难于记忆、识别和编写。

二、汇编语言:1.汇编指令:用便于记忆、并能描述指令功能的符号表示的机器指令。

2.汇编程序:就是把汇编语言源程序翻译成机器语言程序的一种系统软件。

3.汇编语言:汇编指令、伪指令、宏指令和汇编程序一起组成了汇编语言。

4.特点:汇编指令与机器指令一一对应,相对机器语言易于理解、掌握。

汇编语言直接面向机器,用汇编语言编制的程序简洁、快速。

三、高级语言:1.高级语言:机器语言和汇编语言以外的程序设计语言统称高级语言。

2.特点:其特点是更加接近自然语言和惯用的数学表达形式,与计算机硬件结构无关,因而便于使用,便于交流和推广。

高级语言编程效率高,但运行效率低。

3.高级语言需要使用编译程序和解释程序将源程序翻译成机器语言程序,然后交计算机执行。

§1.2数据表示与运算一、位计数制:1.位权表示法:每位的位权与该位的数值相乘后相加得到该数的数值。

2.十进制:逢十进一,用0、1、2、3、4、5、6、7、8、9十个数码表示。

(D)二进制:逢二进一,用0、1两个数码表示。

(B)八进制:逢八进一,用0、1、2、3、4、5、6、7八个数码表示。

(Q)十六进制:逢十六进一,用0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F十六个数码表示。

(H)二、不同数制之间的转化:1.非十进制数转化为十进制:1011100.1011B=1×26+0×25+1×24+1×23+1×22+0×21+0×20+1×2-1+0×2-2+1×2-3+1×2—4=92.6875D 1001.2Q=1×83+0×82+0×81+1×80+2×8-1A031.2H=10×163+0×162+3×161+1×160+2×16-1=41009.125D2.十进制转化为非十进制数:十进制数转化位二进制数:整数部分:除2取余,倒序排列得到的整数。

2 13 (1)2 6 02 3 (1)2 1 (1)013D=1101B小数部分:乘2取整,顺序排列得到的整数。

0.8125× 21 .6250× 21 .25× 20 .50× 21 .00 0.8125D=0.1101十进制数转换为十六进制数和八进制数的方法与转换为二进制数的方法类同。

3.十六进制数与二进制数之间的转换:16=24,所以每4位二进制数可以用一位十六进制数表示,或者说每一位十六进制数可以表示成4位二进制数。

C B 9 A1100 1011 1001 1010CB9AH=11001011100110100111 0101 1011 11117 5 B F111010*********B=75BFH4.八进制数与二进制数之间的转化与十六进制数与二进制数之间的转换方法相同,只是三位二进制数表示成一个八进制数。

三、数据的表示:●数值数据可以用不同的码制进行表示,常用的有原码、反码和补码。

1.原码正数原码:符号位为0,数值位照抄。

负数原码:符号位为1,数值位照抄。

例:X=+25=+00011001B [X]原=00011001BX= -25= -00011001B [X]原=10011001B2.反码正数反码:符号位为0,数值位照抄。

负数反码:符号位为1,数值位取反。

例:X=+25=+00011001B [X]反=00011001BX= -25= -00011001B [X]反=11100110B3.补码:为了将减法运算变成加法来做,有符号数在计算机内一律采用补码表示。

正数补码:符号位为0,数值位照抄。

负数补码:符号位为1,数值位取反加一。

例:X=+25=+00011001B [X]反=00011001B [X]补=00011001BX= -25= -00011001B [X]反=11100110B [X]补=11100111B●BCD码:解决十进制数在计算机内部的表示。

BCD码规定用四位二进制数表示一位十进制数。

对多位十进制数,只要把每一位十进制数分别表示为四位二进制数即可。

●ASCII码:解决字母、符号在计算机内部的表示。

基本ASCII码(标准ASCII码)用七位二进制数表示一个符号(共128个)。

用字节保存最高位为0。

●定点数与浮点数:四、计算机中数的运算:1.二进制数的算术运算与十进制运算相同,只不过是逢2进1,借1当2。

加法减法乘法0+0=0 0-0=0 0×0=00+1=1 0-1=1 0×1=01+0=1 1-0=1 1×0=01+1=10 1-1=0 1×1=12.十六进制算术运算:与十进制运算相同,但①逢16进1,借1当16;②注意运算结果如为A,B,C,D,E,F,不能写成10,11,12,13,14,15。

3.二进制数的逻辑运算(1)与运算(AND;∧):1∧0=0 1∧1=1 0∧0=0 0∧1=0(2)或运算(OR;∨):1∨0=1 1∨1=1 0∨0=0 0∨1=1○+(3)非运算(NOT;—):0=1 1= 0(4)异或运算(XOR;⊕)1○+0=1 1○+1=0 0○+0=0 0○+1=1注意:逻辑运算是按位运算。

4.补码的运算:(1)十进制二进制23 00010111+ 36 + 0010010059 00111011(2)36 00100100+ (-23)+ 1110100113 (进位1)00001101(3)23 00010111+ (-36)+ 11011100-13 11110011(4)(-36)11011100+ (-23)+ 11101001-59 (进位1)11000101§1.3 8086/8088系统结构8086:1978年推出;内外数据总线16位;地址总线20位;寻址范围1MB;主频5MHz。

8088:1979年推出;内部数据总线16位;外部数据总线8位;其余基本同8086,被称为准16位CPU。

一、8086/8088 CPU的内部结构:8086 CPU按功能可分为两大部分:总线接口单元BIU和执行单元EU。

1.总线接口单元BIU:总线接口单元BIU是8086 CPU同存储器和I/O设备之间的接口部件,负责对全部引脚的操作,,它的具体任务是:负责从内存单元中预取指令,并将他们送到指令队列缓冲器暂存;CPU执行指令时,总线接口单元要配合执行单元,从指定的内存单元或者I/O端口中取数据传送给执行单元,或者把执行单元的处理结果传送到指定的内存单元或I/O端口中。

总线接口单元BIU由20位地址加法器、4个段寄存器、16位指令指针、指令队列缓冲器和总线控制逻辑电路等组成。

(1)地址加法器和段寄存器:8086 CPU内部寄存器都是16位的,为实现20条地址线1MB寻址,它用专门的地址加法器将有关段寄存器的内容(段起始地址)左移4位后,与偏移地址相加,形成一个20位的物理地址,以对存储单元寻址。

如书P9图1-3。

(2)16位指令指针IP:指令指针IP是用来存放下一条待执行指令在代码段中的偏移地址。

程序运行中,IP 的内容由BIU自动修改,使它总指向下一条要取的指令在现行代码段的偏移地址用户不能直接访问IP,但可通过某些指令修改它的内容。

如转移指令。

(3)指令队列缓冲器:当EU执行指令,并不占用总线时,BIU会进行预取指令,将取得的指令按先后顺序存入一个6字节的指令队列寄存器中,该队列寄存器遵循“先进先出”原则,并按顺序由EU 执行。

(4)总线控制逻辑电路:总线控制逻辑电路将8086 CPU的内总线和外部总线相连,是8086 CPU与内存单元或I/O端口进行交换数据的通道。

它包括16条数据线、20条地址线和若干控制总线。

2.执行单元EU:执行单元EU包含一个16位的运算器ALU、8个16位的寄存器、一个16位的标志寄存器FLAGS、一个数据暂存寄存器和执行单元控制电路。

(1)算术逻辑运算单元ALU:它是一个16位的运算器,可用于8/16位二进制算术和逻辑运算,也可按指令的寻址方式计算16位偏移量。

(2)标志寄存器FLAGS :它是一个16位的运算器,用来反映CPU 运算状态和存放某些控制标志。

(3)数据暂存寄存器:它协助ALU 完成运算,暂存参加运算的数据。

(4)通用寄存器组:它包括4个16位数据寄存器AX 、BX 、CX 、DX 和4个 16位的指针与变址寄存器SP 、BP 、SI 、DI 。

(5)EU 控制电路:它负责从BIU 的指令队列缓冲器中取指令,并对指令译码,根据要求向EU 内部各部件发出控制命令。

二、8086 CPU 的寄存器组织:8086 CPU 内部共有14个寄存器。

包括4个通用寄存器,4个指针与变址寄存器,4个段寄存器,1个指令指针寄存器,1个标志寄存器。

(1)通用寄存器:AX —累加器 BX —基地址寄存器 CX —计数寄存器 DX —数据寄存器通用寄存器又称为数据寄存器,16位寄存器也可当8个8位寄存器使用。

多数情况下通用寄存器是在算术和逻辑运算指令中用来存放算术逻辑运算的源/目的操作数。

(2)段寄存器:CS —代码段段寄存器 DS —数据段段寄存器 ES —附加段段寄存器 SS —堆栈段段寄存器8086 CPU的各种寄存器都是16位的,所以不能直接1MB空间,因此采用分段分段寄存器,,即8086用一组段寄存器将这1MB存储空间分成若干逻辑段,用4个16位的段寄存器分别存放各个段的起始地址(又称段基址)。

8086的指令能直接访问这4个段寄存器。

寻址时根据给出的偏移地址加上段基址左移4位的值,实现20位地址。

CS:表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移地址由IP提供;DS:指示当前程序使用的数据所存区段的最低地址;ES:指出当前程序使用附加段地址的位置,该段一般用来存放原始数据或运算结果;SS指定当前堆栈的底部地址。

相关主题