一、计算机语言
二、计算机运算基础
三、微型计算机的结构
1、8086微型处理器的结构
1.1、内部结构
执行单元(EU):
计算指令将要寻址的内存单元的有效地址,然后送到总线接口单元
完成指令规定的操作
总线接口单元(BIU):
根据EU的请求,形成实际地址,完成CPU与存储器或I/O接口之间的数据传送
1.2、寄存器和标志
1.2.1、通用寄存器
16位
存放一般性数据
主要功能:保存CPU分析和执行时产生的中间结果
说明 | |
---|---|
AX = AH + AL | 主累加器 |
BX = BH + BL | 基址寄存器 |
CX = CH + CL | 计数寄存器 |
DX = DH + DL | 数据寄存器 |
1.2.2、指针与变址寄存器
说明 | |
---|---|
SP | 堆栈指针 |
BP | 基址指针 |
SI | 源变址寄存器 |
DI | 目的变址寄存器 |
IP | 指令指针 |
1.2.3、段寄存器
说明 | |
---|---|
CS | 代码段寄存器 |
SS | 堆栈段寄存器 |
DS | 数据段寄存器 |
ES | 附加段寄存器 |
1.2.4、标志寄存器
说明 | |
---|---|
CF | 进位标志,当向最高位进位和借位时为1,可用来判断无符号数是否发生溢出 |
OF | 溢出标志,反映有符号数是否发生溢出 |
AF | 辅助进位标志,第三位向前的进位或借位 |
PF | 奇偶标志,低八位中1的个数是奇数还是偶数,偶数为1 |
SF | 符号标志,最高位的状态 |
ZF | 零标志,结果为0则为1 |
1.2.5、双符号位
对参与运算的数据扩展一位符号位,拓展的符号位与原符号位相同
如果结果的双符号位一致,则没有发生溢出,反之,发生溢出
1.3、寻址方式概述
1.3.1、基本知识
存储器是一维线性结构
内存单元的地址(物理地址或实际地址)
存储单元的内容:一个存储单元的有效信息。存储器的内容是取之不尽的,取出后该单元仍保持原来的内容不变,只有存入新的信息后,原来的信息自动消失
1.3.2、8086系统存储器的机构特点
可寻址空间:1MB(20位)
存储方式:按字节存储,20位
一个字节八位,一个字等于两个字节16位
1.2.3、分段结构
为什么?以8086为cpu的计算机的内存最大容量
为1MB,需要20位物理地址,但是8086是16位cpu,20位存储器地址无法直接通过16位寄存器给出
什么是?将1MB的存储空间划分为长度不超过64KB的逻辑段,段内地址连续,段与段之间相互独立,每个段有一个基本地址(段首地址),叫做段地址
,段内存储单元地址通过段地址+段内偏移地址(该段距离段地址的字节数)得到
1.2.4、实际地址的产生
逻辑地址:
段基址和段内偏移地址组成
段基址:段内偏移地址
实际地址(物理地址):
存储器的绝对地址,20位,
= 段基址 * 16 + 段内偏移地址
= 段基址 * 10H + 段内偏移地址
段首地址
段基址 * 16
1.4、寻址方式
1.4.1、固定寻址
指令要存做的数据在指令中没有明确给出,当隐含在指令中
1.4.2、立即寻址
指令要操作的数据包含在指令码中
1.4.3、寄存器直接寻址
在指令给出寄存器的名字,要操作的数据在该寄存器中
1.4.4、存储器寻址
1.4.4.1、存储器直接寻址
[ 有效地址 ]
1.4.4.2、寄存器间接寻址
[ BX/SI/DI ]
1.4.4.3、基址寻址
[ BX+位移量 ]
[ BP+位移量 ]
1.4.4.4、变址寻址
[ SI+位移量 ]
[ DI+位移量 ]
1.4.4.5、基址变址寻址
1.4.5、注意
在存储器寻址方式中只给出了偏移地址,段地址是隐含的,一般是DS,只有基址寄存器是BP时,段寄存器是SS
除源操作数为立即寻址方式外,其中一个操作数的寻址方式必须是寄存器直接寻址
四、汇编语言
1、汇编语句格式
1.1、字符集
1.2、格式
[ 标号 ] 操作符 操作数 [ ;注释 ]
标号:程序设计人员自己定义的标识符号,用于表示内存单元的地址
标号的规则:
第一个字符不能是0~9的数字,机器指令语句中标号必须以冒号结束,伪指令语句中的标号不允许以冒号结束
标号的本质:内存单元的逻辑地址
标号的三个属性:
1、段值属性:在数据段中定义的标号段值是DS的值,在代码段中定义的标号的段值是CS的值,可以用SEG取得
2、偏移量属性:标号所在段其实偏移地址到它的存放位置之间的字节数,可以用OFFSET取得
3、类型属性:DB、DW等,也可以是表示机器指令代码中的地址时的NEAR、FAR,可以用TYPE得到
操作符:可以是指令助记符、伪指令助记符、宏指令符号
操作数:操作符的对象,可以是数据本身、标号、寄存器名、算术表达式
2、汇编语言中数据的表示方法
2.1、数据在机内的表示
数据的浮点表示法(IEEE754)——以短实数为例
eg. 36.625
(1)转换为二进制 100100.101
(2)规格化后为 1.00100101 * 2^5
(3)阶码为(规格化后的2的多少次方为阶码) 101
(4)加过余量127后(阶码加) 0111 1111 + 0000 0101 = 1000 0100
(5)尾数(23位,规格化后的小数部分,不足23位用0补齐)001 0010 1000 0000 0000
(6)符号&阶码&尾数 0100 0010 0001 0010 1000 0000 0000
4 2 1 2 8 0 0
判断浮点数的大小:
先看符号,再看阶码(阶码大则绝对值大),最后看尾数
2.2、数据的书写形式
3、运算符
3.1、算术运算符
±*/
MOD:取余
SHL:左移
SHR:右移
3.2、逻辑运算符
AND、OR、XOR、NOt
3.3、关系运算符
说明 | |
---|---|
EQ | 相等 |
NE | 不等 |
LT | 小于 |
GT | 大于 |
LE | 小于等于 |
GE | 大于等于 |
3.4、分析算符
说明 | |
---|---|
SEG | 取标号所代表的地址的段地址 |
OFFSET | 取标号所代表的地址的偏移量 |
TYPE | 取标号所代表的内存单元的类型值 |
SIZE | 取变量分配的内存单元的字节数 |
LENGTH | 取变量分配的内存单元数(若定义的字节类型的数据则为几个字节;若定义的子类型的数据则为几个数据) |
3.5、组合算符
说明 | 格式 | |
---|---|---|
PTR | 用来建立或临时改变存储器操作数 的类型 | NEWT PTR 标号或存储单元 |
THIS | 通常与EQU伪指令连用,用来定义新的标号,其段基址和偏移量和紧跟其后的标号相同 | THIS 类型 eg. A2 EQU THIS BYTE B1 DW 3421H |
3.6、字节分离算符
用于将一个表达式的高字节和低字节分开
LOW 取低字节
HIGH 取高字节
4、伪指令
4.1、符号定义伪指令
给自定义符号定义一个数值或定义为其他符号名
等价伪指令EQU:
格式: 标识符 EQU 表达式(机器指令助记符、为指令助记符、寄存器名称、各种运算符号、常数)
等号伪指令=:
格式: 标识符 = 表达式(表达式、常数)
区别:
1、=伪指令只能代表表达式或常数,不能是指令助记符
2、EQU定义的标识符不能重定义,而=定义的可以
4.2、数据定义伪指令
说明 | |
---|---|
DB | 字节,8位 |
DW | 字,16位 |
DD | 双字,32位 |
DQ | |
DT |
格式: 标号 DB/DW/DD/DQ/DT 表达式
DUP 复制操作符:
格式:个数 DUP(预置的值)
在汇编语言的指令语句中适用标号是,必须与其类型相匹配
4.3、段定义伪指令
说明 | |
---|---|
SEGMENT | 段首说明伪指令 |
ENDS | 段结束伪指令 |
ASSUME | 段假定伪指令 |
ORG | 代码定位伪指令 |
4.4、其他伪指令
说明 | 格式 | |
---|---|---|
EVEN | 使位置计数器定位在偶地址单元 | |
.RADIX | 改变默认进制 | |
NAME | 为程序模块命名 | |
END | 源程序结束 | END [ 标号 ] |