北京工业大学 微机原理 实验九.docxVIP

  • 3
  • 0
  • 约4.77千字
  • 约 11页
  • 2023-12-07 发布于上海
  • 举报

实验九 数码转换

一、实验目的

1、掌握计算机常用数据编码之间的相互转换方法。

2、进一步熟悉DEBUG软件的使用方法。

二、实验内容

ACSII码转换为非压缩型BCD码

编写并调试正确的汇编语言源程序,使之实现:设从键盘输入一串十进制数,存入DATA1单元中,按回车停止键盘输入。将其转换成非压缩型(非组合型)BCD码后,再存入DATA2开始的单元中。若输入的不是十进制数,则相应单元中存放FFH。调试程序,用D命令检查执行结果。

BCD码转换为十六进制码

编写并调试正确的汇编语言源程序,使之将一个16位存储单元中存放的4位BCD码

DATA1,转换成十六进制数存入DATA2字单元中。调试程序,用D命令检查执行结果。

十六进制数转换为ASCII码

编写并调试正确的汇编语言源程序,使之将内存DATA1字单元中存放的4位十六进制数,转换为ASCⅡ码后分别存入DATA2为起始地址的4个单元中,低位数存在低地址的字节中,并在屏幕上显示出来。

三、实验预习

复习材料中有关计算机数据编码部分的内容。

按要求编写程序。

四、实验步骤

编辑源文件,经汇编连接产生EXE文件。

用DEBUG调试、检查、修改程序。

五、实验内容

ACSII码转换为非压缩型BCD码

STACK SEGMENTPARASTACKSTACK

DB256DUP(?) ;为堆栈段留出256个字节单位

STACK ENDS

DATA SEGMENTPARADATA ;定义数据段

DATA1 DB32 ;缓冲区最大

欢迎下载PAGE

欢迎下载

PAGE10

长度

DB?

DB32DUP(?)DATA2 DB32DUP(?)DATA ENDS

CODE SEGMENTASSUME SS:STACKASSUME CS:CODEASSUME DS:DATASTART:MOVAX,DATA

MOVDS,AXLEADX,DATA1

的缓冲区首地址MOVAH,0AHINT21H

入的ASCII码

LEASI,DATA1LEADI,DATA2INCSI

MOVCH,0MOVCL,[SI]INCSI

;定义代码段

;规定:DX存放输入字符串

;字符串输入 AL=键

;DI存放DATA2首地址

;取输入字符串长度

;指向第一个输入字符

LP1:

MOVAL,[SI]

SUBAL,30H ;输入的字符存为ASCII码,将其转换成十进制数

CMPAL,0 ;若AL0(AL-00),跳转到

LP2

JLLP2

CMPAL,9 ;若AL9(AL-90),跳

转到LP2

JGLP2

MOVBL,AL ;将AL-BL

MOV[DI],BL ;将结果存到DATA2开始的单元中

INCDIINCSIDECCLJMPLP1

LP2:

MOVAL,0FFH ;若输入的不是十进制数,在相应的单元存放FFH

;以字母开头的十六进制数前面需加0

MOVBL,AL ;将AL-BL

MOV[DI],BLINCDI

INCSICMPCL,0

JNZLP1 ;CL=0,执行LP3中的语句

LP3:

MOVAH,4CHINT21H

CODE ENDSEND START

BCD码转换为二进制码

DATA SEGMENT

DATA1DW2497HDATA2DW?

DATA ENDSCODE SEGMENT

ASSUMECS:CODEASSUMEDS:DATA

START:

MOVAX,DATAMOVDS,AX

XORBX,BX ;累加单元清0(BX=0)MOVSI,0AH ;设置乘数10

MOVCL,4 ;指4位BCD码

MOVCH,3 ;循环次数=3MOVAX,DATA1 ;取十进制数

LP:

ROLAX,CL ;取数字

MOVDI,AX ;保存当前AX值ANDAX,0FH ;屏蔽高位ADDAX,BX ;累加

MULSIMOVBX,AXMOVAX,DI

DECCH ;循环次数减1

JNZLP ;以上完成循环三次,个位不用再*10,所以不用最后不用放入循环中去

ROLAX,CL ;取个位数字

ANDAX,0FH ;屏蔽高位

ADDAX,BX ;进行累加,直接将最后的累加结果放到AX中MOVDATA2,AX

MOVAH,4CHINT21H

CODE ENDS

ENDSTART

十六进制数转换为ACSII码

STACKSEGMENT

DB256DUP(?)S

文档评论(0)

1亿VIP精品文档

相关文档