8086
INC AX ;加1指令。将字操作数AX中的数值加1
DEC BL ;减1指令。将字节操作数BL中的数值减1
PUSH AX ;进栈指令。将AX中的字压入堆栈
JMP LAl ;无条件转移指令。将程序转移到标号为LAl的指令继续执行
MOV AX,5 ;传送指令。将操作数送入目的操作数AX中
ADD AX,BX ;加法指令。将AX和BX相加,结果再传入AX中
CBW ;字节转换为字指令
CLC ;进位标志CF清零
NOP ;不操作指令
HLT ;停机指令
标志位:
进位标志NC,即CF,CF= 0 则无进位
溢出标志NV,即OF,OF= 0 则不溢出
零标志NV,即ZF,ZF= 0 则结果不为零
符号标志PL,即SF,SF= 0则结果是正数
指令长度 :
指令的长度会影响存储空间。在编写程序时,如果有多种类型的指令可以完成相同的任务,那么选用较短的指令可有效地压缩程序占用的存储空间。
基础知识
计算机基本原理
冯 诺依曼计算机的原理
计算机的基本工作原理是存储程序和程序控制。
冯诺依曼计算机的基本特点:
(1)采用存储程序方式。
(2)存储器是按地址访问的。
(3)指令由操作码和地址码构成。
(4)机器以运算器为中心。
冯 诺依曼计算机的基本结构
计算机由运算器、控制器、存储器、输入设备、输出设备五大部件组成。
运算器和控制器合称为中央处理器(CPU)。
各部分之间由系统总线相连。系统总线分为:**地址总线(A-BUS)、数据总线(D-BUS)、控制总线(C-BUS)。
1.中央处理器(CPU)
CPU主要由算数逻辑运算单元ALU、地址发生和控制单元、指令译码单元、数据存储单元、总线驱动单元、时序控制单元等组成。
2.存储器
存储器分为内存和外存。内存又称为主存,用于存储计算机当前正在运行的程序、正在处理的原始数据、中间数据和最终结果,内存的各存储单元可由CPU直接寻址。
3.总线和接口
计算机总线分为内部总线和外部总线。内部总线指的是CPU内部各个部件之间的连线。外部总线又称为系统总线,是连接计算机主板上各个芯片以及各个接口部件的总线,系统总线分为地址总线、数据总线、控制总线。
外部设备和计算机之间必须有的中间缓冲部件又叫接口,接口分为并行接口和串行接口。
并行接口:同时并行地传送多位数据。
串行接口:数据是一位一位传输的。
微型计算机系统
微型计算机系统概念
8086寄存器组
1.数据寄存器
AX通用寄存器,主要作为累加器用,所以它是算数运算的主要寄存器。
BX通用寄存器,还用作基址寄存器。
CX通用寄存器,还用作计数器。
DX通用寄存器,在做双精度运算时还用来与AX一起存放一个双字操作数(32位二进制数),其中DX存放高字(高16位),AX存放低字(低16位)
2.地址寄存器
地址寄存器包括指针和变址寄存器SI、DI、SP、BP四个16位寄存器,用来存放存储器操作的偏移地址,也可以作为通用寄存器。严格来说,用来存放存储器偏移地址的寄存器都应该归类为地址寄存器,如BX基址寄存器、IP指令指针寄存器等。
SI源变址寄存器,用于指出存放源缓冲区的偏移地址。
DI目的变址寄存器,可用于存放目的缓冲区的偏移地址。
SP堆栈指针寄存器,用于指出堆栈区栈顶的偏移地址。
BP基址指针寄存器,用于指出堆栈区某个单元的偏移地址。
3.段寄存器
CS代码段寄存器,用于指出存放程序的代码段的段地址。
DS数据段寄存器,用于指出存放数据的数据段的段地址。
ES附加段寄存器,用于指出存放附加的数据段的段地址。
SS堆栈段寄存器,用于指出堆栈区的堆栈段的段地址。
4.控制寄存器
控制寄存器包括IP和FLAGS(又称为PSW程序状态字),用于控制程序的执行。
IP指令指针寄存器,用来存放代码段中的偏移地址,指出当前正在执行指令的下一条指令所在单元的偏移地址。
FLAGS标志寄存器的某位代表CPU的一个标志,表示出CPU的某种执行状态,8086的标志寄存器共有9个标志,分别为6个条件码标志和3个控制标志。
条件码标志如下:
CF进位标志,当指令执行结果的最高位向前有进位时,CF= 1,否则CF=0。
SF符号标志,当指令执行结果的最高位(符号位)为负时,SF=1,否则SF=0。
ZF零标志,当指令执行结果为0时,ZF=1,结果不为0时ZF=0。
OF溢出标志,当指令执行结果有溢出(超过了数的表示范围)时,OF=1,否则OF=0。
AF辅助进位标志,当指令执行结果的第3位(半字节)向前有进位时,AF=1,否则AF=0。
PF奇偶标志,当指令执行结果中1的个数为偶数个时,PF=1,否则PF=0。
控制标志如下:
DF方向标志,执行串处理指令时,若设置DF=0,存储单元的地址寄存器的值自动增加,若设置DF=1,存储单元的地址寄存器的值自动减小。
IF中断标志,设置IF=1,允许CPU响应可屏蔽中断,IF = 0,则不影响。
TF陷阱标志,在DEBUG调试时,TF=1,采用单步执行方式,即进入陷阱;TF=0,正常执行程序。
注:逻辑地址不唯一,多个物理地址可对应同一物理单元上。
指令系统与寻址方式
指令系统
指令系统的定义
指令系统是计算机所能执行的各种代码指令的集合。计算机体系不同,指令系统也不同,不可互换。
指令的分类
1.数据传送指令
2.算术运算指令
3.逻辑运算指令
4.串处理指令
5.控制与转移指令
6、处理机控制指令
指令的寻址方式
寻址方式
定义:寻找操作数的方法。
操作数可以分为:
数据操作数和转移地址操作数
按照操作数类型不同,寻址方式也分为两大了类:
与数据有关的寻址方式和与转移地址有关的寻址方式
注:除了转移指令、循环指令、子程序调用指令等与转移地址有关之外,其他指令的寻址方式都与数据有关。
与数据有关的寻址方式划分为三类:
立即寻址方式、寄存器寻址方式、储存器寻址方式。
其中储存器寻址方式包括:
1.直接寻址方式
2.寄存器间接寻址方式
3.寄存器相对寻址方式
4.基址变址寻址方式
5.相对基址变址寻址方式
立即寻址方式
所要找的操作数直接写在指令中,这种操作数叫立即数
注:立即寻址只能用于源操作数子段,立即数的类型必须与目的操作数的类型一致,目的操作数是字节,立即数也必须是字节。
立即寻址方式的操作数就在指令中,而指令本身在代码段中存放。
寄存器寻址方式
操作数在寄存器中,CPU在寄存器中得到操作数,不用访问内存,这种寻址方式指令短、速度快,但是可用的资源少。
8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL
16位寄存器:AX、BX、CX、DX、SI、DI、BP、SP
例:
MOV AX,4650H ;目的操作数寄存器寻址方式,源操作数是立即寻址方式
存储器寻址方式
在编写汇编程序时存储器的地址是以逻辑地址形式表示的,因此这一类寻址方式在指令中要表示出有效地址EA。对于双操作数指令而言,两个操作数不允许同时用存储器寻址方式,即不允许两个操作数都是存储单元。
1.直接寻址方式
操作数的有效地址EA直接写在指令中,操作数的段地址为数据段,由DS指出。CPU根据EA和段地址DS计算出物理地址后,再访问存储器取出操作数的数值。
操作数的物理地址:(DS)*10H+EA
对于直接寻址方式而言,必须用前缀“DS:”指出该单元在数据段中。例如,DS:[2000H]代表一个数据段的存储单元,其偏移地址为:2000H。
直接寻址方式适于处理单个变量。存储单元的名字(偏移地址)为变量名,存储单元的内容为变量值。
(1)存储器读操作
MOV指令可以实现CPU对存储器的读写操作。若传送指令的目的操作数是CPU的寄存器,源操作数是存储单元,就完成了对存储器的读操作。至于读出的是字还是字节,要看目的操作数的寄存器是字型还是字节型的。
(2)存储器的写操作
把MOV指令的目的操作数变为存储单元,源操作数为CPU的寄存器。
(3)符号地址
为存储单元定义一个名字,该名字就是符号地址。如果把存储单元看成变量,该名字也是变量名。
采用符号地址时,如果用数据定义伪指令DB、DW等定义的存储单元名字,其对应的段默认为数据段;但是若用EQU符号定义符号地址,则需要加上前缀“DS:”
汇编语言源程序在汇编是时,符号地址被转换为实际的偏移地址。
例:
VALUE DW 5678H
MOV AX,VALUE ;VALUE是符号地址,也可以用中括号括起来
MOV AX,[VALUE];段地址默认为数据段DS
(4)段超越
在与内存有关的寻址方式中,操作数默认为数据段。如果操作数在其他段中存放,称为段超越,需要在指令中用段超越前缀指出,即用操作数前加上段寄存器和冒号表示。
例:
VALUE EQU 1000H ;EQU符号定义伪指令,表示VALUE = 1000H
MOV AX,DS:[VALUE] ;存储单元在数据段
MOV AX,ES:[VALUE] ;ES:段超越前缀,指出操作数在附加段
2.寄存器间接寻址方式
操作数的EA在基址寄存器BX、BP或变址寄存器SI、DI中,而操作数的段地址在数据段DS或堆栈段SS中。如果有效地址由BX、SI、DI指出,则默认对应于数据段,而用BP指出则对应于堆栈段 由于EA是间接从寄存器中的到的,所以称为寄存器间接寻址。8086CPU只允许BX、BP、SI、DI这四个寄存器作为间址寄存器。
在这种寻址方式中,操作数同样可以用段超越前缀。此寻址方式适于简单的表格处理。
3.寄存器相对寻址方式
MOV AX,[BX+1234H]
操作数的EA是一个基址或变址寄存器的内容再加上8位或16位位移量之和。
由于有相对的位移量,所以成为寄存器相对寻址方式。此寻址方式常用于草表操作。可利用寄存器做首地址,用位移量做指针寻找表中特定的单元;或用位移量做表格的首地址,用寄存器做指针,来连续查表。
例:
MOV [BX+2635H],AX ;位移量也可以写在中括号内
MOV[BX].2623H,AX ;位移量可用小点连接
4.基址变址寻址
操作数存放在内存中,指令形式如下:
MOV AX,[BX+SI]
操作数的EA为一个基址寄存器和一个变址寄存器的内容之和。该寻址方式可用于二维表的处理。
例:
MOV AH,ES:[SI+BX];源操作数ES:段超越前缀,指出操作数在附加段,操作数的EA在基址寄存器BX和变址寄存器SI中,为二者之和。
5.相对基址变址寻址方式
操作数存放在内存中。指令的形式如下:
MOV AX,[BX+SI+1234H]
操作数的EA为一个基址寄存器加一个变址寄存器再加一个位移量,三者之和。该寻址方式可用于二维表查表和栈处理。
例:
MOV AX,MASK[BX][SI]
或MOV AX,[MASK+BX+SI]
或MOV AX,[BX+SI].MASK
有效地址:
EA = MASK+(BX)+(SI)
物理地址:
(DS)*10H+EA
相对基址变址寻找方式可以方便地在二维表中查找某元素。例如可令MASK作为表首址,BX代表行SI代表列,即可查找表中元素。
一字节8bit
一字16bit
双字32bit