2.15k likes | 2.39k Views
微机系统原理及应用. 第一章 概述 第一节 引言. 从 8088 、 8086 到 80386 以上直至 奔腾 ,只有 16 位与 32 位的区分,没有本质区别。芯片的指令 80% 以上是完全相同的,芯片的实地址工作方式几乎完全一致,所以 8088 、 8086 是 Intel x 86 系列的基础,要学习 x86 系列的最好办法就是从 8088 、 8086 入手。 PC 机的存储器( M )容量很大,但基本存储单元的工作原理不变;存储器与 CPU 的接口原理、方法没有变。 本书从 8088 、 8086 入手学习 PC. 第一节 引言. 一、计算机中的数制
E N D
微机系统原理及应用 第一章 概述 第一节 引言
从8088、8086到80386以上直至奔腾,只有16位与32位的区分,没有本质区别。芯片的指令80%以上是完全相同的,芯片的实地址工作方式几乎完全一致,所以8088、8086是Intel x 86系列的基础,要学习x86系列的最好办法就是从8088、8086入手。 • PC机的存储器(M)容量很大,但基本存储单元的工作原理不变;存储器与CPU的接口原理、方法没有变。 • 本书从8088、8086入手学习 PC 第一节 引言
一、计算机中的数制 • (一)二进制数的基本特点 • 1.具有两个不同的数字符号,即0和1。 • 2.逢二进位。 • 任意一个二进制数可以按“权”展开
1. 0至9 和 A至F。 • 2. 逢16进位。 • ① 16进制数转化为2进制数。 ② 2进制数转换为16进制数。 (二)16进制数
一)二进制编码的十进制数(BCD) 计算机的输入与输出是用十进制表示 • 二)字母与字符的编码ASCⅡ:实用标准信息交换码,用7位二 进制编码,可表示128个字符。 用一个字节来表示一个ASCⅡ字符0至9的ASCⅡ码为 30H至39H大写字母A至Z的ASCⅡ码为 41H至5AH小写字母a至z的ASCⅡ码为 61H至7AH • 三) 汉字的编码 这个字符集中的任何一个图形、符号及 汉字都是两个7位字节表示的(每个字节的 最高位置为0)。 二、二进制编码字符是用若干位二进制编码的组合表示字符、数,这称为二进制编码。 P507
逻辑运算: • 1. “与”运算(AND) 3. “非”运算(NOT) • 2. “或”运算(OR) 4. “异或”运算(XNOT) • (一)二进制加法 • 它的运算规则如下: • 0+0=0 例如: • 0+1=1+0=1 • 1+1=0 进位1 • 1+1+1=1 进位1 • (二)二进制减法 • 它的运算规则如下: 三、二进制的运算计算机可进行两种基本的算术运算:加法和减法。利用这两种方法就可以进行乘法、除法以及其它数值运算。
(三)二进制乘法 • 它的运算规则如下: • 0*0=0 例如: • 0*1=0 • 1*0=0 • 1*1=1 • 由于此乘法的重复性差,不便 • 于在机器中实现,现在下面 • 用另外两种方式将运算实现。 0-0=0 借位 1-1=0 例如: 1-0=1 0-1=1 借位
1. 被乘数左移法 乘数 被乘数 部分积 1101 1111 乘数最低位 11110 为1,把被乘数 加部分积, 再 把被乘数左移 乘数为0,不加, 111100 被乘数左移 同上 1111000 同上 n*n2n位 2n位加法器
2. 部分积右移法 • 乘数 被乘数 部分积 • 1101 1111 • 乘数为1,加被乘 • 数部分积右移 • 0,不加部分积 • 右移 • 1,加被乘数部分 • 积右移 • 1,加乘数右移 • 2个n*n乘积2n位 • 此种方法只需要n位加法器。
(四) 二进制的除法 • 例如: • 四、带符号数的表示法 • (一)机器数与真值 • 数有正、有负,那么负数的符号是怎么表示的呢? • 通常一个数的最高位为符号位,若字长为8位,则
为符号位。符号位用“0”表示正,用“1”表示负。为符号位。符号位用“0”表示正,用“1”表示负。 • 例如: • 连用一个符号位在一起的一个数,称为机器数。 • 它的数值称为机器数的真值。在机器数中符号有三种 • 表示法:原码,反码和补码。 • (二)原码 • 正数的符号位用“0”表示,负数的符号位用“1”表示的 • 表示法称为原码。 • 例如: • 符号值 数值 • • (三)反码 • 正数的反码与其原码相同,负数的反码是它的正数按位
取反(连同符号位)而形成的。 • 例如: • 注: 符号位 取反的部分 • 反码的特点: • 1. “0”有两种表示法 • 2. 8位二进制反码所表示的数值范围为+127-127。 • 即 , • 3. 当一个符号数由反码表示时,最高位为符号数。 • 当符号数为“0”时,后面的七位为数值部分; • 当符号数为“1”时,后面的七位一定要把它们按位取反,以 • 表示它的二进制值。
(四)补码 : • 正数的补码表示与原码相同; • 负数的补码表示为它的反码,且在最后位(即最低位)加1所形成。 例如: • 8位带符号位的补码特点:1. ; • 2. 8位二进制补码所表示值为+127 -128; • 3. 一个用补码表示的二进制数 • 当符号位为“0”时,其余7位即为此数的真值; 当符号位为“1”时,其真值为其余7位按位取反,且在最 低位处加1后最终所得的结果。 例如:
采用补码表示的目的在于可以把减法转换成加法。采用补码表示的目的在于可以把减法转换成加法。 • 补码的加法规则: ;补码的减法规则: 。例如:下面举一个钟表的例子:将钟从10点拨至6点有正拨、倒拨两种方式。既可倒拨4个小时,亦可顺拨8个小时。 • 10-4(倒拨)=10+8 (顺拨) 则12称为模。
(10-4)与(10+8)对模12是同余的,-4与+8对模12互补。将两者分别用二进制加、减法计算释例:(10-4)与(10+8)对模12是同余的,-4与+8对模12互补。将两者分别用二进制加、减法计算释例: • 自然丢弃 一般说来,若Z=nK+Y(n为整数),则称Z与Y对模K互补,记为ZY。
第三节 计算机基础一、计算机的基本结构 • 二、名词术语1. 位(Bit) • 位是计算机所能表示的最基本最小的数据单元,位就是一个 二进制位,有0、1两种状态。 • 2. 字(Word)和字长 • 字是计算机内部进行的数据处理的基本单位,每个字的位数 为字长。 • 3. 字节(Byte) • 1Byte=8Bit三、指令程序和指令系统 指令:计算机执行的各种操作的命令的形式写下来的方式。 一条指令对应着一种操作。它由两部分组成:操作码字段和 操作数字段。 操作码表示计算机所要执行的操作;操作数表示参加 操作的数的本身或操作数所在的地址。
指令的格式为 一地址 二地址 • 8088指令的格式大多数为双操作指令。因为计算机只识别二进制数,所以计算机的指令系统中的所有指令都必须以二进制编码的形式来表示,这就是指令的机器码。例如 数据传送指令mov AL,7它的二进制机器码为 1011 0000 (mov AL,n) 0000 0111 ( n=7 )用助记符来表示操作码,用符号或符号地址来表示操作数地址的方式 称为汇编语言,它与机器指令是一一对应的。(例如 Mov,Add,Jmp等指令)当机器开始执行程序,给PC程序计数器赋以程序第一条指令所在的地址,然后每取出一个指令,PC中的内容自动加1,并指向下一条指令的地址,以保证指令顺序执行。值得注意的是只有在执行Jmp,Call,Interrupt时,PC才转到所需要的地方。 操作码 操作数... 操作数...
四、模型机(一) CPU结构 (P18 如图1-9 1-10) (二) 存储器 • 不同二进制数 地址 内容 • 00H 01H DB FFHCPU控制 信号注意:每一个存储单元的地址和这个地址中存放的内容是 完全不同等概念,千万不能混淆。 • 确定单元后就可以对这个单元的内容进行读或写的操作。 下面举例说明:1. 读操作 地 址 译 码 器 00H单元 01H单元 . . FFH单元 控制器
将04H单元格中的内容读出送至DR(数据寄存器)。 内容AR 00H 04H 04H FFH DB 读 地 址 译 码 器 00H单元 84H 1000 0100 FFH单元 控制器
2. 写操作AR 内容 00H DR 10H FFH DB 写 (三) 执行过程 简单说来就是取指令加执行指令。当机器开始执行指令时,把第一条指令所在地址赋给PC,然后就进入取指阶段,在取 指阶段从内存中读出的内容必为指令,由DR把它送至IR,然 后由指令译码器译码。开始执行将第一条指令的地址送PC 取指读内存(由DR) IR ID 译码PLA 地 址 译 码 器 00H 10H 26H 0010 0110 FFH 控制器
取指的基本格式为在一条指令执行完以后就可以立即执行下一条指令,减少了CPU为等待的时间,提高了运行速度。8088CPU功能上分为BIU和EU,即分别是总线接口和执行单元。它们可以重叠。举例:把两个十进制数7和10相加。Mov AL, 7 Add AL,10 HLT第一条指令 1001 0000(Mov AL, 7) 0000 0111 ( n=7 ) 取指 执行 取指 执行 …... 取指 取指 取指 取指 …... 等待 执行 执行 执行 …...
第二条指令 0000 0100 (ADD AL, n) 0000 1010 ( n=10 )第三条指令 1111 0100 ( HLT ) 三条指令5个字节。 将三条指令放入存储器,若是从00H开始的存储单元。 二进制 地址(十进制数) 内容0000 0000 00 mov AL,7 0000 0001 01 n=7 0000 0010 02 Add AL,7 0000 0011 03 n=10 0000 0100 04 HLT取第一条指令 取立即数 取第二条指令 取第二条指令第二字节及执行指令的过程五、软件 1011 0000 0000 0111 0000 0100 0000 1010 1111 0100
各种语言和它们汇编、编译、解释程序。 机器的监控管理程序(Moniter),调试程序 系统软件 (Delug),故障检查,诊断程序。 程序库。 操作系统。 软件 应用软件: 编制解决用户所碰到的各种实际问题的程序。 数据库及数据管理系统 由机器提供,为了使用和管理计算机
Intel 8088的结构CPU: 准16位微处理器 • DB : 8条 AB : 20条 采用40条引线封装 电源+5V 1M直接寻址 • 一、8088的寄存器结构 寄存器:由多个触发器可以组成一个多位寄存器。存储器:看作是一个寄存器堆,每个存储单元实际相当于一 个缓冲寄存器。二、8088存储器8088有20条地址总线, 220=1M,( 210 =1K),地址从00000FFFFF。 其寄存器为16位,8088对地址的运算只能是16位,寻址范围是0000 FFFFH 。1M存储器以64K为范围分为若干段。00000,00001,…. 0000E,0000F;64K个行 00010,00011,…. 0001E,0001F; • 00020,00021,…. 0002E,0002F;
00000,00001,…. 0000E,0000F;00010,00011,…. 0001E,0001F; • 00020,00021,…. 0002E,0002F; • 64K个行 • • • FFFF0, FFFF1, …. FFFFE, FFFFF • 16个列 • 00000H 由于它为小段的首地址,其低4位一定为0 • 00010H 段地址只取段起始地址高16位。64K个 这样,每一个存储单元都有唯一的20位地 • 段首地址 42230H 址,此地址称为该存储单元的物理地址。 • 42240H 0000 (左移4位) • + • FFFE0H • FFFF0H 16位段地址 16位偏移地址 20位物理地址 计算方法
16位段地址存放在段寄存器中,偏移量存放在IP、SP、DI、SI、BP(基数)中。当取指令时CS的地址+IP的16位偏移量=要取的指令的物理地址 当堆栈操作时SS的地址+SP的16位偏移量=堆栈操作的20位物理地址 当涉及到操作数时 在不改变段寄存器DS或ES地址+16位偏移量 的情况下,寻址最大=操作数的20位物理地址 范围是64K。64K 代码段64K 堆栈段64K 数据段64K 附加数据段 CS SS DS ES
第一节 8088的寻址方式 第二章 8088的指令系统
一、指令的格式 • 寻找操作数的方式称为寻址方式。 • 1. 操作数包含在指令中,即指令的操作数场就包含在操作数本 身中。此寻址方式称为立即寻址,这种操作数就称为立即数。2. 操作数包含在CPU的某一内部寄存器中,这种寻址方式称为 寄存器寻址。3. 操作数在内存的数据区中,此时指令中的操作数场包含着此 操作数的地址。 存储单元所在基地址(段寄存器) • 8088内存地址 • 段内偏移量EA • 指令的操作数场中规定的地址就是这个段内偏移量,又称为 有效地址EA。 • EA的构成有以下5种:直接地址:包含在指令中的16位地址偏移量构成EA • ————直接寻址方式 操作码 操作数 操作数 …...
间接地址:EA由CPU内某一个寄存器的16位内容构成————间接寻址方式 基址方式:基址寄存器BX或BP加上指令中的包含8位或16位位移量构成EA ————基址寻址方式 变址方式:由变址寄存器DI或SI和包含指令中的8位或16位 • 位移量构成EA • ————变址寻址方式 • 基址加变址方式:由一个基址寄存器BX或BP加变址寄存器SI或DI再加包含指令中的一个8位或16位 位移量构成EA • ————基址加变址寻址方式一、立即寻址 • 此方式所提供的操作数 例如 直接放在指令中,紧跟在 mov AX,im操作码一起放在码段区 域中。 imL imH AH AL
立即寻址主要用来给寄存器赋初值。 • 二、直接寻址 • 操作数的地址的16位偏移量直接包含在指令中,它与操作码 一起被放在码字段区域中,但操作数一般在数据段。它的地 址为数据段寄存器DS加上它16位地址偏移量。 例如: mov AX,[2000H] • 注意:在例题中我们遇到的[2000H]。当我们用AXBX或AXBX时,表示将AX中的内容送BX或将BX中的内 容送AX。而用AX[BX]或AX[n],表示[ ]中的是操 码 段 操作码 DS 低 高 00H 30 00 0 20H 数 据 段 30000 AX AH AL 32000 50 20
作数地址,把此地址单元的内容(操作数)送至AX中。作数地址,把此地址单元的内容(操作数)送至AX中。 • 物理地址=16d DS+EA • 三、寄存器寻址 操作数包含在CPU内部寄存器中,如AX、BX、CX、DX。 • 例如 已知 AX ,BX ,求执行程序后的AX。 • mov AX, BX • 四、寄存器间接寻址 其操作数是在存储器中,操作数的地址16位偏移量包含在SI、DI、BX、BP之一中。(一)以SI、DI、BX间接寻址 其操作数在数据段区域中 物理地址=16d(DS)+BX或SI或DI (二)以寄存器BP间接寻址 最终AX 30 64 12 34 12 34
其操作数在堆栈段区域中 • 物理地址=16dSS+BP • 五、变址寻址 变址寻址是以指定的寄存器内容加上指令给定的8位或16位 位移量和段地址作为操作数的地址。 物理地址=16d(DS) + (BX) + 8位或16位位移量 • 或(SI) • 或(DI) • 或= 16d(SS) + (BP) + 8位或16位位移量 • 六、基址加变址的寻址方式8088常把BX、BP看作基址寄存器,把SI、DI看作变址寄存器。 寻址方式:一个基址寄存器的内容+变址寄存器的内容+指令中8位或16位位移量+段地址 • 物理地址=16d(DS) +(BX) + (SI) + 8或16位位移量 • 或(DI)或=16d(SS) + (BP)+ (SI) + 8或16位位移量 或(DI)
在正常情况下,由基地址决定哪一个段寄存器作为地址指针。 用BXDS,BPSS。
1. 辅助进位标志A在字节操作时,则由低半字节(一个字节的低4位)向高半字节有 进位或借位; 在字操作时, 低位字节向高位字节有进位或借位, 则A=1, 否则A=0。 此标志用十进制算术运算指令中。2. 进位标志C当结果的最高位产生一个进位或借位,则C=1, 否则C=0。主要 用于多字节数的加法、减法,移位和循环指令也能够把存储器 或存储器中的最高位(左移)或最低(右移)放入C中。3. 溢出标志O在算术运算中, 带符号数的运算结果, 如果超出以下范围: • 字节 字 则O=1, 否则O=0。溢出和进位是两个不同的概念。溢出判断: 8 7 0 15 O D I T S Z A P C
同号相加, 若结果的符号位相反, 则溢出。 异号相减, 若结果的符号位与被减数相反, 则溢出。4. 符号标志S S的值与运算结果的最高位相同, 若最高位为1,则S=1,否则S=0。 由于8088中, 符号数是用补码表示的, S=0为正, S=1为负。5.奇偶标志P若操作数结果中“1”的个数是偶数, 则P=1, 否则P=0。6. 零标志Z若运算的结果为0, 则Z=1, 否则Z=0。7. 方向标志D若用指令置D=1, 则引起串操作指令为自动减量指令; • 若用指令置D=0, 则引起串操作指令为自动增量指令。 • 8. 中断允许标志I若指令中置I=1, 则允许CPU去接收外部的可屏蔽的中断请求; 若指令中置I=0, 则屏蔽上述的中断请求。I对CPU内部产生的中断不起作用。9. 追踪标志T
补充内容:操作码和寻址方式的机器语言表示方法操作码的机器语言表示补充内容:操作码和寻址方式的机器语言表示方法操作码的机器语言表示 • W位 是指示本指令是对字(W=1)还是对字节(W=0)操作;d值 在双操作数指令中才有效。8088指令规定双操作数指 令的两个操作数必须有一个操作数放在寄存器中;d位 指定寄存器用于目的操作数(d=1)还是源操作数(d=0)(8 16,高位字节按低位字节的最高有效位作符号扩展)。 当立即方式寻址时,S位表示符号扩展 当指令字节操作时,SW=00;当指令有16位立即数且作字操作时,SW=01;当指令有8位,但需要经符号扩展成16位,立即数作字操作时, 则SW=11。 寻址方式的机器语言表示8088用一个字节表示操作数的确寻址方式 它通常是机器指令的第二个字节 op d W
表示为 • 在双操作数指令的情况下规定必须有一个操作数在寄存中,该 寄存器由reg字段指定。mod与r/m是另一种操作数寻址方式。mod=11, 为寄存器方式, 由r/m的内容确定选用哪个寄存器;mod=00, 为元位移量字节的存储器寻址方式——直接寻址;mod=01, 为带一个位移量字节的存储器寻址方式; 指令中应有 • mod=10, 为带两个位移量字节的存储器寻址方式; • 如果出现段跨越,则必须加001 ,再加上110。 mod 01 10 reg reg reg r/m r/m r/m D16低位 D16高位 操作数 在 存储器 中 间接 寻址 D8 SEG
上面的寻址方式是指无段跨越前缀的情况下所用的隐含的段 寄存器,如果指令中指定段跨越前缀,则在机器语言中使用放在 指令之前的一个字节来表示, 如下: 001 seg 110 segment SEG 00 01 10 11 ES CS SS DS
置T标志, 使处理进入单步方式,以便于调试。在这个方式, CPU在每条指令执行以后产生一个内部的中断, 允许程序在每条执 行完以后进行检查。
8088的指令系统可分成6个功能: • • 数据传送 • •算术运算 • •逻辑运算 • •串操作 • •控制传送 • •处理器控制 • 指令符号:8位寄存器 AH,AL; BH,BL; CH,CL; DH,DL16通用寄存器 AX ; BX ; CX ; DX SP ; BP ; DI ; SI 堆栈指针 SP指令指针 IP (指向下一次要取出的指令)或PC(指向下一条即将要执行的指令)标志位 F目的和源变址寄存器 DI 、 SI
段寄存器 CS 、DS 、SS、ES通用寄存器 rAL或AX a源和目的操作数 src dst (存储单元) [ BX+SI+n ] [ BX+DI+n ] [ BP+SI+n ] [ BP+DI+n ] [ SI+n ] [ DI+n ] [ BP+n ] [ BX+n ] [ n ]---------- 直接r ---------- 寄存器源操作数地址 ADR ( src)存储单元的内容 [ ]OPRD 操作数
附加存储器段的内容 ES[ ]段寄存器 seg立即数 im 8位 n 16位 nn 32位 nnnn一、数据传送指令 分为4种: • 通用传送指令• 累加器专用传送指令 • • 地址—目的传送指令 • 标志传送指令 此类指令, 除了标志寄存器传送SAHF和恢复标志寄存器POPF指令以外, 对标志位无影响。(一)通用传送指令 此指令是唯一允许以段寄存器作为操作数的指令。(XCHG除外) • 1. Mov OPRD1, OPRD2 目的 源
它把一个字节B或字W操作数从源地址传送至目的地址。它把一个字节B或字W操作数从源地址传送至目的地址。 • 它能实现以下4种数据传送: CPU内部寄存器之间传送(除CS和IP以外)如 • 立即数传送CPU内部通用寄存器组给寄存器赋初值。 如 mov CL, 4 mov SI, 057BH mov [nn], a B/W [nn]=a mov a, [nn] B/W a=[nn]mov seg, src W seg=src mov dst, seg W dst=seg mov r, src B/W r=srcmov dst, r B/W dst=rmov r, im B/W r=immov dst, im B/W dst=im mov AL, BL mov CX,BX mov DS,BX mov DX,ESmov SI,BP
CPU内部寄存器(除CS和IP以外)与存储器之间的传送CPU内部寄存器(除CS和IP以外)与存储器之间的传送 • () 通用寄存器与存储器之间 如 mov AX, [SI] • mov [DI], CX 寄存器间接 • mov SI, BLOCK[BP] 变址 • () 段寄存器(除CS外)与存储器之间 如 mov DS, DAT[SI+BX] seg M • mov DEST[BP+DI], ES • 注意:mov指令不能实现存储单元之间的数据传送, 也不允许 两个段寄存器之间直接传送。 若需要把地址(段内地址位移量)为ARE1的存储单元的 内容, 传送至同一段内的地址为ARE2的存储单元可以 用CPU内部寄存器为桥梁来完成。 如 mov AL, ARE1 mov ARE2, AL • 如 mov BX, offset TABLE 通用rM seg M
把TABLE的偏移地址而不是内容送到BX寄存器。 • 若传送100个数据mov SI, OFFSET AREA1 mov DI, OFFSET AREA2 mov CX, 100 AGAIN: mov AL, [SI] mov [DI], AL INC SI INC DI DEC CX JNZ AGAIN • 其中OFFSET AREA1是指地址单元AREA1在段内地址偏移量。 又如 mov AX, Y[BP][SI]地址16d(SS)+(BP)+(SI)+Y的存储单元的内容送给AX。 其中OFFSET为属性操作符, 表示应把其后跟着的符号 地址的值(不是内容)作为操作数。能实现用立即数给存储单元赋初值(Mim)如 mov mask [BX] [SI], 2CH
2. 堆栈操作指令 在主程序中往往要调用子程序或要处理中断就要暂停主程序 的执行, 转去执行子程序(中断服务程序), 则机器必须把主程序 中调用子程序指令的下一条指令, 若第X1条指令为调用子程序 ,则它的下一条指令为X2的地址, 即PC或IP保留下来才能保 证当子程序执行完成以后返回主程序继续执行。另外, 还必须 保留调用子程序的主程序的中间结果标志位的状态。 • 口诀:先进后出, 后进先出。 • 8088中规定堆栈设置在堆栈段(SS)内, 用堆栈指针SP始终指向堆栈的 顶部, 即始终指向最后推入堆栈的 信息所在的单元。SP的初值规定 了所用堆栈的大小, 8088中所设置 的SP的初值, 逐渐靠近SS,堆栈的 最大容量为SP的初值与SS间的距 离。入栈指令 它是把一个字的源操作数, 送至栈的顶部。 主程序 转向子程序 执 行 子 程 序 X1 IP X2 通用主程序