微机考试复习重中之中_第1页
微机考试复习重中之中_第2页
微机考试复习重中之中_第3页
微机考试复习重中之中_第4页
微机考试复习重中之中_第5页
已阅读5页,还剩235页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、系统总线总线是CPU向存储器和输入/输出接口传送地址、数据和控制信息的公共通路。包括:地址总线(AB)数据总线(DB)控制总线(CB)2)十进制转换为二进制需要对数的整数部分和小数部分分别进行处理,再合并得到转换结果。(1)十进制整数:采用除2取余法,即用基数2不断去除要转换的十进制数,直至商为0。每次的余数即为二进制位数,先得到的是二进制低位,后得到的是二进制高位。(2)十进制小数:采用乘2取整法,即用基数2不断去乘要转换的十进制数。每次得到积的整数部分即为二进制位数,先得到的是二进制小数的高位,后得到的是二进制小数的低位。例1.1例1.1将十进制数135.8125转换为二进制数。 所以,(

2、135.8125)10=(10000111.1101)2 3)二进制和十六进制间的互换4位二进制数对应1位十六进制数。二进制数转换为十六进制数时,以二进制数的小数点分界,分别进行分组处理,不足的位用0补足,整数部分在高位补0,小数部分在低位补0。例1.2例1. 2将二进制数10000111.1101转换为六进制数。(10000111.1101)2=(1000 0111.1101)2=(87.D)16 溢出及其判定溢出:补码运算时,若运算结果超出了其表数范围就发生了溢出,造成运算结果错误。例如,字长n=8时,X=+99,Y=+98,X+Y=+197+127,肯定发生溢出。溢出的判定方法:由于溢出

3、只可能出现在同号相加或异号相减运算时,且采用补码减法可转变为加法,最直观、最易于理解的溢出判定方法是:若正数加正数,结果为负数或负数加负数,结果为正数,则发生溢出。 图2.1 8086微处理器内部结构图1.总线接口部件BIU功能 负责CPU与内存或I/O端口传送指令或数据。BIU从内存取指令送到指令队列缓冲器。当EU执行指令时,BIU要配合EU从指定的内存单元或I/O端口中读取数据,或者把EU的操作结果送到指定的内存单元或I/O端口去。组成:段寄存器、指令指针寄存器、地址加法器、指令预取队列及总线控制逻辑。图2.12.执行部件EU 功能负责指令的译码和执行。负责向总线接口部件BIU提供偏移地址

4、。对通用寄存器和标志寄存器进行管理。组成:算术逻辑单元(ALU) 、1个标志寄存器、8个通用寄存器、1个数据暂存寄存器和EU控制电路。 图2.11)段寄存器所有寄存器都是16位的,因此,能够提供的最大地址空间只能为64 KB。为了寻址1MB,将存储器的空间分成若干段,每段最大为64KB。段寄存器:用来存放段的起始地址(16位)的寄存器,设有四个段寄存器:CS 代码段寄存器(Code Segment register)DS 数据段寄存器(Data Segment register)SS 堆栈段寄存器(Stack Segment register)ES 附加数据段寄存器(Extra Segment

5、 register) 图2.13)通用寄存器组4个16位数据寄存器AX、BX、CX、DX4个16位指针与变址寄存器:堆栈指针寄存器SP(Stack Pointer)基址指针寄存器BP(Base Pointer) 源变址寄存器SI(Source Index) 目的变址寄存器DI(Destination Index) 图2.1图2.2 8086/8088的寄存器结构 3.标志寄存器(16位)16位标志寄存器FR用于反映指令执行结果或控制指令执行的形式。只用了其中的9位,分为:状态标志位和控制标志位。1)状态标志位(6位)用来反映算术或逻辑运算后结果的状态,以记录CPU的状态特征。进位标志CF奇偶标

6、志PF符号标志SF溢出标志OF辅助进位标志AF零标志ZF进位标志CF(Carry Flag)加法时,最高位(字节操作时的D7位,字操作时的D15位)是否有进位产生。减法时,最高位(字节操作时的D7位,字操作时的D15位)是否有借位产生。奇偶标志PF(Parity Flag)若运算结果低8位中“1”的个数为偶数,则PF=1;否则PF=0。一般用来检测数据传输中是否发生错误。辅助进位标志AF(Auxiliary carrry Flag)加法时,第3位向第4位有进位。减法时,第3位向第4位有借位。该标志位通常用于对BCD算术运算结果进行调整。 零标志ZF(Zero Flag)若运算结果为0,则ZF=

7、1;否则ZF=0。符号标志SF(Sign Flag)它和运算结果的最高位相同。溢出标志OF(Overflow Flag)若运算过程中发生了“溢出”,则OF=1,否则OF=0。 2)控制标志位(3位)用来控制CPU的操作,由程序设置或清除。中断允许标志IF方向标志DF跟踪(陷阱)标志TF中断允许标志IF(Interrupt Enable Flag)如果IF置“1”,则CPU可以接受可屏蔽中断请求;反之,则CPU不能接受可屏蔽中断请求。STI 指令使IF置“1”,即开放中断。 CLI 指令使IF清“0”,即关闭中断。方向标志DF(Direction Flag)控制字符串操作指令的步进方向。 DF=

8、1时,地址自动递减; DF=0时,地址自动递增。 STD使DF=1。 CLD使DF=0。跟踪(陷阱)标志TF(Trap Flag)为调试程序的方便而设置的。 TF=1,则处于单步工作方式; TF=0 ,将正常执行程序。例如,在系统调试软件DEBUG中的T命令,就是用该标志位来进行程序的单步跟踪的。 例题设(CS)=4232H ,(IP)=0066H,试计算物理地址。8086总线周期的概念为了取得指令或传送数据,就需要CPU的总线接口部件(BIU)执行一个总线周期。一个最基本的总线周期由4个时钟周期组成。习惯上将4个时钟周期分别称为4个状态,即T1状态、T2状态、T3状态和T4状态。表2.4 复

9、位后CPU内部寄存器的状态NMI非屏蔽中断请求信号,输入,上升沿有效。此请求不受IF的影响。只要此信号一出现,CPU就在现行指令结束后响应中断。INTR可屏蔽中断请求信号,输入,高电平有效。当INTR=1时,表示外设提出了中断请求,8086/8088在每个指令周期的最后一个T状态去采样此信号。若IF=1,则CPU响应中断,转去执行中断服务程序。中断响应信号,输出,低电平有效。用于对外设的中断请求作出响应。连续周期中的两个负脉冲。第1个脉冲是通知外设接口,它的中断请求已获允许;外设接口收到第2个负脉冲后,往数据总线上放中断类型码。表2.7 、A0代码表示的奇偶区的选择图2.24 各种字节和字的读

10、操作示例第3章 16位/32位微处理器指令系统 指令:要求计算机执行各种特定操作的命令。指令系统:微机能够识别和执行的全部指令集合。不同的微处理器所对应的指令系统也不相同。 指令的基本格式3.18086/8088的寻址方式3.28086/8088的指令系统3.380386的寻址方式和指令系统3.4Pentium新增加的指令3.53.1 指令的基本格式 指令的构成3.1.18086/8088的指令格式3.1.23.1.1指令的构成包括两部分:操作码:表示操作性质或类型编码操作数:操作对象。一般来说,第一字节表示操作码,第二字节表示寻址方式,第三、四字节表示操作数在内存的位移量或者是立即数(在指令

11、中没有位移量时),第五、六字节表示立即数。 3.1.28086/8088的指令格式 基本格式: 标号: 操作码助记符 目的操作数,源操作数 ;注释标号:为该条指令所在内存单元的符号地址,后面要跟冒号。标号一般由字母开头,后跟字母、数字或特殊字符,不允许使用保留字。操作码助记符:指示CPU执行什么样的操作。操作数:分目的操作数和源操作数两种。目的操作数是指令结果存放的位置,源操作数是指令操作的对象。注释:说明本条指令或一段程序的功能,使程序可读性强。汇编程序对其不进行处理。 3.2 8086/8088的寻址方式 操作数的寻址方式就是指寻找操作数位置的方式。立即寻址1寄存器寻址2直接寻址3寄存器间

12、接寻址4基址寻址和变址寻址5基址变址寻址6固定寻址71.立即寻址操作数包含在指令中,这种操作数称为立即数可以是8位数值(00HFFH)也可以是16位数值(0000HFFFFH)MOV AL,80H;将80H送入AL MOV AX,306AH;将306AH送入AX立即数寻址方式常用来给寄存器和存储单元赋值。操作数直接在指令中取得,不需要使用另外的总线周期,执行时间短、速度快。2.寄存器寻址操作数在CPU的内部寄存器中:8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器:AX、BX、CX、DX、SI、DI、BP、SP4个段寄存器:CS、DS、SS、ESMOV AL,BL;将BL

13、的内容传送到AL中 MOV BX,AX;将AX的内容传送到BX中采用寄存器寻址的指令在执行时,操作数就在CPU中,不需要访问存储器来取得操作数,执行速度快。另外寄存器名比内存地址短,指令所占内存空间少。 3.直接寻址有效地址EA (Effective Address):操作数的偏移地址。EA可通过不同的寻址方式来得到。直接寻址方式的有效地址在指令中直接给出。默认的段基址在DS段寄存器,可使用段前缀改变。用方括号包含有效地址,如:MOV AX,1000H。如果有效地址是以符号地址形式提供,则可不加方括号。 MOV AX,BUFA;BUFA为符号地址,这时不加跨段前 缀,默认仍为DS数据段。如BU

14、FA变量 在附加段中,就必须书写为: MOV AX,ES:BUFA注意:有些宏汇编程序规定,直接寻址的16位常量有效地址必须加段前缀,否则会当作立即数。 例子例子段基址:2000H有效地址:1000H物理地址:21000HAX已知: (DS)=2000H ,(21000H)=12H, (21001H)=34H。试给出指令 MOV AX,1000H执行后AX的内容。20000H数据段2FFFFH21000H21001H12H34H存储器指令执行后,(AX)=3412H。4.寄存器间接寻址有效地址存放在基址寄存器BX、BP或变址寄存器SI、DI中。如用BX、SI或DI作为间址寄存器,则默认的段基址

15、在DS段寄存器。如用BP作为间址寄存器,则默认的段基址在SS段寄存器。可使用段前缀改变。MOV AX,BX ;若(DS)=2000H,(BX)=1000H ,则将数据段 21000H、21001H两个单元的内容送到AX中。MOV CX,BP ;若 (SS)=4000H,(BP)=1000H ,则将堆栈段 41000H、41001H两个单元的内容送到CX中。MOV AX,ES:SI ;若(ES)=3000H,(SI)=1000H ,则将附加段 31000H、31001H两个单元的内容送到AX中。 5.基址寻址和变址寻址有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或S

16、I、DI。有效地址BX/BP/SI/DI8/16位位移量如果寄存器为BX或BP,则为基址寻址如果寄存器为SI或DI,则为变址寻址段基址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段前缀改变。例子例子段基址:4000H有效地址:5000H物理地址:45000HAX已知: (DS)=4000H , (SI)=2000H, 内存单元(45000H)=34H, (45001H)=12H。试给出指令 MOV AX,SI+3000H执行后AX的内容。40000H数据段4FFFFH45000H45001H34H12H存储器指令执行后,(AX)=1234H。6.基址变址寻址有效地址由基

17、址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:有效地址BX/BPSI/DI 8/16位位移量段基址对应BX寄存器默认是DS,对应BP寄存器默认是SS;可用段前缀改变。该寻址方式适用于数组或表格存取。MOV AX,8BX+SI ;默认操作数在数据段中 MOV BX,-6BP+DI;默认操作数在堆栈段中 MOV BX,ES:BP+DI ;操作数在附加段中 7.固定寻址固定寻址又叫隐含寻址。指令码中不包含指明操作数地址的部分,而其操码本身隐含地指明了操作数地址。如:十进制调整指令DAA,该指令的功能是对AL寄存器中的内容进行十进制调整,调整后的内容仍存放到AL中。隐含寻址的指令

18、,不需要计算EA,执行速度快,而且大多为单字节指令。3.3 8086/8088的指令系统符号的约定:OPD :目的操作数(8/16位)OPS :源操作数(8/16位)数据传送类指令3.3.1算术运算类指令3.3.2逻辑运算与移位类指令3.3.3串操作类指令3.3.4控制转移类指令3.3.5处理器控制类指令3.3.63.3.1 数据传送类指令数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令。除标志寄存器传送指令外,均不影响标志位。通用数据传送指令1标志寄存器传送指令2目标地址传送指令3输入/输出指令41.通用数据传送指令MOV传送指令XCHG交换指令XLAT换码指令堆栈

19、操作指令1) MOV传送指令格式: MOV OPD,OPS MOV指令是使用最多的指令,它可以完成CPU内寄存器之间、寄存器与存储器之间的数据传送,还可以将立即数送入寄存器或内存。MOV AL,BL;将寄存器BL的内容传送到寄存器AL中。MOV DI, AX;将寄存器AX的内容传送到DI和DI+1所 指的内存字单元中。MOV CX,1000H;将数据段中偏移地址1000H和1001H 单元的内容送CX中。MOV BL,40;将立即数40传送到寄存器BL。 注意注意 立即数、CS和IP不能作为目的操作数。两个段寄存器之间不能相互传送数据。两个存储单元之间不能直接传送。不能将立即数直接传送到段寄存

20、器。两个操作数的类型和长度必须一致。2) XCHG交换指令格式:XCHG OPD,OPS操作数的类型可以为字节或字。交换只能在通用寄存器之间、通用寄存器与存储器之间进行。XCHG AX,BX;AX和BX的内容互换3) XLAT换码指令格式: XLAT 或 XLAT 表首址功能:使AL中的值变换为内存表格中的对应值。它是一条隐含寻址方式的指令。将数据段内有效地址为(BX)+(AL)的内存字节单元中数据送入AL。该指令常用来查表,即将表头地址赋予BX,再将需求的表内位移地址赋予AL,最后运用XLAT指令即可以将该地址处的表值送到AL。 功能图XLAT换码指令的功能图数据段存储器表BXAL+BX+A

21、LAL4)PUSH入栈指令与POP出栈指令堆栈是一个“后进先出LIFO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段基址。堆栈的存取操作都发生在栈顶;用堆栈指针寄存器SP指定。入栈指令PUSH出栈指令POP入栈指令PUSH格式:PUSH OPS功能:修改指针:(SP)-2SP;将OPS指定的寄存器、段寄存器或存储器中的一个字数据压入堆栈的顶部。PUSH指令在使用时应该注意:源操作数只能是16位,而不能是8位的。源操作数不能为立即数。 例子PUSH指令的例子例:假设在指令执行前,(SP)=1000H;(AX)= 1234H。试分析PUSH AX指令的执行结果。SP堆

22、栈段存储器1000H0FFFH0FFEHSPAX12H34H出栈指令POP格式:POP OPD功能:将栈顶的一个字数据送至OPD指明的寄存器、段寄存器(CS除外)或存储器中;修改指针:(SP)+2SP。POP指令在使用时应该注意:目的操作数只能是16位,而不能是8位的。立即数、CS不能作为目的操作数。例子POP指令的例子例:假设在指令执行前,(SP)=0FFEH,(BX)=2004H,并且堆栈段栈顶(0FFEH)单元内存放34H,(0FFFH)单元内存放12H。试分析POP BX指令的执行结果。SP堆栈段存储器1000H0FFFH0FFEHSPBX12H34H=1234H2.标志寄存器传送指令

23、 LAHF指令:取标志寄存器指令。将标志寄存器FR的低8位传送到AH中。SAHF指令:设置标志寄存器指令。将AH的内容传送到标志寄存器FR的低8位。PUSHF指令:将标志寄存器FR的值压入堆栈。POPF指令:从堆栈中弹出一个字到标志寄存器FR中。3.目标地址传送指令取偏移地址指令LEA传送偏移地址及数据段首址指令LDS传送偏移地址及附加段首址指令LES1)取偏移地址指令LEA格式:LEA OPD,OPS功能:将源操作数的偏移地址送到目的操作数。该指令不影响标志位,源操作数必须是存储器操作数,目的操作数必须是16位通用寄存器。LEA SI,TABLE;TABLE为存储器操作数的符号地址LEA A

24、X,SI;该指令等效于MOV AX,SI指令,与MOV AX,SI 指令的效果不同,注意区别。格式:LDS OPD,OPS功能:从源操作数所指定的存储单元中取出某变量的地址指针(共4个字节),将低地址两个字节(偏移量)送到目的操作数,将高地址两个字节(段首址)送到DS中。该指令对标志位不影响,源操作数是双字类型存储器操作数,目的操作数必须是16位通用寄存器。2)传送偏移地址及数据段首址指令LDS例子LDS指令的例子设某双字存储单元的偏移地址为3000H,双字数据为12345678H,试分析LDS SI,3000H指令的执行结果。DS存储器数据段3000H12H34H3001H3002H3003

25、H56H78HSI=1234H=5678H3)传送偏移地址及附加段首址指令LES格式:LES OPD,OPS功能:从源操作数所指定的存储单元取出某变量的地址指针(共4个字节),将低地址两个字节(偏移量)送到目的操作数,将高地址两个字节(变量的段首址)送到ES中。 4.输入输出指令输入/输出指令用于完成输入/输出端口与累加器(AL/AX)之间的数据传送,指令中给出输入/输出端口的地址。输入指令IN输出指令OUT注意事项1)输入指令IN格式:IN OPD,OPS功能:从端口(地址为n或在DX中)输入位数据到AL或输入16位数据到AX。IN AL,40H;从40H端口读入一个字节送ALIN AX,8

26、0H;从80H端口读入一个字节送AL,从 81H端口读入一个字节送AHMOV DX,8F00H;将端口地址8F00H送DXIN AL,DX;从8F00H端口读入一个字节送AL 2)输出指令OUT格式:OUT OPD,OPS功能:从AL输出8位数据或从AX输出16位数据到端口(地址为n或在DX中)。OUT 40H,AL;将AL内容送40H端口OUT 80H,AX;将AL内容送80H端口, 将AH的内容送81H端口MOV DX,8F00H;将端口地址8F00H送DXOUT DX,AL;将AL内容送8F00H端口输入/输出指令在使用时应该注意输入/输出指令对标志寄存器没有影响。端口地址大于255时,

27、必须用DX指定端口地址。 3.3.2 算术运算类指令 可以完成带符号和不带符号的8位/16位二进制的算术运算,以及BCD码表示的十进制数的算术运算。分为:加法指令1减法指令2乘法指令3符号扩展指令4除运算指令5十进制调整指令61.加法指令不带进位加法指令ADD带进位加法指令ADC加1指令INC1)不带进位加法指令ADD格式:ADD OPD,OPS功能:(OPS)+(OPD) OPD。影响标志位CF、AF、PF、SF、OF和ZF。2)带进位加法指令ADC格式:ADC OPD,OPS功能:(OPS)+(OPD)+CF OPD。影响标志位CF、AF、PF、SF、OF和ZF。ADC指令常用于多字的加法

28、。 3)加指令格式:INC OPD功能:将目的操作数OPD的内容加,并将结果回送到目的操作数。影响标志位AF、PF、SF、OF和ZF,但不影响CF标志。INC AX;AX中内容加,结果送回AXINC BL;BL中内容加,结果送回BLINC BYTE PTR SI ;将SI所指内存字节单元内容 加,并回存。 2.减法指令不带借位的减法指令SUB带借位的减法指令SBB减1指令DEC比较指令CMP求补指令NEG1)不带借位的减法指令SUB格式:SUB OPD,OPS功能:(OPD)-(OPS) OPD结果影响标志位CF、AF、PF、SF、OF和ZF。SUB BX,CX;BX的内容减去CX的内容, 结

29、果放入BX2)带借位的减法指令SBB格式:SBB OPD,OPS功能:(OPD)-(OPS)-CFOPD结果影响标志位CF、AF、PF、SF、OF和ZF。 SBB SI,AL;SI所指字节单元内容减AL的 值,再减CF,结果存回原内 存单元。3)减指令DEC格式:DEC OPD功能:将目的操作数OPD的内容减,并将结果回送到目的操作数。影响标志位AF、PF、SF、OF和ZF,但不影响CF标志。DEC AX;AX的内容减,结果送回AX。 DEC CL;CL的内容减,结果送回CL。 4)比较指令CMP格式:CMP OPD,OPS功能:目的操作数OPD减去源操作数OPS,结果不回送。但影响标志位CF

30、、AF、PF、SF、OF和ZF。 CMP AL,09H;将AL的内容和09H比较,结果影响标志位可以根据标志位的变化,来判断比较结果。通过ZF的值来判断两数是否相等。若ZF=1,说明两数相等;否则,两数不等。通过CF、OF和SF的变化来判断无符号数或有符号数的大小:对于无符号数,如CF=0,则目的操作数比源操作数大;如CF=1,则目的操作数比源操作数小。对于有符号数,如OF=SF,则目的操作数比源操作数大;如OFSF,则目的操作数比源操作数小。 5)求补指令NEG格式:NEG OPD功能:由目的操作数OPD求补,将其结果送回目的操作数。实际做0-(OPD)OPD运算。影响标志位CF、AF、PF

31、、SF、OF和ZF。 MOV AL,05HNEG AL;(AL)=0FBH,CF=1MOV AL,-05HNEG AL;(AL)=05H,CF=1 3.乘法指令无符号数乘法指令MUL有符号数乘法指令IMUL1)无符号数乘法指令MUL格式: MUL OPS功能: 字节乘法: (AL)(OPS)AX 字乘法: (AX)(OPS)(DX,AX)图示图示MUL指令在使用时应该注意:OPS不能是立即数。MUL指令只影响CF、OF标志:对于字节乘法,若AH0,则CF=1,OF=1;否则CF=0,OF=0。对于字乘法,若DX0,则CF=1,OF=1;否则CF=0,OF=0。2)有符号数乘法指令IMUL格式:

32、IMUL OPS功能:字节乘法: (AL)(OPS)AX 字乘法: (AX)(OPS)(DX,AX)IMUL指令的使用注意事项同MUL指令。 4.符号扩展指令将字节扩展为字指令CBW将字扩展为双字指令CWD1)将字节扩展为字指令CBW格式:CBW功能:将AL的内容从字节扩展为字,存放到AX。若AL中数据的最高位为0,则(AH)=00H; 若AL中数据的最高位为1,则(AH)=0FFH。该指令不影响标志位。2)将字扩展为双字指令CWD格式:CWD功能:将AX的内容从字扩展为双字,存放到DX、AX。若AX中数据的最高位为0,则(DX)=0000H; 若AX中数据的最高位为1,则(DX)=0FFFF

33、H。该指令不影响标志位。 5.除运算指令无符号数除法指令DIV有符号数除法指令IDIV1)无符号数除法指令DIV格式:DIV OPS功能: 字节除法:(AX)/(OPS)AL(商),AH(余数) 字除法: (DX,AX)/ (OPS)AX(商),DX(余数)图示图示DIV指令在使用应该注意:OPS不能是立即数。除法指令不影响标志位,除以0会导致结果溢出,产生除法出错中断。 2)有符号数除法指令IDIV格式:IDIV OPS功能: 字节除法: (AX)/(OPS)AL(商),AH(余数) 字除法: (DX,AX)/ (OPS)AX(商),DX(余数) 6.十进制调整指令前面的算术运算指令都是二进

34、制运算指令,如何利用它们来进行BCD 码十进制运算?一般方法是:首先对BCD码表示的十进制数进行二进制运算,然后再使用调整指令对运算结果进行调整,得出正确的BCD码表示的十进制运算结果。加法的BCD码调整指令减法的BCD码调整指令乘法的非压缩BCD码调整指令AAM除法的非压缩BCD码调整指令AAD1)加法的BCD码调整指令压缩BCD码调整指令DAA非压缩BCD码调整指令AAA(1)压缩BCD码调整指令DAA格式:DAADecimal Adjust After Addition 功能:将AL中二进制加法运算的结果调整为两位压缩BCD码,结果仍保留在AL中。调整的方法:若AL的低4位大于9,则AL

35、的内容加06H, 并AF位置1; 若AL的高4位大于9,则AL的内容加60H, 并CF位置1; 若 AF=1,则低4位要加6; 若 CF=1,则高4位要加6。例如:MOV BL,34H MOV AL,56H ADD AL,BL DAA 上述指令序列执行后,(AL)=90H ,CF=0,AF=0。 0011 0100 0101 0110 1000 1010 0110 1001 0000(2)非压缩BCD码调整指令AAA格式: AAAAscii Adjust for Addition. 功能:将AL中二进制加法运算结果调整为一位非压缩BCD码,调整后的结果仍保留在AL中,如果向高位有进位(AF=1

36、,CF=1),则AH的内容加1。调整的方法:若AL的低4位大于9或AF=1,则自动将AL的内容加06H,AH内容加1并置AF=CF=1,将AL的高4位清零;若AL的低4位小于或等于9,则仅将AL的高4位清零,并AFCF。DAA、AAA指令在使用时应该注意:DAA、AAA指令一般是紧跟在ADD或ADC指令后使用,单独使用没有意义。调整指令只对AL的内容进行调整,故在调整前,务必保证待调整结果出现在AL。2)减法的BCD码调整指令压缩BCD码调整指令DAS非压缩BCD码调整指令AAS(1)压缩BCD码调整指令DAS格式:DAS功能:将AL中二进制减法运算的结果调整为两位压缩BCD码,结果仍保留在A

37、L中。调整的方法:若 AF=1或AL的低4位大于9,则自动(AL)-06HAL,1AF;若 CF=1或AL的高4位大于9,则自动(AL)-60HAL,1CF。 (2)非压缩BCD码调整指令AAS格式:AAS功能:将AL 中二进制减法运算结果调整为一位非压缩BCD码,如果有借位,则保留在CF中。调整的方法:若AL的低4位大于9或AF=1,则自动将AL的内容减06H,AH内容减1并置AF=CF=1,将AL的高4位清零;若AL的低4位小于或等于9,则仅将AL的高4位清零,并AFCF。DAS、AAS指令在使用时的注意事项可参考加法调整指令。 3)乘法的非压缩BCD码调整指令AAM格式:AAM功能:将A

38、L中二进制乘法运算结果调整为两位非压缩BCD码,高位放在AH,低位放在AL。影响标志位PF、SF和ZF。该指令必须紧跟在MUL之后,且被乘数和乘数必须用非压缩的BCD码表示。4)除法的非压缩BCD码调整指令AAD格式:AAD功能:用在两位非压缩的BCD码相除之前,将AX内容调整为二进制数。 3.3.3逻辑运算与移位类指令 逻辑运算指令1移位指令2循环移位指令31.逻辑运算指令可以对字或字节按位进行逻辑运算。非运算指令NOT与运算指令AND测试指令TEST或运算指令OR异或运算指令XOR1)非运算指令NOT格式:NOT OPD功能:将目的操作数的内容按位取反后,再送回目的操作数。该指令不影响标志

39、位。 2)与运算指令AND格式:AND OPD,OPS功能:将目的操作数的内容与源操作数按位相与,结果送回目的操作数。影响标志位SF、ZF、PF,使OF=0,CF=0,对AF无定义。 3)测试指令TEST格式:TEST OPD,OPS功能:将目的操作数的内容与源操作数按位相与,但结果不送回目的操作数。影响标志位SF、ZF、PF,使OF=0,CF=0,对AF无定义。例子: TEST AL,80H 执行前:(AL) =39H 执行后: ZF=1该指令可以用于判断目的操作数的某个数位是否1。上例中可以根据ZF=1,判断出AL内容的最高位为零。 4)或运算指令OR格式:OR OPD,OPS功能:将目的

40、操作数的内容与源操作数按位相或,结果送回目的操作数。影响标志位SF、ZF、PF,使OF=0,CF=0,对AF无定义。该指令常用来将目的操作数的某一位或几位置1。5)异或运算指令XOR格式:XOR OPD,OPS功能:将目的操作数的内容与源操作数按位异或,结果送回目的操作数。影响标志位SF、ZF、PF,使OF=0,CF=0,对AF无定义。由于某个操作数和同一个数异或结果为0,故异或运算常被用来比较两数是否相等或初始化某数为0。 2.移位指令这组指令可以对字节或字中的各位进行算术移位和逻辑移位。移位次数可以是也可以大于。若移位次数大于时,必须将次数预先放入CL。算术左移指令SAL逻辑左移指令SHL

41、算术右移指令SAR逻辑右移指令SHR1)算术左移指令SAL格式:SAL OPD,OPS功能:根据源操作数OPS中的移位次数,将目的操作数的内容连续进行左移操作,每次高位进入CF,最低位补0 。无符号数的算术左移一位相当于目的操作数乘2。图3.22)逻辑左移指令SHL格式:SHL OPD,OPS功能:与算术左移指令SAL完全相同。 3)算术右移指令SAR格式:SAR OPD,OPS功能:根据源操作数OPS中的移位次数,将目的操作数的内容连续进行右移操作,每次低位进入CF,最高位用移位前的值填补 。图3.24)逻辑右移指令SHR格式:SHR OPD,OPS功能:根据源操作数OPS中的移位次数,将目

42、的操作数的内容连续进行右移操作,每次低位进入CF,最高位补0 。 图3.2图3.2 移位指令操作过程3.循环移位指令循环移位次数的设置和移位指令相同。这组指令只影响CF、OF标志位。循环左移指令ROL循环右移指令ROR带进位的循环左移指令RCL带进位的循环右移指令RCR1)循环左移指令ROL格式:ROL OPD,OPS功能:根据源操作数OPS中的移位次数,将目的操作数的内容连续进行循环左移操作。图3.32)循环右移指令ROR格式:ROR OPD,OPS功能:根据源操作数OPS中的移位次数,将目的操作数的内容连续进行循环右移操作。 图3.33)带进位的循环左移指令RCL格式:RCL OPD,OP

43、S功能:根据源操作数OPS中的移位次数,连续对目的操作数的内容带CF循环左移操作。图3.34)带进位的循环右移指令RCR格式: RCR OPD,OPS功能:根据源操作数OPS中的移位次数,连续对目的操作数的内容带CF循环右移操作。 图3.3图3.3 循环移位指令的操作过程3.3.4 串操作类指令 概述0重复指令前缀1数据字节串/字串传送指令2数据字节串/字串比较指令3数据字节串/字串检索指令4数据字节串/字串读出指令5数据字节串/字串写入指令60.概述字符串是指存储器中顺序存放的类型相同的字节或字的序列。串操作是指对串中每个元素都执行同样的操作。规定一个字符串的长度最长不能超过64K字节。源串

44、存放在数据段,用SI提供源串的偏移地址。 目的串存放在附加段,用DI提供目的串的偏移地址。当方向标志DF=0:地址指针SI、DI自动加1(字节串)或2(字串) 当方向标志DF=1:地址指针SI、DI自动减1(字节串)或2(字串)串操作指令前不加重复前缀,串操作只执行一次。 如重复执行串操作,可以用CX存放重复的次数,每重复执行一次,CX内容减1。当CX内容减为0时,串操作停止。1.重复指令前缀 无条件重复前缀REP相等/为零重复前缀REPE/REPZ不相等/不为零重复前缀REPNE/REPNZ1)无条件重复前缀REP格式:REP功能:用于一个串操作指令的前缀,每重复执行一次串操作指令,CX的内

45、容减1,直到(CX)=0 为止。执行步骤如下:先判断CX的内容,如(CX)=0,则串操作停止,否则执行第步; (CX)-1CX ;执行其后的串操作指令,转第步。 2)相等/为零重复前缀REPE/REPZ格式:REPE/REPZ功能:用于一个串操作指令的前缀,每重复执行一次串操作指令,CX的内容减1,直到(CX)=0 或ZF=0为止。执行步骤如下:先判断CX的内容,如(CX)=0或ZF=0,则串操作停止,否则执行第步; (CX)-1CX ;执行其后的串操作指令,转第步。 3)不相等/不为零重复前缀REPNE/REPNZ格式:REPNE/REPNZ功能:用于一个串操作指令的前缀,每重复执行一次串操

46、作指令,CX的内容减1,直到(CX)=0 或ZF=1为止。执行步骤如下:先判断CX的内容,如(CX)=0或ZF=1,则串操作停止,否则执行第步; (CX)-1CX ;执行其后的串操作指令,转第步。 2.数据字节串/字串传送指令 格式:MOVSB/MOVSW功能:将数据段中由(DS:SI)指向的源串的一个字节(字)传送到附加段由(ES:DI)指向的目的串中,且相应修改地址指针,使其指向下一个字节(字)。例:将内存单元首地址3100H起的100个字节传送到首地址2800H的内存单元。 CLD MOV SI,3100H MOV DI,2800H MOV CX,100 REP MOVSB 3.数据字节

47、串/字串比较指令格式:CMPSB/CMPSW功能:将数据段中由(DS:SI)指向源串的一个字节(字)减去附加段由(ES:DI)指向的目的串的一个字节(字),不回送结果,只根据结果影响标志位,并相应修改地址指针,使其指向下一个字节(字)。例:检查内存单元首地址2200H起的50个字节与首地址3200H起的50个字节是否对应相等。如相等,则BX=0;若不相等,BX指向第一个不相等的字节单元。AL存放第一个不相等的源串内容。 CLD MOV SI,2200H MOV DI,3200H MOV CX,50 REPE CMPSB JZ LP1 DEC SI MOV BX,SI MOV AL,SI JMP

48、 LP2 LP1:MOV BX,0 LP2: 4.数据字节串/字串检索指令格式:SCASB/SCASW功能:将AL(AX)的内容减去附加段由(ES:DI)指向的目的串的一个字节(字),不回送结果,只根据结果影响标志位,并相应修改地址指针,使其指向下一个字节(字)。例:在内存附加段首地址为4300H起的100个字节中,查找是否有“*”,如有, 则将偏移地址送BX ,否则BX=0。 CLD MOV DI,4300H MOV AL,* REPNZ SCASB JNZ LP1 DEC DI MOV BX,DI ;找到“*”,偏移地址送BX JMP LP2LP1:MOV BX,0 ;未找到LP2: 5.

49、数据字节串/字串读出指令格式:LODSB/LODSW功能:将数据段中由(DS:SI)指向源串的一个字节(字)读出,放入AL(AX)中,并相应修改地址指针,使其指向下一个字节(字)。6.数据字节串/字串写入指令格式:STOSB/STOSW功能:将AL(AX)的内容写入附加段中由(ES:DI)指向的目的串一个字节(字)中,并相应修改地址指针,使其指向下一个字节(字)。1)计数循环指令格式: LOOP 标号功能:每执行一次LOOP指令,CX的内容减,若(CX)0,则循环转移到标号所指定的目标地址去重复执行程序,直到(CX)=0,退出循环,接着执行LOOP指令的下一条指令。例: MOV CX,0100

50、H;设置循环次数DELAY:LOOP DELAY2)相等/为零计数循环指令格式:LOOPE/LOOPZ 标号功能:每执行一次循环指令,CX的内容减,若(CX)0且ZF=1,则循环转移到标号所指定的目标地址去重复执行程序,否则执行循环指令的下一条指令。 3)不相等/不为零计数循环指令格式:LOOPNE/LOOPNZ 标号功能:每执行一次循环指令,CX的内容减,若(CX)0且ZF=0,则循环转移到标号所指定的目标地址去重复执行程序,否则执行循环指令的下一条指令。 1)软中断指令格式:INT n功能:n为中断类型码,可以取00FFH之间的256个值。每个中断类型码在中断矢量表中占4个字节,前两个字节

51、用来存放中断服务程序入口地址的偏移地址,后两个字节用来存放段基址。CPU执行INT指令时,首先将标志寄存器FR 入栈,接着清除IF、TF,然后将当前程序断点的段基址和偏移地址入栈保护,最后将中断矢量表中与中断类型码对应的4个字节内容先后送入IP、CS,这样CPU转去执行中断服务程序。 2)中断返回指令格式:IRET功能:放在中断服务程序的出口处,由它从堆栈中弹出程序断点分别送IP、CS,并弹出一个字送标志寄存器FR,以退出中断,返回到断点处执行后续程序。中断服务程序的最后一条指令必须是IRET。 3)溢出中断指令格式:INTO功能:该指令为单字节指令,中断类型码为4,放在有符号的算术运算指令之

52、后,仅当运算产生溢出(OF=1)时,即向CPU发出溢出中断请求。 1.标志位操作指令进位位清0指令:CLC进位位求反指令:CMC进位位置1指令:STC关中断指令:CLI;置IF=0,禁止外部可屏蔽中断。开中断指令:STI;置IF=1,允许外部可屏蔽中断。方向标志清0指令:CLD方向标志置1指令:STDa)取地址偏移量运算符OFFSET格式:OFFSET 变量或标号例: MOV SI,OFFSET BUF 等价于 LEA SI,BUF注意:OFFSET后面只能是变量或标号。 b)取段基址运算符SEG格式:SEG 变量或标号例:MOV AX,SEG BUF;将BUF所在段的段基址送入寄存器AX。

53、c)取类型运算符TYPE格式:TYPE 变量或标号该算符返回的结果为一数值。 d)取变量单元数运算符LENGTH格式:LENGTH 变量如果一个变量已用重复操作符DUP说明其变量的个数,则利用LENGTH算符可以得到这个变量的个数。如果未用DUP说明,则得到结果总为1。 e)取变量字节数运算符 SIZE格式:SIZE 变量如果一个变量已用重复操作符DUP说明其变量的个数,则利用SIZE算符可以得到这个变量的字节总数。如果未用DUP说明,则得到的结果和TYPE算符所得结果相同。 例4.4X1 DB 08HBUF DW 01H,02H,03H,04HX108H01H存储器00HBUF02H00H0

54、3H00H04H00H01H02H03H04H例4.5BUF1 DB HELLOBUF2 DB ABBUF3 DW ABBUF1HE存储器LBUF2LOABBABUF3例4.8BUF1 DB HELLOSA_BUF DW BUF1LA_BUF DD BUF1BUF1HE存储器LSA_BUFLOLA_BUFBUF1的偏移地址BUF1的偏移地址BUF1的段基址例4.11DSEG SEGMENTORG 10HBUF DB 1234ORG $+5NUM DW 50DSEG ENDSBUF12存储器34NUM0010H0014H0019H32H00H504.4.1 系统功能调用的方法INT 21H是一个

55、具有多个子功能的中断服务程序,这些子功能的编号称为功能号。INT 21H一般称为系统功能调用。调用步骤:置入口参数功能号AH执行INT 21H分析出口参数视具体情况而定6.返回操作系统(4CH功能)无入口参数。功能:结束当前程序,返回操作系统。调用方式: MOV AH ,4CH INT 21H2.只读存储器ROM用户在使用时只能读出信息,不能写入新的信息,存储信息断电后不会丢失。用来存放固定的应用程序、系统软件、监控程序、常数表格等。分为:掩膜式ROMPROMEPROMEEPROM1)掩膜式ROM由ROM制造厂家在生产时使用掩膜式工艺将信息一次性写入,其内部信息不再能更改,所以也称固定存储器。

56、它适用于大批量生产。2)PROM由用户使用专门的编程器自行一次性写入的,一旦写入就无法更改。 3)EPROM由用户使用专门的编程器自行写入程序和数据,但写入后的信息可用紫外线照射芯片的石英窗口来擦除,芯片中信息全部擦除后可再重新写入新的内容。EPROM可以多次擦除、多次写入。4)EEPROMElectrically Erasable Programmable Read - Only Memory 用电信号进行擦除和写入信息,芯片不离开插件板便可擦除部分或全部信息和写入其中信息。EEPROM为经常需要修改程序和参数的应用领域提供了极大的方便,但存取速度较慢,价格较贵。 表5.3 图5.11存储器

57、芯片的地址范围 图5.14 8088系统字位扩展的接线图 表5.5表5.5 图5.14存储器芯片的地址范围 1.I/O端口统一编址又称为存储器映射编址方式,即把每个I/O端口都当作一个存储单元看待,按照存储单元的编址方式统一安排端口的地址。优点:可以用访问内存的方法来访问I/O端口。由于访问内存的指令种类丰富、寻址方式多样,因此这种编址方式为访问外设带来了很大的灵活性。同时,I/O控制信号也可与存储器的控制信号共用,从而给应用带来了很大的方便。缺点:外设占用了一部分内存地址空间,这就减少了内存可用的地址范围。此外从指令上不易区分当前是对内存进行操作还是对外设进行操作。 Intel MCS-51

58、等系列的单片微型计算机和Motorola公司的MC6800、MC68000及68HC05等微处理器就采用统一编址方式。2.I/O端口独立编址 内存地址空间和外设地址空间是相互独立的。8086/8088系统的内存地址范围为00000HFFFFFH,共1M空间,而外设端口的地址范围为0000HFFFFH,共64K空间。这两个地址空间相互独立,互不影响。CPU在寻址内存和外设时,使用不同的控制信号来区分当前是对内存操作还是对I/O端口操作。例如8086的M/IO和8088的IO/M信号。指令系统中单独设置有专用的I/O指令。优点:将输入输出指令和访问存储器的指令明显区分开,使程序清晰,可读性好,而且

59、I/O指令长度短,执行的速度快,也不占用内存空间;I/O地址译码电路较简单,缺点:必须有专门的IN和OUT指令,这些指令的功能没有访问存储器指令强,也增加了指令系统的规模。另外,CPU要能提供区分存储器和I/O的控制信号。 6.2 CPU与外设之间的数据传送方式无条件方式6.2.1查询方式6.2.2中断方式6.2.3DMA方式6.2.41.中断源及其分类 引起中断的事件就称为中断源。分为两大类:内部中断源:来自CPU内部,如:CPU执行指令时产生的异常、特殊操作引起的异常以及由程序员安排在程序中的INT n软件中断指令。中断的控制完全是在CPU内部实现的。外部中断源:来自CPU外部,如:如键盘

60、、打印机、定时器时间到、电源掉电、硬件出错等。利用CPU的两条中断输入信号线INTR和NMI来告诉CPU已发生了中断事件。(1)除法出错中断在执行除法指令时,若发现除数为0或商超过了结果寄存器所能表示的最大范围,则立即产生一个中断类型码为0的中断。 (2)单步中断8086/8088 CPU的标志寄存器中有一位陷阱标志TF。CPU每执行完一条指令都会检查TF的状态。若发现TF=1,则CPU就产生中断类型码为1的中断,使CPU转向单步中断的处理程序。单步中断广泛地用于程序的调试。 (3)断点中断8086/8088指令系统中有一条专用于设置断点的指令INT 3。CPU执行该指令就会产生一个中断类型码

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论