西安交大微机原理第一次实验报告_第1页
西安交大微机原理第一次实验报告_第2页
西安交大微机原理第一次实验报告_第3页
西安交大微机原理第一次实验报告_第4页
西安交大微机原理第一次实验报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、微机原理第一次实验报告一实验目的(1)学习8086/8088指令系统中一些基本指令的用法和程序设计的基本方法。(2)熟悉PC机上建立、汇编、连接、调试和运行8086、8088汇编语言程序的全过程。(3)学习提示信息的显示及键盘输入字符的方法。(4)掌握分支程序的设计方法。二实验内容 (1) 设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=3

2、4 3. a=70, b=23, c=42, d=414. a=63, b=73, c=62, d=50 (2) 在提示信息下,从键盘输入原码表示的二位十六进制有符号数,当此数大于0时,屏幕上显示此数为正数;当此数小于0时,屏幕上显示此数为负数;当此数为0时,屏幕上显示此数为零。三实验调试过程 3.1 题目一调试过程C:<DEBUG ONE.EXE-U 反汇编-R 查看寄存器变量值观察到0005时已完成数据初始化,利用g 5追踪到此处利用-d0指令查看内存单元,在偏移地址为0,1,2,3的地方有9,6,4,7,正是我们在代码中赋的初值。-g d,观察到此时AL已赋值a=15H-g 16,

3、计算出a+b的值并赋给AL,值为0b,正确-g 19,DAA调整后AL变为11,计算正确-g 1b,cl=04H成功赋值给AL,正确-g 1f,计算出(a+b)-(c+d)结果为04H,正确题目二程序调试过程-U0, 反汇编 -g 5,程序执行到此处时,完成DS寄存器赋值DS=0B5EH -g a,程序执行到此处时,完成SS寄存器赋值SS=0B69H -g 24,程序执行到此处,实现提示信息输出INPUT DATA:,手动输入C9 -U -g 2f,程序执行到此处,成功跳转,显示信息“THIS DATA IS “四程序及框图4.1 题目一程序 DSEG SEGMENT ; 定义数据段 NUM

4、DB 13H,27H,11H,12H ;定义a,b,c,d 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 DS,AX ;数据段段地址送DS MOV AX,SSEG MOV SS,AX ; 堆栈段段地址送SS MOV AL,NUM ADD AL,NUM+1 ;计算a+b DAA ;压缩BCD码加法调整DA

5、A MOV CL,AL ; 保存a+b MOV AL,NUM+2 ADD AL,NUM+3 ;计算c+d DAA ;压缩BCD码加法调整DAA SUB CL,AL ;计算(a+b)-(c-d) MOV AL,CL DAS ;DAS调整 MOV NUM+4,AL ;保存结果 AND AL,0F0H ;取AL中高四位 MOV CL,4 SHR AL,CL ;BCD码高位移至低位 ADD AL,30H ;AL加30H得ASCII码 MOV DL,AL MOV AH,02H INT 21H ;显示DL MOV AL,NUM+4 ; 恢复AL AND AL,0FH ;取AL低四位 ADD AL,30H

6、;AL加30H得ASCII码 MOV DL,AL MOV AH,02H INT 21H ;显示DL MOV AX,4C00H INT 21H ;返回DOS CSEG ENDS END START ;程序结束4.2 题目二程序 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

7、 IS+',0DDH,0AH,'$' MESS3 DB 'THIS DATA IS-',0DH,0AH,'$' MESS4 DB 'THIS DATA IS ZERO',0DH,0AH,'$' DATABUF DB 3 ;定义最大可输入字符长度 ACTLEN DB ? ;实际输入字符长度 STRING DB 3 DUP(?) ;输入字符缓冲区 DATA ENDS ;数据段结束 SSEG SEGMENT PARA STACK 'STACK' ;定义堆栈段 DB 50 DUP(0) SSEG E

8、NDS ;堆栈段结束 CODE SEGMENT ;定义代码段 ASSUME CS:CODE,SS:SSEG,DS:DATA ;各段定位START: MOV AX,DATA MOV DS,AX ;DS段寄存器赋值 MOV AX,SSEG MOV SS,AX ;SS段寄存器赋值 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 ;比较高位和38H的大小 JGE FUS

9、HU ; 若高位>=38H?,跳至FUSHU处执行 CMP AL,30H ;比较高位和30H的大小 JE ZERO ;若高位=30H?,跳至ZERO处执行ZHENGSHU: MOV DX,OFFSET MESS2 ;显示输出为正数 MOV AH,09H INT 21H JMP OVER FUSHU: MOV DX,OFFSET MESS3 ;显示输出为负数 MOV AH,09H INT 21H JMP OVERZERO: MOV AL,STRING+1 ;显示输出为0 CMP AL,30H JNE ZHENGSHU MOV DX,OFFSET MESS4 MOV AH,09H INT 2

10、1H JMP OVER OVER: HLT CODE ENDS ;代码段结束 END START ;程序结束五实验结果5.1 题目一实验结果1 a=09, b=06, c=04, d=07时,计算结果为04 2. a=38, b=41, c=29, d=34时,计算结果为16 3. a=70, b=23, c=42, d=41时,计算结果为104. a=63, b=73, c=62, d=50时,计算结果为245.2 题目二实验结果 键盘输入c9,输出“THIS DATA IS-“ 键盘输入17,输出“THIS DATA IS +” 键盘输入00,输出”THIS DATA IS ZERO六必要

11、的分析6.1 题目一分析1.压缩BCD码需要用到压缩BCD码的调整指令2.程序末尾显示要利用DOS功能调用3显示单个字符,要先将其转化为ASCII 码,再利用DOS功能调用的02H功能。6.2 题目二分析1实验中JZ,JGE,JNE等指令的使用是体现分支程序多分支特点的重要一环。 2.接收键入的字符,要用DOS功能调用的0AH号功能。 3.此外,本程序中的宏指令,采用了DOS功能调用的02H号功能,显示一个字符并将回车符和换行符在显示屏上显示出来 4.接收在缓冲区的字符是用ASCII码表示的,对于原码表示的有符号数来说:大于0,高位字符第7位为0,即高位字符的ASCII码小于38H;小于0,高

12、位字符第7位为1,即高位字符的ASCII码大于等于38H;等于0,必须两个字符都为30H。 七思考题 7.1 实验一思考题1用哪些DEBUG的命令可以查看、改变a、b、c、d的值? 答:-e命令用于查看并修改,-d命令用于查看2调试程序时,你将断点设置在什么位置?简要地予以说明。 答:我将断点设置在数值有变化的位置,这样可以看到程序执行后寄存器里的值是否正确,如果正确说明无问题,便继续执行。否则就停下检查出现的问题。 3.若a=90,b=34,c=33,d=44或a=12,b=19,c=25,d=33设置合适的断点,观察结果,说明错误的原因,并改进程序使结果正确。 答:(1)当a=90,b=3

13、4,c=33,d=44时,a+b=124,执行(a+b)DAA调整后AL中存储内容显示为24H,而c+d未出现进位,执行(c+d)后响应的AL为77,因此执行(a+b)-(c+d)时需要使用带借位减法指,即将SUB CL,AL改为:SBB CL,AL即可,执行结果为47正确。 (2)当a=12,b=19,c=25,d=33时,(a+b)-(c+d)结果为负,这时候需要加入判断语句,比较CL,AL的大小,若为负则对调减数和被减数的位置,最后在显示前加入MOV DX,2DH ;INT 21H;显示负号即可。执行结果为-27正确。修改部分如下: MOV CL,AL MOV AL,NUM+2 ADD

14、AL,NUM+3 DAA CMP CL,AL JB FU SUB CL,AL MOV AL,CL DAS JMP OVER FU: SUB AL,CL DAS MOV BL,AL MOV AH,02H MOV DL,'-' INT 21H MOV AL,BL JMP OVER OVER: MOV NUM+4,AL AND AL,0F0H 7.2 实验二思考题1.在DEBUG跟踪某条分支的时候,断点应该下在什么位置?如何查看标志位的变化情况? 答:断点应该下在标志位或数据寄存器值有改变的语句之后,把断点设置到CMP语句的后一句之前,观察可以其标志位改变,标志位的内容在IP的值后面

15、字符值显示。2.从键盘输入的数字在键盘缓冲区是怎样分布的?用图简单的示意,用哪条相关的DEBUG命令查看?答:键盘键入的数字从缓冲区的第三个字节开始放起。若键入两位字符则如下图所示,其中Char为数字分布处。DEBUG命令中-D,-E均能够查看。0302CharCharOD调试时输入数据为48,显示如下: 3.若输入的是非法字符而不是十六进制数,此程序会得到什么结果?如何改进?答:结果是输入的非法字符的高位,ASCII码大于38H,则输出为负;若小于38H则输出为正。改进可以考虑增加判断语句,确保输入的是十六进制数。八实验中遇到的困难及解决方法 实验中遇到的困难主要是在编写第一个程序时,计算结果高位始终正确,而低

温馨提示

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

评论

0/150

提交评论