文档库 最新最全的文档下载
当前位置:文档库 › 微机原理第一次实验

微机原理第一次实验

微机原理第一次实验
微机原理第一次实验

微机原理第一次实验

电气310 张端鸿 2130401287

注:为了适配win8.1 64bit系统,采用masm for Windows软件,初始化过程有些许

不同。

实验一顺序程序的设计

一、实验目的

1.学习8086/8088指令系统中一些基本指令的用法和程序设计的的基本方法

2熟悉在PC机上建立、汇编、连接、调试与运行8086/8088汇编语言程序的全过程;

二、实验内容

设a、b、c、d四个数分别以单字节压缩BCD码形式存放在内存NUM开始的四个单元,计算(a+b)-(c+d)并将结果放在Y1单元,将结果在屏幕上显示出来。

在DEBUG中,不断改变a,b,c,d的内容并查看结果。

这里给出几组数据:

1.a=09,b=06,c=04,d=07

2.a=38,b=41,c=29,d=34

3.a=70,b=23,c=42,d=41

4.a=63,b=73,c=62,d=50

三、实验程序

DATA SEGMENT

NUM DB13H,27H,11H,12H

Y1 DB?

DATA ENDS

STACK SEGMENT

DB 20 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV AL,NUM

ADD AL,NUM+1 ;把a+b的结果保存在AL中

DAA;BCD码调整

MOV CL,AL ;把a+b的结果复制到CL中

MOV AL,NUM+2

ADD AL,NUM+3 ;把c+d的结果保存在AL中

DAA;BCD码调整

SUB CL,AL ;把(a+b)-(c+d)的结果保存在CL中MOV AL,CL

DAS;减法BCD码调整

MOV Y1,AL ;结果保存于YI中

MOV BL,AL ;保存AL中的内容

MOV CL,4

ROR AL,CL

AND AL,0FH ;取AL中的高四位

ADD AL,30H ;转换为ASCII码

MOV DL,AL

MOV AH,02H

INT 21H ;显示高位ASCII码

MOV AL,BL ;恢复AL的内容

AND AL,0FH ;取低四位

ADD AL,30H ;转换为ASCII码

MOV DL,AL

MOV AH,02H

INT 21H ;显示高位ASCII码

MOV AH,4CH

INT 21H

CODE ENDS

ENDSTART

调试过程:

1.反汇编

2.查看初始时寄存器与内存中的内容

3.a=09,b=06,0c=04,d=07时,在偏移地址为0011H(DAA)处设置断点,AL保存的即是经过未经DAA操作后的a+b的结果0FH

4.在偏移地址为0011H(DAA)处设置断点,AL保存的即是经过未经DAA操作后的c+d 的结果0BH

5.在偏移地址为0020H(DAS)处设置断点,AL保存的即是经过未经DAS操作后的

(a+b)-(c+d)的结果04H

6.在偏移地址为0021H(DAS)处设置断点,AL保存的即是经过经DAS操作后的(a+b)-(c+d)的结果04H

7.在40H设置断点,得到输出结果

1修改abcd,a=38,b=41,c=29,d=34

结果为16

同理,当a=70,b=23,c=42,d=41

结果为10

a=63,b=73,c=62,d=50

结果为24

实验一思考题

1.可改变abcd的值的DEBUG命令:E

可查看abcd的值的DEBUG命令:D

2.断点设置在每一次运算后,即c+d、a+b、与(a+b)-(c+d)后以便验证结果是否与期望相同;还将断点设置在每一位的显示后以观察是否正常显示。

3.a=90,b=34,c=33,d=44

结果为47

a=12,b=19,c=25,d=33

与预期结果-27不符

原因:(a+b)-(c+d)为负数

现考虑结果为负数的情况,同时考虑是否存在百位,改进程序如下:DSEG SEGMENT

NUM DB 12H,19H,25H,33H

Y1 DB?

DSEG ENDS

SSEG SEGMENT PARA STACK

DB 20 DUP(?)

SSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG,SS:SSEG

START:

MOV AX,DSEG

MOV AX,SSEG

MOV SS,AX

MOV AL,[NUM]

ADD AL,[NUM+1]

DAA

MOV CL,AL

MOV AL,[NUM+2]

ADD AL,[NUM+3]

DAA

CMP CL,AL

JL LLOW ;如果CL

MOV AL,CL

DAS

JMP DONE

LLOW:

SUB AL,CL

DAS

MOV BL,AL

MOV DL,'-'

MOV AH,02H

INT 21H ;输出负号

XOR DL,DL

MOV AL,BL

XOR BL,BL

JMP DONE

DONE:

MOV [NUM+4],AL

MOV BL,AL

AND AL,0F0H

MOV CL,4

SHR AL,CL

ADD AL,30H

MOV DL,AL

MOV AH,02H

INT 21H

MOV AL,BL

AND AL,0FH

ADD AL,30H

MOV DL,AL

MOV AH,02H

INT 21H

MOV AX,4C00H

CSEG ENDS

ENDSTART

实验二分支程序的设计

一、实验目的

1、学习提示信息的显示及键盘输入字符的方法。

2、掌握分支程序的设计方法。

二、实验内容

在提示信息下,从键盘上输入原码表示的二位十六进制有符号数

当此数大于0时,屏幕上显示此数为正数

此数等于0时,屏幕上显示此数为0

此数小于0时,屏幕上显示此数为负

三、实验原理

分支程序是程序通过判断和比较形成不同逻辑框并产生相应的分支程序。

它的结构有两种:一种是二分支,一种是多分支

它们的共同特点是:运行方向总是向前的,在某种确定的条件下,只能执行多个分支中的一个分支。

四、实验过程

程序编制完成后,先静态检查,无误后,建立汇编文件,生成可执行文件,然后先进入DEBUG中用G命令加断点的方式,分段调试,无误之后,再在DEBUG 下连续运行,最后再将程序在DOS中运行,如果正确,则使用DEBUG命令改变a,b,c,d的值反复验证结果,如果不正确,则调试直至完成为止。

程序

CRLF MACRO ;定义宏

MOV AH,02H

MOV DL,0DH

INT 21H ;显示回车

MOV AH,02H

MOV DL,0AH

INT 21H ;显示回车

ENDM ;宏结束

DATA SEGMENT

MESS1 DB'INPUT DATA:',0DH,0AH,'$'

MESS2 DB'THIS DATA IS+',0DH,0AH,'$'

MESS3 DB'THIS DATA IS-',0DH,0AH,'$'

MESS4 DB'THIS DATA IS ZERO',0DH,0AH,'$';定义的结果信息

DATABUF DB 3 ;定义可以接收的最大字符数

ACTION DB?;实际输入字符数

STRING DB 3 DUP(?) ;输入字符缓冲区

DATA ENDS

SSEG SEGMENT PARA STACK'STACK'

DB 50 DUP(0)

SSEG ENDS

CODE SEGMENT

ASSUME CS:CODE,SS:SSEG,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV AX,SSEG

MOV SS,AX

MOV DX,OFFSET MESS1

MOV AH,09H ;显示提示信息

INT 21H

MOV AH,0AH

MOV DX,OFFSET DATABUF

INT 21H ;接收二位字符

CRLF ;回车换行

MOV AL,STRING

CMP AL,38H

JGE BELOW

CMP AL,30H

JNE ABOVE

MOV AL,[STRING+1]

CMP AL,30H

JNE ABOVE

DENG:MOV DX,OFFSET MESS4 ;当等于0时跳转至此

MOV AH,09H

INT 21H

JMP NEXT

BELOW:

MOV DX,OFFSET MESS3 ;小于0时跳转至此

MOV AH,09H

INT 21H

JMP NEXT

ABOVE:

MOV DX,OFFSET MESS2 ;大于0时跳转至此

MOV AH,09H

INT 21H

NEXT:MOV AX,4C00H

INT 21H

CODE ENDS

ENDSTART

六、实验过程

1、实验中JZ,JGE,JNE等指令的使用是体现分支程序多分支特点的重要一环。

2、接收键入的字符,要用DOS功能调用的0AH号功能。

3、此外,本程序中的宏指令,采用了DOS功能调用的02H号功能,显示一个字符并将回车符和换行符在显示屏上显示出来

4、接收在缓冲区的字符是用ASCII码表示的,对于元码表示的有符号数来说:

大于0,高位字符第7位为0,即高位字符的ASCII码小于38H

大于0,高位字符第7位为1,即高位字符的ASCII码大于等于38H

等于0,必须两个字符都为30H

测试3组数据33、00、81

以输入A4为例,可见为正数。

实验思考题

1、断点应设在各个CMP指令处,以观察符号位的变化,进而进一步判断分支走向。查看符号位的变化可以调用-R指令,如下图:

即为标志寄存位。

2、以输入33为例,利用-R:

得到DS段基地址为0770以及databuf的偏移地址0042

以-D 0770:0042指令可得:

可见缓冲区第一字节存放它能保存的最大字符数03H,第二个字节存放实际输入的字符数02H,之后三个字节存放用户从键盘输入的字符,依次为31H(1的ASCII码),32H(1的ASCII码),0DH(回车键)

3、

果会不符合逻辑,变得毫无意义,对此,我们可以设计程序,判断当输入字符为无效字符时转移至字符输入阶段,重新输入。

微机原理及应用实验

实验报告1 实验项目名称:I/O地址译码;简单并行接口同组人: 实验时间:实验室:微机原理实验室K2-407 指导教师:胡蔷 一、实验目的: 掌握I/O地址译码电路的工作原理,简单并行接口的工作原理及使用方法。 二、预备知识: 输入、输出接口的基本概念,接口芯片的(端口)地址分配原则,了解译码器工作原理及相应逻辑表达式,熟悉所用集成电路的引线位置及各引线用途;74LS245、74LS373的特性及作用。 三、实验内容245输入373输出 使用Protues仿真软件制作如下电路图,使用EMU8086编译软件编译源程序,生成可执行文件(nn . exe),在Protues仿真软件中加载程序并运行,分析结果。 编程实现:读8个开关的状态,根据输入信号控制8个发光二极管的亮灭。 图1-1 245输入373输出 四、程序清单

五、实验结果 六、结果分析 七、思考题: 1、如果用74LS373作输入接口,是否可行?说明原因;用74LS245作输出接口,是否可行?说明原因。

实验报告2 实验项目名称:可编程定时器/计数器;可编程并行接口同组人: 实验时间:实验室:微机原理实验室K2-407 指导教师:胡蔷 一、实验目的: 掌握8253的基本工作原理和编程应用方法。掌握8255的工作原理及使用方法。 二、预备知识: 8253的结构、引脚、控制字,工作方式及各种方式的初始化编程及应用。 8255的内部结构、引脚、编程控制字,工作方式0、1、2的区别,各种方式的初始化编程及应用。 三、实验内容: ⑴8253输出方波 利用8253的通道0和通道1,设计产生频率为1Hz的方波。设通道0的输入时钟频率为2MHz,8253的端口地址为40H,42H,44H,46H。通道0的输入时钟周期0.5μs,其最大定时时间为:0.5μs×65536 = 32.768ms,要产生频率为1Hz(周期= 1s)的方波,利用;一个通道无法实现。可用多个通道级连的方法,将通道0的输出OUT0作通道1的输入时钟信号。设通道0工作在方式2(频率发生器),输出脉冲周期= 10 ms,则通道0的计数值为20000(16位二进制)。周期为4 ms的脉冲作通道1的输入时钟,要求输出端OUT1输出方波且周期为1s,则通道1工作在方式3(方波发生器),计数值为100(8位;二进制)。硬件连接如图2-1。

微机原理实验简易计算器

【实验题目】 简易计算器设计 【实验目的】 综合测试学生微机接口技术及应用能力,包括系统构思设计、电路设计搭建、软件调试等; 结合应用实际,培养学生运用微机技术服务应用、服务实际的能力。 【基本要求】 1)利用实验箱上的4x4键盘及6位数码管,实现两个16位宽的非负整数(0~65535)进行+、-、×运算,计算结果限制在范围-65535~65535,超过范围在数码管最低位显示E; 2)16个按键的分配可以自行指定; 【扩展要求】 1)按基本要求保持输入的范围不变(16位宽),扩展计算结果的范围到用足6位数码管,当计算结果超过-65535~999999时,显示E; 2)增加÷的功能,有小数显示; 【实验程序】 ;该程序实现了基本要求及扩展要求的2) DSEG SEGMENT BUFF DB 6 DUP(?) LED_7 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7C H,39H,5EH,79H,71H,00H,40H POSITION DB 0DFH,0EFH,0F7H,0FBH,0FDH,0FEH UNIT10 DW 10000,1000,100,10,1 NEWNUM DB 0 COUNT DB 0 FLAG DB 0 ;是否有键按下的标志 NEGTI DB 0 ;是否为负数的标志 NUM DW 0 NUM1 DW 0 NUM2 DW 0 TAG DB 0 ;运算种类标志 POINT DB 0 ;除法结果添加小数点标志 RESULT DW 0 DSEG ENDS CSEG SEGMENT ASSUME DS:DSEG,CS:CSEG START: MOV AX,DSEG MOV DS,AX MOV DX,300CH ;8255初始化 MOV AL,81H OUT DX,AL LEA SI,BUFF MOV CX,6 NEXT: MOV BYTE PTR[SI],16 INC SI LOOP NEXT CALL SHOW ;将显示缓冲区中内容在LED上一次显示出来 MOV COUNT,0 ;记按下了几位数 NEXT2: CALL SHOW CALL SCAN ;判断是否有按键按下 CMP FLAG,1 JZ OK JMP NEXT2 OK: MOV FLAG,0 MOV POINT,0 MOV DX,3000H ;判断是哪一个键被按下 MOV AL,0FFH OUT DX,AL MOV CH,-1 ;CH用于保存当前被扫描的列号MOV CL,07FH XL: ROL CL,1 INC CH MOV DX,3000H MOV AL,CL .

微机原理实验五输入与输出程序设计

实验六输入与输出程序设计 一、实验目的 1.掌握常用DOS中断调用的功能以及在应用程序中的使用方法。 2.学习键盘输入和屏幕输出的基本方法。 3.宏指令、子程序在应用程序中的使用。 4.汇编语言程序设计的调试与完善。 二、设计指标与实验要求 1.设计内容 本实验要求设计完成:①屏幕输出提示(如“Want input(Y/N)?”),若键入N 则结束程序返回操作系统;键入Y则转2步;键入的是其它字母则回①步。②换行后输出提示(如“please input a strings:”),且在该提示后键入一字符串(输入到输入缓冲区)。 ③换行后输出提示(如“your inputting is:”),在该提示后输出由②步输入的字符串。 ④换行后输出提示“Want continue(Y/N)? ”,若键入Y则转②步;键入N则结束程序返回操作系统;其它字母则回第④步。 2.设计要求 ①按屏幕提示要求输入,从屏幕上获得正确结果。 ②把程序中常用的中断调用定义成宏指令(至少定义2个)。 ③字符串回显部分设计成子程序,可以选择用21H中断的2号或9号功能来实现,应 能显示由主程序指定的任一字符串。要注意这两种方法实现的设计过程是不同的。 采用2号功能的,子程序输入参数为“回显字符串地址”和“回显字符数”;采用 9号功能的,子程序输入参数为“回显字符串地址”。 ④屏幕的提示信息显示格式尽量做到兼顾美观。 3.实验步骤 ①.选用合适的程序文本编辑软件编辑源程序,并为文件取以.ASM为扩展名的文件存盘。 ②.用宏汇编软件MASM对源程序文件进行汇编,若有错误,根据提示(行号,错误类型)回源程序文件中修改。 ③.用LINK对由MASM汇编后产生的目标文件做连接,生成可执行文件;若有错误(同

微机原理实验报告

西安交通大学实验报告 课程_微机与接口技术第页共页 系别__生物医学工程_________实验日期:年月日 专业班级_____组别_____交报告日期:年月日 姓名__ 学号__报告退发 ( 订正、重做 ) 同组人_教师审批签字 实验一汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。编程并显示结果: 如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子

程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H = xxxxxxxxH 四、实验代码及结果 1.1、实验代码: DATA SEGMENT SZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOW DB 'THE MAX IS: ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX MOV DX,OFFSET SHOW ;调用DOS显示字符串 MOV AH,09H INT 21H MOV SI ,OFFSET SZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DH NEXT: MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DH NEXT1: INC SI ;偏移地址加1 LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H NEXT2: MOV CL,4 ROL DH,CL ;将DH循环右移四位

微机原理实验报告

汇编语言程序设计实验 一、实验内容 1.学习并掌握IDE86集成开发环境的使用,包括编辑、编译、链接、 调试与运行等步骤。 2.参考书例4-8,P165 (第3版161页)以单步形式观察程序的 执行过程。 3.修改该程序,求出10个数中的最大值和最小值。以单步形式观 察,如何求出最大值、最小值。 4.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态。 二、实验目的 1.学习并掌握IDE86集成开发环境的使用 2.熟悉汇编语言的基本算法,并实际操作 3.学会利用IDE86进行debug的步骤 三、实验方法 1.求出10个数中的最大值和最小值 (1)设计思路:利用冒泡法,先对数据段的10个数字的前2个比 较,把二者中大的交换放后面。在对第二个和第三个数比较,把 二者中较大的交换放后面,依此类推直到第十个数字。这样第十 位数就是10个数里面最大的。然后选出剩下9个数字里面最大 的,还是从头开始这么做,直到第九个数字。以此类推直到第一 个数字。

(2)流程图 2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态

(1)设计思路:结果存放在sum里面,加数是i(初始为1),进行 100次循环,sum=sum+I,每次循环对i加1. (2)流程图: 四、 1.求出10个数中的最大值和最小值

DSEG SEGMENT NUM DB -1,-4,0,1,-2,5,-6,10,4,0 ;待比较数字 DSEG ENDS CODE SEGMENT ASSUME DS:DSEG,CS:CODE START:MOV AX,DSEG MOV DS,AX LEA SI,NUM MOV DX,SI MOV CL,9 ;大循环计数寄存器初始化 NEXT1:MOV BL,CL ;大循环开始,小循环计数器初始化MOV SI,DX NEXT2:MOV AL,[SI+1] CMP [SI],AL ;比较 JGGONE ;如果后面大于前面跳到小循环末尾CHANGE:MOV AH,[SI] ;交换 MOV [SI+1],AH MOV [SI],AL JMP GONE GONE:add SI,1 DEC BL JNZ NEXT2

微机原理实验

;实验一汇编程序、链接程序、编辑程序及调试程序得基本使用方法 ;一、实验目得 ;1.熟悉在PC机上建立、汇编、连接、调试与运行汇编语言程序得过程。 ;2.掌握字符串得复制,并会用各种方法实现。 ;3.掌握字符串显示得DOS功能调用。 ;二、实验内容及要求 ;1.将以符号地址为ARRAY1开始得字符串“请自己定义”复制到ARRAY2开始得存储单元中并显示在屏幕上。 ;2、使用三种方法传送: ;(1) 用MOV指令传送 ;(2) 用基本串传送指令 ;(3) 重复串传送指令 MY_DATA SEGMENT PARA 'DATA';数据段 DISP1 DB 'How are you?',0aH,0DH,'$'; ARRAY1 DB 'DI',41H,'NZI09','$'; ARRAY2 DB 20 dup(0) MY_DATA ENDs MY_CODE SEGMENT PARA 'CODE' ;代码段 MY_PROC PROC FAR ASSUME CS:MY_CODE, DS:MY_DATA START: MOV AX,MY_DA TA MOV DS,AX MOV ES,AX LEA DX,DISP1;显示提示字符串 MOV AH,09H INT 21H ;;开始(1) 用MOV指令传送 ;LEA SI,ARRAY1; ;LEA DI,ARRAY2; ;MOV CX,09H LOOP1: ;MOV BH, [SI] ;MOV [DI], BH ;INC SI ;INC DI ;LOOP LOOP1 ;;开始(2) 用基本串传送指令 LEA SI,ARRAY1; LEA DI,ARRAY2; MOV CX,09H CLD LOOP2: MOVSB LOOP LOOP2 ;;开始(3) 重复串传送指令 ;LEA SI,ARRAY1;

微机原理实验

微型计算机原理实验报告 学号 姓名海米提。热合木江班级测控0902班

实验一显示程序实验 一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。实验中可使用DOS功能 调用(INT 21H)。 流程图

2.试验程序 DA TA SEGMENT MES DB 'Show a as hex:', 0AH,0DH,'$' SD DB 'a' DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV DX, OFFSET MES MOV AH, 09H INT 21H MOV DI, OFFSET SD MOV AL, DS:[DI] 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:[DI] AND AL, 0FH CMP AL, 0AH JB C3 ADD AL, 07H C3: ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H MOV AX, 4C00H INT 21H CODE ENDS END START

实验二数据传送实验 三、实验内容 将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上 1.试验程序 DA TA SEGMENT MSR DB "HELLO,WORLD!$" LEN EQU $- MSR DDATA ENDS EXDA SEGMENT MSD DB LEN DUP() EXDA ENDS MYSTACK SEGMENT STACK DW 20 DUP() MYSTACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DDA TA, ES:EXDA START: MOV AX, DDATA MOV DS, AX MOV AX, EXDA MOV ES,AX MOV SI, OFFSET MSR MOV DI, OFFSET MSD MOV CX, LEN NEXT: MOV AL, [SI] MOV ES:[DI], AL INC SI INC DI DEC CX JNZ NEXT PUSH ES POP DS MOV DX, OFFSET MSD MOV AH, 9 INT 21H MOV AX, 4C00H

微机原理实验

实验四:分支、循环程序设计 一. 实验目的 1.学习分支程序、循环结构程序的设计和调试方法; 2.学习子程序的定义和调试方法; 3.掌握分支、循环、子程序等程序的基本结构。 二. 实验设备 TDN 86/51或 TDN 86/88教学实验系统一台 三. 实验内容、步骤及要求 1. 设计一数据块间的搬移程序 数据块搬移的基本原则为: 对于两个分离的数据块,从首地址或从末地址开始传送均可。 对于有部分重叠的情况则: 当源数据块首地址>目的数据块首地址时,从数据块首地址开始传送数据。 当源数据块首地址<目的数据块首地址时,从数据块末地址开始传送数据。 2.求某数据区内负数的个数 设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得区内所包含负数的个数。 3.学生成绩名次表 将分数为1~100之间的10个成绩存入首址为3000H的单元中,3000H+I表示学号为I的学生成绩。编写程序能在3100H开始的区域排出名次表,3100H+I为学号I的学生名次。 4. 求无符号字节序列中的最大值和最小值 设有一字节序列,其存储首地址为3000H,字节数为08H。利用子程序的方法编程求出该序列中的最大值和最小值。 四. 编程练习 (A) 在3500H单元开始中输入数据:09H(数据个数)12H、80H、78H、C8H、00H、00H、FEH、99H、34H,编写程序使其能分别求出数据区中的正数和负数以及零的个数,正数的个数放在3510H单元中,负数的个数放在3511H单元中,零的个数放在3512H单元中. (B) 有三个8位二进制数连续存放在03200H开始的内存单元中,设它们之中至少有两个数是相同的。编写程序找出与另外两数不同的数,把该数所在的地址(段内偏移地址)送到03204H单元,若三个数都相同则送0FFFFH到03204H单元。 (C) 设数据段SCORE单元开始连续存放着20个学生成绩,编写程序统计其中<60,60~69、70~79、80~89,>90分数段的人数,并把统计结果存放到从TOT开始的数据块中。 (数据为:64H,61H,5DH,55H,52H,51H,44H,45H,47H,48H,4DH,4FH,3CH,3FH,40H,41H,33H,56H,59H,30H). (D) 找出一个数据块中的最大数。数据块从偏移地址3002H开始存放,数据块的长度以16位二进制形式存放在3000H、3001H单元,把找出的最大数放到3100H单元中,并把存放最大值的偏移地址存入3101H和3102H的存储单元中。假设数据块中的数都是8位无符号数。 (E) X的值(字节数)分别由3000H、3001H、3002H单元的数决定,对应的结果Y分别存放在3005H、3006H、3007H单元中,完成下列方程: A (X>0) Y= { 0 (X=0)

微机原理实验2

微机原理实验 (第二次) 仅供参考不予下载

2.2 字符及字符串输入输出与顺序程序设计实验 2.2.1 实验目的 1、学习和掌握字符及字符串的输入输出方法。 2、掌握顺序程序的设计方法。 3、进一步掌握调试工具的使用方法。 2.2.2 实验预习要求 1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串输入(功能 号为0AH)以及字符串输出(功能号09H)的调用方法(详见教材5.5.6)。 2、复习BCD码运算调整指令。 3、根据“2.2.3 实验内容”中给出的源程序框架编写完整的源程序,以便实验时调试。 4、从“2.2.4 实验习题”中任选一道题目,编写源程序,以便上机调试。 2.2.3实验内容 从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。 1、问题分析 比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6,这时计算机内部得到的是这两个数的ASCII码值38H和36H。由于数字09的ASCII码值与其代表的数值之间相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1的ASCII码)和34H(4的ASCII码),然后调用功能号为02H用于单个字符输出的DOS功能调用将它们显示出来。综上所述,需要考虑以下问

微机原理实验一报告

2.1 寻址方式与基本指令实验 2.1.1 实验目的 1、熟悉80x86寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容。 2、掌握汇编语言程序设计上机过程, 掌握汇编语言源程序结构,为后续汇编语言程序设计 打好基础。 3、熟悉Microsoft的DEBUG或Borland的Turbo DEBUG调试工具的使用方法 2.1.2 实验预习要求 1、认真阅读本书第一部分第1章,熟悉汇编语言程序设计上机步骤。 2、认真阅读本书第三部分,熟悉DEBUG调试工具的使用方法。 3、复习80x86操作数寻址方式及基本指令(数据传送、算术运算和逻辑运算等)。 4、了解实验内容,并在实验前根据课堂所学知识回答有关问题(个别取决于程序实际运行 环境的问题除外),以便在实验时进行验证。 2.1.3 实验内容 1、读懂下面的源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成EX11.OBJ文件和EX11.LST文件,连接生成EX11.EXE文件,用EXIT打开EX11.LST文件,了解.LST 文件包含的信息,使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。 ○1程序装入后,代码段寄存器CS的内容为1138H,代码段第一条可执行指令“MOV AX DA TA”对应的机器代码为0000B83711H,它是一个——字节指令,注意观察执行该指令是IP 值的变化情况,该指令源操作数DATA的寻址方式是立即数寻址方式,其值是1137。 ○2执行完“MOVDSDA TA”指令后,数据段寄存器DS的内容为1127H,源程序在数据段中定义的数据82H、68H和88H被装入的存储单元的物理地址分别为11270H、11271H和11272H。 ○3程序中第一条“ADDAL[BX]”指令对应的机器代码为0008 8A07H,它是一个四字节指令,注意观察执行该指令时IP值的变化情况;该指令中源操作数的寻址方式为寄存器间接寻址方式,该操作数所在的存储单元的逻辑地址(DS):(BX)为1137:0000,其物理地址为11370H,执行完该指令后(AL)=37H,CF=0H,OF=0H,ZF=0H,SF=0H,AF=0H,PF=0H;计算结果正确,结果是负数 ○4执行完第二条“ADD AL [BX]”指令后(AL)=82H,CF=0H,OF=0H,ZF=0H,SF=1H,AF=0H,PF=0H;计算结果正确,结果是负数 ○5指令“MOV SUM,AL”中,目的操作数的寻址方式为寄存器直接寻址方式。该指令执行完后,注意观察(DS):0003H单元中值的变化,该单元值变为00H。 DA TA SEGMENT NUM DB 82H,68H,88H SUM DB ? DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START: MOV AX,DA TA MOV DS,AX

微机原理实验报告

微 机 原 理 实 验 报 告 班级: 指导老师:学号: 姓名:

实验一两个多位十进制数相加的实验 一、实验目的 学习数据传送和算术运算指令的用法 熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。 二、实验内容 将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。 三、程序框图 图3-1

四、参考程序清单 DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H;被加数 DATA1END EQU $-1 DATA2 DB 34H,35H,30H,38H,32H;加数 DATA2END EQU $-1 SUM DB 5 DUP(?) DATA ENDS STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX

MOV SI,OFFSET DATA1END MOV DI,OFFSET DATA2END CALL ADDA MOV AX,4C00H INT 21H ADDA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,05H AD1: SUB BYTE PTR [SI],30H SUB BYTE PTR [DI],30H DEC SI DEC DI DEC BX JNZ AD1 MOV SI,DX MOV DI,BP MOV CX,05H CLC AD2: MOV AL,[SI] MOV BL,[DI] ADC AL,BL

微机原理实验报告西安交通大学

西安交通大学 电子信息与工程学院自动化科学与技术系微机原理与接口技术实验报告 实验名称:微机原理与接口技术 实验者姓名: XX 实验者学号:21105040XX 所在班级:自动化1X 报告完成日期:2014年1月12日

实验一 数据传送、算术运算、循环程序结构 1、实验目的 a)熟悉8086汇编语言源程序的框架结构,并掌握汇编语言程序的编写、汇 编、连接、执行的过程,并利用Turbo Debugger调试汇编程序。 b)熟悉8086指令系统的数据传送指令,掌握寻址方式。 c)熟悉8086指令系统的算术运算指令。掌握循环结构汇编语言程序的编制。 2、实验内容 教材P121,第14、15题。教材P195,第6题。教材P196,第12题。 3、具体实验 第一题(P121,第14题) 设有两个8个字节长的BCD码数据BCD1及BCD2。BCD1数以1000H为首地址在内存中顺序存放;BCD2数以2000H为首地址在内存中顺序存放。要求相加后结果顺序存放在以2000H为首地址 的内存区中(设结果BCD数仍 不超过8个字节长)。 a) 实验原理 考虑两个8个字节长的 BCD码相加,首先根据地址要 求将数据放在对应的地址单 元中,然后做加法,BCD码相 加要用到调整指令,结果才 为正确的BCD数 b) 程序框图

c) 程序源代码 DATAS SEGMENT ORG1000H BCD1 DB 01H,02H,03H,04H,05H,06H,07H,88H;起始地址为1000H ORG2000H BCD2 DB 11H,12H,13H,14H,15H,16H,17H,18H;起始地址为2000H DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV BX,0 MOV CX,8 ;设置循环次数8次 CLC ;清进位CF标志 AGAIN:MOV AL,[BX+1000H] ADC [BX+2000H],AL;结果放在2000H开始的单元内 DAA INC BX LOOP AGAIN;没完成则转AGAIN循环 MOV AH,4CH INT 21H CODES ENDS END START 运行: BCD1 DB 11H,12H,13H,14H,15H,16H,17H,18H BCD2 DB 21H,22H,23H,24H,25H,26H,27H,28H 结果如下:DS:2000H为首地址的连续八个字节单元中

微机原理实验

实验一 MASM For Windows 的使用及顺序程序设计 一、实验目的 1、熟悉在PC机上建立、汇编、连接、调试和运行8086汇编语言程序的过程。 2、熟悉masm for windows调试环境及DEBUG常用命令的使用 二、实验内容 1.DEBUG常用命令(U、R、D、E、F、T、G、Q)的操作使用 2.编程实现两个16位无符号数的加、减、乘、除运算。 有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。相加若有进位不存入存储单元。 三、实验设备 PC机一台 四、实验准备 1) 分析题目,将程序中的原始数据和最终结果的存取方法确定好。 2) 画出流程图。 3) 写出源程序。 4) 对程序中的结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。 五、实验步骤 1) 输入源程序。 2) 汇编、连接程序,生成 .EXE文件,执行文件,检查结果。 六、学生实验报告的要求 1) 列出源程序,说明程序的基本结构,包括程序中各部分的功能。 2) 说明程序中各部分所用的算法。 3) 说明主要符号和所用到寄存器的功能。 4) 上机调试过程中遇到的问题是如何解决的。

5) 对调试源程序的结果进行分析。 4) 说明标志位CF、SF和OF的意义。 DEBUG的常用命令 1、R 显示或修改寄存器的内容 命令格式:-R 2、 D 显示存储单元的内容 命令格式:-D[地址1, 地址2] 3、E修改存储单元的内容 命令格式:-E[地址1, 地址2] 4、U反汇编 命令格式:-U[地址1, 地址2] 5、T单步执行 命令格式:-T 6、G连续执行 命令格式:-G[=起始地址, 结束地址] A小汇编 命令格式:-A 7、Q退出DEBUG,返回DOS 实验一源程序 EXAM1-2 .ASM DATA SEGMENT A D B 34H,18H,2 DUP(0),’$’ B DB 56H,83H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,A MOV BL,B ADD AL,BL MOV AH,A+1 MOV BH, B+1 ADC AH, BH MOV A, AL

四川大学微机原理实验报告..

微机原理实验报告 学院: 专业班级: 姓名 学号

实验一汇编语言编程基础 1.3汇编语言程序上机操作和调试训练 一.功能说明 运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。 运用MASM﹒EXE文件进行汇编,修改程序中的各种语法错误,直至正确,形成*.OBJ文件。 运用LINK.EXE文件进行连接,形成*.EXE文件。 仔细阅读和体会DEBUG调试方法,掌握各种命令的使用方法。 运用DEBUG。EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。 再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG的设置断点,单步执行等功能发现错误所在并加以改正。 二.程序流程图 设置被除数、商的地址指针 设置单位除法次数计数器 取被除数一位作十进制调整 作字节除法、存商 N 被除数各位已除完? Y 显示运算结果 结束 三.程序代码 修改后的程序代码如下: DATA SEGMENT A D B 9,6,8,7,5 B DB 5 C DB 5 DUP (0) N EQU 5 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX

MOV ES,AX CLD LEA SI,A LEA DI,C MOV CX,N MOV AH,0 LP1: LODSB AAD DIV B STOSB LOOP LP1 MOV CX,N LEA DI,C LP2: MOV DL,[DI] ADD DL,30H MOV AH,2 INT 21H INC DI LOOP LP2 MOV AH,4CH INT 21H CODE ENDS END START 四.实验感想和收获 通过这次试验,我对微机原理上级试验环境有了初步的认识,可以较为熟练地对汇编语言进行编译,汇编及连接,同时也学会了用DEBUG调试程序,收获很大。 在这次试验中我也遇到了一些困难。在刚开始我发现自己无法打开MASM.EXE,计算机提示是由于版本不兼容。我这才想起来我的操作系统是64位的,和该软件版本不兼容。不过我并没有放弃,经过我的摸索之后,我发现用DOSBOX这个程序可以解决我的电脑运行不了该程序的问题。在解决了第一个难题后,我开始着手改正试验1.3中的语法错误和逻辑错误,但是无论我怎么修改却始终都无法通过编译,并且基本上每句话都有编译错误。根据我多年编程的经验来看,这应该是中文输入法在搞鬼,之后我耐心地把程序重新输了一遍,果然通过了编译,并且之后的连接也进行的很顺利。在用DEBUG调试时发现得出的结果也很正确。 尽管这次的实验内容非常简单,仅仅是教会我们一些基本的操作,但我却明显感觉到了汇编语言和C语言等高级语言所不同的地方。越是底层,基础的东西就越不人性化,用C语言一行代码就能实验的功能在汇编语言中可能要花上数十行。看来汇编语言的学习不是几周就能速成的,必须要有长年累月的积淀才能掌握。

中南民族大学 微机原理实验答案

中南民族大学微机原理实验答案 实验一 第二题在debug中实现在屏幕上显示“0123456789” A 100 0100:mov cx,0a Mov dl,30 Mov ah,2 0106: int 21h Inc dl Loop 0106 Int 20h 第三题用int 21h 中的2号功能在屏幕上显示“122333444455555666666777777788888888999999999” a 100 0100: mov cx,9 mov dl,31h 0104: push cx xor cx,cx mov cl,dl sub cl,30h 010c: mov ah,2

int 21h loop 010c inc dl pop cx loop 0100 mov ax,4c00h int 21h int 20h 第四题用九号功能在屏幕上显示‘9876543210’ A 100 0100: db ‘9876543210’ 0106: Mov dx,0100 mov ah,9h int 21h Int 20h 实验二 第三题修改程序,在第一行连续显示4个“Hello,World!”每个以空格分开。 name hello sseg segment stack db 64 dup(0)

sseg ends dseg segment mess db 'hello World!',' ','$' dseg ends cseg segment assume cs:cseg,ds:dseg,ss:sseg,es:dseg main proc far begin:mov ax,dseg mov ds,ax mov es,ax mov ah,9 mov cx,4 s1: mov dx,offset mess int 21h loop s1 mov ax,4c00h int 21h main endp cseg ends end begin 第四题 name hello

微机原理实验报告

微机原理 实验报告 学校:湖北文理学院、班级:电子1413 姓名:杨仕浩 学号:2014111347 指导老师:吉向东

实验一两个多位十进制数相加的实验 一、实验目的 学习数据传送和算术运算指令的用法 熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。 二、实验内容 将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。 三、程序框图 四、实验程序清单 DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H;被加数 DATA1END EQU $-1 DATA2 DB 34H,35H,30H,38H,32H;加数 DATA2END EQU $-1 SUM DB 5 DUP(?) DATA ENDS STACK SEGMENT STA DB 20 DUP(?)

TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV SI,OFFSET DATA1END MOV DI,OFFSET DATA2END CALL A DDA MOV AX,4C00H INT 21H ADDA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,05H AD1: SUB BYTE PTR [SI],30H SUB BYTE PTR [DI],30H DEC SI DEC DI DEC BX JNZ AD1 MOV SI,DX MOV DI,BP MOV CX,05H CLC AD2: M OV AL,[SI] MOV BL,[DI] ADC AL,BL AAA MOV [SI],AL DEC SI DEC DI LOOP AD2 MOV SI,DX MOV DI,BP MOV BX,05H AD3: ADD BYTE PTR [SI],30H ADD BYTE PTR [DI],30H DEC SI

微机原理实验一 两个多位十进制数相加实验试做报告

实验一两个多位十进制数相加实验试做报告 【实验目的】 1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。 2.熟悉和掌握用DEBUG调试程序的方法。 【实验性质】 验证性实验(学时数:3H)。 【实验内容】 将两个多位十制数相加,要求加数和被加数均以ASCII码形式各自顺序存放在以DATAl 和DATA2为首的5个内存单元中(低位在前),结果送回DATAl处。 【实验说明】 汇编语言没有十进制加法指令,ADD/ADC加法指令的运算对象是二进制数,如果要进行BCD码数的加法,需要对结果进行修正。组合BCD码的加法调整指令为DAA,它针对AL寄存器中的组合BCD码数之和进行修正。对于未组合BCD码的加法调整指令为AAA(加法的ASCII 码调整指令),它将存于AL寄存器中的一位ASCII码数加法运算的结果调整为一位拆开型十进制数,仍保留在AL中,如果向高位有进位(AF=1),则进到AH中。 对于多字节的ASCII码相加,只能从最低位开始逐个字节地进行加法操作,并随即进行调整。 参考程序清单(WJSY0.ASM): DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H DATA2 DB 36H,35H,30H,38H,32H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,5 ;计数 MOV SI,0 ;做指针用,因从DATA1的第一个数取数,故SI=0 CLC NEXT: MOV AL,DATA1[SI] ;取被加数给AL ADC AL,DATA2[SI] ;取加数和AL相加 AAA ;未组合十进制数加法调整指令 MOV DATA1[SI],AL ;结果回送至DATA1处 INC SI ;修改SI指向下一位数 LOOP NEXT MOV SI,5 ;因显示是从高位到低位,故SI=5 L: ADD DATA1[SI-1],30H ;还原成ASCII码 MOV DL,DATA1[SI-1] MOV AH,02 ;送显示 INT 21H DEC SI

微机原理实验指导书

实验一数据传送 实验目的 : 1、熟悉 8086 指令系统的数据传送指令及 8086 的寻址方式。 2、利用 Turbo Debugger 调试工具来调试汇编语言程序。 实验任务 : 1.通过下述程序段的输入与执行来熟悉 Turbo Debugger 的使用,并通过显示器屏幕观察程序的执行情况。练习程序段如下: MOV BL , 08H MOV CL , BL MOV AX , 03FFH MOV BX , AX MOV DS : [0020H] , BX 2.用以下程序段将一组数据压入( PUSH )堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。压栈程序段如下: MOV AX , 0102H MOV BX , 0304H MOV CX , 0506H MOV DX , 0708H PUSH AX PUSH BX PUSH CX PUSH DX 出栈程序段请自行编写(用不同的出栈顺序)。 3、指出下列指令的错误并加以改正,上机验证之。

(1) MOV [BX] , [SI] (2) MOV AH , BX (3) MOV AX , [SI][DI] (4) MOV BYTE PTR[BX] , 2000H (5) MOV CS , AX (6) MOV DS , 2000H 4、设置各寄存器及存储单元的内容如下: (BX) = 0010H , (SI) = 0001H (10010H) = 12H , (10011H) = 34H , (10012H) = 56H , (10013H) = 78H (10120H) = 0ABH , (10121H) = 0CDH , (10122H) = 0EFH 说明下列各条指令执行完后 AX 寄存器中的内容,并上机验证。 (1) MOV AX , 1200H (2) MOV AX , BX (3) MOV AX , [0120H] (4) MOV AX , [BX] (5) MOV AX , 0110H[BX] (6) MOV AX , [BX][SI] (7) MOV AX , 0110H[BX][SI] 5、将 DS : 1000H 字节存储单元中的内容送到 DS : 2020H 单元中存放。试分别用 8086 的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果。 6、设 AX 寄存器中的内容为 1111H , BX 寄存器中的内容为 2222H , DS : 0010H 单元中的内容为 3333H 。将 AX 寄存器中的内容与 BX 寄存器中的内容交换, 然后再将 BX 寄存器中的内容与 DS : 0010H 单元中的内容进行交换。试编写程序段,并上机验证结果。

相关文档