北京工业大学微机原理实验九数码转换实验报告

上传人:飞*** 文档编号:53305472 上传时间:2018-08-29 格式:PDF 页数:19 大小:687.03KB
返回 下载 相关 举报
北京工业大学微机原理实验九数码转换实验报告_第1页
第1页 / 共19页
北京工业大学微机原理实验九数码转换实验报告_第2页
第2页 / 共19页
北京工业大学微机原理实验九数码转换实验报告_第3页
第3页 / 共19页
北京工业大学微机原理实验九数码转换实验报告_第4页
第4页 / 共19页
北京工业大学微机原理实验九数码转换实验报告_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《北京工业大学微机原理实验九数码转换实验报告》由会员分享,可在线阅读,更多相关《北京工业大学微机原理实验九数码转换实验报告(19页珍藏版)》请在金锄头文库上搜索。

1、微机原理实验报告实验九数码转换姓名 :学号 :一、 实验目的1. 掌握计算机常用数据编码之间的相互转换方法。2. 进一步熟悉 DEBUG软件的使用方法。二、 实验内容1. ASC码转换为非压缩型 BCD码编写并调试正确的汇编语言源程序,使之实现:设从键盘输入一串十进制数,存入 DATA1 单元中,按回车停止键盘输入。将其转换成非压缩型(非组合型)BCD码后,再存入 DATA2 开始的单元中。若输入的不是十进制数,则相应单元中存放 FFH。调试程序,用 D命令检查执行结果。2. BCD 码转换为二进制数编写并调试正确的汇编语言源程序,使之将一个16位存储单元中存放的 4位BCD码DATA1 ,转

2、换成二进制数存入 DATA2 字单元中调试程序, 用D命令检查执行结果。3. 十六进制数转换为 ASC码编写并调试正确的汇编语言源程序,使之将内存DATA1 字单元中存放的 4位十六进制数,转换为 ASC码后分别存入 DATA2 为起始地址的 4个单元中,低位数存在低地址的字节中,并在屏幕上显示出来。三、 实验预习1. 复习材料中有关计算机数据编码部分的内容。2. 按要求编写程序。四、 实验步骤1. 编辑源文件,经汇编连接产生EXE文件。2. 用DEBUG调试、检查、修改程序。五、 实验内容实验内容(一)ASC码转换为非压缩型 BCD码STACK SEGMENT PARA STACK STAC

3、K DB 256 DUP(?) ;为堆栈段留出256 个字节单位STACK ENDS DATA SEGMENT PARA DATA ;定义数据段DATA1 DB 32 ;缓冲区最大长度= 最多键入字符个数(31)+1 * 注: +1 为回车DB ? ;存入的实际输入字符个数,dos 返回时自动填入DB 32 DUP(?) ;输入 ACSII 码缓冲区(31+1) * 注: +1 为回车键DATA2 DB 32 DUP(?) ;转换后 BCD 码的缓冲区(31+1 )*注: +1 为回车DATA ENDS CODE SEGMENT ;定义代码段ASSUME SS:STACK ASSUME CS:

4、CODE ASSUME DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,DATA1 ;规定: DX 存放输入字符串的缓冲区首地址MOV AH,0AH INT 21H ;字符串输入AL= 键入的 ASCII 码LEA SI,DATA1 ;SI 存放输入字符串的缓冲区DATA1 首地址LEA DI,DATA2 ;DI 存放 DATA2首地址INC SI MOV CL,SI ;取输入字符串长度INC SI ;指向第一个输入字符LP1: MOV AL,SI SUB AL,30H ;输入的字符存为ASCII 码,将其转换成十进制数CMP AL,0 ;若 AL9 (

5、AL-90 ),跳转到 LP2 JG LP2 MOV BL,AL ;将 AL-BL MOV DI,BL ;将结果存到DATA2开始的单元中INC DI INC SI DEC CL JMP LP1 LP2: MOV AL,0FFH ;若输入的不是十进制数,在相应的单元中存放FFH ;以字母开头的十六进制数前面需加0 MOV BL,AL ;将 AL-BL MOV DI,BL INC DI INC SI DEC CL ;CL=CL-1 JNZ LP1 ;CL=0 ,执行 LP3 中的语句LP3: MOV AH,4CH INT 21H CODE ENDS END START 流程图N Y N Y 开始

6、输入一串十进数,n 个数LEA SI,DATA1 LEA DI,DATA2CL0 ?AL=SI AL-30O?BLAL ,DIBL SI+1 DI+1 CL=CL-1 AL0FF ,BL AL,DIBL BLAL ,DIBL 结束CL=CL-1 实验内容(二):BCD 码转换为十六进制码DATA SEGMENT DATA1 DW 2497H DATA2 DW ? DATA ENDS CODE SEGMENT ASSUME SS:STACK,CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX XOR BX,BX ;累加单元清0(BX=0) MOV SI,0A

7、H ;设置乘数10 MOV CL,4 ;指 4 位 BCD 码MOV CH,3 ;循环次数 =3 MOV AX,DATA1 ;取十进制数LP: ROL AX,CL ;取数字MOV DI,AX ;保存当前AX 值AND AX,0FH ;屏蔽高位ADD AX,BX ;累加MUL SI MOV BX,AX MOV AX,DI DEC CH ;循环次数减1 JNZ LP ;以上完成循环三次,个位不用再*10 ,所以不用最后不用放入循环中去ROL AX,CL ;取个位数字AND AX,0FH ;屏蔽高位ADD AX,BX ;进行累加,直接将最后的累加结果放到AX 中MOV DATA2,AX MOV AH

8、,4CH INT 21H CODE ENDS END START 2497H=(09C1)8 流程图开始将DATA1 分离为千、百、 十、个位数存于四个连续 子单元中,首地址为DATA3循环次数 3-CX千位数 DATA3-AX调乘 10子程序ADD DATA3, 2AX+DATA3-AX循环结束保存结果 至DATA2加上个位结束乘10子程序AX 左移 1位 AX-BXAX 左移 1位AX 左移 1位AX+BX-AX结束否是实验(三):十六进制转换为ASCII 码STACK SEGMENT DB 256 DUP(?) STACK ENDS DATA SEGMENT DATA1 DB 24H,0

9、6DH DATA2 DB 4 DUP(?) ;存放 ASCII 码JUMP DB 4 DUP(?) ;4位十六进制数分别存放在DATA3 的 4个字节中DATA ENDS CODE SEGMENT ASSUME SS:STACK,DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX LEA SI,DATA1 LEA DI,JUMP MOV CL,2 ; 循环 2次,取两次两位十六进制数LP0: MOV AL,SI ;取 2位十六进制数AND AL,0F0H ;低四位为零ROR AL,4 ;右移 4位相当于除以 16 MOV DI,AL ;高位数存放在高地址字

10、节中INC DI MOV AL,SI ;取 2位十六进制数AND AL,0FH ;高四位为零MOV DI,AL ;低位数存放在低地址字节中INC SI INC DI DEC CL JNZ LP0 LEA SI,JUMP ;SI=JUMP 的首地址偏移量LEA DI,DATA2 ;DI=DATA2的首地址偏移量MOV CL,4 ;因为是四位十六进制数,所以设置为循环4次LP1: MOV AL,SI ;取 JUMP 中的十六进制数CMP AL,9 JG LP3 ;若AL9(AL-90),跳转到 LP3 ADD AL,30H ;09H+30H=ASCII JMP LP3 LP2: ADD AL,37

11、H ;AFH+30H=ASCII LP3: MOV DI,AL ;将ASCII 码依次存入 DATA2 中INC DI INC SI DEC CL JNZ LP1 MOV AH,09H INT 21H MOV DX,OFFSET DATA2 MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START 流程图分离高位调子程序调显示子程序子程序BL0AH?BL-BL+30HBL-BL+37H结束送显子程序DL-BL显示字符开始去掉最高位结束六实验习题与思考1. 编程实现:从键盘上输入两位十六进制数,转换成十进制数后在屏幕上显示出来。源代码:S

12、TACK SEGMENT DB 256 DUP(?) STACK ENDS DATA SEGMENT DATA1 DB 5,?,2 DUP(?) DATA2 DB 2 DUP(?) DATA3 DB 2 DUP(?) DATA ENDS CODE SEGMENT ASSUME SS:STACK,DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX LEA DX,DATA1 MOV AH,0AH INT 21H ;输入字符串LEA SI,DATA1+2 LEA DI,DATA2 MOV CL,2 ;将 ASC 码转换为十六进制数LP1: MOV AL,SI SU

13、B AL,30H CMP AL,9 JA LP2 MOV DI,AL INC DI INC SI DEC CL JZ LP3 JNZ LP1 LP2: SUB AL,7 MOV DI,AL INC DI INC SI DEC CL JNZ LP1 ;将十六进制数转换成十进制数,并保存LP3: LEA DI,DATA2 MOV AL,DI MOV BL,DI+1 MOV CL,4 SHL AL,CL ADD AL,BL MOV DI,AL LEA SI,DATA3 XOR AH,AH MOV CL,100 DIV CL ;AH=AX%100,AL=AX/100 MOV SI,AL ;保存百位数M

14、OV AL,AH XOR AH,AH MOV CL,10 DIV CL MOV SI+1,AL ;保存十位数MOV SI+2,AH ;保存个位数;屏幕显示十进制数LP4: MOV DL,SI ;取百位数送显OR DL,30H MOV AH,02H INT 21H MOV DL,SI+1 ;取十位数送显OR DL,30H MOV AH,02H INT 21H MOV DL,SI+2 ;取个位数送显OR DL,30H MOV AH,02H INT 21H MOV AH,4CH INT 21H CODE ENDS END START 2. 十进制转换为七段码。提示:为了在七段显示器上显示十进制数,需

15、要把十进制数转换为七段代码。转换可采用查表法。设需要转换的十进制数已存放在起始地址为DATA1 区域中,七段码转换表存放在起始地址为TABLE 表中,转换结果存放到起始地址为DATA2 区域。若待转换的数不是十进制数,则相应结果单元内容为00H 。STACK SEGMENT DB 256 DUP(?) STACK ENDS DATA SEGMENT DATA1 DB 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,A,B,C,$ TABLE DB 00H,40H,01H,79H,02H,24H,03H,30H,04H,19H,05H,12H,06H,02H,07H,

16、78H,08H,00H,09H,18H,0AH,08H,0BH,03H,0CH,46H,0DH,21H,0EH,06H,0FH,0EH ;实际数据定义必须在同一行DATA2 DB 16 DUP(0) COUNT EQU 2 DATA ENDS CODE SEGMENT ASSUME SS:STACK,DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX LEA SI,DATA1 LEA BX,DATA2 LEA DI,TABLE XOR AH,AH LP1: MOV AL,SI ;外循环 DATA1 指向下一个INC SI MOV CX,16 ; 内循环 TABLE 16 次LP2: CMP DI,AL JE LP3 ADD DI,COUNT ;内循环 TABLE 指向下一组DEC CX JNZ LP2 MOV BYTE PTRBX,00H ;若不是十进制数,则结果

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号