1、第一章知识点微处理器是微型机的核心芯片,通常简称为 MP(Micro Processor) ,它是将计算机中的运算器和控制器集成在一个硅片上制作的集成电路。这样的芯片也被称为中央处理单元,一般简称为 CPU(Central Processing Unit).第一代 4 位和低档 8 位微处理器(1971 年1973 年)第二代中高档 8 位微处理器(1974 年1978 年)第三代 16 位微处理器(1978 年1981 年)第四代 32 位高档微处理器(1985 年1993 年)第五代 64 位高档微处理器以后 Intel 又推出 Pentium-II 微处理器。Advanced Micro
2、 Device 公司(简称 ADM)的K6 是与 Pentium-II 性能相当的 CPU。一、无符号数的表示和运算(一)进位计数制人们在日常生活中,采用多种进制的数字系统。最常用的是十进制。例如1998110 3910910810 0后缀 B 表示二进制;后缀 H 表示十进制;后缀 D 表示十进制(也可不加后缀)例如:10011011B是二进制数; 9BH是十六进制数;155D是十进制数;这些数都表示同一数值,即十进制的 155,只是使用的进制不同而已。1二进制和十六进制间的相互转换(1)十六进制转换为二进制数,不论是十六进制的整数还是小数,只要把每一位十六进制的数用相应的二进制数来代替,就
3、可以转换为二进制。例如9 B A 61001 1011 1010 0110即 9BA6H100110111010011B(2)二进制转换为十六进制这种转换,可分两步进行:对整部分,从小数点向左数每4 位二进制为一组,最后不足的前面补零。对小数部分,从小数点向右数,每 4 位一组,最后不足 4 位的后面补 0,然后把每 4 位二进制数用相应的十六进制数代替,即可转换为十六进制数。例如1011 01110101 0100B 7 5 4即 10110111010101B B7 54H(2)二进制数转换为十进制数,对所给的二进制数,只要按前述的式(22)展开,即可得到对应的十进制数。例如1011101
4、0B12 31 2112 012 01 1 1162532(3)十进制整数转换为二进制数,把十进制整数转换为二进制数,一般采用除 2 取余法。例如05xxDm只要决定 的值,就可写出二进制数,因为 201,所以(2152 0)一01,xm定是 2 的整数倍,2152 所得的余数即为 X0。其转换过程为2152107 (商) ,余数1x0;107253 (商) ,余数1x 1;53226 (商) ,余数1x 2;26213 (商) ,余数1x 3;1326 (商) ,余数1x 4;623 (商) ,余数1x 5;321 (商) ,余数1x 6;120 (商) ,余数1,商为 0,转换结束。故 2
5、15D11010111B。(4)十进制整数转换为十六进制数,同转换为二进制数的道理一样,也可采用除 16取余例如 215D 转换为十六进制的过程为2151613 (商) ,余数7X 0;1316=0 (商) ,余数13x 1; 商为 0,转换结束。故 215DD7H;通常写成 0D7H,D 前面的 0 字说明 D 不是英文字符 D 而是数字13。又如何 2345D 的转换过程为1234516771 (商) ,余数9x 0;7711648 (商) ,余数3x 1;48163 (商) ,余数0x 2;3160 (商) ,余数3x 3,商为 0,结束。故 12345D3039H,然后可化成二进制数
6、0011000000111001B。(二)原码如上所示,正数的符号位用零表示,负数的符号位用 1 表示,符号位之后表示数值的大小这种表示方法称为原码。例如:x=+114,x 原 =01110010Bx=+114,x 原 =11110010B(三)反码正数的反码与原码相同。最高位一定为 0,代表符号,其余位为数值位。负数的反码其符号位为 1,与原码相同,数值位是将其负数的原码的数值位按位取反。例如:x=4, x 反 11111011Bx=0, x 反 11111111Bx=127, x 反 10000000B显然,反码的 0 也有 2 个,X 0, x 反 0000000B(四)补码正数的补码表
7、示与原码相同,即最高位为符号位,用“0”表示,其余位为数值位。而负数的补码为其反码加 1 即在反码的最低位加 1 形成补码。例如:x=4, x 补 x 反 111111011B 111111100BFCH三、8 位与 16 位二进制数的表示范围(一)8 位二进制的范围1)无符号数 0255(或用 0FFH 表示)第三节 微型计算机系统的组成一、微型计算机系统的构成微型计算机系统是由硬件和软件两部分组成的,它的层次结构如图所示。运算器CPU 控制器主机 存储器 寄存器微型机硬件 输入输出接口外围设备微型机系统系统软件微型机软件应用软件图 1 微型计算机系统的组成示意图(一)微型机硬件(1)微处理
8、器,是微机系统的核心部件,简称为 CPU,它包括运算器、控制器和寄存器几部分,运算器也叫算逻单元 ALU(Arithmetic and Logic Unit) 。(2)存储器(Memory)又叫主存或内存,是微机的存储和记忆部件,用以存放程序代码和运算需要的数据。内存通常使用半导体存储器。1)内存容量,以 80868088CPU 为例,其地址总线为 20 根,寻址内存的范围为2201MB。这里 B 是字节(Byte ) ,即每个内存单元内部存放的是一个字节(8 位二进制)程序代码或数据,其形式均为二进制数(机器数) 。因为 8086 的地址总线是 20 根,其寻址范围为 1024KB,写成十六
9、进制时就是 5 位,其地址范围为 00000HFFFFFH。2)内存的操作 对内存的操作是读(取)和写(存储) 。3)内存的分类 按存储器的工作性质可将内存分为只读存储器(ROM)和随机读写存储器(RAM)两大类。(3)输入输出接口(IO Interface)和外部设备 CPU 要与很多外部设备进行数据传送,必须通过“IO 接口” ,所以输入输出接口是 CPU 与外设之间的桥梁。(4)总线 由上面叙述可以看到微型计算机主要是由微处理器、存储器、IO 接口和IO 设备所组成,这些部件是用系统总线连接起来的。(二)微型计算机软件微型机的软件是为运行、管理和测试维护而编制的各种程序的总和,没有软件的
10、计算机只是裸机,计算机就无法工作。计算机软件分为系统软件和应用软件,系统软件包括操作系统(DOS 及 WINDOWS、UNIX、LINUX 等)和系统应用程序。三、微型计算机的外围设备一般的计算机,配备有多种外围设备。其输入的外围设备有:键盘、鼠标、扫描仪、输出的外部设备有:显示器、打印机、绘图仪。而软盘和硬盘驱动器既可作为输入又可作为输出设备,而大多数的光盘驱动器(CDROM)是作为输入设备使用的,它可以把 CD或 VCD 光盘中的音乐送入声卡放大,也可以把 VCD 光盘的图像通过解压缩后的彩色图像在 CRT 是显示出来。目前,都采用全双工的声卡(AudioPCI 混声器)完成声音的接收(有
11、话简接口) 、录音、声音合成和声音的播放(有一定功率的放大) 。这样,配上较大功率的有源单箱,就可以放送出美丽动听的音乐和歌声。配置上网卡(一种是电话上网的调制解调器,例如 56K 的 MODEM,一种是高速网卡) ,连接上 INTERNET 网络,就可以通过 IDT NET2PHONE 等软件打网络电话,发传真(FAX) ,收发 ENALL,通过 WWW 进行网上浏览。第四节 微处理器一、Intel 8086/8088 微处理器(一)80868088 的功能结构微处理器 80868088 微处理器结构类似,都由算术逻辑单元 ALU、累加器、专用和通用寄存器、指令寄存器、指令译码器、定时器控制
12、器等组成,后四部分相当于控制器。不过按功能可以分为两大部分总线接口单元 BIU(Bus Interface Unit)和执行单元EU(Execution Unit) 。(二)80868088 的内部寄存器80868088 内部有 14 个 16 位寄存器,编程时都要用到,所以必须识记。按其功能,可分为三大类:第一类是通过寄存器(8 个) ,第二类是段寄存器(4 个) ,第三类是控制寄存器(2 个) 。通用寄存器包括数据寄存器、地址寄存器和变址寄存器。1数据寄存器 AX、BX、CX、DX2地址指针寄存器 SP、BP3变址寄存器 SI、DI4段寄存器 CS、SS、DS、ES5控制寄存器 IP、FL
13、AGSCF 进位标志位。当进行加法或减法运算时。若最高位发生进位或错位,则 CF1,否则 CF0;PF 奇偶标志位。当逻辑运算结果中“1”的个数为偶数时,PF1;为奇数时,PF 0。AF 辅助进位位。在 8(16)位加法操作中,低 4(8)位有进位、借位发生时,AF 1,否则 AF0;ZF 零标志位。当运算结果为零时,ZF 1。否则 ZF0;SF 符号标志位。当运算结果的最高位为 1(即为负数)时, SF1,否则 SF0;OF 溢出标志位。当算术运算的结果超出了带符号数的范围,即溢出时,OF1,否则 OF0。8 位带符号数范围是128127,16 位带符号数的范围是3276832767。下面三
14、个是控制标志位。控制标志位被设置后便对其后的操作产生控制作用。TF 跟踪标志位。TF1 使 CPU 处于单步执行指令的工作方式。这种方式便于进行程序的调试。每执行一条指令后,便自动产生一次内部中断,从而使用户能逐条地检查程序。IF 中断允许标志位。IF1 使 CPU 可以响应可屏蔽中断请求。IF0 使 CPU 禁止响应可屏蔽中断请求。IF 的状态对不可屏蔽中断及内部中断没有影响。DF 方向标志位。DF 1 使串操作按减地址方向进行,也就是说,从高位地址开始,每操作一次地址减小一次。DF0 使串操作按增地址方向进行。(四)80868088 的工作方式80868088 有两种工作方式:最小和最大模
15、式,最小模式是单处理器模式,最大模式是多处理器模式,一般接入 8087 协调处理器。现在,用户使用的大部分都是 486 以上微处理器,均为最大模式。第二章知识点第一节指令系统计算机的指令系统。可以分为六大类:数据传送指令;算术传送指令;逻辑运算和移位指令;串操作指令;控制转移指令;处理器控制指令。一、指令格式指令是以二进制代码形式表示的操作命令,这种二进制代码称为机器码。寻址方式,通常是指 CPU 指令中规定的寻找操作数所在地址的方式,80868088CPU内部设置了多个有关地址的寄存器,如各种地址指针寄存器以及变址寄存器等,因而使80868088 的基本寻址方式有以下七种。二、立即寻址(Im
16、mediate Addrssing )例如:MOV CL,28HMOV AX,3189H三、寄存器寻址(Register Addrssing)指令中指定某些 CPU 寄存器存放操作数。上述寄存器可能是通用寄存器(8 位或 16位) 、地址指针或变址寄存器,以及段寄存器。例如:MOV SS,AX四、直接寻址(Direct Addrssing )直接寻址指令在指令的操作码后面直接给出操作数的 16 位偏移地址。这个偏移地址也称为有效地址 EA(Effective Address),它与指令的操作码一起,存放在内存的代码段,也是低 8 位在前,高 8 位在后。但是,操作数本身一般存放在内存的数据段。
17、例如:MOV AX, 3100H五、寄存器间接寻址六、变址寻址(Indexed Addressing)变址寻址指令将规定的变址寄存器的内容加上指令中给出的位移量,得到操作数的有效地址。80868088CPU 中变址寄存器有两个:源变址寄存器 SI 和目的变址寄存器 DI。位移可以是 8 位或 16 位二进制数,一般情况下操作数在内存的数据段,但也允许段超越。下面是一条变址寻址指令的例子。MOV BX, SI 1003H七、基址寻址(Based Addrssing )基址与变址相类似,不同之处在于指令中使用基址寄存器 BX 或基址指针寄存器 BP,而不是变址寄存器 SI 和 DI。需要指出一点,
18、当使用 BX 寄存器实现基址时,一般情况下操作数是在数据段,即段地址在 DS 寄存器;而当使用 BP 时操作数通常在堆栈段,即段地址在 SS 寄存器中。但是,同样允许段超越。下面两条指令是基址寻址的例子。MOV SI,DATABXMOV BLOCKBP ,AX八基址变址寻址(Based Indexed Addre88ing)这种寻址方式是前面已经介绍的两种寻址方式的结合。指令中规定一个基址寄存器(BX 和 BP 二者之一)和一个变址寄存器(SI 和 DI 二者之一) ,同时还给出一个 8 位或16 位的位移量,将三者的内容相加就得到操作的有效地址。至于段地址,通常由所用的基址寄存器决定。当使用
19、 BX 存放基址时,段地址一般在 DS 寄存器;当使用 BP 时,段地址一般在堆栈段 SS 中,但当指令中标明是段超越时例外。以下是一条基址加变址寻址指令的例子:MOV AX,COUNTBX SI第二节 80868088 的指令系统一、数据传送指令(Data transfer)数据传送指令是程序中使用最多的指令,这是因为无论程序针对何种具体的实际问题,往往都需要将原始数据、中间结果、最终结果以及其他各种信息,在 CPU 的寄存器和存储器之间传送。数据传送指令按其功能的不同,可以分为以下四组:通用数据传送指令;输入输出指令;目标地址传送指令;标志传送指令。以下是 MOV 指令的几个例子:MOV
20、AX,CS ;段寄存器至通用寄存器MOV AL,125 ;立即数至寄存器MOV MEM,15 ;立即数至存储器,直接寻址MOV SI,BX ;寄存器至寄存器MOV DS,AX ;通用寄存器至段寄存器MOV BX ,50H ;立即数至存储器,寄存器间址MOV MEM,AX ;寄存器至存储器,直接寻址MOV MEM,DS ;段寄存器至存储器,直接寻址MOV DISPBX ,CX ;寄存器至存储器,基址寻址MOV AX,DISPSI ;存储器至寄存器,变址寻址MOV DS,MEM ;存储器至段寄存器,直接寻址MOV AX,DISPBX SI ;存储器至寄存器,基址变址寻址PUSH(Push word
21、 onto stack)推入操作POP(Pop word off stacks)弹出操作指令格式及操作:PUSH src;(SP) (SP) 2,首先,堆栈指针2 送给堆栈指针(SP)1:(SP) )(src),再把源操作数(字)推入堆栈中POP dest;(dest) (SP)+1:(SP),首先,堆栈的内容弹出到目的操作数(SP) (SP)+2,再使堆栈指针加 2这是两条堆栈操作指令,PUSH 指令将寄存器或存储器的内容推入堆栈;POP 指令将堆栈中的内容弹出到寄存器或存储器,但都是字操作。PUSH 和 POP 指令的操作数可能有三种情况:1)寄存器2)段寄存器3)存储器无论那种操作数,其
22、类型必须是字操作数(16 位) ,如果推入或弹出堆栈的寄存器操作数,则应是一个 16 位寄存器。如果是存储器操作数,是两个地址连续的存储单元。如:PUSH AX ;通用寄存器椎入堆栈PUSH BP ;基址指针寄存器推入堆栈PUSH DATASI ;两个连续的存储单元推入堆栈POP DI ;从堆栈弹出到变址寄存器POP ES ;从堆栈弹出至段寄存器POP ALPHEBX ;从堆栈弹出到两个连续的存储单元堆栈的用途很多,例如调用子程序(或过程) ,发生中断时都用推入堆栈的办法来保护断点的地址,而当子程序返回时再将断点地址从堆栈中弹出到 IP,以便继续执行主程序。输入输出指令共两条。输入指令 IN
23、用于从外设端口接收数据,输出指令 OUT 向端口发送数据。指令格式及操作:IN acc, port ;(acc) (port)OUT port ,acc ;(port) (acc)目标地址传送指令(Address object transfer)80868088CPU 提供了三条把地址指针写入寄存器或寄存器对的指令,它们可以用来写入近地址指针和远地址指针。这三条指令是 LDS、LES、LEA。LEA reg16 mem16LEA 指令将一个近地址指针写入到指定的寄存器。指令中的目标寄存器必须是一个 16位通用寄存器,源操作数必须是一个存储器,指令的执行结果是把源操作数的有效地址即16 位偏移地
24、址传送到目标寄存器。例如LEA BX,BUFFERLEA AX, BP DI二、算术运算指令(Arithmetic)算术运算指令共有以下五组:加法运算指令减法运算指令乘法运算指令除法运算指令转换指令(一)加法指令(Addition)加法指令包括普通加法(ADD)指令、带进位加法(ADC)指令和加 1(INC)指令,另外还有两条加法调整指令,即 ASCII 调整(AAA)和十进制调整(DAA )指令。1ADD(Addition)指令格式及操作:ADD dest ,src ;(dest) (dest)+(src)ADD 指令将目标操作数与源操作数相加,并将结果存回目标操作数。加法指令将影响大多数标
25、志位。3INC(Increment by 1),加 1 指令指令格式及操作:INC dest (dest) (dest)1INC 指令将目标操作数加 1,指令将影响大多数标志位,如 SF、ZF 、AF、PF 和 OF但对进位标志 CF 没有影响。(二)减法相令(Subtraction)8086/8088CPU 共有七条减法指令,它们是普通减法(SUB) 、带借位减(SBB ) 、减1(DEC) 、求补(NEG) 、比较( CMP)指令,以及减法的 ASCII 调整(AAS)和十进制调整(DAS )指令,重点是 SUB、DEC、CMP 指令。SUB(Subtraction)指令格式及操作:SUB
26、 dest,src ;(desd) (desd) (src)SUB 指令将目标操作数减源操作数,结果送回目标操作数。指令对标志位SF、 ZF、AF、 PF、CF 和 OF 有影响操作数的类型与加法指令一样,即目标操作数可以是寄存器或存储器,源操作数可以是立即数、寄存器或存储器,但不允许两个存储器相减。既可以字节相减,也可以字相减。例如, SUB AL,98H ;寄存器减立即数SUB BX,CX ;寄存器减寄存器SUB DX,VAR1 ;寄存器减存储器DEC(Decrement by 1)减指令指令格式及操作:DEC dest ;(dest) (dest)1DEC 指令将目标操作数减 1,指令对
27、标志位 SF、ZF、AF、PF 和 OF 有影响,但不影响进位标志 CF。操作数的类型与 INC 指令一样,可以是寄存器或存储器(段寄存器不可) 。字节操作或字操作均可。例如,DEC BL 8 位寄存器减:DEC CX ;16 位寄存器减 1DEC BYTE PTR BX ;存储器减 1,字节操作DEC WORD PTR BP DI ;存储器减 1,字操作CMP(Compare)比较指令指令格式及操作:CMP dest,src;(dest)(src)不把差值回送给目的的操作数,影响标志,这条比较指令经常使用,并不把结果送给目的操作数,两个操作数不变,比较后影响标志,使程序根据比较后的标志转移。
28、(三)乘法指令(Multiplication)80868088CPU 可以通过执行一条指令完成乘法或除法运算。乘法指令共有三条:无符号数乘法指令(MUL) 、带符号数乘法指令( IMUL)以及乘法的 ASCII 调整指令(AAM ) 。1MUL(Multiplication unsigned)无符号数乘法指令格式:MUL src指令操作为,字节乘法(AX)(src)(AL)字乘法(DX:AX)(src)(AX)MUL 指令对标志位 CF 和 OF 有影响,但 SF、ZF、AF 和 PF 不确定。80868088CPU 有三条除法指令,它们是无符号数除法指令(DIV ) 、带符号数除法指令(ID
29、IV)以及除法的 ASCII 调整指令(AAD) 。DIA(Division unsigned),无符号数除法指令指令格式: DIV srcDIA 指令使大部分标志位如 SF、ZF 、AF 、PF、CF 和 OF 的值不确定。例比较两个字符串,找出其中第一个不相等字符的地址。如果两字符串全部相同。则转到 ALLMATCH 进行处理。这两个字符串长度均为 20,首地址分别为 STRING1 和STRING2。LEA SI,STRING1 ;(SI)字符串 1 首地址LEA DI,STRING2 ;(DI) 字符串 2 首地址MOV CX,20 ;(CX)字符串长度CLD ;清方向标志 DFREP
30、E CMPSB ;如相等,重复进行比较JCXZ ALLMATCH ;若(cx)=0,跳至 ALLMATCHDEC SI ;否则(SI)1DEC DI ;(DI)1INT 3 ;返回 DEBUGALLMATCH :MOV SI,0MOV DI,0INT 3 ;返回 DEBUG控制转移指令(Control transfer)8086/8088CPU 提供了很多指令用于控制程序的转移。这类指令是以下四种:转移指令、循环控制指令、过程调用指令和中断指令,下面分别进行讨论。(一)转移指令转移是一种将程序从一处改换到另一处的最方便的方法。在 CPU 内部,转移是通过将目标地址传送给指令指针寄存器 IP 来
31、实现的。转移指令包括无条件转移指令和条件转移指令。1、无条件转移指令 JMP(JumP)JUMP 指令的操作是无条件地将控制转移到指令中规定的目的地址。另外,目标地址可以用直接的方式给出,也可以用间接的方式给出,JMP 指令对标志位没有影响。(1)段内直接转移 指令格式及操作:JMP near_label;转移到近标号, (IP )(IP)disp (16 位)例:在内存的数据段中存放了若干个 8 位带符号数,数据块的长度为 COUNT(不超过 255) ,首地址为 TABLE,试统计其中正元素、负元素及零元素的个数,并分别将个数存入 PLUS、MINUS 和 ZERO 单元。为了统计正元素。
32、负元素和零元素的个数,可先将 PLUS、MINUS 和 ZERO 三个单元清零,然后将数据表中带符号数逐个取入 AL 寄存器并使其影响标志位,再利用前面介绍的 JS、 JZ 等条件转移指令测试该数是一个负数、零还是正数,然后分别在相应的单元中进行计数。程序如下:XOR AL,AL ;(AL)0MOV PLUS,AL ;清 PLUS 单元MOV MINUS,AL ;清 MINUS 单元MOV ZERO,AL ;清 ZERO 单元LEA SI,TABLE ;(SI)数据表首址MOV CX,COUNT ;(CX)数据表长度CLD ;清标志位 DFCHECK:LODSB ;取一个数据到 AL 中OR
33、AL,AL ;使数据影响标志位JS XI ;如为负,转 X1JZ X2 ;如为零,转 X2INC PLUS ;否则为正,PLUS 单元加 1JMP NEXTX1:INC MINUS ;MINUS 单元加 1JMP NEXTX2:INC ZERO ;ZERO 单元加 1NEXT:LOOP CHECK ;CX 减 1,不为零,转 CHECKINT 3上面的程序中 LOOP 指令是一条循环控制指令,它的操作是先将 1(CX)1,然后判断是否 CX 的内容为 0?如果不等于 0,则转移到所指的标号 CHECK,如果(CX)0,则执行下一条指令。DEBUG 调试程序的简单应用DEBUG 调试程序的功能DEBUGCOM 或 DEBUGEXE 是随 DOS 操作系统提供的。键入该程序(DEBUG )后,出现提示符,它具有如下命令:A 为汇编命令;U 为反汇编命令; T 为跟踪命令;D 为显示内存命令;E 为修改内存命令;F 为填充命令;R 为检查和修改寄存器命令; G 为执行程序命令;L 为装入内存命令;N 为给程序命名的命令;I 为输入,O 为输出命令;M 为传送内存命令;W 为存盘命令,Q 为结束 DEBUG,回到 DOS 命令。