AX(累加器) BX(基址寄存器) CX(计数器) DX(数据寄存器) ;可以分8位使用。 指针及变址寄存器: SP(堆栈指针寄存器) BP(基址指针寄存器) SI(源变址寄存器) DI(目的变址寄存器) IP(指令指针寄存器):用来存放下一条要执行指令在内存中代码段中的偏移地址。 主存储器 - 主存的基本存储单位是位(bit),它能容纳一个二进制数的0或1 - 字节编址:以字节为最小寻址单位。 - 8086的最大寻址空间1M - 字的存放形式“低位在前,高位在后” - “对准字”和“不对准字” 堆栈 在内存中开辟出一片存储区,采用一端固定,另一端活动的方式存取数据 进栈指令 PUSH 格式: PUSH OPS 功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈。 (SP)-2 -> SP 例:假设(SP)=1000H (AX)= 1234H PUSH AX 执行后:(SP)=0FFEH 注:PUSH AL ;错误 PUSH 0003H ;错误 出栈指令 POP 格式: POP OPD 功能:将栈顶元素(字)弹出送至寄存器、段寄存器(CS除外)或存储器中。 (SP)+2 -> SP 例:设 (BX)=2004H POP BX 执行后: (BX)=1234H (SP)=1000H 注:PUSH CS ;正确 POP CS ;错误 存储器的分段管理 - 地址表示的一对矛盾: 直接寻址能力为1M (字节); 而寄存器是16位结构的。 - 解决方法: 引入了存储器“分段”的概念,即把1M字节内存空间分成若干段。每段最大可达64K字节--可由16位寄存器进行寻址。 段的起始地址成为“段基址”,要访问的单元距段基址的距离(字节数)为“偏移量”(Offset)。 程序设计时,使用的是逻辑地址。逻辑地址由“段基址”和“偏移量”构成(均为16位)。 “段基址”由段寄存器CS、DS、SS和ES提供; “偏移量”由BX、BP、IP、SP、SI、DI或根据寻址方式计算出的有效地址EA(Effective Address)提供。 - 注意: ①每个存储单元有唯一的物理地址,但它却可由不同的“段基址”和“偏移量”组成。例如: 1200H:0345 -> 12345H 1100H:1345 -> 12345H ② 除非专门指定,一般情况下,段在存储器中的分配是由操作系统负责的。 例1:设(CS)=8000H (IP)=0100H 问下一条要执行的指令的物理地址PA? (CS)内容左移4位+(IP) PA = 80000H+0100H=80100H 例2:设(DS)=1000H 该数据段中偏移量为0200H处的物理地址PA? (DS)内容左移4位+偏移量 PA = 10000H +0200H =10200H 例3:设(SS)=1000H (SP)=2000H 问该堆栈段栈顶的的物理地址PA? (SS)内容左移4位+(SP) PA = 10000H +2000H =12000H 数值数据在机器内的表示形式 8086的两个规定: - 数值数据均指无符号定点数 - 有符号数则一律采用n位二进制补码表示。 - 8086中,16位补码的表示范围: 7FFFH ~~ 8000H 注:机器在进行算术运算时,总是把参加运算的用补码表示的操作数作为无符号数处理。 字符数据在机器内的表示形式 ASCII码 (美国信息标准交换码) - 字符数据是以ASCII码形式存放在内存中的。 例如 “1” 就是 31H “A” 就是 41H BCD码 定义:利用二进制形式来表示十进制数。 利用4位二进制数(0000B~1001B)来表示十进制数(0~9) 例如: 19 = 00011001BCD = 000010011B 标志寄存器 1、状态标志:表示前面的操作执行后,算术逻辑部件处于怎样一种状态。 例如,是否产生了进位,是否发生了溢出等等。程序中,可以通过对某个状态标志的测决 定后面的走向及操作。 零标志ZF(Zero Flag):若运算结果为0,则ZF=1;否则ZF=0。 例1:MOV AL, 4 SUB AL, 4 例2:XOR AX, AX 执行后,ZF也一定为1。 进位标志CF(Carry Flag): 它反映: 加法时,最高位(字节操作时的D7位,字操作时的D15位)是否有进位产生。 减法时,最高位(字节操作时的D7位,字操作时的D15位)是否有借位产生。 例如: MOV AL, 3; SUB AL, 4; 执行后,CF=1。 奇偶标志PF(Parity Flag): 若运算结果低8位中“1”的个数为偶数,则PF=1;否则PF=0。 例:MOV AL, 2 ADD AL, 1 执行后,PF位为1。 辅助进位标志AF(Auxiliary carrry Flag): 也称“半进位标志”,它反映: 加法时,第3位向第4位有进位; 减法时,第3位向第4位有借位。 溢出标志OF(Overflow Flag): 若运算过程中发生了“溢出”,则OF=1。 定义:运算结果超出计算装置所能表示的范围,称为溢出。 判断方法之一【逻辑】: 溢出=最高位进位 ⊕ 次高位进位 符号标志SF (Sign Flag): 当运算结果的最高位为1时SF=1,否则SF=0。 例:分析执行下述两条指令后,以上六个标志位的变化。 MOV BL,58H ADD BL,4AH 解: 0101 1000B + 0100 1010B 1010 0010B CF=0 SF=1 OF=1 PF=0 ZF=0 AF=1 2、控制标志(3位): 每一位控制标志都对一种特定的功能起控制作用。可以通过专门的指令对其进行“置位”(Set)或“复位”(Reset)。 中断标志IF(Interrupt Enable Flag): 如果IF置“1”,则CPU可以接受可屏蔽中断请求;反之,则CPU不能接受可屏蔽中断请求。 指令系统中有两条专门的指令可以置“1”或置“0” IF标志位: STI 使IF置“1”,即开放中断。 CLI 使IF清“0”,即关闭中断 方向标志DF(Direction Flag): 用于串操作指令中的地址增量修改(DF=0)还是减量修改(DF=1)。 STD CLD 跟踪标志TF(Trap Flag): 若TF=1,则CPU按跟踪方式(单步方式)执行程序。 3、标志位寄存器的操作 - 传送 LAHF 功能:将标志位寄存器的低8位送入AH中,即: (FLAGS)7~0 -> AH 例:执行前 (FLAGS)=0485H (AX)=0FFFFH 执行后 (FLAGS)=0485H (AX)=85FFH SAHF 功能:将AH的内容送入标志位寄存器的低8位中,即: AH ->(FLAGS)7~0 - 栈操作 PUSHF POPF 例: MOV AX,0FFFFH PUSH AX POPF 结果:(FLAGS)=0FFFFH
|