汇编语言重点知识总结
汇编速查手册 汇编语言总结 概要
寄存器与存储器
1.寄存器功能
. 寄存器的一般用途和专用用途
. CS:IP 控制程序执行流程
. SS:SP 提供堆栈栈顶单元地址
. DS:BX(SI,DI) 提供数据段内单元地址
. SS:BP 提供堆栈内单元地址
. ES:BX(SI,DI) 提供附加段内单元地址
.
AX,CX,BX 和 CX 寄存器多用于运算和暂存中间计算结果 ,但又专用于某些指令 ( 查阅 指令 表)。
. PSW 程序状态字寄存器只能通过专用指令( LAHF, SAHF) 和堆栈 (PUSHF,POPF) 进行存取。
2.存储器分段管理
. 解决了 16 位寄存器构成 20 位地址的问题
. 便于程序重定位
. 20 位物理地址 = 段地址 * 16 + 偏移地址
. 程序分段组织 : 一般由代码段 , 堆栈段 ,数据段和附加段组成 , 不设置堆栈段时 则使用系统 内部的堆栈。
3.堆栈
.
堆栈是一种先进后出的数据结构 , 数据的存取在栈顶进行 , 数据入栈使堆栈向地址减小 的方向扩展。
. 堆栈常用于保存子程序调用和中断响应时的断点以及暂存数据或中间计算结果 。
. 堆栈总是以字为单位存取
指令系统与寻址方式
1.指令系统
. 计算机提供给用户使用的机器指令集称为指令系统 , 大多数指令为双操作数指令。 执行指令
后,一般源操作数不变 ,目的操作数被计算结果替代。
. 机器指令由 CPU 执行 ,完成某种运算或操作 ,8086/8088 指令系统中的指令分为 6 类 : 数据传 送,算术运算 ,逻辑运算 ,串操作 ,控制转移和处理机控制。
2.寻址方式
. 寻址方式确定执行指令时获得操作数地址的方法
. 分为与数据有关的寻址方式 (7 种) 和与转移地址有关的寻址方式 (4)种。
. 与数据有关的寻址方式的一般用途 :
(1)立即数寻址方式 --将常量赋给寄存器或存储单元
(2)直接寻址方式 -- 存取单个变量
(3)寄存器寻址方式 --访问寄存器的速度快于访问存储单元的速度
(4)寄存器间接寻址方式 --访问数组元素
(5)变址寻址方式
(6)基址变址寻址方式
(7)相对基址变址寻址方式
(5),(6),(7) 都便于处理数组元素
. 与数据有关的寻址方式中 ,提供地址的寄存器只能是 BX,SI,DI 或 BP . 与转移地址有关的寻址方式的一般用途 :
(1)段内直接寻址 -- 段内直接转移或子程序调用
(2)段内间接寻址 -- 段内间接转移或子程序调用
(3)段间直接寻址 -- 段间直接转移或子程序调用
(4)段间间接寻址 -- 段间间接转移或子程序调用 汇编程序和汇编语言
1.汇编程序
. 汇编程序是将汇编语言源程序翻译成二进制代码程序的语言处理程序 , 翻译的过程称为汇
编。
2.汇编语言
.
汇编语言是用指令助记符 ,各种标识变量 , 地址 ,过程等的标识符书写程序的语言 , 汇编语言 指令与机器指令一 一对应。
. 伪指令 ,宏指令不是由 CPU 执行的指令 , 而是由汇编程序在汇编期间处理的指令。
. 伪指令指示汇编程序如何完成数据定义 , 存储空间分配 ,组织段等工作。
. 宏指令可简化程序并减少程序书写量。
. 条件汇编伪指令的功能是确定是否汇编某段源程序 ,而不是实现程序分支 , 对未汇编的程序
将不产生相应的目标代码。
. 结构作为一种数据结构可将一组类型不同但有逻辑关联的数据组织在一起 ,便于 整体处理
数据。
.
记录可用于提高存储单元的利用率 , 将若干不足一个字节或字且有逻辑关联的信 息压缩存
放在一个字节或字中。
. 指令中的表达式在汇编期间计算 , 并且只能对常量或地址进行计算。
程序设计基础
1.分支程序设计
. 程序分支由条件转移指令或无条件转移指令实现
. 存放若干目的转移地址或跳转指令的跳转表常用于实现多路分支
. 条件转移指令只能实现偏移量为 -128 至+127 字节范围的转移
. 无条件转移指令根据寻址方式可实现短转移 ( 偏移量为 -128 至 +127 字节 ), 段内转 移 , 段间
转移。
2.循环程序设计
. 可由循环控制指令或条件转移指令组织循环结构
. 内层循环结构必须完全包含在外层循环结构内 ,并不能发生从循环结构外向循环 结构内的
转移。
3.子程序设计
. 子程序中应保护寄存器内容 ,并正确使用堆栈 , 成对执行 PUSH 和 POP 指令,保证执行 RET 指令时堆栈栈顶为返回地址。
. 主程序可通过寄存器 , 参数表 ,或堆栈传递参数给子程序
4.EXE 文件和 COM 文件
.
二者都是可执行文件
. COM 文件源程序的特点是 : 第一条可执行指令的起始存放地址必须是 100H, 不能分段 ,不用 定义堆栈 ,所有过程为 NEAR 类型,直接用 INT 20H 指令返回 DOS。
5.DOS功能调用与BIOS中断调用
. 二者都是完成 DOS 系统提供给用户的输入 /输出等常用功能 ,通过执行软中断指令 完成一 次软中断服务。
.DOS功能调用的中断服务程序是操作系统的一部分 ,存于RAM中;而BIOS中断调用的中
断服务程序存放在 ROM 中。
输入 /输出与中断系统
1.输入 /输出的方式
.
程序直接 I/O 方式: 用 IN 和 OUT 指令直接在端口级上进行 I/O 操作,数据传送方式 分为 无条件传送方式和查询传送方式。
. 中断传送方式 : 由 CPU 响应中断请求完成中断服务。
. DMA 传送方式 : 直接在存储器与外设之间传送数据。
2.有关中断的概念
. 中断、中断源、中断请求、中断服务、中断向量、中断向量表、中断响应过程、中断指令、 开中断、关中断、内部中断、外部中断、可屏蔽中断、非屏蔽中断。
3.键盘 I/O 、显示器 I/O 操作
.键盘的输入操作用 BIOS的16H中断调用控制,也可直接访问60H端口(数据端口 ), 61H端 口(状态端口 )检测键盘的按键操作。
. 对于特殊键(如 Shift , Ctrl , Alt , NumLock , ScrollLock 等键)的按动情况,可以直接从来 40:17H 单元取得有关信息。
. 显示器的图形显示可以用 BIOS 的 10H 中断调用实现 ,另一种速度更快的方法是直 接读写
视频缓冲区。
4.打印机 I/O 操作由 INT 17H 中断调用实现, 串行通讯口操作由 INT 14H 中断调用实现。
CLD Clear the direction flag (set to forward direction) 将方向标志置 0,使 si 和 di 增量,串处理从低地址向高地址处理
8088 汇编速查手册 一、数据传输指令 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据 .
1.通用数据传送指令 .
MOV 传送字或字节 .
MOVSX 先符号扩展 ,再传送 .
MOVZX 先零扩展 ,再传送 .
PUSH 把字压入堆栈 .
POP 把字弹出堆栈 .
PUSHA 把 AX,CX,DX,BX,SP,BP,SI,DI 依次压入堆栈 .
POPA 把 DI,SI,BP,SP,BX,DX,CX,AX 依次弹出堆栈 .
PUSHAD 把 EAX,ECX,EDX, EBX,ESP,EBP,ESI,EDI 依次压入堆栈 .
POPAD 把 EDI,ESI,EBP,ESP,EBX,EDX, ECX,EAX 依次弹出堆栈 .
BSWAP 交换 32 位寄存器里字节的顺序
XCHG 交换字或字节 .( 至少有一个操作数为寄存器 ,段寄存器不可作为操作数 ) CMPXCHG 比较并交换操作数 .( 第二个操作数必须为累加器 AL/AX/EAX ) XADD 先交换再累加 .( 结果在第一个操作数里 )
XLAT 字节查表转换 .
—
— BX指向一张256字节的表的起点,AL为表的索引值 (0-255,即 0-FFH); 返回 AL 为查表结果 . ( [BX+AL]->AL )
2.输入输出端口传送指令 .
IN I/O端口输入.(语法:IN累加器,{端口号|DX})
OUT I/O端口输出.(语法:OUT {端口号|DX},累加器)
输入输出端口由立即方式指定时 , 其范围是 0-255; 由寄存器 DX 指定时 ,其范 围是 0-65535.
3.目的地址传送指令 .
LEA | 装入有效地址 . | ||
例: | LEA DX,string ;把偏移地址存到 | DX. | |
LDS | 传送目标指针 ,把指针内容装入 | DS. | |
例: | LDS SI,string ;把段地址 :偏移地址存到 | DS:SI. | |
LES | 传送目标指针 ,把指针内容装入 | ES. | |
例: | LES DI,string ;把段地址 :偏移地址存到 | ES:DI. | |
LFS | 传送目标指针 ,把指针内容装入 | FS. | |
例: | LFS DI,string ;把段地址 :偏移地址存到 | FS:DI. | |
LGS 汇编语言结束指令 | 传送目标指针 ,把指针内容装入 | GS. | |
例: | LGS DI,string ;把段地址 :偏移地址存到 | GS:DI. | |
LSS | 传送目标指针 ,把指针内容装入 | SS. | |
例: | LSS DI,string ;把段地址 :偏移地址存到 | SS:DI. | |
标志传送指令 . | AH. | ||
LAHF | 标志寄存器传送 ,把标志装入 | ||
SAHF 标志寄存器传送 ,把 AH 内容装入标志寄存器 PUSHF 标志入栈 .
POPF | 标志出栈 . |
PUSHD | 32 位标志入栈 . |
POPD | 32 位标志出栈 . |
二、算术运算指令 ADD 加法 . | |
ADC | 带进位加法 . |
INC | 加 1. |
AAA | 加法的 ASCII 码调整 . |
DAA | 加法的十进制调整 . |
SUB | 减法 . |
SBB | 带借位减法 . |
DEC | 减 1. |
NEC | 求反(以 0 减之 ). |
CMP | 比较 .(两操作数作减法 ,仅修改标志位 ,不回送结果 ). |
AAS | 减法的 ASCII 码调整 . |
DAS | 减法的十进制调整 . |
MUL | 无符号乘法 . |
IMUL | 整数乘法 . |
以上两条 ,结果回送 AH 和 AL( 字节运算 ),或 DX 和 AX( 字运算 ), | |
AAM | 乘法的 ASCII 码调整 . |
DIV | 无符号除法 . |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论