微机原理及接口技术PPT课件_第1页
微机原理及接口技术PPT课件_第2页
微机原理及接口技术PPT课件_第3页
微机原理及接口技术PPT课件_第4页
微机原理及接口技术PPT课件_第5页
已阅读5页,还剩277页未读 继续免费阅读

下载本文档

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

文档简介

1、 微机原理与应用微机原理与应用 第一章微型计算机基础知识第一章微型计算机基础知识 第二章指令系统和汇编语言程序设计第二章指令系统和汇编语言程序设计 第三章第三章8088的总线周期与总线操作的总线周期与总线操作 第四章微型计算机的输入第四章微型计算机的输入/输出输出 第五章常见接口电路第五章常见接口电路 第六章存储器及其接口第六章存储器及其接口 第七章数第七章数/模和模模和模/数转换数转换第第2章指令系统和汇编语言程序设计章指令系统和汇编语言程序设计 2.18086/8088的寻址方式的寻址方式 2.28086/8088指令格式指令格式 2.38086/8088指令系统指令系统 2.4汇编语言程

2、序设计汇编语言程序设计 2.1 8086/8088的寻址方式的寻址方式 一条指令需解决:一是进行何种操作;另一一条指令需解决:一是进行何种操作;另一个是操作数和操作结果在何处。个是操作数和操作结果在何处。 操作数的寻址方式有以下几种:操作数的寻址方式有以下几种: 立即数寻址立即数寻址寄存器寻址寄存器寻址直接寻址直接寻址寄存器间接寻址寄存器间接寻址寄存器相对寻址寄存器相对寻址基址加变址寻址基址加变址寻址相对的基址加变址寻址相对的基址加变址寻址 例:指令形式:例:指令形式:MOV AX, 0000H; AX 0000H助记符目的操作数助记符目的操作数 源操作数源操作数一、立即数寻址一、立即数寻址

3、操作数紧跟在操作码的后面,与操作码一起放在码段操作数紧跟在操作码的后面,与操作码一起放在码段区域,立即数可以为区域,立即数可以为8位,也可以为位,也可以为16位。位。 例:例:MOV AL,80H;AL80H 机器码:机器码:B0 80HB080AL00000H00001H存储器存储器M代代码码段段B8001000010H00011H00012HAH AL代代码码段段MOV AX,1000H;AX 1000H 机器码:机器码:B8 00 10H立即寻址的说明:立即寻址的说明: 1. 立即数只能是整数;立即数只能是整数;2. 立即数可以是立即数可以是8位数或位数或16位数,若是位数,若是16位数

4、,位数,要求低字节数放在低地址中,高字节数放在高要求低字节数放在低地址中,高字节数放在高地址中。地址中。3. 该指令主要用来对该指令主要用来对R赋值;赋值;4. 不运行总线周期,速度快;不运行总线周期,速度快;5. 立即数只能作源操作数。立即数只能作源操作数。一、立即数寻址(续)一、立即数寻址(续)二、寄存器寻址二、寄存器寻址 操作数包含在操作数包含在CPU的内部寄存器中。的内部寄存器中。 例:例:MOV AX,BX;AX BX MOV CL,DH;CL DH 说明:说明: 1. 对对16位操作数来说,寄存器可以为位操作数来说,寄存器可以为AX、BX、CX、DX、SI、DI、SP、BP。2.

5、对对8位操作数来说,寄存器可为位操作数来说,寄存器可为AH、AL、BH、BL、CH、CL、DH、DL。3. 操作在操作在CPU内部进行,不需要使用总线,执行内部进行,不需要使用总线,执行速度快。速度快。4. 一条指令中,既可以对源操作数采用该方式,一条指令中,既可以对源操作数采用该方式,也可以对目的操作数采用该方式,也可以两者都用也可以对目的操作数采用该方式,也可以两者都用寄存器寻址方式。寄存器寻址方式。三、直接寻址三、直接寻址 操作数地址的操作数地址的16位偏移地址直接包含在指令中,但位偏移地址直接包含在指令中,但操作数一般在存储器(数据段区域)中,它的地址操作数一般在存储器(数据段区域)中

6、,它的地址为为DS加上它加上它16位地址偏移量。位地址偏移量。 例:例:MOV AX,1018H;AL 1018H ; AH 1019H 设设CS1000H,IP0000H,DS2000H 物理地址:物理地址:CS16IP10000H DS16逻辑地址逻辑地址21018H说明:说明:(1)如果指令前面没有用前缀指明操作数在)如果指令前面没有用前缀指明操作数在哪一段,则默认为段寄存器是数据段寄存器哪一段,则默认为段寄存器是数据段寄存器DS;(2)如果要对其他段寄存器所指出的存储区)如果要对其他段寄存器所指出的存储区进行直接寻址,则本条指令前必须用前缀指出进行直接寻址,则本条指令前必须用前缀指出段

7、寄存器名。段寄存器名。BB AAAH AL1810AABB10000H10001H10002H21018H21019H存储器存储器M代代码码段段数数据据段段三、直接寻址三、直接寻址 操作数的存储区是在操作数的存储区是在DS段以外的段中,则应段以外的段中,则应在指令中指定段跨越前缀:在指令中指定段跨越前缀: MOV BX, ES:2000H 设设ES3000H,则指令执行后是将,则指令执行后是将32000H和和32001H两单元的内容取出送两单元的内容取出送BX中。中。 有时用符号地址代替数值地址,有时用符号地址代替数值地址, MOV AX, BUFFER 等价于等价于 MOV AX, BUFF

8、ER四、寄存器间接寻址四、寄存器间接寻址 操作数的有效地址由寄存器操作数的有效地址由寄存器BX、BP、SI、DI中的一中的一个指出。个指出。 如果指令前面没有用前缀指明具体的段寄存器,则如果指令前面没有用前缀指明具体的段寄存器,则寻址时,对寻址时,对BX、SI、DI,默认的段寄存器通常为,默认的段寄存器通常为DS;对对BP,默认的段寄存器为,默认的段寄存器为SS。 例:例:MOV AX,BX;AL BX ;AH BX1 设设 DS2000H,BX5000H 物理地址物理地址DS 16BX 25000H 注:指令中也可用段超越前缀,对其他段寄存器所注:指令中也可用段超越前缀,对其他段寄存器所指的

9、存储区进行寻址。指的存储区进行寻址。四、寄存器间接寻址四、寄存器间接寻址例:例:MOV AX,BX;AL BX ;AH BX1代码:代码:8B07设设 DS2000H,BX5000H CS1000H,IP0000H物理地址:物理地址:代码段:代码段:CS 16IP10000H数据段:数据段:DS 16BX25000HBB AAAH AL 8B07AABB10000H10001H10002H25000H25001H存储器存储器M代代码码段段数数据据段段五、寄存器相对寻址(变址寻址)五、寄存器相对寻址(变址寻址) 有效地址是由一个基址或变址寄存器的内容加上一有效地址是由一个基址或变址寄存器的内容加

10、上一个个8位或位或16位的位移量来得到的,即位的位移量来得到的,即 例:例:MOV AX,COUNTBP; 注:若用注:若用BP,那么默认,那么默认的段寄存器就是的段寄存器就是SS。 EA BX BP SI DI 8位位 16位位 等价于:等价于:MOVAX,COUNTBP 设设SS3000H,BP2000H,COUNT1050H 则有效地址为:则有效地址为:EA2000H1050H3050H 物理地址物理地址30000H3050H33050H 注:这种方式可使用段超越前缀。注:这种方式可使用段超越前缀。 例:例:MOV AX, BX20H; ALBX+20H,AH BX+21HAL 3305

11、0H, AH 33051H五、寄存器相对寻址(变址寻址)五、寄存器相对寻址(变址寻址)例:例: MOVAX,COUNTBP;代码:代码:8B86设设SS3000H,BP2000H,COUNT1050H有效地址为:有效地址为:EA2000H1050H3050H物理地址:物理地址:堆栈段堆栈段30000H3050H33050HBB AAAH AL 8B86AABB10000H10001H10002H33050H33051H存储器存储器M代代码码段段堆堆栈栈段段六、基址加变址寻址六、基址加变址寻址 将一个基址寄存器(将一个基址寄存器(BX、BP)的内容加上一)的内容加上一个变址寄存器(个变址寄存器(

12、SI、DI)的内容来形成操作)的内容来形成操作数的有效地址。数的有效地址。 例:例:MOV AX,BXSI; 或或MOVAX,BXSI;AL BXSI AH BXSI+1 设设DS1000H,BX0200H,SI2000H 则有效地址则有效地址EA0200H2000H2200H 物理地址物理地址DS16EA 12200H七、相对的基址加变址寻址七、相对的基址加变址寻址 操作数的有效地址是一个基址寄存器的内容,加上操作数的有效地址是一个基址寄存器的内容,加上一个变址寄存器的内容,再加上个一个变址寄存器的内容,再加上个8位或位或16位的位移位的位移量。量。 例:例:MOV AX,MASKBXSI

13、或或 MOVAX,MASK+BX+SI ;AL MASK+BXSI ; AH MASK+BXSI1 设设DS3000H,BX1000H,SI0050H,MASK0034H EAMASKBXSI1084H 物理地址物理地址DS16EA 31084H 注:可利用注:可利用BP灵活地访问堆栈。灵活地访问堆栈。2.2 8086/8088的指令格式的指令格式 指令格式指令格式 指令执行时间指令执行时间2.2 8086/8088的指令格式的指令格式 一、指令的基本构成一、指令的基本构成 8086/8088的指令为的指令为16个字节。个字节。12个字节是操作码;个字节是操作码;3 6个字节是操作数;个字节是

14、操作数;操作码操作码DW操作码操作码SWD7 D0操作码中的操作码中的3个特征位:个特征位:D0,指明寄存器是源操作数;,指明寄存器是源操作数; 1,指明寄存器是目的操作数;,指明寄存器是目的操作数;W0,指明字节操作;,指明字节操作;= 1,指明字操作;,指明字操作;S:符号扩展位。:符号扩展位。2.2 8086/8088的指令格式的指令格式 说明:说明:REG:表明寄存器的编码;:表明寄存器的编码;R/M:指明寄存器:指明寄存器/存储器;存储器;MOD:指明存储器寻址还寄存器寻址。:指明存储器寻址还寄存器寻址。一、指令的基本构成一、指令的基本构成通常用机器指令的第二个字节来表示操作通常用机

15、器指令的第二个字节来表示操作数的寻址方式。数的寻址方式。MOD REGR/MD7 D0例例1:MOV AX,1090H 代码:代码:B8 90 10HD7 D0D7 D0D7 D01011 W REG dataL dataH1 000B 90H 10H B8 90 10M代代码码段段例例2. MOV AL,80H 0 000B 80H 代码:代码:B0 80H 计算机如何执行?计算机如何执行? 设设 CS1000H, IP0500HD7 D0 D7 D01011 W reg dataL 10000H 10500H CS16 IP B0 80 AL M代代码码段段80例例3:MOV BX2000

16、H,12ABH D7 D0 D7 D0 D7 D0 D7 D0 D7 D0 D7 D0 1100 011 w mod 000 r/m dispL dispH dataL dataH 1 10 111B 00H 20H ABH 12H 代码:代码:C7 87 00 20 AB 12H 设设BX1200H,DS3000H CS1800H,IP0500H代码段物理地址:代码段物理地址: CS16IP18500H M C7 87 00 20 AB 12 CS16 18000H IP 18500H代代码码段段数据段物理地址:数据段物理地址: 有效地址:有效地址: EABX2000H3200H 物理地址:

17、物理地址: DS 16EA33200H DS 16 30000H EA 33200H AB 12数数据据段段例例4:INC DI代码:代码:47D7 D00 1 0 0 0 reg111B例例5:MOV AX,BXD7 D0 D7 D0100010 D W mod reg r/m 源源 0 1 11 011 000D7 D0 D7 D0100010 D W mod reg r/m代码:代码:89 D8 目的目的 1 1 11 000 011代码:代码:8B C3二、指令执行时间二、指令执行时间 一条指令的执行时间是取指令,取操作数,一条指令的执行时间是取指令,取操作数,执行指令及传送结果所需时

18、间的总和。执行指令及传送结果所需时间的总和。 执行一条指令的时间除基本执行时间外,还执行一条指令的时间除基本执行时间外,还与以下诸多因素有关:与以下诸多因素有关: 注:注:1. 与计算有效地址(与计算有效地址(EA)时间有关;)时间有关; 2. 与与BIU访问存储器的次数有关;访问存储器的次数有关; 3. 与存储数据是从偶地址开始还是奇地址开与存储数据是从偶地址开始还是奇地址开始有关。始有关。 4. 从存储器送往寄存器快;反之,从寄存器从存储器送往寄存器快;反之,从寄存器送往存储器慢;送往存储器慢; 5. 跳转指令跳转时间长,顺序执行时间短。跳转指令跳转时间长,顺序执行时间短。2.3 8086

19、/8088的指令系统的指令系统 8086/8088指令系统中的指令大致可分为如指令系统中的指令大致可分为如下几类:下几类: 数据传送指令数据传送指令算术运算指令算术运算指令逻辑运算和移位指令逻辑运算和移位指令串操作指令串操作指令控制转移指令控制转移指令处理器控制指令处理器控制指令指令中,符号的说明:指令中,符号的说明: ac 累加器累加器 reg寄存器寄存器 sp 堆栈指针堆栈指针 segreg 段寄存器段寄存器 mem 存储器操作数存储器操作数 mem/reg 存储器或寄存器操作数存储器或寄存器操作数 port IO端口地址端口地址 disp 8位或位或16位位移量位位移量 data8位或位

20、或16位数据位数据 src,dst 源和目的操作数源和目的操作数 存储单元的内容存储单元的内容 ( ) 寄存器或存储单元的内容寄存器或存储单元的内容一、数据传送指令一、数据传送指令 8086/8088有四类传送指令:有四类传送指令: (1)通用传送指令)通用传送指令(2)累加器专用传送指令)累加器专用传送指令(3)地址目的传送指令)地址目的传送指令(4)标志传送指令)标志传送指令 实现:实现:1. CPU内部寄存器之间内部寄存器之间 2. CPU和存储器之间和存储器之间 3. CPU和和I/O之间之间的数据传送。的数据传送。(一)通用传送指令(一)通用传送指令 最基本的传送指令最基本的传送指令

21、MOV 堆栈指令堆栈指令PUSH和和POP 数据交换指令数据交换指令XCHG1. 最基本的传送指令最基本的传送指令 MOV 目的操作数,源操作数目的操作数,源操作数 ; (目的目的)(源源) 实现:实现: (1)MOVmem/reg1,mem/reg2(2)MOVreg,data(3)MOVmem/reg,data(4)MOVac,mem(5)MOVmem,ac(6)MOVsegreg,mem/reg(7)MOVmem/reg,segreg 注意:(注意:(1)M M (2)该类指令不影响标志寄存器)该类指令不影响标志寄存器。例如:MOV AL,BL;MOV AX,DX;MOV AX,BX;A

22、L BX,AH BX1MOV CL,1000H;CL 1000HMOV AX,2000H;AL 2000H,AH 2001HMOV BYTE PTR1000H,0;1000H 00HMOV WORD PTRSI,6070H;SI 70H SI1 60H例如: MOVBL, 32H; BL32HMOVAX, 2280H; AL80H, AH 22HMOVDS, AX; DSLAL, DSHAHMOVSS, BX; SSLBL, SSHBH 注意:注意:1、CS和和IP不能作为目的操作数;不能作为目的操作数;*2、立即数不能直接送段寄存器;、立即数不能直接送段寄存器;*3、段寄存器之间不能传送数据

23、、段寄存器之间不能传送数据例1:地址指针地址指针 2000H计数初值计数初值 100送数送数修改指针修改指针计数器计数器-1=0?结束结束YN 将存储区中将存储区中2000H单元开始的单元开始的100个个字节字节的数,的数,送到送到3000H单元开始的存储区中,编制此程序。单元开始的存储区中,编制此程序。 M 2000H 2063H M 3000H 3063H例1:(续) MOV SI,2000H MOV DI,3000H MOV CX,64H NEXT:MOV AL,SI MOV DI,AL INC SI INC DI DEC CX JNZ NEXT将存储区中将存储区中2000H单元开始的单

24、元开始的100个个字节字节的数,送的数,送到到3000H单元开始的存储区中,编制此程序。单元开始的存储区中,编制此程序。地址指针地址指针 2000H计数初值计数初值 100送数送数修改指针修改指针计数器计数器-1=0?结束结束YN例2:地址指针地址指针 2000H计数初值计数初值 100送数送数修改指针修改指针计数器计数器-1=0?结束结束YN 将存储区中将存储区中2000H单元开始的单元开始的100个个字字的数,送的数,送到到3000H单元开始的存储区中,编制此程序。单元开始的存储区中,编制此程序。 M 2000H 20C7H M 3000H 30C7H例: MOV SI,2000H MOV

25、 DI,3000H MOV CX,64H NEXT:MOV AX,SI MOV DI,AX INC SIINC SI INC DI INC DI DEC CX JNZ NEXT将存储区中将存储区中2000H单元开始的单元开始的100个个字字的数,的数,送到送到3000H单元开始的存储区中,编制此程序。单元开始的存储区中,编制此程序。地址指针地址指针 2000H计数初值计数初值 100送数送数修改指针修改指针计数器计数器-1=0?结束结束YN2. 堆栈操作指令堆栈操作指令 何谓堆栈?何谓堆栈? 数据按照后进先出(数据按照后进先出(LIFOLast In first Out)的原则进行)的原则进行

26、存储的部件。存储的部件。 SP的的初值初值可由可由MOV SP,nnnn指令来设定。指令来设定。 SP的初值规定了所用堆栈的大的初值规定了所用堆栈的大小,入栈操作时,小,入栈操作时,SP的值,逐的值,逐渐靠近渐靠近SS。栈顶栈顶栈底栈底 SS 16 SS 16+SP M 为什么需要设置堆栈?为什么需要设置堆栈? 转向中断子程序转向中断子程序1 转向中断子程序转向中断子程序2 主程序主程序 中断子程序中断子程序1 中断子程序中断子程序2 X1 Y1 IP X2 Y2 返回中断子程序返回中断子程序1 返回主程序返回主程序 继续继续 执行执行 中断中断 子程序子程序2 堆栈操作指令堆栈操作指令 分类

27、:分类:1. 入栈操作指令入栈操作指令PUSH; 2. 出栈操作指令出栈操作指令POP。 特点:堆栈操作总是按字进行的;特点:堆栈操作总是按字进行的; 注意:注意:CS的值可以入栈,反之不行;的值可以入栈,反之不行; 用途:保护现场;恢复现场。用途:保护现场;恢复现场。(1)入栈指令)入栈指令PUSH PUSH 源操作数字源操作数字 入栈操作,把一个字从源操作数传送至入栈操作,把一个字从源操作数传送至由由SP所指向的堆栈的顶部。同时进行修改堆所指向的堆栈的顶部。同时进行修改堆栈指针的,即栈指针的,即SP2 SP。 格式:格式:PUSH reg PUSH mem/reg PUSH segreg例

28、例1:PUSH BX 代码:代码:53H 设设CS1000H IP0030H BX2340H SS2000H SP0040H 10000H 10030H 20000H 20040H CS段段 首址首址 SS段段 首址首址 栈底栈底 CS16 IP SS16 SP 53 BX BH BL 23 40例例1:PUSH BX 代码:代码:53H 设设CS1000H IP0030H BX2340H SS2000H SP0040H 指令执行时:指令执行时: 1. SPSP1 ; 53 10000H 10030H 20000H 2003FH CS段段 首址首址 SS段段 首址首址 栈底栈底 CS16 IP

29、 SS16 SP BX BH BL 23 40栈顶例例1:PUSH BX 代码:代码:53H 设设CS1000H IP0030H BX2340H SS2000H SP0040H 指令执行时:指令执行时: 1. SPSP1 ; 2. SP BH; 10000H 10030H 20000H CS段段 首址首址 SS段段 首址首址 栈底栈底 CS16 IP SS16 53 BX BH BL SP 2003FH 23 23 40栈顶例例1:PUSH BX 代码:代码:53H 设设CS1000H IP0030H BX2340H SS2000H SP0040H 指令执行时:指令执行时: 1. SPSP1

30、; 2. SP BH; 3. SPSP1 ; 10000H 10030H 20000H CS段段 首址首址 SS段段 首址首址 栈底栈底 CS16 IP SS16 53 BX BH BL SP 2003EH 23 23 40栈顶例例1:PUSH BX 代码:代码:53H 设设CS1000H IP0030H BX2340H SS2000H SP0040H 指令执行时:指令执行时: 1. SP SP1 ; 2. SPBH; 3. SPSP1 ; 4. SPBL。 53 10000H 10030H 20000H CS段段 首址首址 SS段段 首址首址 栈底栈底 CS16 IP SS16 BX BH

31、BL 40 23 SP 2003EH 40 新栈顶新栈顶 IP 10031H 23(2)出栈指令)出栈指令POP POP 目的操作数字目的操作数字 出栈操作,把现行出栈操作,把现行SP所指向的堆栈顶部所指向的堆栈顶部的一个字,送至指定的目的操作数。同时进的一个字,送至指定的目的操作数。同时进行修改堆栈指针的操作,即行修改堆栈指针的操作,即SP2SP。 格式:格式:POP reg POP mem/reg POP segreg例例2:POP BX 代码:代码:5BH 设设CS1000H IP0020H SS1500H SP003CH 10000H 10020H 15000H 1503CH CS段段

32、 首址首址 SS段段 首址首址 栈顶栈顶 CS16 IP SS16 SP BX BH BL 5B 11 22 33 44例例2:POP BX 代码:代码:5BH 设设CS1000H IP0020H SS1500H SP003CH 指令执行时:指令执行时: 1. BLSP; 10000H 10020H 15000H 1503CH CS段段 首址首址 SS段段 首址首址 栈顶栈顶 CS16 IP SS16 SP BX BH BL 11 22 33 44 5B 11 11 22 33 44例例2:POP BX 代码:代码:5BH 设设CS1000H IP0020H SS1500H SP003CH 指

33、令执行时:指令执行时: 1. BLSP; 2. SPSP1; 10000H 10020H 15000H CS段段 首址首址 SS段段 首址首址 CS16 IP SS16 BX BH BL 22 33 44 5B SP 1503DH 11栈顶例例2:POP BX 代码:代码:5BH 设设CS1000H IP0020H SS1500H SP003CH 指令执行时:指令执行时: 1. BLSP; 2. SPSP1; 3. BHSP; 5B 10000H 10020H 15000H CS段段 首址首址 SS段段 首址首址 CS16 IP SS16 BX BH BL 22 33 44 11 22 SP

34、1503DH栈顶 5B例例2:POP BX 代码:代码:5BH 设设CS1000H IP0020H SS1500H SP003CH 指令执行时:指令执行时: 1. BLSP; 2. SPSP1; 3. BHSP; 4. SPSP1。 10000H 10020H 15000H CS段段 首址首址 SS段段 首址首址 新栈顶新栈顶 CS16 IP SS16 BX BH BL 11 22 SP 1503EH 33 443. 数据交换指令数据交换指令 XCHG 目的操作数,源操作数目的操作数,源操作数 功能:(功能:(1)实现字节交换、字交换;)实现字节交换、字交换; (2)RR; (3)R M。 格

35、式:格式:XCHG reg,ac XCHG reg,mem/reg注意:(注意:(1)M M (2)CS、IP既不能作为源操作数,既不能作为源操作数, 也不能作为目的操作。也不能作为目的操作。例:例: XCHG AL,BLXCHC BX,CXXCHG 2530H,CX;2530H CL ;2531H CH(二)累加器专用传送指令(二)累加器专用传送指令 累加器累加器AL或或AX作为数据传输的核心。作为数据传输的核心。 通过通过IN指令和指令和OUT指令,实现指令,实现CPU与与I/O端口之间的信息传送。端口之间的信息传送。 分类:分类:1. 输入(输入(IN)/(OUT)输出指令)输出指令2.

36、 换码指令换码指令XLAT1. 输入(输入(IN)/ 输出(输出(OUT)指令)指令 输入:输入:CPU可以从一个可以从一个8位端口读入位端口读入1个字节个字节到到AL中,也可以从两个连续的中,也可以从两个连续的8位端口读位端口读1个个字到字到AX中。中。 输出:输出:CPU可以将可以将AL中的中的1个字节写到一个个字节写到一个8位端口中,或将位端口中,或将AX中的中的1个字写到两个连续个字写到两个连续的的8位端口中。位端口中。 分类:分类:1. 直接的输入直接的输入/输出指令输出指令 2. 间接的输入间接的输入/输出指令输出指令(1)直接的输入)直接的输入/输出指令输出指令 用于端口地址为用

37、于端口地址为8位时的情况位时的情况 最多只能有最多只能有256个端口地址,个端口地址, 格式:格式:IN ac,port8OUTport8,ac 例:例:IN AL,50H;AL(50H) IN AX,70H;AL (70H),),AH (71H) OUT 50H,AL;(;(50H) AL OUT 70H,AX;(;(70H) AL (71H) AH(2)间接的输入)间接的输入/输出指令输出指令 端口地址必须由端口地址必须由DX指出。共有指出。共有21665536个个端口地址。端口地址。 格式:格式:IN ac,dxOUTdx ,ac 例:例:IN AL,DX;AL (DX)IN AX,DX

38、;AL (DX),),AH (DX1)OUT DX,AL;(;(DX) ALOUT DX,AX;(DX) AL,(DX1) AH 2. 换码指令换码指令XLAT 功能:它可以使累加器中的一个值变换为内存功能:它可以使累加器中的一个值变换为内存 表格中的某一个值,一般用来实现编码表格中的某一个值,一般用来实现编码 制的转换。制的转换。 (AL) BX+AL 使用条件:表的首地址使用条件:表的首地址BX 偏移地址偏移地址 AL执行该指令后将查出内容送执行该指令后将查出内容送AL。 a f b e c d g +5v h g f e d c b a D7 D0 0/h g f e d c b a 例

39、:将十进制数字(例:将十进制数字(09)翻译成七段显示码)翻译成七段显示码的译码表。的译码表。 数字数字 0 1 2 3 4 5 6 7 8 9 g f e d c b a 1 0 0 0 0 0 0 1 1 1 1 0 0 1 0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 16进制数进制数 40H 79H 24H 30H 19H 12H 02H 78H 00H 18H 七段译码表七段译码表假定该译码表在当假定该译码表

40、在当前的数据段中,表首距前的数据段中,表首距段首偏移为段首偏移为0050H,并,并设设CS2000H,IP0045H,DS1000H,AL05H,BX0050H。 程序:程序: MOV BX,0050H MOV AL,05H XLAT; 指令执行前指令执行前 40 79 24 30 19 12 02 78 00 18 BB 50 00 B0 05 D7 表首表首 地址地址 CS 首址首址 DS16 10000H BX 10050H AL 10055H CS16 20000H IP 20045H 05假定该译码表在当前的数据段中,表首距段首偏移为0050H,并设CS2000H,IP0045H,D

41、S1000H,AL05H,BX0050H。 程序: MOV BX,0050H MOV AL,05H XLAT; 指令执行后 40 79 24 30 19 12 02 78 00 18 BB 50 00 B0 05 D7 DS 表首表首 地址地址 CS 首址首址 DS16 10000H BX 10050H AL 10055H CS16 20000H IP 2004BH 12(三)地址目的传送指令(三)地址目的传送指令 取有效地址指令取有效地址指令LEA reg,mem 将地址指针装入将地址指针装入DS和另一个寄存器的和另一个寄存器的指令指令LDS reg,mem 将地址指针装入将地址指针装入ES

42、和另一个寄存器的和另一个寄存器的指令指令LES reg,mem1. LEA(Load Effective Address) 格式:格式: LEA reg,mem 功能:将存储器地址送到一个寄存器。功能:将存储器地址送到一个寄存器。 要求:源操作数必须为内存单元地址,要求:源操作数必须为内存单元地址,目的操作数必须为一个目的操作数必须为一个16位的通用寄存位的通用寄存器。这条指令常用来使一个寄存器作为器。这条指令常用来使一个寄存器作为地址指针。地址指针。 例:例:LEA BX,1230H;BX1230H LEA BX,SI1250H ; BX SI1250H2. LDS(Load Pointer

43、 Into Register And DS) 格式:格式: LDS reg,mem 功能:把功能:把4个字节的地址指针(其中包括个字节的地址指针(其中包括一个段地址和一个偏移量)传送到两个一个段地址和一个偏移量)传送到两个目的寄存器,其中,地址指针的后目的寄存器,其中,地址指针的后2个字个字节即段地址一定送到节即段地址一定送到DS中。中。 例:例:LDS BX,1230H;BL 1230H BH 1231H DSL 1232H DSH1233H3. LES(Load Pointer Into Register And ES) 格式:格式: LES reg,mem 功能:把功能:把4个字节的地址

44、指针(其中包括个字节的地址指针(其中包括一个段地址和一个偏移量)传送到两个一个段地址和一个偏移量)传送到两个目的寄存器,其中,地址指针的后目的寄存器,其中,地址指针的后2个字个字节即段地址一定送到节即段地址一定送到ES中。中。 例:例:LES DI,1230H;DIL 1230H DIH 1231H ESL 1232H ESH 1233H(四)标志传送指令(四)标志传送指令 8086有四条标志传送指令:有四条标志传送指令: 读取标志指令读取标志指令LAHF设置标志指令设置标志指令SAHF标志寄存器入栈指令标志寄存器入栈指令PUSHF标志寄存器出栈指令标志寄存器出栈指令POPF1. 读取标志指令

45、读取标志指令LAHF2. 设置标志指令设置标志指令SAHF 注意:注意:SAHF指令影响标志位。指令影响标志位。 LAHF SAHF15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF AF PF CF 3. 标志寄存器入栈指令标志寄存器入栈指令PUSHF 把整个标志寄存器推入堆栈,同时修改堆把整个标志寄存器推入堆栈,同时修改堆栈指针,即栈指针,即SP SP2。 4. 标志寄存器出栈指令标志寄存器出栈指令POPF 把现行堆栈指针所指的一个字,传送给标把现行堆栈指针所指的一个字,传送给标志寄存器,同时修改堆栈指针,即志寄存器,同时修改堆栈

46、指针,即SP SP2。 注:注:POP指令影响标志寄存器指令影响标志寄存器F。二、算术运算指令二、算术运算指令 加法指令加法指令 减法指令减法指令 乘法指令乘法指令 除法指令除法指令 BCD码运算指令码运算指令 注:该类指令执行后将影响标志位注:该类指令执行后将影响标志位 1. 数值的范围:有符号数值的范围:有符号 8位:位:-128+127 16位:位:-32768+32767 无符号无符号 8位:位:0255 16位:位:065535(一)涉及的一些问题(一)涉及的一些问题 2. 符号符号: (1)加、减法指令对有符号数和无符号数用同一套指)加、减法指令对有符号数和无符号数用同一套指令。无

47、符号数用令。无符号数用CF来检查;有符号数用来检查;有符号数用OF来检查。来检查。 (2)乘、除法对有符号数和无符号数需采用不同的指)乘、除法对有符号数和无符号数需采用不同的指令。令。例例1: 0 0 0 0 0 0 1 10 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 无进位,无溢出无进位,无溢出 OF0,SF0,ZF0,CF0例2: 0 0 0 0 1 0 0 0 8 8 1 1 1 1 1 0 1 1 251 -5的补码的补码无符号无符号 有符号有符号 1 0 0 0 0 0 0 1 1 有进位,无溢出有进位,无溢出 无:无:CF1 有:有:CF1,SF0,ZF0,OF?

48、 OFCy7 Cy6=0例3: 0 0 0 0 1 0 0 0 8 8 0 1 1 1 1 1 0 0 124 124无符号无符号 有符号有符号 1 0 0 0 0 1 0 0 无进位,有溢出无进位,有溢出 无:无:CF0 有:有:CF0,SF1,ZF0,OF? OFCy7 Cy61 结果:结果:-124例4: 1 0 0 0 0 1 1 1 135 -121的补码的补码 1 1 1 1 0 1 0 1 245 -11的补码的补码无符号无符号 有符号有符号 1 0 1 1 1 1 1 0 0 有进位,有溢出有进位,有溢出 无:无:CF1 有:有:CF1,SF0,ZF0,OF1 结论:结论:CF

49、1,则表示无符号数运算产生了溢出;,则表示无符号数运算产生了溢出; OF1,则表示有符号数运算产生了溢出。,则表示有符号数运算产生了溢出。小结: 无符号数运算结果产生溢出只有唯一的一种原无符号数运算结果产生溢出只有唯一的一种原因,就是超过了最大表示范围,因此溢出也就因,就是超过了最大表示范围,因此溢出也就是有进位。这是一种因果关系,而不是出错情是有进位。这是一种因果关系,而不是出错情况。实际上,在多字节运算时,正是利用溢出况。实际上,在多字节运算时,正是利用溢出来传递低位字节往高位字节的进位。来传递低位字节往高位字节的进位。 有符号数运算产生溢出表示出现了错误,这与有符号数运算产生溢出表示出现

50、了错误,这与无符号数运算产生溢出的情况不同。无符号数运算产生溢出的情况不同。(二)(二) 加法指令加法指令 不带进位的加法指令不带进位的加法指令ADD带进位的加法指令带进位的加法指令ADC增量指令增量指令INC1. 不带进位的加法指令不带进位的加法指令ADD ADD 目的操作数,源操作数目的操作数,源操作数;目的目的目的源目的源 格式:格式:ADD ac, data ADD mem/reg, data ADD mem/reg1, mem/reg2 例:例:ADD AL,50H;AL AL50H ADD AX,1000H;AX AX1000H ADD SI,DI;SI SIDI ADD BXDI

51、,AX ;BX+DI+1BX+DI ; BX+DI+1BX+DIAX2. 带进位的加法指令带进位的加法指令ADC ADC 目的操作数,源操作数目的操作数,源操作数 ;目的;目的目的源目的源CF 格式:格式:ADC ac, data ADC mem/reg, data ADC mem/reg1, mem/reg2 例:例:ADC AX,SI;AX AXSICF ADC BX,2000H;BX BX2000HCF ADC AX,2000H;AX AX ;2001H2000H+CF 例:例:2000H和和3000H单元开始的单元开始的4个单元的内个单元的内容相加,其和送往容相加,其和送往2000H单

52、元开始的单元开始的4个单元中。个单元中。 MOV SI,2000HMOV AX,SIMOV DI,3000H ADD AX,DIMOV SI,AX MOV AX,SI2ADC AX,DI2 MOV SI2,AX2000H3000H3. 增量指令增量指令INC INC 操作数操作数;操作数;操作数 操作数操作数1 格式:格式:INC reg INC mem/reg 例:例:INC AX;AX AX1 INC BYTE PTR1000H ;1000H 1000H+1 注:该指令对注:该指令对CF不起作用不起作用(三)减法指令(三)减法指令 不考虑借位的减法指令不考虑借位的减法指令SUB 考虑借位的

53、减法指令考虑借位的减法指令SBB 减量指令减量指令DEC 求补指令求补指令NEG 比较指令比较指令CMP1. 不考虑借位的减法指令不考虑借位的减法指令SUB SUB 目的操作数,源操作数目的操作数,源操作数;目的目的目的源目的源 格式:格式: SUB ac, data SUB mem/reg, data SUB mem/reg1, mem/reg2 例:例: SUB BX,CX;BX BXCX SUB BX+2,CL;BX+2 BX+2CL SUB WORD PTRDI,1000H;DI+1DI ; DI+1DI1000H2. 考虑借位的减法指令考虑借位的减法指令SBB SBB 目的操作数,源

54、操作数目的操作数,源操作数 ;目的目的目的源目的源CF 格式:格式:SBB ac, data SBB mem/reg, data SBB mem/reg1, mem/reg2 例:例: SBB AX,2030H;AX AX2030HCF SBB WORD PTRDI+2,1000H ;DI+3DI+2 ; DI+3DI+21000HCF3. 减量指令减量指令DEC 4. 求补指令求补指令NEG 例:例:DEC AX ;AX AX1 DEC BYTE PTR1000H ;1000H ; 1000H1例:例:NEG AX;AX !AX1格式:格式:DECreg DEC mem/reg 格式:格式:

55、NEGreg NEG mem/reg 5. 比较指令比较指令CMP CMP 目的操作数,源操作数目的操作数,源操作数;目的源目的源 格式:格式: CMP ac, dataCMP mem/reg, data CMP mem/reg1, mem/reg2 例:例: CMP AX,2000H;AX2000H CMP AL,50H;AL50H CMP AX,BXDI100;AXBX+DI+100 CMP DX,DI;DXDI 比较在执行时,会影响标志位比较在执行时,会影响标志位AF、CF、OF、PF、SF和和ZF。 如何根据上述标志来判断比较结果呢?如何根据上述标志来判断比较结果呢? 例:例:CMP

56、AL,BL;ALBL 如果两数相等,那么标志位如果两数相等,那么标志位ZF1;否则,;否则,ZF0。 如果两数不等(如果两数不等(ZF0),分两种情况:),分两种情况:(1)两个无符号数的比较)两个无符号数的比较 CF0,ALBL CF1,ALBL (2)两个有符号数的比较)两个有符号数的比较 检测检测SF、OF标志标志 OF0,SF0 ALBL SF1 ALBL OF1,SF0 ALBL SF1 ALBL 即即 SF OF0 ALBL SF OF1 ALBL检测检测SF、OF标志:标志:(有符号数)(有符号数)在在8086转移指令中,有两条用于判断带符号数大小转移指令中,有两条用于判断带符号

57、数大小的转移指令:的转移指令:大于大于 JG/JNLE;条件;条件SF OF0,且,且ZF0小于小于 JL/JNGE;条件;条件SF OF0,且,且ZF0例例1:自:自2000H单元开始单元开始有有100个字节的有符号个字节的有符号数,找出其中最大的一数,找出其中最大的一个数放在个数放在3000H单元。单元。编此程序。编此程序。低于置地址指针置地址指针 SI计数初值计数初值 CX第一个数第一个数 AL修改修改SI送高值送高值修改修改SI存结果存结果 两数比较?两数比较? 计数器计数器-1=0?结束结束 Y N MOV SI,2000H MOV DI,3000H MOV CX,99;9963H

58、MOV AL,SINEXT:INC SI CMP AL,SI JGE DONE ;大于或等于 ;则转DONE MOV AL,SIDONE:DEC CX JNZ NEXT MOV DI,AL HLT程序:程序:低于置地址指针置地址指针 SI计数初值计数初值 CX第一个数第一个数 AL修改修改SI送高值送高值修改修改SI存结果存结果 两数比较?两数比较? 计数器计数器-1=0?结束结束 Y N(四)乘法指令(四)乘法指令 如果两个如果两个8位数据相乘,那么,会得到一位数据相乘,那么,会得到一个个16位的乘积;两个位的乘积;两个16位数据相乘,那位数据相乘,那么会得到一个么会得到一个32位的乘积。位

59、的乘积。 8086在执行乘法指令时,有一个乘数是在执行乘法指令时,有一个乘数是在在AL/AX中,乘积必在中,乘积必在AX/DX.AX中中 乘法指令的种类:乘法指令的种类:无符号数相乘无符号数相乘MUL有符号数相乘有符号数相乘IMUL1. 无符号数相乘无符号数相乘MUL 格式:格式:MUL mem/reg 例:例: MUL BX ;DX.AXAX BX MUL BYTE PTRDI;AX AL DI 如果结果的高半部分不为如果结果的高半部分不为0,则标志,则标志CF1,OF1;否则;否则CF0,OF0。对对AF、PF、SF、ZF等未定义。等未定义。2. 有符号数相乘有符号数相乘IMUL 格式:格

60、式:IMUL mem/reg 要求必须是两个带符号数相乘,功能与要求必须是两个带符号数相乘,功能与MUL完全类似。完全类似。 例:例: IMUL CX;DX.AX AX CX IMUL BL;AX AL BL(五)除法指令(五)除法指令 8086中规定除数必为被除数的一半字长中规定除数必为被除数的一半字长 被除数固定放在被除数固定放在AX/DX.AX中中 指令中仅给出除数的长度和形式,计算机根指令中仅给出除数的长度和形式,计算机根据给定的除数长度来确定被除数为据给定的除数长度来确定被除数为16位还是位还是32位。位。 AX/R(8)=AL 余数在余数在AH中中 DX.AX/R(16)=AX 余

温馨提示

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

评论

0/150

提交评论