汇编语言程序设计基础知识

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这四个寄存器作为间址寄存器。

在这种寻址方式中,操作数同样可以用段超越前缀。此寻址方式适于简单的表格处理。

![在这里插入图片描述](https://img-blog.csdnimg.cn/4076296d3e7b47f49edbbb307dafb24b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5p2h6YeO5oyH6ZKI,size_20,color_FFFFFF,t_70,g_se,x_16

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

汇编语言程序设计

  • 6
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值