微机8086实验程序

合集下载

8086汇编语言程序设计——第一个程序

8086汇编语言程序设计——第一个程序

8086汇编语⾔程序设计——第⼀个程序本系列以80X86系列微型计算机为基础,以MASM5.0为汇编上机实验环境,重点介绍Intel8086指令系统。

Intel8086指令系统中有100多条指令,利⽤这些指令可以编写出复杂的程序实现更多功能。

汇编语⾔是直接控制计算机硬件⼯作的最简便的语⾔。

学习了汇编语⾔可具有在CPU寄存器级上进⾏控制和操作的能⼒,可获得直接对计算机硬件底层编程的经验。

⼀个计算的例⼦例 *编写⼀个汇编语⾔程序,实现下列公式计算。

假设X=4,Y=5汇编指令如下:如果在DEBUG下⽤A命令输⼊这些指令,必须把X、Y换成具体的数值;Z、Z1是存储单元地址,最后两条指令可写为MOV [0],AL和MOV [1],AH,这样才能⽤T命令执⾏。

D:\dos〉DEBUG-AMOV AL,4ADD AL,5MOV BL,8IMUL BLMOV BL,4MOV BH,0SUB AX,BXMOV BL,2IDIV BLMOV [0],ALMOV [1],AH采⽤DEBUG的A命令输⼊程序的做法明显不⽅便,⼀是⽆法给出变量名即符号地址,⼆是调试修改程序不便。

1. 编写⼀个完整的汇编语⾔源程序需要增加段定义伪指令和定义数据存储单元伪指令等必须有的伪指令。

伪指令与C语⾔等⾼级语⾔中的说明性语句的含义类似,起到说明作⽤。

⽤记事本gedit或者vi编写,保存到dos⽬录下注释符号为;号2. 汇编、链接、执⾏汇编语⾔源程序既可以⽤⼤写字母也可以⽤⼩写字母书写。

汇编语⾔程序建⽴及汇编过程如图所⽰。

⽤户编写的源程序要经汇编程序MASM汇编(翻译)后⽣成⼆进制⽬标程序,⽂件名默认与源程序同名、扩展名为.OBJ;再经过LINK连接⽣成可执⾏程序,⽂件名默认与源程序同名、扩展名为.EXE。

注意:源程序⼀定要和MASM和LINK⽂件放在同⼀个⽂件夹中。

执⾏MASM和LINK命令时需要按多次回车。

3. 在DEBUG下执⾏程序MOV AH,4C指令对应的偏移地址是0023,这就是断点(所谓断点,就是程序执⾏到该处停下来不再继续)。

微机原理实验报告 8086最小系统构建和IO接口电路

微机原理实验报告 8086最小系统构建和IO接口电路

实验12:8086最小系统构建和I/O地址译码实验1、实验目的:(1)掌握I/O地址译码的工作原理和电路设计(2)掌握Proteus ISIS中电路原理图的模块化设计方法(3)绘制通用的8086最小系统电路图和I/O地址译码电路图供后续实验使用2、实验设备:安装有Proteus的PC一台3、实验过程:编写测试程序,对8086最小系统和I/O地址译码电路模块进行仿真测试。

(1)所绘制电路图如下面截屏所示:首先是8086最小系统电路图,如下:第二个是I/O地址译码子电路图,如下:实验电路图如下面所示:(2)实验仿真运行画面截图如下所示:(对所给程序稍微作了变动)(3)程序源代码如下所示:.model small.8086.stack.data.code.startupmov dx,1000hlp0:mov bx,0e001hlp1:mov al,blout dx,almov ah,1call delaycmp bl,0jz lp2rol bx,1jmp lp1lp2:mov ah,8call delayjmp lp0delay:mov cx,5000d: loop ddec ahjnz delayretend4、实验总结:(1)绘制实验电路图时主要问题包括标号的设置(如果未设置则会出现八个灯同时亮的情况),总线等的连接(注意对应接口相同,引脚线与总线的连接末端采用斜线)等。

(2)程序中,lp0中将点亮的模式传送给bx寄存器,可改变该值从而改变点亮的模式(如改为0e004h则变为有4个灯同时亮);Lp1中,将每个周期中灯与灯的时间间隔设为一个基本单位并存入了ah中,可改变该值以延长时间(如实验习题中);Lp2中,将不同周期直接的时间间隔设为8个时间单位并存放入ah中,与上一个值一起可以调控灯亮的持续时间和周期等。

(3)注意总线标号的输入为中为XD[0..15]而非XD[0,,15];另外注意合理安排位置以使电路图更加美观。

微机原理实验---Emu8086仿真软件的使用实验

微机原理实验---Emu8086仿真软件的使用实验
新建文件(四种模板): COM模板:适合简单程序段,从代 码段的偏移地址为100H处开始存放 指令(即:源代码之前应有ORG 100H)。
EXE模板:适合完整程序的编写。 BIN模板:一般不用,因为不能 正确解释伪指令。
BOOT模板:编写程序,数据段 的段地址为07C0H。
选择COM模板, 软件出现源代码编辑器的界面, 如图所示:
(2)
存器的内容:
MOV AX,1000H ; AX=?
MOV BX,2000H ;BX=?
MOV CX,3000H ;CX=?
MOV DX, AX ;AX=? , DX=?
MOV AX, CX ;CX=?, AX =?
MOV CX, BX ;BX =?, CX =?
MOV BX, DX ;DX=?, BX=?
HLT
思考:该程序段实现什么功能?(3) 记录每条指来自执行后相关寄存器、存储器的内容:
MOV AX, 0B800H MOV DS, AX ; DS AX MOV CX, 5F41H MOV BX, 15EH MOV [BX], CX ; 将 CX的值传送到 BX 指出的内存
单元B800H:015EH中 HLT
(3)编辑源程序并保存,汇编源程序的文件扩展名 必须是ASM 。 在源代码编辑器的空白区域,编写程序。
程序编写结束,点击菜单【文件】【另存为……】, 将源程序保存,文件扩展名为.asm。
(4)编译程序 点击工具栏的【编译】按钮,对程序编译,检查语法 是否有错。如果程序有错误,编译不通过,并给出错 误提示的信息。
EMU8086集源代码编辑器,汇编/反汇编工 具以及可以运行debug的模拟器(虚拟机器) 于一身。它能够编译源代码,并在模拟器上一 步一步的执行。

8086微机原理实验报告

8086微机原理实验报告

8086微机原理实验报告实验名称:8086微机原理实验实验目的:1.深入了解8086微处理器的内部结构和指令系统。

2.掌握汇编语言的编程方法和技巧。

3.熟悉微机系统的输入输出操作原理。

4.掌握8086微机系统的调试方法和程序调试技巧。

实验器材:1.8086微处理器芯片2.Intel 8086学习板3.编程器4.示波器5.实验箱实验步骤:1.熟悉8086微处理器的内部结构和指令系统在开始实验前,首先需要熟悉8086微处理器的内部结构和指令系统。

通过阅读教材和讲义,了解到8086微处理器采用16位结构,具有4个寄存器组,支持16种不同寻址方式的指令。

熟练掌握常用的指令系统和汇编语言的编程方法。

2.设计并编制简单的汇编程序在熟悉8086微处理器的内部结构和指令系统后,我们开始设计并编制简单的汇编程序。

本实验中,我们编写了一个简单的汇编程序,用于实现两个数的加法操作,并将结果存储在内存中。

程序中使用了mov指令将操作数送入寄存器,add指令将它们相加,再用mov指令将结果存储到内存中。

程序流程图如下所示:a. 将第一个数送入累加器A中。

b. 将第二个数送入寄存器B中。

c. 执行add指令,将A和B相加,结果保存在A中。

d. 将结果存储到内存中。

e. 程序结束。

3.调试程序并进行测试在完成汇编程序的编写后,我们需要使用调试器对程序进行调试,并进行测试。

首先,将程序加载到学习板上进行调试。

在调试过程中,我们使用示波器观察各个信号的波形,以确定程序的正确性。

通过逐步单步执行程序并观察寄存器和标志位的变化,我们验证了程序的正确性。

接下来,我们使用输入设备输入两个数,并观察输出结果是否正确。

测试结果表明程序正确实现了两个数的加法操作。

4.总结体会和改进建议通过本次实验,我们深入了解了8086微处理器的内部结构和指令系统,掌握了汇编语言的编程方法和技巧,熟悉了微机系统的输入输出操作原理,以及掌握了8086微机系统的调试方法和程序调试技巧。

微机原理emu8086课程设计

微机原理emu8086课程设计

微机原理emu8086课程设计目录一、软件启动 (1)二、程序代码 (3)1、数值计算 (3)(1)十进制系统 (3)2、逻辑运算 (7)(1)与运算(AND) (7)(2)或运算(OR) (7)(3)异或运算(XOR) (7)4、宏 (13)三、鸣谢 (17)Emu8086的应用分析摘要:Emu8086是一个可在Windows 环境下运行的8086CPU汇编仿真软件。

它集成了文本编辑器、编译器、反编译器、真调试、虚拟设备和驱动器为一体,并具有在线使用指南,这对刚开始学习汇编语言的人是一个很有用的工具。

您可以在真器中单步或连续执行程序,其可视化的工作环境让使用者操作更容易。

您可以在程序执行中动态观察各寄存器、标记位以及存储器中的变化情况。

仿真器会在模拟的PC中执行程序,以避免程序运行时到实际的硬盘或内存中存取数据。

此外,该软件完全兼容Intel新一代处理器,包括了PentiumⅢ、Pentium4的指令。

关键词:Emu8086 微机原理程序文件一、软件启动双击进入启动界面如图1所示,用户可以选择新建文本、程序示例、快速启动指南、最近使用文档。

图1 启动界面Emu8086软件提供的实例中包含了几十种典型的程序代码,其中包括:数值计算、逻辑运算、屏幕显示、键盘输入、文件打印、马达控制、温度控制、交通灯控制等。

在软件提供的快速指南中提供了多种在线帮助工具,包括:文件索引、8086CUP指令使用指南、系统中断调用列表以及用法等。

用户可以通过该工具快速地掌握8086CPU指令体系和emu8086汇编真软件的使用。

程序编辑结束后,点击模拟,即可进入模拟状态:点击运行之后即可用屏幕模拟器进行模拟,如:二、程序代码1、数值计算(1)十进制系统目前使用最多的是十进制。

十进制系统有10个数字0,1,2,3,4,5,6,7,8,9。

利用这些数字能表示任何数值,例如754这些数字是由每一位数字乘以“基数”的幂累加而成的(上一个例子中基数是10 因为十进制中有十个数字)。

第4章8086,8088微机汇编语言程序设计

第4章8086,8088微机汇编语言程序设计

2)段内偏移量(Offset) 它是标号与段起始地址之间相距的字节数,为一16位 无符号数。 3)类型(Type) 类型表示该标号所代表的指令的转移范围,分NEA R(近)与FAR(远)两种。NEAR类型的标号仅在 同一段内使用,用2字节指针给出转移的偏移量属性(即 只改变IP值,不改变CS值);而FAR类型的标号无此限 制,必须用4字节指针指出转移的段地址与段内偏移量。 当标号用作JMP或CALL等指令的目标操作数时,若 为段内转移或调用则采用NEAR类型;若为段间转移或 调用则应当采用FAR类型。 JMP FAR PTR LINE
第4章 8086/8088汇编语言程序设计
汇编语言程序设计是开发微机系统软件的基本 功,在程序设计中占有十分重要的地位。
由于汇编语言具有执行速度快和易于实现对硬件的控 制等独特的优点,所以至今它仍然是用户使用得较多的程 序设计语言。特别是在对于程序的空间和时间要求很高的 场合,以及需要直接控制设备的应用场合,汇编语言更是必 不可少了。 由于汇编语言本身的特点,本章将选择目前国内广泛 使用的IBM PC机作为基础机型,着重讨论8086/8088汇编 语言的基本语法规则和程序设计的基本方法,以掌握一般 汇编语言程序设计的初步技术。
(1)立即操作数 立即操作数在指令中直接给出,不需要使用 寄存器,也不涉及访问数据区的操作,只能作为 源操作数。立即操作数是整数,可以是1字节或 2字节。在汇编语言中,立即操作数用常量(包 括数值常量和符号常量)以及由常量与有关运算 符组成的数值表达式表示。 如:MOV BX,1000+5*3 (2)寄存器操作数 通用寄存器AX、BX、CX、DX、BP、 SP、DI、SI以及段寄存器CS、SS、D S、ES都可以作为操作数。如:MOV BX,AX

微机原理上机实验(八+十二)实验报告 8086中断实验 步进电机实验

微机原理上机实验(八+十二)实验报告 8086中断实验 步进电机实验

微机原理上机实验报告实验八:8086中断实验实验十二:步进电机实验微机原理上机实验(八)实验报告实验八:8086中断实验一、实验目的1、了解8086内部响应中断的机制;掌握中断向量的作用。

2、利用实验仪上单脉冲、74HC244电路,不使用8259,实现一个中断实例。

3、复习本节实验内容,可尝试自行编写程序,做好实验准备工作,填写实验报告。

二、实验内容1、编制程序:拨动单脉冲开关,“”送给8086的INTR,触发中断;8086通过INTA信号,读取中断向量;8086计数中断次数,显示于F5区的数码管上注意:给INTR高电平信号,8086就会相应中断,所以实验开始前,保证单脉冲开关给8086低电平;中断程序中,加一个较长的延时程序,在中断结束前,有时间拨动单脉冲开关,恢复给8086低电平。

三、实验原理图本实验,通过F4区的8个拨动开关,给74HC244设定中断向量;本实验的中断向量是08H,即IN7-IN0位数据是00001000。

同学可以自定义中断向量,实验程序中处理中断向量部分程序作相应调整四、实验步骤1、连线说明:B4区:CS244、BLE ——C1区:GNDB4区:RD(IO区)——A3区:INTAA3区:INTR ——B2区:单脉冲B4区:JP57(D0..D7) ——A3区:JP41B4区:JP52(IN0..7) ——F4区:JP27(1..8)D3区:CS、A0、A1 ——A3区:CS1、A0、A1D3区:PC0、PC1 ——F5区:KL1、KL2D3区:JP20、B、C ——F5区:A、B、C2、运行程序3、实验开始前,保证单脉冲开关给8086低电平;运行程序;向下拨动开关(触发中断),立即向上拨动开关,产生一个“”,观察结果,数码管上显示的次数与拨动开关次数是否对应。

五、实验代码EXTRN InitKeyDisplay:NEAR, Display8:NEAR_STACK SEGMENT STACKDW 100 DUP(?)_STACK ENDS_DATA SEGMENT WORD PUBLIC 'DATA'BUFFER DB 8 DUP(?)Counter DB ?ReDisplayFlag DB 0_DATA ENDSCODE SEGMENTSTART PROC NEARASSUME CS:CODE, DS:_DATA, SS:_STACKMOV AX,_DATAMOV DS,AXMOV ES,AXNOPCALL InitKeyDisplay ;对键盘、数码管控制器8255初始化CALL WriIntverMOV Counter,0 ;中断次数MOV ReDisplayFlag,1 ;需要显示STI ;开中断START1: LEA SI,BufferCALL Display8CMP ReDisplayFlag,0JZ START1CALL LedDisplayMOV ReDisplayFlag,0JMP START1WriIntver PROC NEARPUSH ESMOV AX,0MOV ES,AXMOV DI,20HLEA AX,INT_0STOSWMOV AX,CSSTOSWPOP ESRETWriIntver ENDPLedDisplay PROC NEARMOV AL,CounterMOV AH,ALAND AL,0FHMOV Buffer,ALAND AH,0F0HROR AH,4MOV Buffer + 1,AHMOV Buffer + 2,10H ;高六位不需要显示MOV Buffer + 3,10HMOV Buffer + 4,10HMOV Buffer + 5,10HMOV Buffer + 6,10HMOV Buffer + 7,10HRETLedDisplay ENDPINT_0: PUSH DXPUSH AXMOV AL,CounterADD AL,1DAAMOV Counter,ALMOV ReDisplayFlag,1CALL LedDisplayDELAY: PUSH BXPUSH CXPUSH DIPUSH SIMOV CX,20DELAY1: LEA SI,BufferCALL Display8loop DELAY1POP SIPOP DIPOP CXPOP BXPOP AX六、实验思考题1.绘制本实验的详细实验电路图?微机原理上机实验(十二)实验报告实验十二:步进电机实验一、实验目的1、了解步进电机的基本原理,掌握步进电机的转动编程方法2、了解影响电机转速的因素有那些二、实验内容编写程序:使用F5区的键盘控制步进电机的正反转、调节转速,连续转动或转动指定步数;将相应的数据显示在F5区的数码管上。

微机原理与单片机实验报告

微机原理与单片机实验报告

微机原理与单片机实验报告Prepared on 22 November 2020北京联合大学信息学院实验报告课程名称:微型计算机原理学号:姓名:2012 年 6 月 9 日目录实验1 EMU8086模拟器的使用一实验要求利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的:熟悉EMU8086实验环境三 EMU8086环境:1 模拟器编辑窗口2 模拟器调试窗口四实验内容实验内容1:新建文件。

运行 emu80861. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码:MOV AX, 1020HMOV BX, 2030HMOV AX, BXADD AX, BXMOV [BX], AXMOV [2032H], AXHLT2. 编译:单击“编译”按钮,对程序段进行编译;3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。

4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。

5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。

6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。

7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为 400毫秒,单击“全速”按钮,运行程序,8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序的关联。

10.将“存储器”中地址改为1000:0100,并将从其开始的连续10个单元的内容改为55H。

实验内容2:运行范例在模拟器编辑窗口中1.点击典型范例2.选择:hellow,word程序,编译,运行,观察结果。

微机原理与接口技术输入输出实验

微机原理与接口技术输入输出实验

实验一:输入输出实验实验环境PC机+Win 2010+emu8086 实验日期2016.6.3 一.实验内容1.熟悉emu8086仿真系统,清楚调试环境,能熟练的查看8086仿真系统的寄存器、内存、堆栈等相关内容。

2.设计并单步调试实现一位十进制数的加法运算。

例如:屏幕显示效果为3+2=5,其中,加数和被加数为键盘输入,其他为屏幕自动输出。

3.在实现了一位十进制数加法运算的基础上,尝试实现两位十进制加法运算、一位十进制数的四则运算以及十进制多位数运算等扩展要求。

二.理论分析或算法分析1、Emu8086的使用(1)打开桌面上的云端软件,选择微机原理分类,点击Emu8086的图标,,选择【新建】。

(2)选择COM模板,点击【确定】,软件出现源代码编辑器的界面在源代码编辑器的空白区域,编写如下一段小程序:代码编写结束,点击菜单【文件】【另存为……】,将源代码换名保存。

本例将源代码保存为.asm。

:(3)如果源程序无错误,则编译通过单击【单步运行】可以单步调试,程序将每执行一条指令便产生一次中断(建议使用)。

单击【后退一步】可以返回到上一条指令(这个功能也是一般调试器没有的)。

单击【运行】,程序将从第一句直接运行到最后一句。

2、设计并单步调试实现一位十进制数的加法运算。

(1)选择新建一个.COM类型的文件。

(2)在编辑界面中,键入代码。

(3)点击工具栏的【模拟】按钮,进入调试窗口,单步调试并观察寄存器的变化情况。

3、进一步完善上述程序,实现一位十进制数的加法运算。

4、在实现了一位十进制数加法运算的基础上,选择完成如下题目:两位十进制加法运算、一位十进制数的四则运算、十进制多位数运算等。

三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)一位加法:org 100hmov ah, 1int 21hmov bl, al mov ah, 2 mov dl, '+' int 21hmov ah, 1int 21hand bl, 0fh and ax, 0fh add al, bl aaaor ax, 3030h mov bx, ax mov ah, 2 mov dl, '=' int 21h cmp bh, 30hje j1mov ah, 2 mov dl, bhint 21hj1:mov ah, 2 mov dl, blint 21hret 多位加法:org 100hmov ah, 1int 21hmov bh, al int 21hmov bl, al mov ah, 2mov dl, '+'int 21hmov ah, 1int 21hmov ch, al int 21hmov cl, aland bx, 0f0fh and cx, 0f0fh mov ax, cxadd ax, bxaaaor ax, 3030h mov bx, ax mov ah, 2mov dl, '='int 21h cmp bh, 30hje j1mov ah, 2mov dl, bhint 21hj1:mov ah, 2mov dl, blint 21hret一位减、乘、除:mov ah, 1int 21hand al, 0fhmov bl, al mov ah, 1int 21hmov dl, alint 21hand al, 0fhxor ah, ahcmp dl, '+'jne jp1add al, blaaajmp short jp4jp1:cmp dl, '-'jne jp2xchg al, blsub al, blaasjmp short jp4jp2:cmp dl, '*'jne jp3mul blaamjmp short jp4jp3:xchg al, bldiv blaam jp4:mov bx, axmov ah, 2mov dl, '='int 21hor bx, 3030h cmp bh, '1'jc j1mov dl, bhint 21hj1:mov dl, blint 21h四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)一位数加法:多位数加法:一位数减、乘、除法五.结论通过这次实验,我对EMU8086实验模拟环境有相应的了解,熟悉了基本的EMU8086的使用方法,同时也对mov这个指令有了深入的理解,并且知道了各个存储器里面的值得存储过程,为以后的的学习打下了坚实的基础。

8086 实验指导书

8086 实验指导书

第一部分实验系统简介1.1 QTH软件环境介绍QTH-2008PCI实验仪提供了16位和32位两种微机接口集成实验环境,16位的开发环境“QTH-2008PCI-B”是通过PC机的串行接口与实验仪上的8088/8086H模块相连来实现系统开发的,它实际上是通过RS232接口仿真8088/8086的ISA总线环境的;32位的开发环境“QTH-2008PCI-B”是通过PC机的PCI插槽与实验仪上的PCI9052模块相连来实现系统开发的,它通过PCI插卡和PCI9052桥接芯片为用户提供了一个仿真ISA接口,同时它也提供了PCI总线控制芯片全开放的用户总线接口,使用户可以直接开发32位的应用程序。

“QTH-2008PCI-B”可运行于Windows98/Me/2000/XP操作系统。

但由于从Windows2000/XP操作系统开始,不再提供用汇编语言直接对低层口地址的操作以及BIOS、DOS功能调用的支持。

因此,在Windows2000/XP操作系统下“QTH-2008PCI-B”系统暂不支持BIOS、DOS功能调用,进行一般的汇编语言实验时也必须先打开实验仪电源;而“QTH-2008PCI-B”系统目前只能通过C语言对端口地址进行操作,虽不能用汇编语言直接对端口地址操作,但可进行一般的汇编语言练习,包括部分DOS 功能调用,而且可以运行于没有安装QTH-2008PCI实验仪的PC机。

因此,在进行纯汇编语言练习时,使用“QTH-2008PCI-B”系统;进行接口操作时,则应使用“QTH-2008PCI”系统。

两种系统的使用方法非常接近,掌握一种系统的使用后,另一种系统自然就会使用了。

1.2 QTH软件系统的使用一、安装及进入QTH 系列开发系统QTH 系列开发系统的软件安装非常简单,只要运行随机光盘提供的Setup.exe 应用程序,所有操作均按默认选项进行即可。

安装完成后会在桌面和“开始”菜单生成对应的图标和程序组。

微机接口实验指导书8086

微机接口实验指导书8086
写T0方式控制字 写T0计数初值
写T1方式控制字 写T1计数初值
写T2方式控制字 写T2计数初值 空操作 结束
共40页
第8页
微机接口(8086)实验指导书
实验 5 A/D 实验
ቤተ መጻሕፍቲ ባይዱ
一、实验目的
熟悉 A/D 转换的基本原理,掌握 ADC0809 的使用方法。
二、实验设备
CPU 挂箱、8086CPU 模块。
初值设为 927C(H 37500 十进制),则 OUT0 输出的方波周期为(37500*4/3*10-6=0.05s)。
T2 采用 OUT0 的输出为时钟,则在 T2 中设置初值为 n 时,则 OUT2 输出方波周期为
n*0.05s。n 的最大值为 FFFFH,所以 OUT2 输出方波最大周期为 3276.75s(=54.6 分
4、检查显示数据(16 进制)是否与电位器输出的电压相符合。
六、实验提示
实验电路中启动信号 START 与地址锁存信号相连,所以启动 A/D 转换的方法为:
MOV DX ,ADDRESS
;ADDRESS 是 ADC0809 的端口地址
OUT AL, DX
;发片选及 IOW 信号,启动 0 通道
七、实验结果
实验中,通讯波特率选用 9600bps。上下位机均采用查询方式。8250 的端口地 址为 0480 起始的偶地址单元。
实验中,上位机向下位机发送一个字符,下位机将接收到的字符返回。事实上 这就实现了串口通信的基本过程。掌握了此实验中的编程方法再编制复杂的串行通 信程序也就不难了。
三、实验内容 向 02000~020FFH 单元的偶地址送入 AAH,奇地址送入 55H。
四、实验原理介绍 本实验用到存储器电路

微机原理实验指导书

微机原理实验指导书

实验一数据传送实验目的:1.熟悉8086指令系统的数据传送指令及8086的寻址方式。

2.利用TurboDebugger调试工具来调试汇编语言程序。

实验任务:1.通过下述程序段的输入和执行来熟悉TurboDebugger的使用,并通过显示器屏幕观察程序的执行情况。

练习程序段如下:MOVBL,08HMOVCL,BLMOVAX,03FFHMOVBX,AXMOVDS:[0020H],BX2.用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。

压栈程序段如下:MOVAX,0102HMOVBX,0304HMOVCX,0506HMOVDX,0708HPUSHAXPUSHBXPUSHCXPUSHDX出栈程序段请自行编写(用不同的出栈顺序)。

3.指出下列指令的错误并加以改正,上机验证之。

(1)MOV[BX],[SI](2)MOVAH,BX(3)MOVAX,[SI][DI](4)MOVBYTEPTR[BX],2000H(5)MOVCS,AX(6)MOVDS,2000H4.设置各寄存器及存储单元的内容如下:(BX)=0010H,(SI)=0001H(10010H)=12H,(10011H)=34H,(10012H)=56H,(10013H)=78H(10120H)=0ABH,(10121H)=0CDH,(10122H)=0EFH说明下列各条指令执行完后AX寄存器中的内容,并上机验证。

(1)MOVAX,1200H(2)MOVAX,BX(3)MOVAX,[0120H](4)MOVAX,[BX](5)MOVAX,0110H[BX](6)MOVAX,[BX][SI](7)MOVAX,0110H[BX][SI]5.将DS:1000H字节存储单元中的内容送到DS:2020H单元中存放。

试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果。

微机原理与接口技术基于8086和Proteus仿真第二版课程设计

微机原理与接口技术基于8086和Proteus仿真第二版课程设计

微机原理与接口技术基于8086和Proteus仿真第二版课程设计简介《微机原理与接口技术基于8086和Proteus仿真》是一门针对计算机相关专业的课程,主要介绍了8086微处理器的基本原理、汇编语言编程和接口技术等内容。

本门课程的第二版扩展了课程的实践部分,引入了Proteus仿真软件,增加了课程设计的实验项目,使学生能够更深入地学习和掌握课程内容。

本文主要介绍《微机原理与接口技术基于8086和Proteus仿真第二版》课程设计的实验项目及其要求。

实验项目本门课程设计共有三个实验项目,分别为:实验一:LED流水灯实验目的通过设计一个LED流水灯的电路,提高学生对8086微处理器、接口技术和汇编语言的理解和掌握,同时熟练掌握Proteus仿真软件的使用。

实验要求1.设计一个LED流水灯电路,要求至少包含8个LED灯。

2.使用8255A接口芯片控制LED流水灯电路,实现LED灯的流动效果。

3.使用8086微处理器编写汇编语言程序,实现对8255A接口芯片的控制,控制LED流水灯电路的流动效果。

4.使用Proteus仿真软件进行电路的仿真和调试,最终验证电路的正确性和稳定性。

实验二:数码管计数器实验目的通过设计一个数码管计数器的电路,提高学生对8086微处理器、接口技术和汇编语言的理解和掌握,同时熟练掌握Proteus仿真软件的使用。

实验要求1.设计一个数码管计数器电路,要求使用74LS47译码器和74LS48数码管显示器。

2.使用8255A接口芯片控制数码管计数器电路,实现对计数器的控制和显示。

3.使用8086微处理器编写汇编语言程序,实现对8255A接口芯片的控制,控制数码管计数器电路的计数和显示。

4.使用Proteus仿真软件进行电路的仿真和调试,最终验证电路的正确性和稳定性。

实验三:多功能小车实验目的通过设计一个多功能小车的电路,提高学生对8086微处理器、接口技术和汇编语言的理解和掌握,同时熟练掌握Proteus仿真软件的使用。

微机原理实验指导书 (1)

微机原理实验指导书 (1)

实验一系统操作及程序调试举例1.实验目的学习并掌握实验系统的基本操作,为以后的实验打下基础。

2.实验设备DICE-8086B实验系统一台3.实验准备工作系统一经连好,检查无误后,就可以通电运行。

系统提供两种启动方式,即:系统自动完成后,显示器上会显示“>”提示符,等待键入操作命令。

4.实验内容及步骤(1)系统操作练习(一)要求:从3500内存单元开始建立0~15共16个数据。

程序流程图如下:实验步骤①输入与修改:在“﹥”提示符下键入A2000,此时显示器上将会显示程序的段地址CS和偏移地址IP(=2000H),接着就可以在光标处输入程序。

注:在输入过程中,若发现本行有错误,则可以按“ ”键删除并重新输入;若回车后系统提示“ERROR!”,则要在原地址指针处重新正确输入。

输入程序后可通过反汇编查看程序。

(U操作)②程序运行:在DICE-8086B实验系统上,程序的运行方式有单步、连续和断点运行几种方式。

可参考(T操作,G操作,GB操作等)③内存单元的修改与显示:用(D操作)可显示内存单元的内容,用(E操作)可修改内存单元的内容。

(分别参考前)。

④运行程序观察从3500H单元开始连续存放的16个数据为多少?任意修改AX的值,再运行程序,显示运行结果是否正确?流程图及参考程序如下:地址机器码助记符注释2000 BF 3500 MOV DI,3500 ;设数据区首址2003 B9 0010 MOV CX,0010 ;字节数送CX2006 B8 0000 MOV AX,00002009 9E SAHF200A 88 05 MOV B[DI],AL ;写入一字节200C 47 INC DI ;修改地址指针200D 40 INC AX ;修改数据200E 27 DAA ;十进制调整200F E2 F9 LOOP 200A ;未填完转移2011 CD 00 INT(2)系统操作练习(二)要求:将内存3500单元开始的0~15共16个数传递到3600单元开始的数据区中。

微机原理Emu8086仿真软件实验讲义剖析

微机原理Emu8086仿真软件实验讲义剖析

实验一显示程序实验1.emu8086介绍Emu8086-Assembler and Microprocessor Emulator是一个可在Windows 环境下运行的8086CPU汇编仿真软件,Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,它优于一般编译器的地方在于提供了一个虚拟的80x86环境,拥有自己一套独立的“硬件”,可以完成一些纯软件编译器无法完成的功能例如Led显示,交通灯,步进电机等等,而且动态调试(DEBUG)时非常方便一.软件启动启动界面如图1所示,用户可以选择新建文本、程序实例、启动指南、近期文档。

注册的用户名随意,密码112,即可成功。

二.新建文件单击图1中的“New”选项,软件会弹出如图2所示的选择界面。

●COM模板——适用于简单且不需分段的程序,所有内容均放在代码段中,程序代码默认从ORG 0100H开始;●EXE模板——适用于需分段的复杂程序,内容按代码段、数据段、堆栈段划分。

需要注意的是采用该模板时,用户不可将代码段人为地设置为ORG 0100H,而应由编译器自动完成空间分配;●BIN模板——二进制文件,适用于所有用户定义结构类型;●BOOT模板——适用于在软盘中创建文件。

此外,若用户希望打开一个完全空的文档,则可选择empty workspace的选项。

三.编译和加载程序用户可根据上述选择的模板中编写程序,如图3所示。

该编辑界面集文档编辑、指令编译、程序加载、系统工具、在线帮助为一体,其菜单功能如表1所示。

编写完程序后,用户只需单击工具栏上的“compile”按钮,即可完成程序的编译工作,并弹出如图4所示的编译状态界面。

若有错误则会在窗口中提示,若无错误则还会弹出保存界面,让用户将编译好的文件保存相应的文件夹中。

默认文件夹为…\emu8086\MyBuild\,但您可以通过菜单中assembler/ set output directory对默认文件夹进行修改。

8086微机原理及接口技术实验教程()

8086微机原理及接口技术实验教程()

8086微机原理及接口技术实验教程(2017)-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII8086微机原理及接口技术实验教程合肥工业大学电气与自动化系I实验一系统认识与存储器扩展实验1.1 TD-PITE实验装置简介1.1 TD-PITE功能特点系统以具有PC104总线接口的i386EX单板机和一个开放的微机接口教学实验平台,通过PC104总线组合插接方式构成的高性能80x86微机原理与接口技术教学实验系统,全面支持80x86实模式和保护模式的16/32位微机原理及接口技术的实验教学。

开放的80386系统总线,不仅可以进行各种接口实验的学习,还可以进行基于386微处理器的嵌入式应用开发。

I386EX是一款嵌入式微处理器,其在Intel 386SX微处理器的基础上集成了丰富的外围接口(如8259、8254、16C450和8237等),内部为32位总线,外部为16位数据总线,具有64MB的寻址能力,保持与标准的32位80386CPU相同的指令系统,可完全支持80X86微机原理及接口技术课程的教学,使教学内容与主流技术相一致,达到学以致用的目的。

系统提供开放的386系统总线,使用户可以充分学习并掌握系统总线的特点及操作方法。

实验平台上提供丰富的实验单元,如中断控制器8259、DMA 控制器8237、定时/计数器8254、并行接口8255、串行通信接口8251、SRAM、ADC0809、DAC0832、单次脉冲、键盘扫描及数码管显示、开关输12入及发光管显示、电子发声器、点阵LED 显示、图形LCD 显示、步进电机、直流电机及温度控制单元电路。

1.2 TD-PITE 系统构成TD-PITE 是一套80X86微机原理及接口技术实验教学系统,其主要系统构成如表1.1 所示。

表1.1 TD-PITE 系统构成系统硬件结构如图1.1所示。

图1.1 TD-PITE系统硬件结构图1.3 TD-PITE 系统配置TD-PITE实验教学系统由I386EX系统板和接口实验平台两部分组合而成。

实验一-8086汇编语言上机调试及基本操作

实验一-8086汇编语言上机调试及基本操作

深圳大学实验报告课程名称:微机原理及应用实验实验项目名称:8086汇编语言上机调试及基本操作学院:物理科学与技术学院专业:应用物理指导教师:报告人:学号:班级:应用物理班实验时间:2015年09月23日星期一实验报告提交时间:2015年10月12日星期一教务处制D:\masm\example.asm可执行程序路径及文件名:D:\masm\example.exeExample.exe八、上机调试情况说明一:DOS环境的掌握1.进入:(Win+R),其中的界面如下:输入:mount d d:\(masm文件夹所在盘符),然后回车,再次输入:d:,回车。

如图:(3)接着键入:dir,回车。

可以查看该目录下所有的子文件列表。

(关键文件如下)2.下面操作在dos环境下对例程example.asm进行纯文本编辑,也可以在文件夹下使用系统自带的记事本。

键入edit example.asm,回车。

然后移动光标修改要输入的三位数,如图(本次修改为击file,保存,退出)。

提示程序没有错误警告,否则就需要返回上面进行重新编辑。

(2)使用dir命令查看,可以发现多了一个example.obj文件,接着键入:link example.obj,回车四次。

(链接)(3)再次使用dir,可以发现多了一个example.exe文件:直到执行到命令行:或者使用G - 连续执行程序命令编译:然后命名保存,点击run 运行:单步运行,逐步观察每一步程序运行的结果,点击和可以看到寄存器中值不断变化,以及标志寄存器中的数据变化,查看最终结果。

上机调试步骤A.无法编译时可根据提示查看源代码出错的地方。

B.编译未出错时查看源程序是否实现功能,未实现说明算法有问题,检查源程序算法。

上机调试过程中遇到的问题是如何解决的A简单错误可以直接修改源代码进行调试。

B错误比较大时可以通过CodeView调试。

对调试源程序的中间结果和最终结果进行分析A对结果分析时,通过程序一步一步跟踪,查看相应的寄存器和符号标志位是否与预想中的一修改后的数据保存为十进制,所以在数据段中保存的数据分别为12.EMU8086十、实验总结(必备部分,评分重要依据之一本次通过实验,总结有:1.实验开始之前对masm 和EMU8086机和64位机的区别,以及解决方法。

微机原理实验一8086清零实验

微机原理实验一8086清零实验

Before After
清零 写入值55h
目标地址增1
已循环256次?
yes
结束
可能用到的指令
MOV 值传送 INC 增加1 LOOP 循环 no LEA 地址传送命令
谢谢观赏
定义在数据段中定义一片长为256字节的空 间,并将此段空间写入数据
提示:可以定义初值为00h,也可定义初值 为ffh,写入数据与初值不同即可
实验环境介绍
• 实验箱的配套软件
• 如果不小心错过了,可以在这里找到
菜单栏、工具栏 asm格式
保存
新建程序文档
知识补充
• DOS基础知识 符合DOS标准的文件(夹)名
• 选择文件夹时要双击文件夹,选中后文件 夹呈打开的样子 否则会无法正常选中相应文件夹
编在译这、里重编新写编程译序 在这里会出现错误提示信息
知识补充
• 8086汇编程序基础格式
stack segment stack ……
stack ends 堆栈段
data segment ‘data’ ……
data ends 数据段
8.3格式文件名
文件夹名长度小于8个字符
符合标准的字符为数字、字母等ASCII字符 且不能为 / \ * : < > | 引号
注意事项
• 不要选择某个盘的根目录 若选择某个盘的根目录,则本次所建立 的所有文件会自动跳到C:\XingYan\下
• 不要使用不符合标准的文件名、文件夹名 否则会无法编译并报错
微机原理实验一8086 清零实验
实验前言
约法三章
• 带课本、带实验指导书! • 按时签到、按时交实验报告! • 请自重,不要在课堂上玩游戏!
关于做程序

微机原理8086汇编语言程序设计

微机原理8086汇编语言程序设计

;这是一个乘10子程序
;使用寄存器AX
;入口:AX,出口:AX
proc far
push bx
;保护现场
pushf
add ax,ax
;2ax

mov bx,ax
;2ax ?bx

add ax,ax
;4ax

add ax,ax
;8ax

add ax,bx
;10ax

popf
;恢复现场
pop bx
ret
endp
第四章 8086汇编语言程序设计
? 几个概念 ? 8086汇编语言的语句 ? 8086汇编中的伪指令 ? 8086汇编中的运算符 ? 汇编语言程序设计 ? 宏定义与宏调用 ? 系统调用
几个概念
? 汇编语言 ? 汇编语言源程序 ? 汇编 ? 汇编程序
4.1 8086汇编语言的语句
汇编语言由指令性语句和指令性语句组成 ? 一、指令性语句格式
CODE SEGMENT
;定义代码段
ASSUME DS:DATA , CS: CODE
START: MOV AX , DATA
;初始化DS
MOV DS , AX
……
MOV AX , 4C00H ;返回DOS
INT 21H
CODE ENDS
;代码段结束
END START
;源程序结束
;段属性说明
? 特点 ? 程序分段 ? 语句由指令性和指示性语句组成 ? 两种程序框架
? 3、 ORG伪指令、地址计数器 $
ORG伪指令格式: ORG <表达式>
? 4、END 表示源代码结束 格式为: END 常数或表达式.
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

;A1.asm;显示程序实验STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDA TA SEGMENTMES1 DB 'Show a as hex:',0AH,0DH,'$'SD DB 'c'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DA TAMOV DS,AXMOV DX,OFFSET MES1 ;show messageMOV AH,09HINT 21MOV SI,OFFSET SDMOV AL,DS:[SI]AND AL,0F0H;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HWAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00H ;go back to dosINT 21HCODE ENDSEND START;A2.asm;数据传送实验STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDDATA SEGMENTMSR DB 'HELLO,WORLD!$'LEN EQU $- MSRDDATA ENDSEXDA SEGMENTMSD DB LEN DUP(?)EXDA ENDSCODE SEGMENTASSUME CS:CODE,DS:DDATA,ES:EXDASTART: MOV AX,DDA TAMOV DS,AXMOV AX,EXDAMOV ES,AXMOV SI,OFFSET MSRMOV DI,OFFSET MSDMOV CX,LENMOV BX,0NEXT: MOV AL,MSR[BX]MOV ES:MSD[BX],ALINC BXLOOP NEXTPUSH ESPOP DSMOV DX,OFFSET MSDMOV AH,9INT 21HWAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00HINT 21HCODE ENDSEND START;A3-1.asm;将ASCII码十进制数转换为二进制数STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDDATA SEGMENTMES1 DB 'The ascii code of decimal code are:$'BUF DB 30H,30H,32H,35H,36HDB 10H DUP(0)DDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DDA TASTART: MOV AX,DDA TAMOV DS,AXMOV SI,OFFSET BUFMOV BX,000AHMOV CX,0004HMOV AH,00HMOV AL,[SI]SUB AL,30HA1: IMUL BXADD AL,[SI+01]SUB AL,30HINC SILOOP A1MOV [SI],AXMOV DX,OFFSET MES1MOV AH,09HINT 21HINC SI ;显示高字节CALL SHOWDEC SI ;显示低字节CALL SHOWWAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00HINT 21HSHOW PROC NEARMOV AL,DS:[SI]AND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HRETSHOW ENDPCODE ENDSEND START;A3-2.asm;将十进制数的ASCII码转换为BCD码STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDDATA SEGMENTMES1 DB 'The BCD code of decimal are:$'BUF DB 30H,32H,35H,34H,39HDB 10H DUP(0)DDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DDA TASTART: MOV AX,DDATAMOV DS,AXMOV CX,0005HMOV DI,OFFSET BUFA1: MOV BL,0FFHMOV AL,[DI]CMP AL,3AH ;比较AL中的数是否是0~9的ASCII码JNB A2SUB A L,30HJB A2MOV BL,ALA2: MOV AL,BLMOV [DI+05H],ALINC DILOOP A1MOV SI,DIMOV CX,05HMOV DX,OFFSET MES1MOV AH,09HINT 21HA3: CALL SHOWMOV DL,20HMOV AH,02HINT 21HINC SILOOP A3WAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00HINT 21HSHOW PROC NEARMOV AL,DS:[SI]AND AL,0F0H;取高4位SHR AL,1SHR AL,1SHR AL,1SHR AL,1CMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HRETSHOW ENDPCODE ENDSEND START;A3-3.asm;将十六进制的ASCII码转换为十进制数STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDDATA SEGMENTMES1 DB 'The ascii code of hex are:$'BUF DB 0CH,00HDB 10H DUP(0)DDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DDA TASTART: MOV AX,DDATAMOV DS,AXMOV SI,OFFSET BUFMOV DX,[SI]MOV BX,SIADD BX,2ADD SI,7A1: DEC SIMOV AX,DXMOV DX,0000HMOV CX,000AHDIV CXXCHG AX,DXADD AL,30HMOV [SI],ALCMP DX,0000HJNE A1A2: CMP SI,BXJZ A3DEC SIMOV AL,30HMOV [SI],ALJMP A2A3: MOV CX,5MOV SI,OFFSET BUFADD SI,2MOV DX,OFFSET MES1MOV AH,09HINT 21HA4: CALL SHOWMOV DL,20HMOV AH,02HINT 21HINC SILOOP A4WAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00HINT 21HSHOW PROC NEARMOV AL,DS:[SI]AND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HRETSHOW ENDPCODE ENDSEND START;A3-4.asm;BCD码转换为二进制码STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDDATA SEGMENTMES1 DB 'The BCD code of binary are:$'BUF DB 01H,07H,03H,04H,05H,01H,06H,08H DB 10H DUP(0)DDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DDA TASTART: MOV AX,DDATAMOV DS,AXMOV CX,0004HMOV DI,OFFSET BUFA1: MOV AL,[DI]ADD AL,ALMOV BL,ALADD AL,ALADD AL,ALADD AL,BLINC DIMOV AH,00HADD AL,[DI]MOV [DI+07H],AXINC DILOOP A1MOV DX,OFFSET MES1MOV AH,09HINT 21HMOV CX,04HMOV DI,OFFSET BUFADD DI,08HA2: MOV AX,[DI]CALL SHWORDMOV DL,20HMOV AH,02HINT 21HINC DIINC DILOOP A2WAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00HINT 21HSHWORD PROC NEARMOV BL,AHCALL SHOWMOV BL,ALCALL SHOWRETSHWORD ENDPSHOW PROC NEARPUSH AXPUSH DXMOV AL,BLAND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,BLAND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HPOP DXPOP AXRETSHOW ENDPCODE ENDSEND START;A4-1.asm;二进制双精度加法运算STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDA TA SEGMENTMES1 DB 'The result is:$'XL DW 65A0HXH DW 0015HYL DW 0B79EHYH DW 0021HDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV DX,OFFSET MES1MOV AH,09HINT 21HMOV AX,XLADD AX,YLMOV BX,AXMOV AX,XHADC AX,YHPUSH BXCALL SHWORDPOP BXMOV AX,BXCALL SHWORDWAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00HINT 21HSHWORD PROC NEARMOV BL,AHCALL SHOWMOV BL,ALCALL SHOWRETSHWORD ENDPSHOW PROC NEARPUSH AXPUSH DXMOV AL,BLAND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,BLAND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HPOP DXPOP AXRETSHOW ENDPCODE ENDSEND START;A4-2.asm;十进制数的BCD码减法运算STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDA TA SEGMENTMES1 DB 'The result is:$'X DW 0400HY DW 0102HDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DATAMOV DS,AXMOV AH,00HSAHFMOV SI,OFFSET XMOV AL,[SI]SBB AL,[SI+02H]DASPUSHFAND AL,0FHPOPFMOV BL,ALINC SIMOV AL,[SI]SBB AL,[SI+02H]DASPUSHFAND AL,0FHPOPFMOV BH,ALMOV DX,OFFSET MES1MOV AH,09HINT 21HMOV AX,BXCALL SHWORDWAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00HINT 21HSHWORD PROC NEARMOV BL,AHCALL SHOWMOV BL,ALCALL SHOWRETSHWORD ENDPSHOW PROC NEARPUSH AXPUSH DXMOV AL,BLAND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,BLAND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HPOP DXPOP AXRETSHOW ENDPCODE ENDSEND START;A4-3.asm;乘法运算STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDA TA SEGMENTMES1 DB 'The result is:$' ERRMES DB 'Error exist!$'DA TA1 DB 00H,02H,03H,04H,05H DA TA2 DB 03HRESULT DB 06H DUP(0)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV SI,OFFSET DA TA2MOV BL,[SI]AND BL,0FHCMP BL,09HJNC ERRORMOV SI,OFFSET DA TA1MOV DI,OFFSET RESULTMOV CX,0005HA1: MOV AL,[SI+04H]AND AL,0FHCMP AL,09HJNC ERRORDEC SIMUL BLAAMADD AL,[DI+05H]AAAMOV [DI+05H],ALDEC DIMOV [DI+05H],AHLOOP A1MOV DX,OFFSET MES1MOV AH,09HINT 21HMOV CX,06HMOV SI,OFFSET RESULTA2: CALL SHOWMOV DL,20HMOV AH,02HINT 21HINC SILOOP A2WAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00HINT 21HERROR: MOV DX,OFFSET ERRMESMOV AH,09HINT 21HMOV AX,4C00HINT 21HSHOW PROC NEARMOV AL,DS:[SI]AND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HRETSHOW ENDPCODE ENDSEND START;A4-4.asm;用减奇法开平方运算STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDDATA SEGMENTMES1 DB 'The square root of $'MES2 DB ' is:$'NUMB DW 0040HDDATA ENDSCODE SEGMENTASSUME CS: CODE,DS:DDA TASTART: MOV AX,DDATAMOV DS,AXMOV DX,OFFSET MES1MOV AH,09HINT 21HMOV SI,OFFSET NUMBMOV AX,[SI]CALL SHWORDMOV DX,OFFSET MES2MOV AH,09HINT 21HMOV AX,[SI]MOV CL,00HMOV DX,0001HA1: SUB A X,DXJB A2INC CLADD DX,02HJMP A1A2: MOV BL,CLCALL SHOWWAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00HINT 21HSHWORD PROC NEARMOV BL,AHCALL SHOWMOV BL,ALCALL SHOWRETSHWORD ENDPSHOW PROC NEARPUSH AXPUSH DXMOV AL,BLAND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,BLAND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HPOP DXPOP AXRETSHOW ENDPCODE ENDSEND START;A5.asm;分支程序设计实验STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDDATA SEGMENTMES1 DB 'The least number is:$'MES2 DB 0AH,0DH,'The largest number is:$'NUMB DB 0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H DDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DDA TASTART: MOV AX,DDATAMOV DS,AXMOV SI,OFFSET NUMBMOV CX,0008HJCXZ A4MOV BH,[SI]MOV BL,BHA1: LODSB ;AL=DS:[SI],SI=SI+1CMP AL,BHJBE A2MOV BH,ALJMP A3A2: CMP AL,BLJAE A3MOV BL,ALA3: LOOP A1A4: MOV DX,OFFSET MES1 ;show mes1MOV AH,09HINT 21HMOV AL,BL ;show the least numberAND AL,0F0H ;get the highest 4 bitsMOV CL,4SHR AL,CLCMP AL,0AHJB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,BLAND AL,0FH ;get the lowest 4 bitsCMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV DX,OFFSET MES2 ;show mes2MOV AH,09HINT 21HMOV AL,BH ;show the largest numberAND AL,0F0H ;get the highest 4 bitsMOV CL,4SHR AL,CLCMP AL,0AHJB C22ADD AL,07HC22: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,BHAND AL,0FH ;get the lowest 4 bitsCMP AL,0AHJB C33ADD AL,07HC33: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HWAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00H ;go back to dosINT 21HCODE ENDSEND START;A6.asm;循环程序设计实验STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDDATA SEGMENTNUMB DB 12H,88H,82H,89H,33H,90H,01H,10H,0BDH,01H MES1 DB 'The number of negative is:$'DDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DDA TASTART: MOV AX,DDATAMOV DS,AXMOV DI,OFFSET NUMBXOR BH,BHMOV CX,10DA1: MOV AL,[DI]TEST AL,80HJE A2INC BLA2: INC DILOOP A1MOV DX,OFFSET MES1 ;show mesMOV AH,09HINT 21HMOV AL,BL ;show the number of negativeAND AL,0F0H ;get the highest 4 bitsMOV CL,4SHR AL,CLCMP AL,0AHJB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,BLAND AL,0FH ;get the lowest 4 bitsCMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HWAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00H ;go back to dosINT 21HCODE ENDSEND START;A7-1.asm;子程序设计-数据移动实验STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDDATA SEGMENTMES1 DB 'The data in buf2 are:',0AH,0DH,'$'BUF1 DB11H,22H,33H,44H,55H,66H,77H,88H,99H,0AAH,0BBH,0CCH,0DDH,0EEH,0FFH,00H BUF2 DB 20H DUP(0)DDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DDA TASTART: MOV AX,DDA TAMOV DS,AXMOV CX,0010HMOV SI,OFFSET BUF1MOV DI,OFFSET BUF2CMP SI,DIJA A2ADD SI,CXADD DI,CXDEC SIDEC DIA1: MOV AL,[SI]MOV [DI],ALDEC SIDEC DIDEC CXJNE A1JMP A3A2: MOV AL,[SI]MOV [DI],ALINC SIINC DIDEC CXJNE A2A3: MOV DX,OFFSET MES1MOV AH,09HINT 21HMOV CX,10HMOV SI,OFFSET BUF2A4: CALL SHOWINC SIMOV DL,20HMOV AH,02HINT 21hLOOP A4WAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出MOV AX,4C00HINT 21HSHOW PROC NEARMOV AL,DS:[SI]AND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HRETSHOW ENDPCODE ENDSEND START;课本p120 8DA TA SEGMENTX DB 67HY DB ?DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV AL,XCMP AL,20JNC NEXT ;X大于等于20转NEXTMOV CL,03HSHR AL,CL ;X小于20,除以8JMP NEXT1NEXT: CMP AL,30JNC NEXT2 ;X大于等于30转NEXT2SUB AL,15 ;X大于等于20小于30,减15JMP NEXT1NEXT2:MOV AL,00H ;超出函数定义域,函数值置0 NEXT1:MOV Y,ALMOV AH,4CHINT 21HCODE ENDSEND START;课本p120 9CODE SEGMENTASSUME CS:CODE,DS:DDA TASTART: MOV AL,00H ;计数单元清0MOV DX,BXMOV CX,16 ;设置循环次数AA: CMP DX,0JZ NEXT ;完成统计,可提前结束循环SHL DX,1JNC NEXT1INC AL ;查到“1”,计数单元加1 NEXT1: LOOP AANEXT: MOV AH,4CHCODE ENDSEND START;课本p120 14DA TA SEGMENTABC DB '3589027164' ;定义密码表ABC1 DB 4DUP(00H) ;存放密码ABC2 DW 0000H ;存放原码DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START: MOV AX,DA TAMOV DS,AXLEA SI,ABC1LEA DI,ABC2MOV CX,0004HAA: MOV AH,01HINT 21HMOV [SI],ALINC SI ;接收密码LOOP AALEA SI,ABC1MOV DX,0000HMOV CX,0004HAA0: LEA BX,ABCAA1: MOV AL,[SI]CMP AL,[BX]JZ NEXTINC BXINC DLJMP AA1NEXT: PUSH CXCMP CX,0001HJZ NEXT1MOV CL,04HSHL DX,CLINC SINEXT1: POP CXLOOP AA0MOV [DI],DXMOV AH,4CHINT 21HCODE ENDSEND START课本p121 12DA TA SEGMENTBUFFER DB 23H,00H,56H,89H,09H,30HDB 98H,11H,07H,...COUNT EQU $-BUFFERNUMBER DB 00HDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV CX,COUNTLEA SI,BUFFERAA: MOV AL,[SI]CMP AL,00HJZ NEXTJS NEXTINC NUMBERNEXT: INC SILOOP AAMOV AH,4CHINT 21HCODE ENDSEND START课本p121 16DA TA SEGMENTMEM DB 4DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV CH,04HMOV BX,OFFSET MEM ;存取放结果的首地址MOV CL,04HAA1: MOV AX,DXAND AL,0FH ;取1位待转换的16进制数ADD AL,30HCMP AL,3AHJC NEXTADD AL,07HNEXT: MOV [BX],AL ;存转换结果INC BXROR DX,CLDEC CHJNZ AA1MOV AH,4CHINT 21H CODE ENDSEND START。

相关文档
最新文档