进制转换实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学与技术系
实验报告
专业名称计算机科学与技术
课程名称微机原理与接口技术
项目名称进制转换实验
班级
学号
姓名
同组人员无
实验日期 2016/12/9
一、实验目的与要求:
(简述本次实验要求达到的目的,涉及到的相关知识点,实验的具体要求。


1、熟悉二进制、十进制、十六进制转换规则。

2、熟悉算术运算指令以及移位指令的运用。

二、实验内容
(根据本次实验项目的具体任务和要求,完成相关内容,可包括:实验目的、算法原理、实验仪器、设备选型及连线图、算法描述或流程图、源代码、实验运行步骤、关键技术分析、测试数据与实验结果、其他)
内容:
十六进制转换十进制
把十六进制数首先写成加权系数展开式,相应的位乘以2的n次幂,然后按十进制加法规则求和。

原理:十六进制向十进制的转换分成两个大的步骤:
一是从十六进制向二进制的转换,由于十六进制和二进制的特殊关系,它们之间的转换非常简单。

二是从二进制转换为十进制,相对而言,这种转换复杂一些。

所以该模块的核心是实现二进制数向十进制数的转换。

方法是将要转换的二进制数预先放到AX寄存器中,判断AX中数的符号,若为负数,则将负号送入输入缓冲区,并求AX 的绝对值;若AX中的数为正数,则不做其他处理,此时AX中即为无符号二进制数。

然后将无符号二进制数转换成十进制数,可采用将AX除以10,得到第一个商和第一个余数,第一个余数就是所求十进制数的个位:将第一个商除以10,得到第二个商和余数,第二个余数就是所求十进制数的十位数,重复以上过程,一直循环到商为0时,得到的余数就是所求十进制数的最高位数。

这就是数制转换中常用的“除模留余倒排列”法则。

三、实验分析与小结:
(实验过程中的问题分析、产生的原因以及解决方法;实验结果分析;有待优化思路)
1.程序分析:
@DATA SEGMENT
DATA1 DB 6 DUP(?),'$' ;数码段代码
;BUF DB 11 DUP(?),'$'
@DATA ENDS
STACK1 SEGMENT STACK
DB 200 DUP(?)
STACK1 ENDS
CODE SEGMENT ;代码段
ASSUME CS:CODE ,DS:@DATA,SS:STACK1 START:
MOV AX,@DATA
MOV DS,AX
; MOV AX,@DATA
;MOV DS,AX
;LEA DX,BUF ;数据输入
MOV DI,OFFSET DATA1+5 ;从个位开始存起MOV BX,0
MOV CH,4 ;设置输入十六进制最大位数MOV CL,4 ;设置循环次数=BX*16
MOV SI,0AH ;定义除数
WOLF:
MOV AH,01H
MOV AL,00H
INT 21H ;输入字符
CMP AL,13 ;位数小于4回车结束输入
JE FOOL
CMP AL,30H ;输入出错
JB EXIT
CMP AL,39H ;输入数字0~9
JBE LAB
CMP AL,41H ;输入出错
JB EXIT
CMP AL,46H ;输入大写A~F
JBE LAB1
CMP AL,61H ;输入出错
JB EXIT
CMP AL,66H ;输入出错
JA EXIT
SUB AL,57H ;输入小写a~f
JMP LAB2
LAB:
SUB AL,30H ;求取输入的数值
JMP LAB2
LAB1:
SUB AL,37H ;求取输入的数值
LAB2:
SHL BX,CL ;BX*16
ADD BL,AL ;与下一位十六进制相加,求输入的十六进制DEC CH
JNZ WOLF
FOOL:
MOV AX,BX ;送到AX作被除数
FOX:
XOR DX,DX
DIV SI
ADD DL,30H
MOV [DI],DL
DEC DI
CMP AX,0 ;AX不为0继续求余
JNZ FOX
XOR DX,DX
MOV AH,09H ;输出字符串
INT 21H
EXIT:
MOV AH,4CH
INT 21H
CODE ENDS
END START
实验分析:
设置初始值:
MOV DI,OFFSET DATA1+5 ;从个位开始存起
MOV BX,0 ;将bx寄存器清零
MOV CH,4 ;设置输入十六进制最大位数
MOV CL,4 ;设置循环次数=BX*16
MOV SI,0AH ;定义除数
WOLF子程序::
MOV AH,01H ;01号功能输入
MOV AL,00H
INT 21H ;输入字符
CMP AL,13 ;位数小于4回车结束输入
JE FOOL
FOOL子程序:
MOV AX,BX ;BX的数送到AX作被除数
FOX子程序::
XOR DX,DX ;DX清零
DIV SI ;除以除数
ADD DL,30H
MOV [DI],DL
DEC DI
CMP AX,0 ;AX不为0继续求余
JNZ FOX
XOR DX,DX
MOV AH,09H ;输出字符串
INT 21H
在此次程序中需要了解一些算数指令:
加法指令:ADD ADC INC
减法指令:SUB SBB DEC NEG CMP
乘法指令:MUL IMUL
除法:DIV IDIV
1.屏幕显示
随意输入一个小于4位的十六进制数,打完字敲回车,马上出现所对应的十进制数。

当连续输入4位的十六进制数直接输出十进制数。

2.结果分析
在实验结果中,输入十六进制数64,直接输出十进制数100,根据验算,结果正确。

3.小结
汇编语言程序设计是一门很抽象的科学,学起来也比较难,这已经是最后一个非硬件实验。

但随着学习的推进,以及上机编程,逐渐感到轻松,在这次课程设计中,让我更加熟悉了汇编语言的一些基本的指令,掌握了汇编语言的一些基本的中断调用功能,可以用汇编语言调用各种中断调用功能;在设计过程中,不断对程序进行修改,改进,增强了自己分析问题解决问题的能力:在不断的调试中,也让自己发现了自己存在的一些错误以及一些调试时应注意的问题,同时也更深的理解了寄存器,存储器等工作原理以及一些指令执行后对它们的改变。

在编写过程中,让我深刻的体会到了科学的严谨性。

有时一个逗号或者写错一个字母这样一点点小错误,就会产生很大的错误,导致调试的失败。

当设计一步步接近成功,都让自己感到喜悦,
从中体会到编程的乐趣,有一种成就感,也让自己树立了信心,增强了对汇编语言程序设计的兴趣。

四、其它
无。

得分(百分制)。

相关文档
最新文档