数码转换 实验报告 微机原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验九数码转换
一、实验目的
1、掌握计算机常用数据编码之间的相互转换方法。
2、进一步熟悉DEBUG软件的使用方法。
二、实验内容
1. ACSII码转换为非压缩型BCD码
编写并调试正确的汇编语言源程序,使之实现:设从键盘输入一串十进制数,存入DATA1单元中,按回车停止键盘输入。将其转换成非压缩型(非组合型)BCD码后,再存入DATA2开始的单元中。若输入的不是十进制数,则相应单元中存放FFH。调试程序,用D命令检查执行结果。
2. BCD码转换为二进制码
编写并调试正确的汇编语言源程序,使之将一个16位存储单元中存放的4位BCD码DATA1,转换成二进制数存入DATA2字单元中。调试程序,用D命令检查执行结果。
3. 十六进制数转换为ASCII码
编写并调试正确的汇编语言源程序,使之将内存DATA1字单元中存放的4位十六进制数,转换为ASCⅡ码后分别存入DATA2为起始地址的4个单元中,低位数存在低地址的字节中,并在屏幕上显示出来。
三、实验预习
1.复习材料中有关计算机数据编码部分的内容。
2.按要求编写程序。
四、实验步骤
1.编辑源文件,经汇编连接产生EXE文件。
2.用DEBUG调试、检查、修改程序。
五、实验内容
1. ACSII码转换为非压缩型BCD码
STACK SEGMENT PARA STACK'STACK'
DB256DUP(?); 为堆栈段留出256个字节单位
STACK ENDS
DATA SEGMENT PARA'DATA';定义数据段
DATA1DB32; 缓冲区最大长度
DB?
DB32DUP(?)
DATA2DB32DUP(?)
DATA ENDS
CODE SEGMENT; 定义代码段
ASSUME SS:STACK
ASSUME CS:CODE
ASSUME DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA DX,DATA1; 规定:DX存放输入字符串的缓冲区首地址MOV AH,0AH
INT21H; 字符串输入AL=键入的ASCII码
LEA 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; 若AL<0(AL-0<0),跳转到LP2
JL LP2
CMP AL,9; 若AL>9(AL-9>0),跳转到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 INT21H
CODE ENDS
END START
2. 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,0AH ; 设置乘数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 ; 以上完成循环三次
ROL AX,CL ; 取个位数字
AND AX,0FH ; 屏蔽高位
ADD AX,BX ; 进行累加,直接将最后的累加结果放到AX中
MOV DATA2,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
3. 十六进制数转换为ACSII码
STACK SEGMENT
DB 256 DUP(?)
STACK ENDS
DATA SEGMENT
DATA1 DB 24H,06DH
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次,取两次两位十六进制数