汇编语言期末复习总结
第一章 汇编基础知识
本章目标:
- 理解汇编语言的特点和应用场合;
- 掌握计算机内部的数据表示,特别是补码的表示、特殊值的表示,以及不同编码的数据位数扩展方法;
- 熟悉补码的加减法运算规则,并能应用
- 熟悉常见ASCII码和BCD码
- 理解汇编语言中的数据类型
1.1 微型计算机
1、微型计算机系统包括硬件系统和软件系统。
硬件系统包括计算机和外设,软件系统分为系统软件和应用软件。
CPU(微处理器)包括运算器、控制器、内部总线、寄存器组。
应用:要会举外设的例子(键盘鼠标打印机等),同时要注意针对CPU的外设就是除了CPU以外的所有东西(包括内存什么的)
2、微型计算机主要性能指标
- 主频:CPU基本时钟频率
- 时钟周期:CPU工作的最小时间单位
- 字长:CPU一次能处理的二进制信息的位数(8086是16位)
1.2 汇编语言及其特点
1、机器语言
- CPU只能识别和执行机器指令,即二进制代码。
- 不同的CPU有不同的指令系统。
- 由于机器语言直接作用于硬件,所以执行效率很高,但编写、读取都很麻烦。
2、汇编语言
- 汇编语言与机器语言一一对应
- 汇编语言指令系统包括汇编指令、伪指令、宏指令
汇编程序和汇编语言源程序的区别?
汇编语言源程序是我们所写的代码,而汇编语言源程序其实相当于高级语言的编译器,在汇编中叫做汇编器,也叫汇编程序,是用来编译源程序的软件。
1.3 数据表示
1、负数补码
所有位都为1的时候是-1;真值为0的时候是该范围下的负数最小值。也就是跟整数是反着的(毕竟计算机不知道什么正负)
2、有符号数的位数扩展方法
- 对于原码扩展,不管符号位,都补0
- 对于补码扩展,符号位是0补0,是1补1
3、常用ASCII码(记)
30H —— 0
41H —— A
61H —— a
24H ——$
20H —— 空格
0AH —— 换行
0DH —— 回车
第二章 8086处理器
本章目标:
- 常用寄存器的功能
- 理解物理地址、段地址、偏移地址、逻辑地址的关系
2.1 常用寄存器
1、通用寄存器:
- AX —— 累加器,常作隐含操作数
- BX —— 基地址寄存器,常作地址指针
- CX —— 计数器,常存放计数值
- DX —— 数据寄存器,常与累加器配合
- SI —— 源变址寄存器,保存源操作数地址
- DI —— 目的变址寄存器,保存目的操作数地址
- SP —— 栈顶指针,只指向栈顶
- BP —— 堆栈指针,可保存堆栈任意位置地址
2、段寄存器
- CS 代码段寄存器 —— 用来存放要执行的代码指令,IP指向下一条要执行的指令的偏移地址(CS:IP)
- DS 数据段寄存器 —— 用来存放数据段首地址
- ES 附加段寄存器 —— 也是存数据
- SS 堆栈寄存器 —— 用来存放程序运行中需要被临时保护的数据
3、专用寄存器
- IP 指令指针寄存器 —— 保存下一条指令地址
- FLAG 标志寄存器 —— 仅用到9位
3.1 常用标志位
CF 进位标志位,有进借位为1
OF 溢出标志位,有溢出为1
SF 符号标志位,运算结果为负则为1
ZF 零标志位,运算结果为0则为1
2.2 物理地址
- 物理地址是每个存储单元的唯一的编号
- 地址总线20位,则可寻址主存空间为2^20 = 1MB
- 机器字长16位,则可直接寻址空间为2^16 = 64KB
1、存储器的分段管理
- 段的起始:每个段首地址必须是16的倍数
- 段的容量:每个逻辑段最大容量可以达到64KB
- 各个逻辑段之间可以重叠
- 1MB空间最多分为2^20/16=64K个段
- 1MB空间最少分为2^20/64K = 16个段
- 逻辑地址——段地址:有效地址(EA)
2、数据的存取方法
基本原则:低地址单元存放低字节数据,高的存放高的。注意读取的时候数据时什么类型
3、分段管理下的访问存储器
段寄存器 —— 对应的指针寄存器
CS —— IP
DS —— BX,SI,DI
ES —— DI
SS —— SP,BP
第三章 8086指令系统
本章目标:
- 7种寻址方式
- 常用指令——格式、功能、结果、对标志位的影响
3.1 寻址方式
- 立即数寻址方式:就是源操作数是一个数字。优点 不需要访存,速度快;缺点 不可以修改,通用性差。目的操作书不可以是立即数
- 寄存器寻址方式:mov ax,bx这种。可以用通用寄存器和段寄存器,但不能用专用寄存器(IP\FLAG)。操作数在CPU中,也不需要访存。
高级语言中的x=y,用汇编写需要mov ax,y ,mov x,ax - 直接寻址方式:操作数为存储单元,比如mov ax,[100H]这种。默认段地址是DS。
假设X为定义的符号地址,那么mov ax,X就跟mov ax,[X]一样了 - 寄存器间接寻址:一个操作数只有一个间址寄存器,如mov ax,[BX]
- 寄存器相对寻址:mov ax,[bx+100H];mov ax,[bx][100H];mov ax,100H[ax]表示的是一样的
- 基址变址寻址方式:基址寄存器BX\BP,变址寄存器SI\DI
- 相对基址加变址:三个相加
3.2 常用指令
数据传送类指令,不影响标志位的状态
-
mov dst,src。其中dst不能为立即数,立即数也不能为段寄存器赋值;两个操作数不能同时为段寄存器,也不能同时为地址;CS不能为目的操作数,IP不能为操作数
注:两种操作数类型不确定时,需要强制类型。如mov[bx],1就是错误的 -
add adc
-
inc dec 自增自减,对cf无影响
-
sub sbb
-
cmp指令用dst减src,但对两个操作数都没有影响
-
mul 乘数。如果乘数是8位,则默认被乘数是al,结果放在ax中;如果乘数是16位,则默认被乘数是ax,结果放在dx:ax中
-
imul
-
neg求补。注意是全位置取反加一,跟补码不一样,用来求相反数的
-
div 除数。如果除数是8位,则被除数为ax16位,ah存余数,al存商;如果除数是16位,则被除数是dx:ax,ax存商dx存余数
第四章 编程
本章目标:
- 记住代码程序标准格式
- 会用伪指令
- 会四个常用dos功能调用
4.1 程序格式
Data Segment
…………
Data ends
Code Segment
Assume ds:Data,cs:Code
Start:mov ax,Data
mov ds,ax
……
mov ax,4c00h
int 21H
Code ends
end start
4.2 伪指令
伪指令并不会执行,只是提供汇编信息。
比如DW,DB,DD,SEGMENT,ASSUME等
-
通配符:?。只分配存储空间,而不赋初值
-
连续一段空间:DUP复制说明符。
DATA1 DB 100 DUP(?)
BUF DB 10,?,10 DUP (“$”) -
常量:用equ
-
变量:A1 DB 10
A2 DW NUM, 100H, -1(这样100h和-1各占一个字节)
A3 DD 4*8 (32=20H放在内存中) -
字符串:用DB,存ASCII码
-
等号=:只能定义数值,但可对一个符号名重复定义
-
org定位:ORG 100H,其后的数据从指定位置开始存放
4.3 DOS功能调用
使用方法:1、设置入口参数(AH)2、INT 21H调用相应模块 3、获得输出参数
- 01号:单字符输入
mov ah,01h
int 21h
输入后,al即为输入字符的ASCII码,注意有些输入多个值相加,要减掉30H - 02号:单字符输出
mov ah,02h
mov dl,db的字符
int 21h
即输出放在dl中的字符 - 09号:字符串输出
lea dx,db的字符串
mov ah,09h
int 21h
注:字符串需要以$结束 - 0A号:字符串输入
lea dx,缓冲区buf
mov ah,0ah
int 21h
注:由于回车也保存在缓冲区,所以如果定义10长度的话,只能输入9个字符。如果输入的字符串最后需要输出,可以初始化为$
例:输入字符串,并回车显示出来
DATA SEGMENT
BUF DB 10, ? , 10 DUP("$")
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA, CS:CODE
START:
MOV AX,DATA
MOV DS,AX
;输入
LEA DX,BUF
MOV AH,0AH
INT 21H
;换行
MOV DL,0DH
MOV AH,02H
INT 21H
;因为buf的第一个字节放的是10
LEA DX,[BUF+2]
MOV AH,09H
INT 21H
;结束
MOV AX,4C00H
INT 21H
CODE ENDS
END START
第五章 汇编语言程序设计
本章目标:
- 顺序、分支、循环结构
- 内存单元的指定访问
- 求最大最小值
- 求数量
- 求长度
- 求和显示
5.1 一些常见的逻辑运算
- and al,0fh
清空高四位,和减30h一样,把输入的字符转成数字 - xor cx,cx
清空cx
5.2 常见的程序代码
- 输入数字到X中
x db ?
mov ah,01h
int 21h
sub al,30h
mov x,al
- 求x-y的绝对值
x db ?
y db ?
;若是有符号数
mov al,x
sbb al,y
jge exit
neg al
exit:
接口部分(8255和8253)
看我兄弟的博客吧:控制字
大概只考控制字