怎么根据adj端的mv级电压采样电路值,计算对应的采样值

当前位置: >>
微机原理及接口技术实验教程(5.2版)
80X86 微机原理及接口技术实验教程西安唐都科教仪器公司Copyright Reserved 2009 版 权 声 明本实验教程的版权归西安唐都科教仪器开发有限责任公司所有,保留一切权 利。未经本公司书面许可,任何单位和个人不得擅自摘抄、复制本实验教程的部分 或全部,并以任何形式传播。西安唐都科教仪器开发有限责任公司,2009(C),All Right Reserved.80X86 微机原理及接口技术实验教程 ?版权所有 未经许可 严禁复制 技术支持邮箱: 唐都公司网址:http://www.tangdu.com 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司目录第 1 章 实模式下的 80X86 机器组织........................................................................1 1.1 80X86 寄存器........................................................................................... 1 1.2 80X86 存储器寻址 .................................................................................... 3 1.3 80X86 指令集........................................................................................... 4 第 2 章 16 位微机原理及其程序设计实验 ................................................................ 14 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 系统认识实验 .......................................................................................... 14 数制转换实验 .......................................................................................... 19 运算类编程实验 ....................................................................................... 26 分支程序设计实验.................................................................................... 31 循环程序设计实验.................................................................................... 34 排序程序设计实验.................................................................................... 36 子程序设计实验 ....................................................................................... 39 查表程序设计实验.................................................................................... 43 输入输出程序设计实验.............................................................................. 45第 3 章 32 位指令及其程序设计实验 ...................................................................... 49 3.1 80X86 指令及程序设计 ............................................................................ 49 3.2 32 位指令及寻址实验 ............................................................................... 51 第 4 章 80X86 微机接口技术及其应用实验 ............................................................. 59 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 静态存储器扩展实验................................................................................. 59 8259 中断控制实验 ................................................................................. 62 DMA特性及 8237 应用实验 ...................................................................... 70 8254 定时/计数器应用实验 ...................................................................... 77 8255 并行接口实验 ................................................................................. 82 8251 串行接口应用实验 ........................................................................... 87 A/D转换实验.......................................................................................... 99 D/A转换实验........................................................................................ 103 键盘扫描及显示设计实验 ........................................................................ 106 电子发声设计实验 ................................................................................ 111 点阵LED显示设计实验 ......................................................................... 116 图形LCD显示设计实验 ......................................................................... 124 步进电机实验 ...................................................................................... 131 直流电机闭环调速实验.......................................................................... 134 温度闭环控制实验 ................................................................................ 144I 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司第 5 章 保护模式下的 80X86 机器组织 ................................................................ 154 5.1 实模式和保护模式.................................................................................. 154 5.2 寄存器组织 ........................................................................................... 154 5.3 保护模式下的分段存储管理机制 ............................................................... 156 5.4 任务管理的概念 ..................................................................................... 162 5.5 任务内的控制转移.................................................................................. 165 5.6 任务间的控制转移.................................................................................. 168 5.7 中断/异常管理 ...................................................................................... 169 5.8 80X86 保护模式程序设计 ....................................................................... 172 第 6 章 保护模式微机原理及其程序设计实验 ......................................................... 179 6.1 6.2 6.3 6.4 描述符及描述符表实验............................................................................ 179 特权级变换实验 ..................................................................................... 193 任务切换实验 ........................................................................................ 206 中断与异常处理实验............................................................................... 220第 7 章 80X86 虚拟存储器的组织及其管理 ........................................................... 233 7.1. 分段管理机制 ....................................................................................... 233 7.2. 分页管理机制 ....................................................................................... 240 第 8 章 保护模式下的存储器扩展及其应用实验 ...................................................... 246 8.1. 无分页机制的存储器扩展实验................................................................... 246 8.2. 具有分页机制的存储器扩展实验................................................................ 250 附录 1 Wmd86 V5.2 联机软件使用说明............................................................... 256 附 1.1 附 1.2 附 1.3 附 1.4 菜单功能 .......................................................................................... 256 工具栏功能介绍 ................................................................................. 259 专用图形显示 .................................................................................... 261 Debug调试命令 ................................................................................ 262附录 2 系统实验程序清单................................................................................... 264 附录 3 系统编程信息 ......................................................................................... 267 附 3.1 地址分配情况 .................................................................................... 267 附 3.2 INT 21H功能调用说明 ....................................................................... 268 附录 4 I386EX系统板引出管脚排列及名称 ........................................................... 269II 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司第1章实模式下的 80X86 机器组织微处理器发展是从
开始,经 8、8 直到现在的 Pentium 及 Core2 等微处理器。无论哪种微处理器,从 80386 开始都统称为 80X86 系列微 机。80X86 支持实模式和保护模式两种运行模式。在实模式下,80X86 相当于一个可以进行 32 位处理的快速 ,所有为
设计的程序几乎都可适用于 80X86 处理 器。1.180X86 寄存器80X86 寄存器的宽度大多是 32 位,可分为如下几组:通用寄存器、段寄存器、指令指针 及标志寄存器、系统地址寄存器、调试寄存器和测试寄存器。应用程序主要使用前三组寄存器, 只 有 系 统 程 序 才 会 使 用 各 种 寄 存 器 。 这 些 寄 存 器 是 80X86 系 统 微 处 理 器 先 前 处 理 器 (、80186 和 80286)寄存器的超集,所以,80X86 包含了先前微处理器的全 部 16 位寄存器。 没有系统地址寄存器和控制寄存器等。1.1.1通用寄存器80X86 有 8 个 32 位通用寄存器,这 8 个寄存器分别命名为 EAX、ECX、EDX、EBX、 ESP、EBP、ESI 和 EDI。它们是原先的 16 位通用寄存器的扩展,请参考图 1.1。这些通用1 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司寄存器的低 16 位可以作为 16 位的寄存器独立存取,并把它们命名为 AX、CX、DX、BX、 SP、BP、SI 和 DI,它们也就是 X86 系列微处理器先前的 8 个 16 位通用寄存器。 存取这些 16 位的寄存器时,相应的 32 位通用寄存器的高 16 位不受影响。与先前的微处 理器一样,AX、BX、CX、DX 这 4 个 16 位的数据寄存器的高 8 位和低 8 位可以被独立存取, 分别命名为 AH、AL,BH、BL,CH、CL,DH、DL。在存取这些 8 位寄存器时,相应的 16 位寄存器的其它位不受影响,相应的通用寄存器的其它位也不受影响。 这些 32 位通用寄存器不仅可以传送数据、暂存数据、保存数据,而且还可以在基址和变 址寻址时,存放地址。例如: MOV EAX,H MOV [EBX],EAX ADD EAX,[EBX+ESI+1] MOV AL,[ECX+EDI+1234] SUB CX,[EAX-12] 在以前的微处理器中,只有 BX、BP、SI 和 DI 可以在基地址和变址寻址时存放地址,而 现在 80X86 的 8 个 32 位通用寄存器都可以作为指针寄存器使用, 所以说这些 32 位通用寄存 器更具有通用性。1.1.2段寄存器80X86 有 6 个 16 位段寄存器,分别命名为 CS、SS、DS、ES、FS 和 GS。在实模式下, 代码段寄存器 CS、堆栈段寄存器 SS、数据段寄存器 DS 和附加段寄存器 ES 的功能与以前微 处理器中对应段寄存器的功能相同。FS 和 GS 是 80X86 新增加的段寄存器。因此,80X86 上运行的程序可同时访问多达 6 个段。 在实模式下,内存单元的逻辑地址仍然是“段值:偏移”形式。为了访问一个给定内存段 中的数据,可直接把相应的段值装入某个段寄存器中。例如: MOV AX,SEG BUFFER MOV FS,AX MOV AX,FS:[BX]1.1.3指令指针和标志寄存器80X86 的指令指针和标志寄存器也是以前微处理器的指令指针 IP 和标志寄存器 FLAG 的 32 位扩展。 1. 指令指针寄存器 80X86 的指令指针寄存器扩展到 32 位,记为 EIP。EIP 的低 16 位是 16 位的指令指针 IP,它与以前微处理器中的 IP 相同。IP 寄存器提供了用于执行 8086 和 80286 代码的指令指 针。由于实模式下段的最大范围是 64K,所以 EIP 中的高 16 位必须是 0,仍然相当于只有低2 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司16 位的 IP 起作用。 2. 标志寄存器 80X86 的指令寄存器也扩展到 32 位,记为 EFLAGS。与
的 16 位标志寄存 器相比,增加了 4 个控制标志,分别为:IO 特权标志 IOPL、嵌套任务标志 NT、重启动标志 RF、虚拟 8086 方式标志 VM。它们分别是: (1)IO 特权标志 IOPL(I/O Privilege Level) :位 12、13,按特权级从高到低取值:0, 1,2 和 3。只有当前特权级 CPL 在数值上小于或等于 IOPL,I/O 指令才可以执行。 (2)嵌套任务标志 NT(Nested Task) :位 14,在保护模式下中断和 CALL 指令可以引 起任务切换, 任务切换时令 NT=1, 否则 NT 清零。 在中断返回指令 IRET 执行时, 如果 NT=1, 则中断返回引起任务切换,否则只产生任务内的控制转移。 (3)重启动标志 RF(Restart Flag) :位 16,重启动标志控制是否接受调试故障。 (4)虚拟 86 方式标志 VM(Virtual 8086 Mode) :位 17,在保护模式下 VM=1 时, 32 位处理器工作在虚拟 86 模式下。 以上 4 个控制标志位在实模式下不起作用,从 80386 开始的 32 位处理器都有。还有 4 个标志位:对齐检查标志 AC(位 18) 、虚拟中断允许标志 VIF、虚拟中断挂起标志 VIP、标识 标志位 CD,后三个只对 Pentium 有效。32 位标志寄存器的内容如图 1.2 所示。31
21 20 19 18 17 16 15 14 13 12 I D V I P V I F A C V R M F 0 N T IOPL 11 10 O F D F 9 I F 8 T F 7 S F 6 Z F 5 0 4 A F 3 0 2 P F 1 1 0 C F图 1.2 32 位标志寄存器1.280X86 存储器寻址80X86 支持以前微处理器的各种寻址方式。 在立即寻址方式和寄存器寻址方式中, 操作数 可达 32 位宽。在存储器寻址方式中,不仅操作数可达 32 位,而且寻址范围和方式更加灵活。1.2.1存储器寻址80X86 继续采用分段的方法管理存储器。 存储器的逻辑地址由段基地址和段内偏移两部分 表示,存储单元的地址由段地址加上段内偏移所得。段寄存器指示段基地址,各种寻址方式决 定段内偏移。 在实模式下,段基地址是 16 的倍数,段的最大长度是 64K。段寄存器内所含的是段基地 址对应的段值,存储单元的物理地址是段寄存器内的段值乘 16 加上段内偏移。所以,80X86 在实模式下与
相似。 DS 寄存器是主要的数据段寄存器, 对于访问除堆栈外的数据段它是一个默认的段寄存器。3 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司在以 BP 或 EBP 或 ESP 作为基地址寄存器访问堆栈时,默认的段寄存器是 SS。某些字符串 操作指令总是使用 ES 段寄存器作为目标操作数的段寄存器。此外 CS、SS、ES、FS 和 GS 也都可以作为访问数据时引用的段寄存器,但必须显式地在指令中指定。 一般的,使 DS 含有最经常访问的数据段的段值,而用 ES、FS 和 GS 含有那些不经常使 用的数据段的段值。例如: MOV EAX,[SI] ;默认段寄存器 DS MOV [BP+2],EAX ;默认段寄存器 SS MOV AL,FS:[BX] ;显式指定段寄存器 FS MOV GS:[BP],DX ;显式指定段寄存器 GS1.2.2存储器寻址方式80X86 支持以前微处理器所支持的各种存储器寻址方式, 各种存储器寻址方式表示的都是 有效地址。 80X86 不仅支持各种 16 位偏移的存储器寻址方式,而且还支持 32 位偏移的存储器寻址 方式。80X86 允许内存地址的偏移可以由三部分内相加构成:一个 32 位基址寄存器,一个可 乘上比例因子 1、2、4 或 8 的 32 位变址寄存器,及一个 8 位或 32 位的常数偏移量。如果含 变址寄存器,那么变址寄存器中的值先按给定的比例因子放大,再加上偏移。 在所有寻址方式中,对数据的访问所默认引用的段寄存器取决于所选择的基址寄存器。如 果基址寄存器是 ESP 或者 EBP,那么默认的段寄存器从通常的 DS 改为 SS。对于别的基址寄 存器的选择,包括没有基址寄存器的情况,DS 仍然是默认的段寄存器。1.2.3支持各种数据结构80X86 支持的“基地址+变址+位移量”寻址方式能进一步满足各高级语言支持的数据结 构的需要。标量变量、记录、数组、记录的数组和数组的记录等数据结构可方便地利用 80X86 的这种寻址方式实现。1.380X86 指令集80X86 的指令集包含了 、80186 和 80286 指令集。可分为如下:数据传送 指令、算术运算指令、逻辑运算和移位指令、控制转移指令、串操作指令、高级语言支持指令、 条件字节设置指令、位操作指令、处理器控制指令和保护方式指令。 80X86 是 32 位处理器, 其指令的操作数长度可以是 8 位、 位或者是 32 位。 16 对于 80X86 而言,32 位操作数是对 16 位操作数的扩展。80X86 既支持 16 位存储器操作数地址,又支持 32 位的存储器操作数有效地址的扩展。所以,80X86 支持的 32 位操作数的指令往往就是对4 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司相应支持 16 位操作数指令的扩展; 80X86 的 32 位存储器操作数有效地址方式往往就是对 16 位存储器操作数有效地址寻址方式的扩展。1.3.1数据传送指令数据传送指令实现在寄存器、内存单元或 I/O 端口之间传送数据和地址。80X86 的数据 传送指令仍分成四种:通用数据传送指令、累加器专用传送指令、地址传送指令和标志传送指 令。 1. 通用传送指令组 80X86 的通用传送指令组含有如下十条指令:数值传送指令 MOV、符号扩展指令 MOVSX、零扩展指令 MOVZX、交换指令 XCHG、进栈指令 PUSH、PUSHA、PUSHAD、 退栈指令 POP、POPA、POPAD。 (1)数值传送指令 MOV MOV 指令与
的 MOV 指令相同,可传送 8 位、16 位或 32 位数据。 (2)符号扩展指令 MOVSX 和零扩展指令 MOVZX 符号扩展指令的格式如下: MOVSX DST,SRC 该指令功能是把源操作数 SRC 的内容送到目的操作数 DST,目的操作数空出的位用源操 作数的符号位填补。 零扩展指令的格式如下: MOVZX DST,SRC 该指令功能是把源操作数 SRC 的内容送到目的操作数 DST,目的操作数空出的位用零填 补。 符号扩展指令和零扩展指令中的目的操作数 DST 必须是 16 位或 32 位寄存器,源操作数 SRC 可以是 8 位或 16 位寄存器,也可以是 8 位或 16 位存储器操作数。如果源操作数和目的 操作数都是字,那么就相当于 MOV 指令。 这两条指令各不影响标志。 (3)交换指令 XCHG XCHG 指令与
的 XCHG 指令相同,可传送 8 位、16 位或 32 位数据。 (4)进栈指令 PUSH 进栈指令 PUSH 与
格式一样, 但功能增强了, 压入堆栈的操作数还可以是立 即数。从 80X86 开始,操作数长度还可以达 32 位,那么堆栈指针减 4。 (5)出栈指令 POP POP 指令与
的 POP 指令相同,可弹出 32 位操作。 (6)16 位全进栈指令 PUSHA 和全出栈指令 POPA PUSHA 指令和 POPA 指令提供了压入或弹出 8 个 16 位通用寄存器的有效手段,它们的 格式如下: PUSHA5 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司POPA PUSHA 指令将所有 8 个通用寄存器(16 位)内容压入堆栈,其顺序是:AX、CX、DX、 BX、SP、BP、SI、DI,然后堆栈指针寄存器 SP 的值减 16,所以 SP 进栈的内容是 PUSHA 执行之前的值。 POPA 指令从堆栈弹出内容以 PUSHA 相反的顺序送到这些通用寄存器, 从而恢复 PUSHA 之前的寄存器内容。但堆栈指针寄存器 ESP 的值不是由堆栈弹出,而是通过增加 16 来恢复。 这两条指令各不影响标志。 (7)32 位全进栈指令 PUSHAD 和全出栈指令 POPAD PUSHAD 指令和 POPAD 指令提供了压入或弹出 8 个 32 位通用用寄存器的有效手段, 它 们的格式如下: PUSHAD POPAD PUSHAD 指令将所有 8 个通用寄存器(32 位)内容压入堆栈,其顺序是:EAX、ECX、 EDX、EBX、ESP、EBP、ESI、EDI,然后堆栈指针寄存器 ESP 的值减 32,所以 ESP 进 栈的内容是 PUSHAD 执行之前的值。 POPAD 指令从堆栈弹出内容以 PUSHAD 相反的顺序送到这些通用寄存器,从而恢复 PUSHAD 之前的寄存器内容。但堆栈指针寄存器 SP 的值不是由堆栈弹出,而是通过增加 32 来恢复。 这两条指令各不影响标志。 2. 地址传送指令组 (1)装入有效地址指令 LEA 装入有效地址指令的格式和功能同 。源操作数仍然必须是存储器操作数,目 的操作数是 16 位或者 32 位通用寄存器。当目的操作数是 16 位通用寄存器时,那么只装入有 效地址的低 16 位。 (2)装入指针指令组 装入指针指令组有 5 条指令,格式如下: LDS REG,OPRD LES REG,OPRD LFS REG,OPRD LGS REG,OPRD LSS REG,OPRD 这 5 条指令的功能是将操作数 OPRD 所指内存单元的 4 个或 6 个相继字节单元的内容送 到指令助记符给定的段寄存器和目的操作数 REG 中。 目的操作数必须是 16 位或 32 位通用寄 存器,源操作数是存储器操作数。 如果目的操作数是 16 位通用寄存器,那么源操作数 OPRD 含 32 位指针。如果目的操作 数是 32 位通用寄存器,那么源操作数 OPRD 含 48 位指针。如: LSS SP,SPVAR ;SPVAR 是含有堆栈指针的双字 这些指令各不影响标志。 3. 标志传送指令组6 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司80X86 的标志传送指令组含有以下 6 条指令: LAHF、 SAHF、 PUSHF、 PUSHFD、 POPF 和 POPFD。 指令 LAHF、SAHF、PUSHF 和 POPF 指令格式和功能与
相同。 32 位标志寄存器进栈和出栈指令的格式如下: PUSHFD POPFD PUSHFD 指令将整个标志寄存器的内容压入堆栈; POPFD 指令将栈顶的一个双字弹出到 32 位的标志寄存器中。这两条指令是 PUSHF 和 POPF 指令的扩展。 PUSHFD 指令不影响各标志,POPFD 指令影响各标志。 4. 累加器专用传送指令组 80X86 累加器专用传送指令组含有如下指令:IN、OUT 和 XLAT。 输入指令 IN、OUT 与
相同,但可以通过累加器 EAX 输入、输出一个双字。 如: IN EAX,20H ;从 20H 端口输入一个双字 OUT 20H,EAX ;输出一个双字到 20H 端口 表转换指令 XLAT 的格式和功能与
相同。但是从 80X86 开始存放基值的寄 存器可以是 EBX。 也就是说, 扩展的 XLAT 指令以 EBX 为存放基值的寄存器, 非扩展的 XLAT 指令以 BX 为存放基值的寄存器。1.3.2算术运算指令80X86 算术运算指令的操作数可以扩展到 32 位, 同时与
相比还增强了有符 号数乘法指令的功能。 1. 加法和减法指令组 加法和减法指令组的功能与
相同,有 8 条指令:ADD、ADC、INC、SUB、 SBB、DEC、CMP 和 NEG。但在 80X86 下指令的操作数可以扩展到 32 位,如: ADD EAX,ESI ADC EAX,DWORD PTR [BX] INC EBX SUB ESI,4 SBB DWORD PTR [EDI],DX DEC EDI CMP EAX,EDX NEG ECX 2. 乘法和除法指令组 乘法和除法指令组含有 4 条指令:MUL、DIV、IMUL 和 IDIV。 (1)无符号数乘法和除法指令 无符号数乘法 MUL 指令和除法指令 DIV 指令的格式没有变。指令中只给出一个操作数,7 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司自动根据给出的操作数确定另一个操作数。当指令中给出的源操作数为字节或字时,它们与
相同。 在源操作数为双字的情况下,乘法指令 MUL 默认的另一个操作数是 EAX,其功能是把 EAX 内容乘上源操作数内容所得积送入 EDX:EAX 中,若结果的高 32 位为 0,那么标志 CF 和 OF 被清 0,否则被置 1;除法指令 DIV 默认的被除数是 EDX:EAX,其功能是把指令中 给出的操作数作为除数,所得的商送 EAX,余数送 EDX。 (2)有符号数乘法和除法指令 原有的有符号数乘法指令 IMUL 和除法指令 IDIV 继续保持,但操作数可以扩展到 32 位。 当操作数为 32 位时,它与无符号数乘法指令相同。 另外,80X86 还提供了新形式的有符号数乘法指令。如: IMUL DST,SRC IMUL DST,SRC1,SRC2 上述第一种格式是将目的操作数 DST 与源操作数 SRC 相乘,结果送到目的操作数 DST 中;第二种格式是将 SRC1 和 SRC2 相乘,结果送到目的操作数 DST 中。 3. 符号扩展指令组 80X86 的符号扩展指令有 4 条:CBW、CWD、CWDE 和 CDQ。 其中 CBW 和 CWD 的功能没有发生变化;指令 CWDE 和 CDQ 是 80X86 新增的指令, 它们的格式如下: CWDE CDQ 指令 CWDE 将 16 位寄存器 AX 的符号位扩展到 32 位寄存器 EAX 的高 16 位中。 该指令 是指令 CBW 的扩展。 指令 CDQ 将寄存器 EAX 的符号位扩展到 EDX 的所有位。该指令是指令 CWD 的扩展。 这些指令均不影响各标志。 4. 十进制调整指令组 十进制调整指令 DAA、 DAS、 AAA、 AAS、 AAM 和 AAD, 6 条指令的功能与
这 相同。1.3.3逻辑运算和移位指令80X86 的逻辑运算和移位指令包括逻辑运算指令、 一般移位指令、 循环移位指令和双精度 移位指令。 1. 逻辑运算指令组 逻辑运算指令 NOT、AND、OR、XOR 和 TEST 这 5 条指令,除了其操作数可以扩展到 32 位外,其它功能与
相同。 2. 一般移位指令组 一般移位指令组含有 3 条指令:SAL/SHL、SAR 和 SHR。算术左移指令 SAL 和逻辑左 移指令 SHL 是相同的。8 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司从 80X86 开始,操作数可扩展到 32 位。尽管这些指令的格式没有变化,但移位位数的表 达增强了。实际移位位数的变化范围是 0 至 31。 3. 循环移位指令组 循环移位指令组有 4 条指令:ROL、ROR、RCL 和 RCR。 从 80X86 开始,对循环指令 ROL 和 ROR 而言,实际移位的位数将根据被移位的操作数 的长度取 8、16 或 32 位的模;对带进位循环移位指令 RCL 和 RCR 而言,移位位数先取指令 中规定的移位位数的低 5 位,再根据被移位的操作数的长度取 9、17 或 32 位的模。 4. 双精度移位指令组 双精度移位指令 SHLD 和 SHRD 从 80X86 开始才有,其格式如下: SHLD OPRD1,OPRD2,m SHRD OPRD1,OPRD2,m 其中,OPRD1 可以是 16 位通用寄存器、16 位存储单元、32 位通用寄存器或者 32 位存 储单元;操作数 OPRD2 的长度必须与操作数 OPRD1 和长度一致,并且只能是 16 位通用寄 存器或者是 32 位通用寄存器;m 是移位位数,或者是 8 位立即数,或者是 CL。 双精度左移指令 SHLD 的功能是把操作数 OPRD1 左移指定的 m 位,空出的位用操作数 OPRD2 高端的 m 位填补,但操作数 OPRD2 的内容不变,最后移出的位保留在进位标志 CF 中。如果只移 1 位,当进位标志和最后的符号位不一致是,置溢出标志 OF,否则清 OF。 双精度右移指令 SHRD 的功能是把操作数 OPRD1 右移指定的 m 位,空出的位用操作数 OPRD2 低端的 m 位填补,但操作数 OPRD2 的内容不变,最后移出的位保留在进位标志 CF 中。当移位位数是 1 时,OF 标志受影响,否则清 OF。1.3.4控制转移指令控制转移指令可分为以下 4 组:转移指令、循环指令、过程调用和返回指令、中断调用指 令和中断返回指令。 1. 转移指令组 (1)无条件转移指令 无条件转移指令 JMP 在分为段内直接、段内间接、段间直接和段间间接四类的同时,还 具有扩展形式,扩展的无条件转移指令的转移目的地址偏移采用 32 位表示,段间转移目的地 址采用 48 位全指针形式表示。 在实模式下,无条件转移指令 JMP 的功能几乎没有提高。尽管 80X86 的无条件转移指令 允许把 32 位的段内偏移送到 EIP,但在实模式下段最大 64K,段内偏移不能超过 64K,所以 不需要使用 32 位的段内偏移。 (2)条件转移指令 80X86 的条件转移指令(除 JCXZ 和 JECXZ 指令处)允许用多字节来表示转移目的地 偏移与当前偏移之间的差,所以转移范围可起出-128~+127。 在 80X86 中,当寄存器 CX 的值为时,转移的指令 JCXZ 可以被扩展到 JECXZ,如: JECXZ OK9 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司它表示当 32 位寄存器 ECX 为 0 时,转移到标号 OK 处。 2. 循环指令组 循环指令组含有 3 条指令:LOOP、LOOPZ/LOOPE 和 LOOPNZ/LOOPNE。这三条循 环指令的非扩展形式保持原功能。 它们的扩展形式使用 ECX 作为计数器, 即从 CX 扩展到 ECX。 3. 过程调用和返回指令组 过程调用指令 CALL 在分为段内直接、段内间接、段间直接和段间间接四种的同时,还具 有扩展形式。扩展的调用指令的转移目的地址偏移采用 32 位表示。对于扩展的段间调用指令, 转移目的地址采用 48 位全指针形式表示, 而且在把返回地址的 CS 压入堆栈时扩展成高 16 位 为 0 的双字,这样会压入堆栈 2 个双字。 过程返回指令 RET 在分为段内返回和段间返回的同时,还分别具有扩展形式。扩展的过 程返回指令要从堆栈弹出双字作为返回地址的偏移。如果是扩展的段间返回指令,执行时要从 堆栈弹出包含 48 位返回地址全指针的 2 个双字。 在实模式下,段内过程调用指令和返回指令 RET 的非扩展形式,它们与
的 CALL 和 RET 相同。 4. 中断调用和中断返回指令组 在实模式下,中断调用指令 INT 和中断返回指令 IRET 的功能与
的相同。1.3.5串操作指令从 80X86 开始,串操作的基本单位在字节和字的基础上增加了双字。 1. 基本串操作指令 对应于字节和字为元素的基本串操作指令没有变化。对应于双字为元素的基本串操作指令 格式为: LODSD ;串装入指令 STOSD ;串存储指令 MOVSD ;串传送指令 SCANSD ;串扫描指令 CMPSD ;串比较指令 其中,LODSD、STOSD 和 SCANSD 指令使用累加器 EAX;在 DF=0 时,每次执行串 操作后相应指针加 4,在 DF=1 时,每次串操作后相应指针减 4。 这些以双字为元素的基本串操作指令的功能和使用方法与以字节或字为元素的基本串操作 指令一样。它们分别是对应以字为元素的串操作指令的扩展。 2. 重复前缀 重复前缀 REP、REPZ/REPE 和 REPNZ/REPNE,在仍采用 16 位地址偏移指针的情况 下以 CX 作为重复计数器,在采用 32 位地址偏移的扩展情况下以 ECX 作为重复计数器。由于 实模式下通常采用 16 位指针,所以一般仍以 CX 作为计数器。 3. 串输入指令 串输入指令的格式如下:10 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司INSB ;输入字节 BYTE INSW ;输入字 WORD INSD ;输入双字 DWORD 串输入指令从由 DX 给出端口地址的端口读入一字符,并送入由 ES:DI(或 EDI)所指 的目的串中,同时根据方向标志 DF 和字符类型调整 DI(或 EDI) 。在汇编语言中,三条串输 入指令的格式可统一如下一种格式: INS DSTS,DX 4. 串输出指令 串输出指令的格式如下: OUTSB ;输出字节 BYTE OUTSW ;输出字 WORD OUTSD ;输出双字 DWORD 串输出指令是把 DS:SI(或 ESI)所指的源串中的一个字符,输出到由 DX 给出的端口, 同时,根据方向标志 DF 和字符类型调整 SI(或 ESI) 。在汇编语言中,三条串输入指令的格 式可统一如下一种格式: OUTS DX,SRCS1.3.6条件字节设置指令从 80X86 开始新增加了一组条件字节设置指令。这些指令根据一些标志位设置某个字的 内容为 1 或 0。 条件字节设置指令的一般格式为: SET** OPRD 共有以下 30 个指令: SETZ SETE SETNZ SETNE SETS SETNS SETO SETNO SETP SETPE SETNP SETPO SETB SETNAE SETC SETNB SETAE SETNC SETBE SETNA SETNBE SETA SETL SETNGE SETNL SETGE SETLE SETNG SETNLE SETG1.3.7位操作指令从 80X86 开始增加了位操作指令。这些位操作指令可以直接对一个二进制位进行测试、 设置和扫描等操作。利用这些指令可以更有效地进行位操作。 位操作指令可分为位扫描指令和位测试及设置指令组。 1. 位扫描指令组 位扫描指令组含有 2 条指令: 顺向位扫描 BSF 指令和逆向位扫描 BSR 指令。 其格式如下:11 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司BSF OPRD1,OPRD2 BSR OPRD1,OPRD2 其中操作数 OPRD1 和 OPRD2 可以是 16 位或 32 位通用寄存器和 16 位或 32 位存储器 单元;但操作数 OPRD1 和 OPRD2 的位数长度必须相等。 顺向位扫描 BSF 指令的功能是从右向左扫描字或者双字操作数 OPRD2 中第一个含“1” 的位的位号送到操作数 OPRD1。 逆向位扫描 BSR 指令的功能是从左向右扫描字或者双字操作数 OPRD2 中第一个含“1” 的位的位号送到操作数 OPRD1。 如果字或双字操作数 OPORD2=0,那么零标志 ZF 被置 1,操作数 OPRD1 的值不确定; 否则零标志 ZF 被清 0。 2. 位测试及设置指令组 位测试及设置指令含有 4 条指令,其格式如下: BT OPRD1,OPRD2 BTC OPRD1,OPRD2 BTR OPRD1,OPRD2 BTS OPRD1,OPRD2 其中操作数 OPRD1 可以是 16 位或 32 位通用寄存器和 16 位或 32 位存储单元,用于指 定要测试的内容; 操作数 OPRD2 必须是 8 位立即数或者操作数 OPRD1 长度相等的通用寄存 器,用于指定要测试的位。1.3.8处理器控制指令处理器控制指令用于设置标志、空操作和与外部事件同步等。 1. 设置标志指令组 设置进位标志 CF 的指令 CLC、STC 和 CMC 保持原先相同。 设置方向标志 DF 的指令 CLD 和 STD 保持原先相同。 设置中断允许标志 IF 的指令 CLI 和 STI 的功能在实模式下保持与原先相同。在保持模式 下它们是 I/O 敏感指令。 2. 空操作指令组 空操作指令 NOP 的一般格式如下: NOP 空操作指令的功能是什么都不干,该指令就一个字节的操作码。 3. 外同步指令和前缀 (1)等待指令 WAIT 等待指令 WAIT 的一般格式如下: WAIT 该指令的功能是等待直到 BUSY 引脚为高。BUSY 由数值协处理器控制,所以该指令的功 能是等待数值协处理器,以便与它同步。12 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司(2)封锁前缀 LOCK 封锁前缀 LOCK 可以锁定其后指令的目的操作数确定的存储单元,这是通过使 LOCK 信 号在指令执行期间一直保持有效而实现的。13 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司第2章16 位微机原理及其程序设计实验本章主要介绍汇编语言程序设计,通过实验来学习 80X86 的指令系统、寻址方式以及程 序的设计方法,同时掌握联机软件的使用。2.12.1.1 实验目的系统认识实验掌握 TD 系列微机原理及接口技术教学实验系统的操作,熟悉 Wmd86 联机集成开发调试 软件的操作环境。2.1.2实验设备PC 机一台,TD-PITE 实验装置或 TD-PITC 实验装置一套。2.1.3实验内容编写实验程序, 00H~0FH 共 16 个数写入内存 3000H 开始的连续 16 个存储单元中。 将2.1.4实验步骤1. 运行 Wmd86 软件,进入 Wmd86 集成开发环境。 2. 根据程序设计使用语言的不同,通过在“设置”下拉列表来选择需要使用的语言和寄存 器类型,这里我们设置成“汇编语言”和“16 位寄存器” ,如图 2.1、图 2.2 所示。设置选择 后,下次再启动软件,语言环境保持这次的修改不变。本章选择 16 位寄存器。14 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司图 2.1 语言环境设置界面图 2.2 寄存器设置界面3. 语言和寄存器选择后,点击新建或按 Ctrl+N 组合键来新建一个文档,如图 2.3 所示。 默认文件名为 Wmd861。图 2.3 新建文件界面4. 编写实验程序,如图 2.4 所示,并保存,此时系统会提示输入新的文件名,输完后点击 保存。15 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司图 2.4 程序编辑界面5. 点击,编译文件,若程序编译无误,则可以继续点击进行链接,链接无误后方可以加载程序。编译、链接后输出如图 2.5 所示的输出信息。图 2.5 编译输出信息界面6. 连接 PC 与实验系统的通讯电缆,打开实验系统电源。 7. 编译、链接都正确并且上下位机通讯成功后,就可以下载程序,联机调试了。可以通过 端口列表中的“端口测试”来检查通讯是否正常。点击 下载程序。 为编译、链接、下载组合按钮,通过该按钮可以将编译、链接、下载一次完成。下载成功后,在输出区的结果窗中 会显示“加载成功!,表示程序已正确下载。起始运行语句下会有一条绿色的背景。如图 2.6 ” 所示。16 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司图 2.6 加载成功显示界面8. 将输出区切换到调试窗口, 使用 D 命令查看内存 3000H 起始地址的数据, 如图 2.7 所示。存储器在初始状态时,默认数据为 CC。图 2.7 内存地址单元数据显示9. 点击按钮运行程序, 待程序运行停止后, 通过 D 命令来观察程序运行结17 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司果。如图 2.8 所示。图 2.8 运行程序后数据变化显示10. 也可以通过设置断点,断点显示如图 2.9 所示,然后运行程序,当遇到断点时程序会 停下来,然后观察数据。可以使用 E 来改变该地址单元的数据,如图 2.10 所示, 输入 11 后,按“空格”键,可以接着输入第二个数,如 22,结束输入按“回车”键。图 2.9 断点设置显示图 2.10修改内存单元数据显示界面实验例程文件名为 Wmd861.asm。2.1.5操作练习编写程序,将内存 3500H 单元开始的 8 个数据复制到 3600H 单元开始的数据区中。通 过调试验证程序功能,使用 E 命令修改 3500H 单元开始的数据,运行程序后使用 D 命令查看 3600H 单元开始的数据。18 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司2.22.2.1 实验目的数制转换实验1. 掌握不同进制数及编码相互转换的程序设计方法,加深对数制转换的理解。 2. 熟悉程序调试的方法。2.2.2实验设备PC 机一台,TD-PITE 实验装置或 TD-PITC 实验装置一套。2.2.3实验内容及步骤计算机输入设备输入的信息一般是由 ASCII 码或 BCD 码表示的数据或字符, CPU 一般均 用二进制数进行计算或其它信息处理,处理结果的输出又必须依照外设的要求变为 ASCII 码、 BCD 码或七段显示码等。因此,在应用软件中,各类数制的转换是必不可少的。 计算机与外设间的数制转换关系如图 2.11 所示,数制对应关系如表 2.1 所示。键 盘 ASCII码 ASCII码 BCD码 二进制图 2.11二进制ASCII码 CRT显示 ASCII码 BCD码 二进制 打印机 多段显示 位显示光电机 拨码开关 数据开关主 机数制转换关系1. 将 ASCII 码表示的十进制数转换为二进制数 十进制表示为:D n × 10 n + D n ?1 × 10 n ?1 + ? ? ? + D 0 × 10 0 =∑Di =0ni× 10 i(1)Di代表十进制数 0,1,2,…,9; 上式转换为:19 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司∑Di =0ni× 10 i = (? ? ?((D n × 10 + D n ?1 ) × 10 + D n ? 2 ) × 10 + ? ? ? + D1 ) × 10 + D 0(2)由式(2)可归纳十进制数转换为二进制数的方法:从十进制数的最高位Dn开始作乘 10 加次位的操作,依次类推,则可求出二进制数的结果。表 2.1 数制对应关系表十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E FBCD 码 10 01 00 1001二进制 机器码 10 01 00 11 10 1111ASCII 码 30H 31H 32H 33H 34H 35H 36H 37H 38H 39H 41H 42H 43H 44H 45H 46H七段码 共阳 40H 79H 24H 30H 19H 12H 02H 78H 00H 18H 08H 03H 46H 21H 06H 0EH 共阴 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 67H 77H 7CH 39H 5EH 79H 71H程序流程图如图 2.12 所示。实验参考程序如下。 实验程序清单(例程文件名:A2-1.ASM)SSTACK SSTACK DATA SADD DATA CODE START: SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT DB 30H,30H,32H,35H,36H ENDS SEGMENT ASSUME CS:CODE, DS:DATA MOV AX, DATA MOV DS, AX MOV AX, OFFSET SADD MOV SI, AX MOV BX, 000AH MOV CX, 0004H MOV AH, 00H;十进制数:0025620 80X86 微机原理及接口技术实验教程 MOV AL, [SI] SUB AL, 30H IMUL BX MOV DX, [SI+01] AND DX, 00FFH ADC AX, DX SBB AX, 30H INC SI LOOP A1 JMP A2 ENDS END START西安唐都科教仪器公司A1:程序开始 初始化转换首地址 转换次数→CX 取第一位ASCII码 减去30H 乘10 加下一位ASCII码减30H NA2: CODE实验步骤 (1)绘制程序流程图,编写实验程序,经编译、链接 无误后装入系统。 (2)待转换数据存放于数据段,根据自己要求输入, 默认为 30H,30H,32H,35H,36H。 (3)运行程序,然后停止程序。 (4)查看 AX 寄存器,即为转换结果,应为:0100 。 (5)反复试几组数据,验证程序的正确性。 2. 将十进制数的 ASCII 码转换为 BCD 码 从键盘输入五位十进制数的 ASCII 码,存放于 3500H 起始的内存单元中,将其转换为 BCD 码后,再按位分别存 入 350AH 起始的内存单元内。 若输入的不是十进制的 ASCII 码,则对应存放结果的单元内容为“FF” 。由表 2.1 可知, 一字节 ASCII 码取其低四位即变为 BCD 码。 实验程序清单(例程文件名:A2-2.ASM)SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV CX, 0005H MOV DI, 3500H A1: MOV BL, 0FFH MOV AL, [DI] CMP AL, 3AH JNB A2 SUB AL, 30H JB A2 MOV BL, AL A2: MOV AL, BL MOV [DI+0AH],AL INC DI LOOP A1 MOV AX,4C00H转换完否? Y 程序结束图 2.12 转换程序流程图;转换位数 ;ASCII 码首地址 ;将错误标志存入 BL;不低于 3AH 则转 A2 ;低于 30H 则转 A2 ;结果或错误标志送入 AL ;结果存入目标地址21 80X86 微机原理及接口技术实验教程 INT 21H ENDS END START ;程序终止西安唐都科教仪器公司CODE实验步骤 (1)自己绘制程序流程图,然后编写程序,编译、链接无误后装入系统。 (2)在 3500H~3504H 单元中存放五位十进制数的 ASCII 码,即:键入 E3500 后, 输入 31,32,33,34,35。 (3)运行程序,待程序运行停止。 (4)在调试窗口键入 D350A,显示运行结果,应为:
02 03 04 05 CC … (5)反复测试几组数据,验证程序功能。 3. 将十六位二进制数转换为 ASCII 码表示的十进制数 十六位二进制数的值域为 0~65535,最大可转换为五位十进制数。 五位十进制数可表示为:N = D 4 ×10 4 + D 3 ×10 3 + D 2 ×10 2 + D1 ×10 + D 0Di:表示十进制数 0~9 将十六位二进制数转换为五位 ASCII 码表示的十进制数,就是求 D1~D4,并将它们转换 为 ASCII 码。 自行绘制程序流程图, 编写程序可参考例程。 例程中源数存放于 3500H、 3501H 中,转换结果存放于 3510H~3514H 单元中。 实验程序清单(例程文件名:A2-3.ASM)SSTACK SSTACK CODE START: SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT ASSUME CS:CODE MOV SI,3500H MOV DX,[SI] MOV SI,3515H DEC SI MOV AX,DX MOV DX,0000H MOV CX,000AH DIV CX XCHG AX,DX ADD AL,30H MOV [SI],AL CMP DX,0000H JNE A1 CMP SI,3510H JZ A3 DEC SI MOV AL,30H MOV [SI],AL JMP A2;源数据地址 ;目标数据地址A1:;除数 10 ;得商送 AX, 得余数送 DX ;得 Di 的 ASCII 码 ;存入目标地址 ;判断转换结束否,未结束则转 A1 ;与目标地址得首地址比较 ;等于首地址则转 A3,否则将剩余地址中填 30HA2:22 80X86 微机原理及接口技术实验教程 A3: CODE ENDS END START MOV AX,4C00H INT 21H西安唐都科教仪器公司;程序终止实验步骤 (1)编写程序,经编译、链接无误后,装入系统。 (2)在 3500H、3501H 中存入 0C 00。 (3)运行程序,待程序运行停止。 (4)检查运行结果,键入 D3510,结果应为:30 30 30 31 32。 (5)可反复测试几组数据,验证程序的正确性。 4. 十六进制数转换为 ASCII 码 由表 2.1 中十六进制数与 ASCII 码的对应关系可知:将十六进制数 0H~09H 加上 30H 后得到相应的 ASCII 码,AH~FH 加上 37H 可得到相应的 ASCII 码。将四位十六进制数存放 于起始地址为 3500H 的内存单元中,把它们转换为 ASCII 码后存入起始地址为 350AH 的内 存单元中。自行绘制流程图。 实验程序清单(例程文件名为 A2-4.ASM)SSTACK SSTACK CODE START: SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT ASSUME CS:CODE MOV CX,0004H MOV DI,3500H MOV DX,[DI] MOV AX,DX AND AX,000FH CMP AL,0AH JB A2 ADD AL,07H ADD AL,30H MOV [DI+0DH],AL DEC DI PUSH CX MOV CL,04H SHR DX,CL POP CX LOOP A1 MOV AX,4C00H INT 21H ENDS END START;十六进制数源地址A1:;取低 4 位 ;小于 0AH 则转 A2 ;在 A~FH 之间,需多加上 7H ;转换为相应 ASCII 码 ;结果存入目标地址A2:;将十六进制数右移 4 位;程序终止CODE实验步骤 (1)编写程序,经编译、链接无误后装入系统。 (2) 3500H、 在 3501H 中存入四位十六进制数 203B, 即键入 E3500, 然后输入 3B 20。 (3)先运行程序,待程序运行停止。23 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司(4)键入 D350A,显示结果为: 30 33 42 CC …。 (5)反复输入几组数据,验证程序功能。 5. BCD 码转换为二进制数 将四个二位十进制数的 BCD 码存放于 3500H 起始的内存单元中,将转换的二进制数存 入 3510H 起始的内存单元中,自行绘制流程图并编写程序。 实验程序清单(例程文件名为:A2-5.ASM)SSTACK SSTACK CODE START: SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT ASSUME CS:CODE XOR AX, AX MOV CX, 0004H MOV SI, 3500H MOV DI, 3510H MOV AL, [SI] ADD AL, AL MOV BL, AL ADD AL, AL ADD AL, AL ADD AL, BL INC SI ADD AL, [SI] MOV [DI], AL INC SI INC DI LOOP A1 MOV AX,4C00H INT 21H ENDS END STARTA1:;程序终止CODE实验步骤 (1)编写程序,经编译、链接无误后装入系统。 (2)将四个二位十进制数的 BCD 码存入 3500H~3507H 中,即: 先键入 E3500,然后输入 01 02 03 04 05 06 07 08。 (3)先运行程序,待程序运行停止。 (4)键入 D3510 显示转换结果,应为:0C 22 38 4E。 (5)反复输入几组数据,验证程序功能。2.2.4思考题1. 实验内容 1 中将一个五位十进制数转换为二进制数(十六位)时,这个十进制数最小 可为多少,最大可为多少?为什么? 2. 将一个十六位二进制数转换为ASCII码十进制数时,如何确定Di的值?24 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司3. 在十六进制转换为 ASCII 码时,存转换结果后,为什么要把 DX 向右移四次? 4. 自编 ASCII 码转换十六进制、十六进制小数转换二进制、二进制转换 BCD 码的程序, 并调试运行。25 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司2.32.3.1 实验目的运算类编程实验1. 掌握使用运算类指令编程及调试方法。 2. 掌握运算类指令对各状态标志位的影响及其测试方法。 3. 学习使用软件监视变量的方法。2.3.2实验设备PC 机一台,TD-PITE 实验装置或 TD-PITC 实验装置一套。2.3.3实验内容及步骤80X86 指令系统提供了实现加、减、乘、除运算的基本指令,可对表 2.2 所示的数据类 型进行算术运算。表 2.2 数据类型算术运算表数制 运算符 操作数二进制 带符号 无符号 组合 +、- +、-、×、÷ 字节、字、多精度BCD 码 非组合 +、-、×、÷ 字节(一位数字)字节(二位数字)1. 二进制双精度加法运算 计算 X+Y=Z,将结果 Z 存入某存储单元。实验程序参考如下。 本实验是双精度(2 个 16 位,即 32 位)加法运算,编程时可利用累加器 AX,先求低 16 位的和,并将运算结果存入低地址存储单元,然后求高 16 位的和,将结果存入高地址存储单 元中。由于低 16 运算后可能向高位产生进位,因此高 16 位运算时使用 ADC 指令,这样在低 16 位相加运算有进位时,高位相加会加上 CF 中的 1。 实验程序清单(例程文件名为:A3-1.ASM)SSTACK SSTACK PUBLIC DATA XL SEGMENT STACK DW 64 DUP(?) ENDS XH, XL, YH, YL, ZH, ZL SEGMENT DW ?;设置全局变量 ;X 低位26 80X86 微机原理及接口技术实验教程 XH YL YH ZL ZH DATA CODE START: DW ? DW ? DW ? DW ? DW ? ENDS SEGMENT ASSUME CS:CODE, DS:DATA MOV AX, DATA MOV DS, AX MOV AX, XL ADD AX, YL MOV ZL, AX MOV AX, XH ADC AX, YH MOV ZH, AX JMP START ENDS END START ;X 高位 ;Y 低位 ;Y 高位 ;Z 低位 ;Z 高位西安唐都科教仪器公司;X 低位加 Y 低位 ;低位和存到 Z 的低位 ;高位带进位加 ;存高位结果 ;在此行设置断点,以观察变量值CODE实验步骤 (1)编写程序,经编译、链接无误后装入系统。 (2)程序装载完成后,点击‘变量区’标签将观察窗切换 到变量监视窗口。 (3)点击 ,将变量 XH,XL,YH,YL,ZH,ZL 添加到变量监视窗中,然后修改 XH,XL,YH,YL 的值,如图 2.13 所示,修改 XH 为 0015,XL 为 65A0,YH 为 0021,YL 为 B79E。 (4)在 JMP START 语句行设置断点,然后运行程序。 (5)当程序遇到断点后停止运行,查看变量监视窗口,计 算结果 ZH 为 0037,ZL 为 1D3E。 (6)修改 XH,XL,YH 和 YL 的值,再次运行程序,观察 实验结果,反复测试几组数据,验证程序的功能。图 2.13 变量监视窗口2. 十进制的 BCD 码减法运算 计算 X-Y=Z,其中 X、Y、Z 为 BCD 码。实验程序参考例程。 实验程序清单(例程文件名为 A3-2.ASM)SSTACK SSTACK PUBLIC DATA X Y Z SEGMENT STACK DW 64 DUP(?) ENDS X, Y, Z SEGMENT DW ? DW ? DW ?;定义全局变量27 80X86 微机原理及接口技术实验教程 DATA CODE START: ENDS SEGMENT ASSUME CS:CODE, DS:DATA MOV AX, DATA MOV DS, AX MOV AH, 00H SAHF MOV CX, 0002H MOV SI, OFFSET X MOV DI, OFFSET Z MOV AL, [SI] AL, [SI+02H] DAS PUSHF AND AL, 0FH POPF MOV [DI], AL INC DI INC SI LOOP A1 JMP START ;设置断点,以方便观察变量。 ENDS END START西安唐都科教仪器公司A1: SBBCODE实验步骤 (1)输入程序,编译、链接无误后装入系统。 (2)点击 将变量 X,Y,Z 添加到变量监视窗中,并为 X,Y 赋值,假定存入 40 与12 的 BCD 码,即 X 为 0400,Y 为 0102。 (3)在 JMP START 语句行设置断点,然后运行程序。 (4)程序遇到断点后停止运行,观察变量监视窗,Z 应为 0208。 (5)重新修改 X 与 Y 的值,运行程序,观察结果,反复测试几次,验证程序正确性。 3. 乘法运算 实现十进制数的乘法运算,被乘数与乘数均以 BCD 码的形式存放在内存中, 乘数为 1 位, 被乘数为 5 位,结果为 6 位。实验程序参考例程。 实验程序清单(例程文件名为 A3-3.ASM)SSTACK SSTACK DATA DATA1 DATA2 RESULT DATA CODE START: 28 SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT DB 5 DUP(?) ;被乘数 DB ? ;乘数 DB 6 DUP(?) ;计算结果 ENDS SEGMENT ASSUME CS:CODE,DS:DATA MOV AX,DATA 80X86 微机原理及接口技术实验教程 MOV DS,AX CALL INIT MOV SI,OFFSET DATA2 MOV BL,[SI] AND BL,0FH CMP BL,09H JNC ERROR MOV SI,OFFSET DATA1 MOV DI,OFFSET RESULT MOV CX,0005H A1: MOV AL,[SI+04H] AND AL,0FH CMP AL,09H JNC ERROR DEC SI MUL BL AAM ADD AL,[DI+05H] AAA MOV [DI+05H],AL DEC DI MOV [DI+05H],AH LOOP A1 A2: MOV AX,4C00H INT 21H ;===将 RESULT 所指内存单元清零=== INIT: MOV SI,OFFSET RESULT MOV CX,0003H MOV AX,0000H A3: MOV [SI],AX INC SI INC SI LOOP A3 RET ;===错误处理=== ERROR: MOV SI,OFFSET RESULT MOV CX,0003H MOV AX,0EEEEH A4: MOV [SI],AX INC SI INC SI LOOP A4 JMP A2 CODE ENDS END START西安唐都科教仪器公司;初始化目标地址单元为 0;得到乘数;乘法调整指令;程序终止;若输入数据不符合要求则 RESULT 所指向内存单元全部写入 E实验步骤 (1)编写程序,编译、链接无误后装入系统。 (2)查看寄存器窗口获得 CS 的值,使用 U 命令可得到数据段段地址 DS,然后通过 E29 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司命令为被乘数及乘数赋值,如被乘数:01 02 03 04 05,乘数:01,方法同实验内容 1。 (3)运行程序,待程序运行停止。 (4)通过 D 命令查看计算结果,应为:00 01 02 03 04 05;当在为被乘数和乘 数赋值时,如果一个数的低 4 位大于 9,则查看计算结果将全部显示为 E。 (5)反复测试几组数据,验证程序的正确性。30 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司2.42.4.1 实验目的分支程序设计实验1. 掌握分支程序的结构。 2. 掌握分支程序的设计、调试方法。2.4.2实验设备PC 机一台,TD-PITE 实验装置或 TD-PITC 实验装置一套。2.4.3实验内容设计一数据块间的搬移程序。设计思想:程序要求把内存中一数据区(称为源数据块)传 送到另一存储区(成为目的数据块) 。源数据块和目的数据块在存储中可能有三种情况,如图 2.14 所示。0H 源 数 据 块 0H 目 的 数 据 块 0H源数据块目的数据块目 的 数 据 块源 数 据 块FFFFFHFFFFFHFFFFFH(a) 图 2.14(b) 源数据块与目的数据块在存储中的位置情况(c)对于两个数据块分离的情况,如图 2.14(a) ,数据的传送从数据块的首地址开始,或从 数据块的末地址开始均可。但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移” 而遭到破坏,可有如下结论: 当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图 2.14(b)所 示。 当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图 2.14(c)所31 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司示。 实验程序流程图如图 2.15 所示。开 始 源数据块首地址→SI 源数据块首地址→SI 搬移字节数→CX > > SI←[SI]+[CX]-1 DI←[DI]+[CX]-1 DI←[(SI)] SI←[SI]-1 DI←[DI]-1 CX←[CX]-1 N [CX]=0? Y 结 束[SI]>[DI]?DI←[(SI)]SI←[SI]+1 DI←[DI]+1CX←[CX]-1N [CX]=0? Y图 2.15程序流程图实验程序清单(例程文件名为:A4-1.ASM)SSTACK SSTACK CODE START: SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT ASSUME CS:CODE MOV CX, 0010H MOV SI, 3100H MOV DI, 3200H CMP SI, DI JA A2 ADD SI, CX ADD DI, CX DEC SI DEC DI MOV AL, [SI] MOV [DI], AL DEC SIA1:32 80X86 微机原理及接口技术实验教程 DEC DI DEC CX JNE A1 JMP A3 MOV AL, [SI] MOV [DI], AL INC SI INC DI DEC CX JNE A2 MOV AX,4C00H INT 21H ENDS END START西安唐都科教仪器公司A2:A3: CODE;程序终止2.4.4实验步骤1. 按流程图编写实验程序,经编译、链接无误后装入系统。 2. 用 E 命令在以 SI 为起始地址的单元中填入 16 个数。 3. 运行程序,待程序运行停止。 4. 通过 D 命令查看 DI 为起始地址的单元中的数据是否与 SI 单元中数据相同。 5. 通过改变 SI、DI 的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序 的功能。33 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司2.52.5.1 实验目的循环程序设计实验1. 加深对循环结构的理解。 2. 掌握循环结构程序设计的方法以及调试方法。2.5.2实验设备PC 机一台,TD-PITE 实验装置或 TD-PITC 实验装置一套。2.5.3实验内容及步骤1. 计算 S=1+2×3+3×4+4×5+…+N (N+1) 直到 N , (N+1) 项大于 200 为止。 编写实验程序,计算上式的结果,参考流程图如图 2.16 所示。 开始 实验程序清单(例程文件名为:A5-1.ASM)SSTACK SSTACK CODE START: A1: SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT ASSUME CS:CODE MOV DX,0001H MOV BL,02H MOV AL,BL INC BL MUL BL ADD DX,AX CMP AX,00C8H JNA A1 MOV AX,4C00H INT 21H ENDS END START1→DX 2→BL[BL]→AL [BL]+1→BL;结果存于 DX 中 ;判断 N(N+1)与 200 的大小[AL]×[BL]→AX [DX]+[AX]→DX[AX]&200?;程序终止结束CODE实验步骤 (1)编写实验程序,编译、链接无误后装入系统。 (2)运行程序,待程序运行停止。 (3)运算结果存储在寄存器 DX 中,查看结果是否正确。34图 2.16程序流程图 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司(4) 可以改变 N (N+1) 的条件来验证程序功能是否正确, 但要注意, 结果若大于 0FFFFH 将产生数据溢出。 2. 求某数据区内负数的个数 设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一 个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有 数据中凡是符号位为 1 的数据的个数累加起来,即得到区内所包含负数的个数。 实验程序流程图如图 2.17 所示。 实验程序清单(例程文件名为:A5-2.ASM)SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV DI, 3000H MOV CL, [DI] XOR CH, CH MOV BL, CH INC DI A1: MOV AL, [DI] TEST AL, 80H JE A2 INC BL A2: INC DI LOOP A1 MOV [DI], BL MOV AX,4C00H INT 21H CODE ENDS END START开 始数据区首地址→DI;数据区首地址 ;取数据个数数据个数→CL;指向第一个数据 ;检查数据首位是否为 1CH、BL置0DI增1;负数个数加 1数据首位=1?N;保存结果Y;程序终止BL+1→BL实验步骤 DI增1 (1)按实验流程编写实验程序。 (2)编译、链接无误后装入系统。 N CX=0? (3)键入 E3000,输入数据如下: 3000=06 (数据个数) Y 3001=12 存结果 3=82 结 束 5=22 3006=33 图 2.17 程序流程图 (4)先运行程序,待程序运行停止。 (5)查看 3007 内存单元或寄存器 BL 中的内容,结果应为 03。 (6)可以进行反复测试来验证程序的正确性。35 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司2.62.6.1 实验目的排序程序设计实验1. 掌握分支、循环、子程序调用等基本的程序结构。 2. 学习综合程序的设计、编制及调试。2.6.2实验设备PC 机一台,TD-PITE 实验装置或 TD-PITC 实验装置一套。2.6.3实验内容及步骤1. 气泡排序法 在数据区中存放着一组数,数据的个数就是数据缓冲区的长度,要求采用气泡法对该数据 区中的数据按递增关系排序。 设计思想: (1)从最后一个数(或第一个数)开始,依次把相邻的两个数进行比较,即第 N 个数与 第 N-1 个数比较,第 N-1 个数与第 N-2 个数比较等等;若第 N-1 个数大于第 N 个数, 则两者交换,否则不交换,直到 N 个数的相邻两个数都比较完为止。此时,N 个数中的最小数 将被排在 N 个数的最前列。 (2)对剩下的 N-1 个数重复(1)这一步,找到 N-1 个数中的最小数。 (3)再重复(2) ,直到 N 个数全部排列好为止。 实验程序清单(例程文件名为:A6-1.ASM)SSTACK SSTACK CODE START: SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT ASSUME CS:CODE MOV CX, 000AH MOV SI, 300AH MOV BL, 0FFH CMP BL, 0FFH JNZ A4 MOV BL, 00H DEC CX JZ A4A1:36 80X86 微机原理及接口技术实验教程 PUSH SI PUSH CX DEC SI MOV AL, [SI] DEC SI CMP AL, [SI] JA A3 XCHG AL, [SI] MOV [SI+01H], AL MOV BL, 0FFH INC SI LOOP A2 POP CX POP SI JMP A1 MOV AX,4C00H INT 21H ENDS END START西安唐都科教仪器公司A2:A3:A4: CODE;程序终止实验步骤 (1)分析参考程序,绘制流程图并编写实验程序。 (2)编译、链接无误后装入系统。 (3)键入 E3000 命令修改 3000H~3009H 单元中的数,任意存入 10 个无符号数。 (4)先运行程序,待程序运行停止。 (5)通过键入 D3000 命令查看程序运行的结果。 (6)可以反复测试几组数据,观察结果,验证程序的正确性。 2. 学生成绩名次表 将分数在 1~100 之间的 10 个成绩存入首地址为 3000H 的单元中, 3000H+I 表示学号 为 I 的学生成绩。编写程序,将排出的名次表放在 3100H 开始的数据区,3100H+I 中存放的 为学号为 I 的学生名次。 实验程序清单(例程文件名为:A6-2.ASM)SSTACK SSTACK CODE START: SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT ASSUME CS:CODE MOV AX,0000H MOV DS,AX MOV ES,AX MOV SI,3000H MOV CX,000AH MOV DI,3100H CALL BRANCH MOV AL,0AH SUB AL,CL INC ALA1:;存放学生成绩 ;共 10 个成绩 ;名次表首地址 ;调用子程序37 80X86 微机原理及接口技术实验教程 MOV BX,DX MOV [BX+DI],AL LOOP A1 MOV AX,4C00H INT 21H ;程序终止 ;===扫描成绩表,得到最高成绩者的学号=== BRANCH: PUSH CX MOV CX,000AH MOV AL,00H MOV BX,3000H MOV SI,BX A2: CMP AL,[SI] JAE A3 MOV AL,[SI] MOV DX,SI SUB DX,BX A3: INC SI LOOP A2 ADD BX,DX MOV AL,00H MOV [BX],AL POP CX RET CODE ENDS END START西安唐都科教仪器公司实验步骤 (1)绘制流程图,并编写实验程序。 (2)编译、链接无误后装入系统。 (3)将 10 个成绩存入首地址为 3000H 的内存单元中。 (4)调试并运行程序。 (5)检查 3100H 起始的内存单元中的名次表是否正确。38 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司2.72.7.1 实验目的子程序设计实验1. 学习子程序的定义和调用方法。 2. 掌握子程序、子程序的嵌套、递归子程序的结构。 3. 掌握子程序的程序设计及调试方法。2.7.2实验设备PC 机一台,TD-PITE 实验装置或 TD-PITC 实验装置一套。Y子程序开始2.7.3实验内容及步骤CX=0?N1. 求无符号字节序列中的最大值和 最小值设有一字节序列,其存储首地址为 3000H,字节数为 08H。利用子程序的 方法编程求出该序列中的最大值和最小 值。程序流程图如图 2.18 所示。SI,CX,BX入栈(SI)→BH BH→BL(SI)+1→SI (SI)→AL开 始(AL)<(BH)NAL→BHY数据区首地址→SI(AL)>(BH)NAL→BLY序列字节个数→CX(CX)-1→CXN调用子程序CX=0?Y结 束子程序返回图 2.18程序流程图 39 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司实验程序清单(例程文件名为:A7-1.ASM)SSTACK SSTACK CODE START: SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT ASSUME CS:CODE MOV AX, 0000H MOV DS, AX MOV SI, 3000H MOV CX, 0008H CALL BRANCH JMP HERE PROC NEAR JCXZ A4 PUSH SI PUSH CX PUSH BX MOV BH, [SI] MOV BL, BH CLD LODSB CMP AL, BH JBE A2 MOV BH, AL JMP A3 CMP AL, BL JAE A3 MOV BL, AL LOOP A1 MOV AX, BX POP BX POP CX POP SI RET ENDP ENDS END START; 数据区首址 ; 调用子程序 ; 子程序,返回参数在 AX 中HERE: BRANCHA1:A2:A3:A4: BRANCH CODE实验步骤 (1)根据程序流程图编写实验程序。 (2)经编译、链接无误后装入系统。 (3)键入 E3000 命令,输入 8 个字节的数据,如:D9 07 8B C5 EB 04 9D F9。 (4)运行实验程序。 (5)点击停止按钮,停止程序运行,观察寄存器窗口中 AX 的值,AX 应为 F9 04,其中 AH 中为最大值,AL 中为最小值。 (6)反复测试几组数据,检验程序的正确性。40 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司程序说明:该程序使用 BH 和 BL 暂存现行的最大值和最小值,开始时初始化成首字节的 内容,然后进入循环操作,从字节序列中逐个取出一个字节的内容与 BH 和 BL 相比较,若取 出的字节内容比 BH 的内容大或比 BL 的内容小, 则修改之。 当循环操作结束时, BH 送 AH, 将 将 BL 送 AL,作为返回值,同时恢复 BX 原先的内容。 2. 求 N! 利用子程序的嵌套和子程序的递归调用,实现 N!的运算。根据阶乘运算法则,可以得: N!=N(N-1) !=N(N-1) (N-2) !=…… 0!=1 由此可知,欲求 N 的阶乘,可以用一递归子程序来实现,每次递归调用时应将调用参数减 1,即求(N-1)的阶乘,并且当调用参数为 0 时应停止递归调用,且有 0!=1,最后将每 次调用的参数相乘得到最后结果。因每次递归调用时参数都送入堆栈,当 N 为 0 而程序开始返 回时,应按嵌套的方式逐层取出相应的调用参数。 定义两个变量 N 及 RESULT,RESULT 中存放 N!的计算结果,N 在 00H~08H 之间取 值。 实验程序清单(例程文件名为:A7-2.ASM)SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS PUBLIC N, RESULT ;设置全局变量 DATA SEGMENT N DB ? ;N 的范围在 1~8 之间 RESULT DW ? ;N!的结果存于该变量中 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV AX, OFFSET RESULT PUSH AX MOV AL, N MOV AH, 00H PUSH AX MOV DI, 0000H CALL branch JMP START ;在此处设置断点,观察变量 ;===子程序=== branch: PUSH BP MOV BP,SP PUSH BX PUSH AX MOV BX,[BP+DI+06H] MOV AX,[BP+DI+04H] CMP AX,0000H JZ A1 PUSH BX 41 80X86 微机原理及接口技术实验教程 DEC AX PUSH AX CALL branch MOV BX,[BP+DI+06H] MOV AX,[BX] PUSH BX MOV BX,[BP+DI+04H] MUL BX POP BX JMP A2 MOV AX, 0001H MOV RESULT, AX POP AX POP BX POP BP RET 0004H ENDS END START西安唐都科教仪器公司;递归调用A1: A2:;结果存入 RESULT 中CODE实验步骤 (1)依据设计思想绘制程序流程图,编写实验程序。 (2)经编译、链接无误后装入系统。 (3)将变量 N 及 RESULT 加入变量监视窗口,并修改 N 值,N 在 00~08H 之间取值。 (4)在 JMP START 语句行设置断点,然后运行程序。 (5)当程序遇到断点后停止运行,此时观察变量窗口中 RESULT 的值是否正确,验证程 序的正确性。 (6)改变变量 N 的值,然后再次运行程序,当程序停止在断点行后观察实验结果。表 2.3 阶乘表 N RESULT 0 1 1 1 2 2 3 6 4 18H 5 78H 6 02D0H 7 13B0H 8 9D80H42 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司2.82.8.1 实验目的查表程序设计实验学习查表程序的设计方法。2.8.2实验设备PC 机一台,TD-PITE 实验装置或 TD-PITC 实验装置一套。2.8.3实验内容所谓查表,就是根据某个值,在数据表格中寻找与之对应的一个数据,在很多情况下,通 过查表比通过计算要使程序更简单,更容易编制。 通过查表的方法实现十六进制数转换为 ASCII 码。根据 2.2 章节的表 2.1 可知,0~9 的 ASCII 码为 30H~39H,而 A~F 的 ASCII 码为 41H~46H,这样就可以将 0~9 与 A~F 对 应的 ASCII 码保存在一个数据表格中。当给定一个需要转换的十六进制数时,就可以快速的在 表格中找出相应的 ASCII 码值。 实验程序清单(例程文件名为:A8-1.ASM)SSTACK SSTACK PUBLIC DATA TAB HEX ASCH ASCL DATA CODE START: SEGMENT STACK DW 32 DUP(?) ENDS ASCH, ASCL, HEX ;定义全局变量 SEGMENT ;十六进制数 0~9,A,B,C,D,E,F 对应 ASC 码表 DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H DB ? ;待转换的十六进制数 DB ? ;高 4 位转换的 ASCII 码 DB ? ;低 4 位转换的 ASCII 码 ENDS SEGMENT ASSUME CS:CODE, SS:SSTACK, DS:DATA PUSH DS XOR AX, AX MOV AX, DATA MOV DS, AX MOV AL, HEX ;需转换的十六进制数 MOV AH, AL AND AL, 0F0H 43AA1: 80X86 微机原理及接口技术实验教程 MOV CL, 04H SHR AL, CL MOV BX, OFFSET TAB XLAT MOV ASCH, AL MOV AL, AH AND AL, 0FH XLAT MOV ASCL, AL NOP JMP AA1 ENDS END START西安唐都科教仪器公司;表首地址存放于 BX 中 ;存放十六进制数高 4 位的 BCD 码;存放十六进制数低 4 位的 BCD 码 ;在此处设置断点,观察转换结果CODE2.8.4实验步骤1. 根据设计思想绘制程序流程图,编写实验程序。 2. 经编译、链接无误后,将目标代码装入系统。 3. 将变量 HEX,ASCH,ASCL 添加到变量监视窗口中,并修改 HEX 的值,如 12。 4. 在语句 JMP AA1 处设置断点,然后运行程序。 5. 程序会在断点行停止运行,并更新变量窗口中变量的值,查看变量窗,ASCH 应为 31, ASCL 应为 32。 6. 反复修改 HEX 的值,观察 ASCH 与 ASCL 的值,验证程序功能。44 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司2.92.9.1 实验目的输入输出程序设计实验1. 了解 INT 21H 各功能调用模块的作用及用法。 2. 掌握 Wmd86 软件界面下数据输入和输出的方法。2.9.2实验设备PC 机一台,TD-PITE 实验装置或 TD-PITC 实验装置一套。2.9.3实验内容及步骤INT 21H 功能调用使用说明如下: (1)入口:AH=00H 或 AH=4CH 功能:程序终止 (2)入口:AH=01H 功能:读键盘输入到 AL 中并回显 (3)入口:AH=02H,DL=数据 功能:写 DL 中的数据到显示屏 (4)入口:AH=08H 功能:读键盘输入到 AL 中无回显 (5)入口:AH=09H,DS:DX=字符串首地址,字符串以 '$' 结束 功能:显示字符串,直到遇到 '$' 为止 (6)入口:AH=0AH,DS:DX=缓冲区首地址,(DS:DX)=缓冲区最大字符数, (DS:DX+1)=实际输入字符数,(DS:DX+2)=输入字符串起始地址 功能:读键盘输入的字符串到 DS:DX 指定缓冲区中并以回车结束 1. 编写实验程序,在显示器上的输出窗口显示 A~Z 共 26 个大写英文字母。 实验程序清单(例程文件名为:A9-1.ASM)SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE 45 80X86 微机原理及接口技术实验教程 START: MOV CX,001AH MOV DL,41H MOV AL,DL MOV AH,02H INT 21H INC DL PUSH CX MOV CX,0FFFFH LOOP A2 POP CX DEC CX JNZ A1 MOV AX,4C00H INT 21H END START ;‘A’的 ASCII 码值西安唐都科教仪器公司A1:;功能调用A2:;程序终止CODE ENDSC 语言实现上述功能程序清单(例程文件名为:CDISPLAY.C)void delay(unsigned int x) { for(i=0; i&x; i++); } void main(void) { for(count=0x41; count&0x5B; count++) { _DL = _asm{ mov AH, 02H int 21H ;功能调用输出 } delay(0xf000); } while(1); }实验步骤 (1)编写实验程序,经编译、链接无误后装入系统。 (2)运行实验程序,观察实验结果。 (3)修改实验程序,在显示器上显示‘GOOD AFTERNOON’ ,要求使用 AH=09 功能 (显示一字符串功能块)完成。46 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司2. INT 21H 功能调用示例程序实验。 实验程序清单(例程文件名为:A9-2.ASM);---------------------------------------------------------------------------DATA1 SEGMENT MES1 DB 'This is tangdu INT 21H !','$' DATA1 ENDS ;---------------------------------------------------------------------------DATA2 SEGMENT MES2 DB 0FFH DUP(?) DATA2 ENDS ;---------------------------------------------------------------------------SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS ;---------------------------------------------------------------------------CODE SEGMENT ASSUME CS:CODE ;---------------------------------------------------------------------------START: MOV AH,08H INT 21H ;读键盘输入到 AL 中无回显 MOV AH,01H INT 21H ;读键盘输入到 AL 中并回显 CALL ENTERR ;回车换行 MOV CX,04H MOV DL,41H AA: MOV AH,02H INT 21H INC DL LOOP AA ;将 DL 中的数据显示出来 CALL ENTERR ;回车换行 MOV AX,DATA1 MOV DS,AX MOV DX,OFFSET MES1 MOV AH,09H INT 21H ;显示数据段 DATA1 中的字符串 CALL ENTERR ;回车换行 MOV AX,DATA2 MOV DS,AX MOV DX,OFFSET MES2 MOV AH,0AH INT 21H ;读入字符串放到数据段 DATA2 中,以回车结束 ADD DX,02H MOV AH,09H INT 21H ;将数据段 DATA2 中的字符串显示出来 MOV AX,4C00H INT 21H ;程序终止 ENTERR: ;回车换行子程序 MOV AH,02H MOV DL,0DH 47 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司INT 21H ;回车 MOV AH,02H MOV DL,0AH INT 21H ;换行 RET ;---------------------------------------------------------------------------CODE ENDS END START实验步骤 (1)参考附录中 INT 21H 功能调用使用说明,编写实验程序,经编译、链接无误后装入 系统。 (2)运行实验程序,观察实验结果,可根据需要设断点观测实验现象。 (3)仔细分析实验内容,理解 INT 21H 各功能调用的用法。48 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司第3章32 位指令及其程序设计实验在实模式下,80X86 相当于一个可进行 32 位处理的快速 8086;在实模式下为 80X86 编写的程序可利用 32 位的通用寄存器,可使用新的指令,可采用扩展寻址方式,但段的最大 长度仍是 64K。3.180X86 指令及程序设计1. 说明处理器类型的伪指令 在缺省情况下,MASM 和 TASM 只识别
的指令,为了让其识别 80X86 新 增的指令或功能增强的指令,必须告诉汇编程序处理器的类型,如: .386 ;支持对 80386 非特权指令的汇编 .386P ;支持对 80386 所有指令的汇编 .386C ;支持对 80386 非特权指令的汇编 只有在使用说明处理器类型是 80X86 伪指令后, 汇编程序才识别表示 32 位寄存器的符号 和表示始于 80X86 的指令的助记符。 2. 关键段属性类型的说明 在实模式下,80X86 的段保持与
兼容,所以段的最大长度仍是 64K,这样 的段称为 16 位段。但在保护模式下,段长度可达到 4G,这样的段称为 32 位段。为了兼容, 在保护模式下,也可使用 16 位段。 完整段定义的一般格式如下: 段名 SEGMENT[定位类型] [组合类型] [‘类别’] [属性类型] 属性类型说明符号是 “USE16” “USE32” 各表示 16 位段和 32 位段。 和 。 在使用 “.386” 等伪指令指示处理器类型 80X86 后,缺省的属性类型是 USE32;如果没有指示处理器类型 80X86,那么缺省的属性类型是 USE16。 例如定义一个 32 位段: CSEG SEGMENT PARA USE32 …… …… CSEG ENDS 例如定义一个 16 位段 CSEG SEGMENT PARA USE16 …… …… CSEG ENDS 3. 操作数和地址长度前缀 虽然在实模式下只能使用 16 位段,但可以使用 32 位操作数,也可使用以 32 位形式表示49 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司的存储单元地址,这是利用操作数长度前缀 66H 和存储器地址长度前缀 67H 来表示的。 在 16 位代码段中, 正常操作数的长度是 16 位或 8 位。 在指令前加上操作数长度前缀 66H 后,操作数长度就成为 32 位或 8 位,也即原来表示 16 位操作数的代码成为表示 32 位操作数 的代码。一般情况下,不在源程序中直接使用操作数长度前缀,而是直接使用 32 位操作数, 操作数长度前缀由汇编程序在汇编时自动加上。 试比较如下在 16 位代码段中的汇编格式指令和对应的机器码(注释部分) : .386 TEST16 SEGMENT PARA USE16 …… ;66H MOV EAX,EBX ;8BH,C3H MOV AX,BX ;8BH,C3H MOV AL,BL ;8AH,C3H …… TEST16 ENDS 32 位代码段情况恰好相反。在 32 位代码段中,正常操作数长度是 32 位或 8 位。在指令 前加上操作数长度前缀 66H 后,操作数长度就成为 16 位或 8 位。不在 32 位代码的源程序中 直接使用操作数长度前缀 66H 表示使用 16 位操作数,而是直接使用 16 位操作数,操作数长 度前缀由汇编程序在汇编时自动加上。 试比较如下在 32 位代码段中的汇编格式指令和对应的机器码(注释部分) : .386 TEST32 SEGMENT PARA USE32 …… MOV EAX,EBX ;8BH,C3H ;66H MOV AX,BX ;8BH,C3H MOV AL,BL ;8AH,C3H …… TEST32 ENDS 通过存储器地址长度前缀 67H 区分 32 位存储器地址和 16 位存储器地址的方法与上述通 过操作数长度前缀 66H 区分 32 位操作数和 16 位操作数的方法类似。在源程序中可根据需要 使用 32 位地址,或者 16 位地址。汇编程序在汇编程序时,对于 16 位的代码段,在使用 32 位存储器地址的指令前加上前缀 67H;对于 32 位代码段,在使用 16 位存储器地址的指令前 加上前缀 67H。 在一条指令前能既有操作数长度前缀 66H,又有存储器地址长度前缀 67H。50 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司3.23.2.1 实验目的32 位指令及寻址实验1. 熟悉 32 位通用寄存器的使用。 2. 熟悉部分新增指令的使用。 3. 熟悉部分扩展寻址方式的使用。3.2.2实验设备PC 机一台,TD-PITE 实验装置或 TD-PITC 实验装置一套。3.2.3实验内容一编写一个汇编程序, 学习 32 位寄存器和 32 位指令使用的基本用法, 对存储区中的一组双 字进行排序,并将排序结果显示在屏幕上。 1.实验程序清单(3-2-1.asm);---------------------------------------------------------------------------;文件名: 3-2-1.ASM ;功能: 32 位寄存器和 32 位指令使用的基本用法, 对存储区中的一组双字进行排序,并将排序结果显示在屏幕上。 ;---------------------------------------------------------------------------.386p TSTACK SEGMENT STACK USE16 DB 64 DUP(?) TSTACK ENDS DATA SEGMENT USE16 MES1 DB 'The array is:','$' MES2 DB 'After sort:','$' DATA1 DD 1a009H,111f044H,11d10203H,32H COUNT = 8 DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;显示未排序的数组 MOV DS,AX MOV DX,OFFSET MES1 MOV AH,09H INT 21H 51 80X86 微机原理及接口技术实验教程 CALL KENTER CALL SAHEX CALL KENTER CALL BUBBLE MOV DX,OFFSET MES2 MOV AH,09H INT 21H CALL KENTER CALL SAHEX CALL KENTER MOV AX,4C00H INT 21H BUBBLE PROC XOR ESI,ESI XOR ECX,ECX MOV SI,OFFSET DATA1 MOV CX,COUNT L1: XOR EBX,EBX L2: CMP EBX,ECX JAE LB MOV EAX,[ESI+EBX*4+4] CMP [ESI+EBX*4],EAX JGE LNS XCHG [ESI+EBX*4],EAX MOV [ESI+EBX*4+4],EAX LNS: INC EBX JMP L2 LB: LOOP L1 RET BUBBLE ENDP SAHEX PROC NEAR XOR ESI,ESI XOR ECX,ECX MOV SI,OFFSET DATA1 MOV CX,COUNT*4 C1: MOV EBX,ECX DEC EBX MOV AL,DS:[ESI+EBX] AND AL,0F0H SHR AL,4 CMP AL,0AH JB C2 ADD AL,07H C2: ADD AL,30H MOV DL,AL MOV AH,02H INT 21H MOV AL,DS:[ESI+EBX] AND AL,0FH CMP AL,0AH JB C3 ADD AL,07H C3: ADD AL,30H MOV DL,AL 52 ;换行西安唐都科教仪器公司;显示排序后的数组;程序终止;取高 4 位 ;是否是 A 以上的数;显示字符 ;取低 4 位;显示字符 80X86 微机原理及接口技术实验教程 MOV INT TEST JNZ MOV MOV INT LOOP RET AH,02H 21H EBX,03H C4 DL,20H AH,02H 21H C1西安唐都科教仪器公司;空格C4:SAHEX ENDP KENTER PROC NEAR MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H RET KENTER ENDP CODE ENDS END START;回车;换行2.实验步骤 (1)运行 Wmd86 集成操作软件,进入 Wmd86 集成开发环境。 (2)在菜单“设置\语言”栏,选择“汇编语言” ,如图 3.1:图 3.1 语言设置环境界面(3)在菜单“设置\寄存器”栏,选择“32 位寄存器” (本章实验选择 32 位寄存器) ,如 图 3.2:图 3.2 寄存器设置环境界面 53 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司设置好以后,下次再启动软件,设置栏将保持这次的修改不变。 (4)设置完毕后,点击新建或按 Ctrl+N 组合键来新建一个文档,如图 3.3 所示,默认文 件名为 Wmd861。图 3.3 新建文档界面(5)编写实验程序,如图 3.4 所示,并保存,此时系统会提示输入新的文件名,输完后 点击保存。图 3.4 保存文件图(6)点击54,编译文件,若程序编译无误,则可以继续点击进行链接,链接无误后 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司方可以加载程序。编译、链接后输出如图 3.5 所示的输出信息。图 3.5 编译链接信息界面(7)连接 PC 与实验系统的通讯电缆,打开实验系统电源。 (8)编译、链接都正确并且上下位机通讯成功后,就可以下载程序,联机调试了。可以 通过端口列表中的“端口测试”来检查通讯是否正常。点击 下载程序。 为编译、链接、下载组合按钮,通过该按钮可以将编译、链接、下载一次完成。下载成功后,在输出区的结果 窗中会显示“加载成功!,表示程序已正确下载。起始运行语句下会有一条绿色的背景。如图 ” 3.6 所示:图 3.6 开始运行界面图(9)点击按钮运行程序,待程序运行停止后,观察运行结果。如图 3.7:程序运行结果为: The array is: DF044 1DA2
After sort: F044
111A03 1D1000255 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司图 3.7 程序运行结果3.2.4实验内容二编写一个汇编程序,学习 32 位寄存器和 32 位指令使用的基本用法,将一组 ASCII 字符 转换成 16 进制数码,并在屏幕上显示出来。 1.实验程序清单(3-2-2.asm);---------------------------------------------------------------------------;文件名: 3-2-2.ASM ;功能: 32 位寄存器和 32 位指令使用的基本用法, ; 将一组 ASCII 字符转换成 16 进制数码,并在屏幕上显示出来。 ;---------------------------------------------------------------------------.386P TSTACK SEGMENT STACK USE16 DB 64 DUP(?) TSTACK ENDS DATA SEGMENT USE16 MES0 DB 'This is tangdu speaking!','$' MES1 DB 'Show this sentence as hex:$' ;54,68,69,73,20,74,61,6E,67,64,75,20,73,70,65,61,6B,69,6E,67,21 BUF DB 65 DUP(?) DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX 56 80X86 微机原理及接口技术实验教程 MOV MOV INT CALL MOV MOV INT CALL CALL MOV MOV INT CALL MOV INT PROC = 24 PUSHAD MOV MOVZX MOV MOV MOV MOVZX MOV MOV AND SHR CMP JB ADD ADD MOV MOV AND CMP JB ADD ADD MOV MOV ADD INC LOOP MOV MOV POPAD RET ENDP PROC DX,OFFSET MES0 AH,09H 21H KENTER DX,OFFSET MES1 AH,09H 21H KENTER SAHEX DX,OFFSET BUF AH,09H 21H KENTER AX,4C00H 21H NEAR ;Show &This is tangdu speaking!&西安唐都科教仪器公司;Show Sentence as hex;程序终止SAHEX CBYTEC1:C2:C3:;将所有 32 位寄存器压栈 DI,OFFSET MES0 EDI,DI ;零扩展指令 AX,DATA GS,AX ;使用 GS 段 SI,OFFSET BUF ESI,SI ECX,CBYTE AL,DS:[EDI] AL,0F0H ;取高 4 位 AL,4 AL,0AH ;是否是 A 以上的数 C2 AL,07H AL,30H GS:[ESI],AL AL,DS:[EDI] AL,0FH ;取低 4 位 AL,0AH C3 AL,07H AL,30H GS:[ESI+1],AL BYTE PTR GS:[ESI+2],20H ;在每个字符间加入空格 ESI,3 EDI C1 AL, '$' GS:[ESI],AL ;弹出所有寄存器值SAHEX KENTERNEAR 57 80X86 微机原理及接口技术实验教程 MOV MOV INT MOV MOV INT RET ENDP END AH,02H DL,0DH 21H AH,02H DL,0AH 21H西安唐都科教仪器公司;回车;换行KENTER CODE ENDSSTART2.实验步骤 (1)编写实验程序。 (2)编译、链接无误后装入系统。 (3)调试并运行程序。 (4)运行结果: 在输出区的结果栏将会显示: This is tangdu speaking! Show this sentence as hex: 54,68,69,73,20,74,61,6E,67,64,75,20,73,70,65,61,6B,69,6E,67,2158 80X86 微机原理及接口技术实验教程西安唐都科教仪器公司第4章80X86 微机接口技术及其应用实验接口技术是把由处理器、存储器等组成的基本系统与外部设备连接起来,从而实现 CPU 与外部设备通信的一门技术。微机的应用是随着外部设备的不断更新和接口技术的不断发展而 深入到各行各业,任何微机应用开发工作都离不开接口的设计、选用及连接。微机应用系统需 要设计的硬件是一些接口电路,所要编写的软件是控制这些接口电路按要求工作的驱动程序。 因此,接口技术是微机应用中必不可少的基本技能。4.14.}

我要回帖

更多关于 直流电压采样电路 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信