微机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程序,编译,运行,观察结果。

  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。

相关文档
最新文档