进位计数制
遵循及十进一的规则为十进制。以此类推,N进制数的进位计数,我们称其进制数为基。以2为基的称为二进制数,遵循及二进一的规则。
1.1常用计数制及其数的算数运算
十进制 361.905D
二进制 11101.011B
十六进制 6B.0CH
八进制 36.53Q
我们称数字后的大写字母为尾标。每一个进制数是由各位数的基数幂与权值的乘积之和构成。例如,360D的组成按十进制数的组成是3x+6x+0。用二进制表示是101101000B,按二进制数的组成是1x+1x+1x+1x。用十六进制的表示是168H,十六进制的表示是1x+6x+8x。用八进制的表示是550Q,八进制的数组成是5x+5x。
1.2计算机中数和字符的表示
数的表示
1.机器数与真值
机器数采用原码,补码或是反码表示。
2.原码
原码的使用是为了方便真值在计算机中的引用。原码的最高位表示真值的符号位,是有符号数。通常符号位用0表示正数,用1表示负数。
真值 原码(使用8位表示真值)
+10110 00010110
-11010 10011010
3.补码
当一个数为正数,其补码就是数本身;当一个数为负数,其补码等于这个数按位取反加一,同时注意数值需要根据条件调整到n位。
4.反码
反码的最高位是符号位,0表示正数,1表示负数。
当反码为正数,其数值位不变;当反码为负数,其数值位按位取反,得到结果。
5.BCD码
为方便十进制和二进制之间的转换,使用四位的二进制数表示十进制数的编码称为BCD码。
CPU的功能结构
8086/8088采用了流水化结构,按步骤分配CPU执行单元。CPU内部结构显示如下,三条总线,分别为控制总线,地址总线和数据总线;两个单元,控制单元,执行单元。
构成元素为通用寄存器,ALU,指令单元,内部寄存器等。其中通用寄存器分为数据寄存器和地址指针和变址寄存器。段寄存器(CS、DS、ES、SS)是汇编程序主要使用的单元。
1.通用寄存器
1)数据寄存器
数据寄存器AX、BX、CX、DX主要用来保存算数运算或者逻辑运算的操作数、中间结果。
2)地址指针及变址寄存器
基址指针BP、堆栈指针SP、变址寄存器SI和DI。
2.段寄存器
段寄存器(CS、DS、ES、SS)是汇编程序主要使用的单元。
3.指令指示器IP
指令指示器是一个十六位的寄存器,它用于存放代码段中的指令的偏移地址。IP会处理下一条将要取出的指令的偏移地址。根据CS中存放的代码段地址和IP的内容,形成待取用的指令的物理地址。
4.程序状态字寄存器
PSW是一个十六位的寄存器。在8086/8088CPU里使用了9位,分为两类,一个是状态标志,另一个是控制标志。状态标志是反映EU执行算术或逻辑运算后的结果特征;控制标志用来控制CPU的某些操作,可用程序设置或清除。这里我们重点介绍几个标志。
1)状态标志
CF,进位标志,记录算术运算时从数字有效位产生的进位或借位值。
ZF,零标志,如果运算结果为零,则ZF=1,如果运算结果为1,ZF=0。
OF,溢出标志,当有符号数运算结果产生了溢出,则OF=1。
2)控制标志
DF,方向标志,用于控制处理信息的方向。
IF,中断标志,IF=1时,允许CPU响应可屏蔽的外部中断请求,IF=0时,CPU对可屏蔽外部中断请求不予响应。
2.1存储器的组织
8086/8088CPU计算机系统字长为16位,由两个字节组成。存储器地址就是字节单元的编号。在机器里常用十六进制表示。n位二进制数可以表示个地址单元。1KB=2^10B=1024B;1MB=2^20B;65536个字节存储容量为64KB。
字地址可以是偶数,也可以是奇数。通常把存放在偶地址的字称为规则字,存放在奇地址的字称为非规则字。
若访问一个字节的数据,用一个总线周期来完成操作;若访问一个字,则需用一个或两个总线周期来完成。对规则字,用一个总线周期,对于非规则字,用相邻两个总线周期 。
CPU在访问存储器时,必须先确定所要访问的存储器单元的物理地址,才取得该单元的内容。在每一个存储器中,存储地址是分段的,所访问的段区由一个起始地址和一个偏移地址构成一个存储地址。每一段的起始地址称为段地址,从段地址开始至下一段起始地址的偏移量,称为偏移地址。
段地址和偏移地址是逻辑地址,把它转换为物理地址,要求16位段地址左移4位加偏移地址,即
段地址X16D+偏移地址=物理地址
对应的存储器的每个单元均有一个唯一确定的物理地址,但是逻辑地址不唯一,即一个物理地址可对应多个逻辑地址。如表示物理地址为30403H的存储单元,段地址为3000H,偏移地址为0403;当段地址为3040H时,偏移地址为0003H。
指令系统
3.1指令格式
50年代,指令系统只有定点加减、逻辑运算、数据传送、转移等十几至几十条指令
60年代后期,增加了乘除、浮点、十进制、字符串处理等指令,指令数目多达一二百条,寻址方式也趋多样化,开始出现系列计算机
70年代末期,大多数计算机的指令系统多达几百条,称这些计算机为复杂指令系统计算机(CISC,Complex Instruction Set Computer)。
但是如此庞大的指令系统不但使计算机的研制周期变长,难以保证正确性,不易调试维护,而且由于采用了大量使用频率很低的复杂指令而造成硬件资源浪费,产生指令集所谓20:80规律
即最常使用的简单指令仅占指令总数的20%,但在程序中出现的频率却占80%。
于是人们又提出了便于VLSI技术实现的精简指令系统计算机(RISC,Reduded Instruction Set Computer)。
8086/8088指令系统包括上千条指令这里所谓的指令可分为机器指令和汇编指令。本书主要论及汇编指令。
计算机的的指令系统是指微处理器所能执行的各种指令的集合。微型计算机的每一条指令通常由两部分构成。
1.操作码
操作码指示计算机所要执行的操作类型。
2.操作数
操作数指出指令执行操作所需的大数据或操作结果存放的位置。
3.2寻址方式
8086/8088指令涉及四种操作数:隐含操作数,立即操作数,寄存器操作数,存储器操作数。对应的四类寻址方式。
1.立即寻址
【例】MOV CX,9;
【例】MOV AX.5807H;
我们看到这种寻址方式下,操作数以常量的形式出现在指令中。操作数随指令一起进入指令队列,不必执行总线周期,称为立即数立即数只能用做源操作数,不能用做目的操作数。
2.固定寻址
这种寻址方式下,操作数隐含在指令中。
3.寄存器寻址
【例】MOV AX,CX
若指令执行前(AX)=9602H,(CX)=2081H,则指令执行,(AX)=2081H,(CX)内容保持不变。
4.存储器寻址
一般而言,一条指令的目的操作数和源操作数不能同为存储器操作数。存储器寻址方式按EA计算方法的不同可以分为5种。
1.直接寻址
【例】MOV AL,[1000H];
MOV AX,[1000H];
2.寄存器间接寻址
【例】MOV AL,[BX];
MOV AX,[BX];
3.基址寻址
【例】MOV AL,[BP+80H];
4.变址寻址
【例】MOV AX,ARRAY[SI];
5.基址变址寻址
【例】MOV AX,[BX+SI];
汇编语言程序的上机过程
汇编语言程序的处理过程包括编辑,汇编,连接及执行。一般可以分为以下4个步骤:
1)用编辑程序,建立扩展名为.ASM的汇编语言源程序文件。
2)用汇编程序将.ASM文件汇编成二进制的目标文件,即OBJ文件。
3)用连接程序,可将OBJ文件连接为可执行文件,即EXE文件。
4)可在DOS环境下直接执行EXE文件,亦可以通过DEBUG调试和执行。