20192418汇编程序设计1~4章学习知识点总结
汇编程序设计
20192418张曦
汇编语言一般概念
-机器语言
优点:运行速度快,程序长度短。
缺点:二进制数表示的内容不便于记忆,难以阅读。
-高级语言
特点:程序设计简单,程序效率较低。
-汇编语言
- 便于阅读,效率高;
- 一条汇编语言的语句与一条机器语言指令对应。
机器自检、系统初始化、实际的输入输出设备的操作等。
进位计数制及其相互转换
- 各个位置上表示的基本数值称为位权;
- 每个数位上能使用不同数码的个数称为基数。
B——二进制
O——八进制
D——十进制
H——十六进制
除基取余法
减权定位法
乘积取整法
按权相加法
带符号数的表示
-
真值:+和-表示正负数
-
机器数:0和1表示正数和负数
原码
最高位表示符号,8位二进制范围:-127~127
补码
带符号数X的补码,0为正,1为负
-
正数:与原码相同
-
负数:取反加一
基本逻辑运算
AND
OR
非
异或XOR
IBM-PC微机基本结构
- 运算器
- 控制器
- 存储器
- 输入设备
- 输出设备
运算器+控制器=中央处理器(CPU)
系统总线结构
- 地址总线
- 数据总线
- 控制总线
主存储器
若干个存储单元构成
编号地址来表示
辅助存储器成为外存
输入输出设备及接口
输入:键盘鼠标
输出:显示器打印机
系统总线
Intel 8086/8088 CPU的功能结构
CPU执行指令:
- 从存储器中取指令
- 执行指令规定的操作
串行方式/指令流水线方式
执行单元EU
- 取出指令代码
- 对操作数执行算术或逻辑运算
- 向总线接口单元BIU发送访问主存或I/O的命令
总线接口单元BIU
- 取指令
- 存取数据
EU和BIU既分工又合作,且并行工作
CPU寄存器的结构和用途
- 通用寄存器8个
- 数据寄存器:AX BX CX DX
- 指针寄存器:SP BP
- 变址寄存器:SI DI
-
控制寄存器2个
IP FLAGS -
段寄存器4个
CS DS ES SS
CPU访问存储器时:
- 访问的存储单元属于哪个段
- 该存储单元与段起始地址(段基址)的偏移量
进位标志位CF
奇偶标志位PF
辅助进位标志位AF
零标志位ZF
符号标志位SF
溢出标志位OF
单步标志位TF
中断允许标志位IF
方向标志位DF
存储器组织结构
存储器的组成
- 若干个存储单元构成
- 编号地址来表示
- 存放相同长度的二进制数
存储器的段结构
段基址
每16字节单元分为一小节
1MB内存分为64K个小节
逻辑段
邻接的、间隔的、部分重叠、完全重叠 四种情况
逻辑地址与物理地址及对应关系
逻辑地址:段基值、偏移量
逻辑地址转换为物理地址:
逻辑地址的段基值左移4位,形成20位段基址然后与16位偏移量相加,结果可得20位物理地址。
堆栈及其操作方法
用途:主要用于暂存数据以及在过程调用或者处理中断时保存断点信息。
- 专用堆栈存储器
- 软件堆栈
栈底是最大地址单元
先进后出FILO
堆栈操作
- 设置堆栈
- 进栈PUSH
- 出栈POP
寻址方式
- 指令:
- 操作码
- 操作数
立即数操作数
寄存器操作数
存储器操作数
I/O端口操作数
立即数只能作为源操作数,而不能作为目的操作数
- 立即数寻址
- 寄存器寻址
- 直接寻址
(1)符号表示
(2)常数表示 - 寄存器间接寻址
- 基址寻址/变址寻址
段寄存器的隐含使用规则与寄存器间接寻址方式相同
相对有位移量指定的初始单元,因此也叫寄存器相对寻址。 - 基址变址寻址
EA=基址+变址+位移量
当基址选用BX时隐含使用段寄存器DS,而选用BP时则隐含使用段寄存器SS。 - 串操作寻址方式
- I/O端口寻址
特点:程序设计灵活,但需要占用存储地址空间。
(1)直接端口寻址
(2)寄存器间接端口寻址
指令系统
一种计算机能执行的各种类型的指令的集合成为计算机的指令系统
传送类指令
- 通用数据传送指令
MOV指令:
(1)立即数只能作源操作数,且不能传送给段寄存器。
(2)段寄存器CS只能作源操作数,段寄存器之间不能直接传送。
(3)存储单元之间不能直接传送数据。
(4)MOV指令不影响标志位。 - 交换指令
作用:源操作数和目的操作数两者内容相互交换。 - 标志传送指令
(1)取标志寄存器指令
指令格式:LAHF
(2)存储标志寄存器指令
指令格式:SAHF
(3)标志进栈指令
指令格式:PUSHF
(4)标志出栈指令
指令格式:POPF - 地址传送指令
(1)装入有效地址
格式:LEA DEST,SRC
(2)装入地址指针指令
格式:LDS DEST,SRC
LES DEST,SRC
算术运算类指令
- 加法指令
指令格式:ADD DEST,SRC - 带进位加法指令
指令格式:ADC DEST,SRC
可实现大于16位的两数相加
高16位在AX,低16位在BX - 加1指令
指令格式:INC DEST - 减法指令
SUB DEST,SRC - 带借位减法
指令格式:SBB DEST,SRC - 减1指令
指令格式:DEC DEST - 求负数指令
NEG DEST
位操作类指令
- 逻辑运算指令
- 测试指令
指令格式:TEST DEST,SRC
移位/循环移位指令
(1)算术移位
(2)逻辑移位
(3)循环移位
处理器控制类指令
- 标志位操作指令
(1)清除进位标志
(2)置1进位标志
(3)进位标志取反
(4)清除方向标志
(5)置1方向标志
(6)清除中断标志
(7)置1中断标志 - 与外部事件同步的指令
HLT暂停指令
WAIT等待指令
ESC外部协处理器指令前缀 - 空操作指令 NOP
指令编码
汇编:将汇编语言程序转换为机器语言程序的过程
双操作数指令编码格式
- 一个操作数在寄存器中,另一个操作数在寄存器或存储器中。
- 目的操作数在寄存器或存储器中,源操作数是立即数。
- 2~6个字节:操作特征1,寻址特征1,位移量2,立即数2.
操作特征部分
(1)OPCODE操作码字段
(2)d方向字段
(3)W字/字节字段
寻址特征部分
包括MOD、REG、R/M三个字段,REG字段确定一个操作数
- REG字段
寄存器寻址方式 - MOD 和 R/M
位移量部分
- 没有位移量
- 1字节位移量disp8
- 2字节位移量disp16
立即数部分
总是位于指令编码的最后1~2个字节。
单操作数指令编码格式
2~3个字节
操作特征,寻址特征,位移量
与AX或AL有关的指令编码格式
隐含指定AX/AL作为一个操作数的双操作数指令
另一个操作数可以是立即数或存储单元
其他指令编码格式
汇编语言程序格式
指令语句
标号-:-指令助记符-操作数-;-注释
- 标号字段
- 指令助记符
- 操作数字段
- 注释字段(以分号开始)
伪指令语句
- 符号名字段
- 伪指令符字段
- 操作数字段
- 注释字段
标识符
汇编语言数据
数据由数值和属性组成
常数
二进制
八进制
十进制
十六进制
实数
字符串常数
变量
存放数据的存储单元
(1)段属性:表示变量存放在哪一个逻辑段中
(2)偏移量属性(OFFSET):所在位置与段起点之间的字节数
段属性和偏移量属性就构造了变量的逻辑地址
(3)类型属性:数值表达式,?表达式,字符串表达式
(4)DUP表达式:重复数据操作符
变量的使用
- 在指令语句中引用
- 在伪指令语句中引用
标号
指令地址的别名
标号三属性:段属性,偏移量属性,距离属性(类型属性)NEAR/FAR
符号定义语句
等值语句
语句格式:符号名 EQU 表达式
- 常数或数值表达式
- 地址表达式
- 变量、寄存器名或指令助记符
等号语句
格式:符号名=表达式
表达式与运算符
算术运算符
加减乘除余 都是整数
SHR SHL 逻辑移位
逻辑运算符
关系运算符
EQ等于
NE不等于
LT小于
LE小于等于
GT大于
GE大于等于
数值返回运算符
- SEG运算符
取变量或标号所在段的段基值 - OFFSET运算符
取变量或标号在段内的偏移量 - TYPE运算符
取变量或标号的类型属性,并用数字形式表示 - LENGTH运算符
用于取变量的长度
5.SIZE运算符
作用于变量,等于LENGTH 和TYPE 两个运算符返回值的乘积
属性修改运算符
- PTR运算符
类型 PTR 地址表达式 - HIGH/LOW运算符
分离高低字节 - THIS运算符
与等值运算符EQU连用,定义类型属性。
程序的段结构
伪指令定义和使用这些逻辑段
段定义伪指令
- 段名
符合标识符定义规则的一个名称,段名前后一致 - 定位类型
- PAGE:表示该段从一个页面的边界开始
- PARA:表示该段从一个小节的边界开始(缺省)
- WORD:该段从一个偶数字节地址开始
- BYTE:表示该段起始单元地址可以是任一地址值
- 组合类型
- 无连接关系
- PUBLIC:同名邻接
- COMMON:产生一个覆盖段
- STACK:把所有同名段连接成一个连续段,系统自动对SS段寄存器初始化为该连续段的段基址。并初始化堆栈指针SP。
- AT表达式:表示本段可定位在表达式所指示的小节边界上。
- MEMORY:表示本段在存储器中应定位在所有其他段之后的最高地址上。
- 类别名
段寻址伪指令
ASSUME 段寄存器名:段名,段寄存器名:段名,……
NOTHING 将前面的设置删除
段寄存器的装入
- DS和ES的装入
- SS的装入
- CS的装入
过程定义伪指令(PROC/ENDP)
在MASM宏编程程序中,用过程(PROCEDURE)来构造子程序。
当前位置计数器$与定位伪指令ORG
$在使用上完全类似变量的使用
ORG——用于改变位置计数器的值
格式:ORG 数值表达式
标题伪指令
语句格式 TITLE 表达式
从程序返回操作系统的方法
- 使用程序段前缀PSP实现返回
- 将用户程序编制成一个过程,类型为FAR
- 将PSP的起始逻辑地址压栈
- 使用DOS系统功能调用实现返回
两条指令:
MOV AH,4CH
INT 21H