微机实验九 数码转换.docx

上传人:b****8 文档编号:10653122 上传时间:2023-02-22 格式:DOCX 页数:16 大小:207.82KB
下载 相关 举报
微机实验九 数码转换.docx_第1页
第1页 / 共16页
微机实验九 数码转换.docx_第2页
第2页 / 共16页
微机实验九 数码转换.docx_第3页
第3页 / 共16页
微机实验九 数码转换.docx_第4页
第4页 / 共16页
微机实验九 数码转换.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

微机实验九 数码转换.docx

《微机实验九 数码转换.docx》由会员分享,可在线阅读,更多相关《微机实验九 数码转换.docx(16页珍藏版)》请在冰豆网上搜索。

微机实验九 数码转换.docx

微机实验九数码转换

微机实验九数码转换

实验目的

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

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

一、实验内容

1.ACSII码转换为非压缩型BCD码

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

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

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

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

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

实验代码:

1.

DATASEGMENT;定义数据段

DATA1DB21,?

21DUP(?

);建立一个内存区,第二个数存放最大字符数

DATA2DB21DUP(?

);DATA2区定义

DATAENDS

STACKSEGMENTSTACK;定义堆栈段

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA;程序初始化

MOVDS,AX;程序初始化

LEADX,DATA1;DX存放DATA1的首地址

MOVAH,0AH;从键盘中输入字符串

INT21H;调用INT21功能

LEASI,DATA1;SI存放DATA1的首地址

INCSI;指向LP1循环次数

MOVCL,[SI];存放LP1的循环次数

MOVCH,0

INCSI;指向所输入的数

LEADI,DATA2;DI存放DATA2的首地址

LP1:

MOVAL,[SI];将输入的数存放到AL中

CMPAL,30H;AL与30H比较

JCLP2;AL<30H,则跳LP2

CMPAL,39H;AL与39H比较

JALP2;AL>39H,则跳LP2(JG与JA比较)

SUBAL,30H;将输入的字符转换成ASCII码

MOVBL,AL;AL→BL

SAVE:

MOV[DI],BL;BL→DS:

DI

INCSI;SI=SI+1

INCDI;DI=DI+1

LOOPLP1;循环LP1

JMPEXIT;跳转到EXIT

LP2:

MOVBL,0FFH;如果输入的不是十进制数,则在相应的单元中存放FFH

JMPSAVE;跳转到SAVE

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2.BCD码转换为二进制码

编写并调试正确的汇编语言源程序,使之将一个16位存储单元中存放的4位BCD码DATA1,转换成2进制后存入DATA2字单元中。

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

代码:

STACKSEGMENT

DB256DUP(?

STACKENDS

DATASEGMENT

DATA1DW1234H

DATA2DW?

DATAENDS

CODESEGMENT

ASSUMESS:

STACK,CS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

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

MOVSI,0AH;设置乘数10

MOVCL,4

MOVCH,3;设置循环次数3

MOVAX,DATA1;取十进制数

LP:

ROLAX,CL;取数字

MOVDI,AX;保存当前AX值

ANDAX,0FH;屏蔽高位

ADDAX,BX;累加

MULSI

MOVBX,AX

MOVAX,DI

DECCH;循环次数减1

JNZLP

ROLAX,CL;取个位数字

ANDAX,0FH;屏蔽高位

ADDAX,BX;累加

MOVDATA2,AX

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

3.十六进制数转换为ACSII码

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

代码:

STACKSEGMENT

DB256DUP(?

STACKENDS

DATASEGMENT

DATA1DB12H,02CH;4位十六进制数

DATA2DB5DUP(?

);存放ASC码

DATA3DB4DUP(?

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

LFCRDB0DH,0AH,'$'

DATAENDS

CODESEGMENT

ASSUMESS:

STACK,DS:

DATA,CS:

CODE

START:

MOVAX,DATA

MOVDS,AX

LEASI,DATA1

LEADI,DATA3

MOVCL,2;循环2次

LP1:

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

ANDAL,0F0H;屏蔽低四位

RORAL,4;右移4位

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

INCDI

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

ANDAL,0FH;屏蔽高四位

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

INCSI

INCDI

DECCL

JNZLP1

LEASI,DATA3;将DATA3的首地址偏移量赋给SI

LEADI,DATA2;将DATA2的首地址偏移量赋给DI

MOVCL,4;循环4次

LP2:

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

CMPAL,9

JGLP3;若AL>9,跳转到LP3

ADDAL,30H;十六进制数0-9->ASC码,要加30H

JMPLP4

LP3:

ADDAL,37H;十六进制数A-F->ASC码,要加37H

LP4:

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

INCDI

INCSI

DECCL

JNZLP2

MOVAL,'$';设置显示结束标志

MOV[DI+1],AL;存入DATA2中

LEADX,LFCR

MOVAH,09H

INT21H;回车换行

MOVDX,OFFSETDATA2

MOVAH,09H

INT21H;显示ASC码

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

二、实验步骤

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

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

3.

三、实验习题与思考

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