第一章 汇编语言基础知识
1.1 寄存器
寄存器是CPU内部高速储存单元,它们提供数据和地址。
16位Intel 8086/80826 CPU中的寄存器为:
AX BX CX DX
SI DI BP SP
存储器地址
存储器地址是存储器中存储单元的编号
每个存储单元存放一个字节量的数据 一个字节B(Byte)=8个二进制位b(bit)
采用十六进制数来表达地址 Intel 8086具有1兆字节(1MB)存储器容量
存储器地址表示为:00000H ~ FFFFFH 其中大写H(或小写h)表示是十六进制数
端口
IO端口是接口电路中寄存器的编号
采用十六进制数来表达端口
Intel 8086支持64K个8位端口
I/O地址可以表示为:0000H ~ FFFFH
1.2 数据表示
(进制转换部分略)
BCD码
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
真值:现实中真实的数值
机器数:计算机中用0和1数码组合表达的数值
无符号数:只表达0和正整数的定点整数
有符号数:表达负整数、0和正整数的定点整数 符号位需要占用一个位 常用机器数的最高位 0表示正数、1表示负数
定点数:固定小数点的位置表达数值的机器数
定点整数:将小数点固定在机器数的最右侧表达的整数
定点小数:将小数点固定在机器数的最左侧表达的小数
浮点数:小数点浮动表达的实数
补码
有符号整数在计算机中默认采用补码
最高位表示符号:正数用0,负数用1
正数补码:直接表示数值大小(同无符号数)
负数补码:将对应正数补码取反加1
[105]补码=01101001B
[-105]补码=[01101001B]取反+1 =10010110B+1=10010111B
8位二进制补码表示的数值范围:-128~+127
16位二进制补码表示的数值范围:-2^15~+2^15-1
32位二进制补码表示的数值范围:-2^31~+2^31-1
负数真值“取反加1”得机器数补码
负数补码“取反加1”得到负数真值
补码:11100000B 真值:-([11100000]求反+1)=-(00011111+1) =-00100000=-2^5=-32
1.3 主存空间的分配
总线接口单元BIU:负责读取指令和操作数
执行单元EU :负责指令译码和执行
8086寄存器
8086微处理器
总线接口单元BIU:负责读取指令和操作数
执行单元EU :负责指令译码和执行
数据寄存器
AX——累加器,算术逻辑运算。
BX——基址寄存器,存放储存器地址。
CX——计数器,循环等。
DX——数据寄存器,常用来储存双字数据的高16位。
变址寄存器用于存储器寻址提供地址
SI——源变址寄存器
DI——目的变址寄存器
指针寄存器用于寻址内存堆栈的数据
SP——堆栈指针寄存器,指示栈顶
BP——基址指针寄存器,指示栈底
标志寄存器
指令指针IP
指示代码段中指令的偏移地址,与代码寄存器CS常用,通过CS:IP寄存器控制指令序列。
段寄存器
CS:代码段起始地址
SS:堆栈段起始地址
DS:数据段
ES:附加段
计算机中信息的单位
二进制位bit:一位二进制数0/1
字节byte:8个二进制位D7-D0
字word:16位,2个字节,D15-D0
双字Dword:32位,4个字节,D31-D0
一个存储单元除了具备唯一的物理地址外还有多个逻辑地址。
物理地址:00000H~FFFFFH
处理器利用CS:IP取得下一条要执行的指令
利用SS:SP操作堆栈顶的数据
数据段:DS:EA
逻辑段的分配:
指令序列:代码段
堆栈:堆栈段
数据默认在数据段,也有在附加段,串操作的目的区必须在附加段
没有指明时,一般的数据访问在DS段;使用BP访问主存,则在SS段
CS: ;代码段超越,使用代码段的数据
SS: ;堆栈段超越,使用堆栈段的数据
DS: ;数据段超越,使用数据段的数据
ES: ;附加段超越,使用附加段的数据
立即数寻址(imm)
imm——8/16位 00~FF/0000~FFFF
寄存器寻址
MOV BX,AX
存储器选址
直接寻址
MOV AX,[2000H]
AX<-DS:2000H
间接寻址
MOV AX,[SI]
AX<-DS:[SI]
相对寻址
有效地址=BX/BP/SI/DI+8/16位位移量
MOV AX,[DI+06H] ;AX←DS:[DI+06H]
MOV AX,[BP+06H] ;AX←SS:[BP+06H]
基址变址寻址
有效地址=BX/BP+SI/DI
BP默认是SS
相对基址变址寻址
有效地址=BX/BP+SI/DI+8/16