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

上传人:b****5 文档编号:29846488 上传时间:2023-07-27 格式:DOCX 页数:22 大小:459.28KB
下载 相关 举报
北京工业大学 微机原理 实验九 数码转换实验报告.docx_第1页
第1页 / 共22页
北京工业大学 微机原理 实验九 数码转换实验报告.docx_第2页
第2页 / 共22页
北京工业大学 微机原理 实验九 数码转换实验报告.docx_第3页
第3页 / 共22页
北京工业大学 微机原理 实验九 数码转换实验报告.docx_第4页
第4页 / 共22页
北京工业大学 微机原理 实验九 数码转换实验报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

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

《北京工业大学 微机原理 实验九 数码转换实验报告.docx》由会员分享,可在线阅读,更多相关《北京工业大学 微机原理 实验九 数码转换实验报告.docx(22页珍藏版)》请在冰豆网上搜索。

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

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

 

微机原理实验报告

——实验九数码转换

 

姓名:

学号:

 

一、实验目的

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

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

二、实验内容

1.ASCⅡ码转换为非压缩型BCD码

编写并调试正确的汇编语言源程序,使之实现:

设从键盘输入一串十进制数,存入DATA1单元中,按回车停止键盘输入。

将其转换成非压缩型(非组合型)BCD码后,再存入DATA2开始的单元中。

若输入的不是十进制数,则相应单元中存放FFH。

调试程序,用D命令检查执行结果。

2.BCD码转换为二进制数

编写并调试正确的汇编语言源程序,使之将一个16位存储单元中存放的4位BCD码DATA1,转换成二进制数存入DATA2字单元中调试程序,用D命令检查执行结果。

3.十六进制数转换为ASCⅡ码

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

 

三、实验预习

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

2.按要求编写程序。

四、实验步骤

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

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

 

五、实验内容

实验内容

(一)ASCⅡ码转换为非压缩型BCD码

STACKSEGMENTPARASTACK'STACK'

DB256DUP(?

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

STACKENDS

DATASEGMENTPARA'DATA';定义数据段

DATA1DB32;缓冲区最大长度=最多键入字符个数(31)+1*注:

+1为回车

DB?

;存入的实际输入字符个数,dos返回时自动填入

DB32DUP(?

);输入ACSII码缓冲区(31+1)*注:

+1为回车键

DATA2DB32DUP(?

);转换后BCD码的缓冲区(31+1)*注:

+1为回车

DATAENDS

CODESEGMENT;定义代码段

ASSUMESS:

STACK

ASSUMECS:

CODE

ASSUMEDS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEADX,DATA1;规定:

DX存放输入字符串的缓冲区首地址

MOVAH,0AH

INT21H;字符串输入AL=键入的ASCII码

LEASI,DATA1;SI存放输入字符串的缓冲区DATA1首地址

LEADI,DATA2;DI存放DATA2首地址

INCSI

MOVCL,[SI];取输入字符串长度

INCSI;指向第一个输入字符

LP1:

MOVAL,[SI]

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

CMPAL,0;若AL<0(AL-0<0),跳转到LP2

JLLP2

CMPAL,9;若AL>9(AL-9>0),跳转到LP2

JGLP2

MOVBL,AL;将AL->BL

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

INCDI

INCSI

DECCL

JMPLP1

LP2:

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

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

MOVBL,AL;将AL->BL

MOV[DI],BL

INCDI

INCSI

DECCL;CL=CL-1

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

LP3:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

 

 

流程图

 

N

Y

N

Y

实验内容

(二):

BCD码转换为十六进制码

DATASEGMENT

DATA1DW2497H

DATA2DW?

DATAENDS

CODESEGMENT

ASSUMESS:

STACK,CS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

XORBX,BX;累加单元清0(BX=0)

MOVSI,0AH;设置乘数10

MOVCL,4;指4位BCD码

MOVCH,3;循环次数=3

MOVAX,DATA1;取十进制数

LP:

ROLAX,CL;取数字

MOVDI,AX;保存当前AX值

ANDAX,0FH;屏蔽高位

ADDAX,BX;累加

MULSI

MOVBX,AX

MOVAX,DI

DECCH;循环次数减1

JNZLP

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

ROLAX,CL;取个位数字

ANDAX,0FH;屏蔽高位

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

MOVDATA2,AX

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2497H=(09C1)8

 

流程图

 

实验(三):

十六进制转换为ASCII码

STACKSEGMENT

DB256DUP(?

STACKENDS

DATASEGMENT

DATA1DB24H,06DH

DATA2DB4DUP(?

);存放ASCII码

JUMPDB4DUP(?

);4位十六进制数分别存放在DATA3的4个字节中

DATAENDS

CODESEGMENT

ASSUMESS:

STACK,DS:

DATA,CS:

CODE

START:

MOVAX,DATA

MOVDS,AX

LEASI,DATA1

LEADI,JUMP

MOVCL,2;循环2次,取两次两位十六进制数

LP0:

MOVAL,[SI];取2位十六进制数

ANDAL,0F0H;低四位为零

RORAL,4;右移4位相当于除以16

MOV[DI],AL;高位数存放在高地址字节中

INCDI

MOVAL,[SI];取2位十六进制数

ANDAL,0FH;高四位为零

MOV[DI],AL;低位数存放在低地址字节中

INCSI

INCDI

DECCL

JNZLP0

LEASI,JUMP;SI=JUMP的首地址偏移量

LEADI,DATA2;DI=DATA2的首地址偏移量

MOVCL,4;因为是四位十六进制数,所以设置为循环4次

LP1:

MOVAL,[SI];取JUMP中的十六进制数

CMPAL,9

JGLP3;若AL>9(AL-9>0),跳转到LP3

ADDAL,30H;0~9H+30H=ASCII

JMPLP3

LP2:

ADDAL,37H;A~FH+30H=ASCII

LP3:

MOV[DI],AL;将ASCII码依次存入DATA2中

INCDI

INCSI

DECCL

JNZLP1

MOVAH,09H

INT21H

MOVDX,OFFSETDATA2

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

 

流程图

 

六.实验习题与思考

1.编程实现:

从键盘上输入两位十六进制数,转换成十进制数后在屏幕上显示出来。

源代码:

STACKSEGMENT

DB256DUP(?

STACKENDS

DATASEGMENT

DATA1DB5,?

2DUP(?

DATA2DB2DUP(?

DATA3DB2DUP(?

DATAENDS

CODESEGMENT

ASSUMESS:

STACK,DS:

DATA,CS:

CODE

START:

MOVAX,DATA

MOVDS,AX

LEADX,DATA1

MOVAH,0AH

INT21H;输入字符串

LEASI,DATA1+2

LEADI,DATA2

MOVCL,2

;将ASC码转换为十六进制数

LP1:

MOVAL,[SI]

SUBAL,30H

CMPAL,9

JALP2

MOV[DI],AL

INCDI

INCSI

DECCL

JZLP3

JNZLP1

LP2:

SUBAL,7

MOV[DI],AL

INCDI

INCSI

DECCL

JNZLP1

;将十六进制数转换成十进制数,并保存

LP3:

LEADI,DATA2

MOVAL,[DI]

MOVBL,[DI+1]

MOVCL,4

SHLAL,CL

ADDAL,BL

MOV[DI],AL

LEASI,DATA3

XORAH,AH

MOVCL,100

DIVCL;AH=AX%100,AL=AX/100

MOV[SI],AL;保存百位数

MOVAL,AH

XORAH,AH

MOVCL,10

DIVCL

MOV[SI+1],AL;保存十位数

MOV[SI+2],AH;保存个位数

;屏幕显示十进制数

LP4:

MOVDL,[SI];取百位数送显

ORDL,30H

MOVAH,02H

INT21H

MOVDL,[SI+1];取十位数送显

ORDL,30H

MOVAH,02H

INT21H

MOVDL,[SI+2];取个位数送显

ORDL,30H

MOVAH,02H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

 

2.十进制转换为七段码。

提示:

为了在七段显示器上显示十进制数,需要把十进制数转换为七段代码。

转换可采用查表法。

设需要转换的十进制数已存放在起始地址为DATA1区域中,七段码转换表存放在起始地址为TABLE表中,转换结果存放到起始地址为DATA2区域。

若待转换的数不是十进制数,则相应结果单元内容为00H。

STACKSEGMENT

DB256DUP(?

STACKENDS

DATASEGMENT

DATA1DB0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,'A','B','C','$'

TABLEDB00H,40H,01H,79H,02H,24H,03H,30H,04H,19H,05H,12H,06H,02H,07H,78H,08H,00H,09H,18H,0AH,08H,0BH,03H,0CH,46H,0DH,21H,0EH,06H,0FH,0EH;实际数据定义必须在同一行

DATA2DB16DUP(0)

COUNTEQU2

DATAENDS

CODESEGMENT

ASSUMESS:

STACK,DS:

DATA,CS:

CODE

START:

MOVAX,DATA

MOVDS,AX

LEASI,DATA1

LEABX,DATA2

LEADI,TABLE

XORAH,AH

LP1:

MOVAL,[SI];外循环DATA1指向下一个

INCSI

MOVCX,16;内循环TABLE16次

LP2:

CMP[DI],AL

JELP3

ADDDI,COUNT;内循环TABLE指向下一组

DECCX

JNZLP2

MOVBYTEPTR[BX],00H;若不是十进制数,则结果保存为00H

INCBX

CMPAL,'$';设置结束标志

JNZLP1

JZLP4

LP3:

MOVAL,[DI+1]

MOV[BX],AL;转换结果保存在DATA2中

INCBX

LEADI,TABLE

CMPCL,0

JNZLP1

LP4:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1