数码转换 实验报告 微机原理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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次,取两次两位十六进制数

相关文档
最新文档