微机实验九 数码转换Word格式.docx
- 文档编号:21020894
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:13
- 大小:207.67KB
微机实验九 数码转换Word格式.docx
《微机实验九 数码转换Word格式.docx》由会员分享,可在线阅读,更多相关《微机实验九 数码转换Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
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
指向所输入的数
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
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字单元中。
代码:
STACKSEGMENT
DB256DUP(?
DATASEGMENT
DATA1DW1234H
DATA2DW?
CODESEGMENT
ASSUMESS:
STACK,CS:
DATA
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
取个位数字
MOVDATA2,AX
MOVAH,4CH
INT21H
3.十六进制数转换为ACSII码
编写并调试正确的汇编语言源程序,使之将存DATA1字单元中存放的4位十六进制数,转换为ASCII码后分别存入DATA2为起始地址的4个单元中,低位数存在低地址的字节中,并在屏幕上显示出。
DATA1DB12H,02CH;
4位十六进制数
DATA2DB5DUP(?
存放ASC码
DATA3DB4DUP(?
4位十六进制数分别存放在DATA3的4个字节中
LFCRDB0DH,0AH,'
$'
ASSUMESS:
STACK,DS:
DATA,CS:
CODE
MOVDS,AX
LEASI,DATA1
LEADI,DATA3
MOVCL,2;
循环2次
取2位十六进制数
ANDAL,0F0H;
屏蔽低四位
RORAL,4;
右移4位
MOV[DI],AL;
高位数存放在高地址字节中
INCDI
MOVAL,[SI];
ANDAL,0FH;
屏蔽高四位
低位数存放在低地址字节中
INCSI
DECCL
JNZLP1
LEASI,DATA3;
将DATA3的首地址偏移量赋给SI
LEADI,DATA2;
将DATA2的首地址偏移量赋给DI
MOVCL,4;
循环4次
取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中
JNZLP2
MOVAL,'
;
设置显示完毕标志
MOV[DI+1],AL;
存入DATA2中
LEADX,LFCR
MOVAH,09H
INT21H;
回车换行
MOVDX,OFFSETDATA2
显示ASC码
二、实验步骤
1.编辑源文件,经汇编连接产生EXE文件。
2.用DEBUG调试、检查、修改程序。
3.
三、实验习题与思考
1.编程实现:
从键盘上输入两位十六进制数,转换成十进制数后显示在屏幕上。
源代码:
STACKSEGMENT
DB256DUP(?
)
STACKENDS
DATASEGMENT
DATA1DB5,?
2DUP(?
DATA2DB2DUP(?
DATA3DB2DUP(?
DATAENDS
CODESEGMENT
CODE
MOVAX,DATA
MOVDS,AX
LEADX,DATA1
MOVAH,0AH
输入字符串
LEASI,DATA1+2
LEADI,DATA2
MOVCL,2;
将ASC码转换为十六进制数
MOVAL,[SI]
SUBAL,30H
CMPAL,9
JALP2
MOV[DI],AL
INCDI
INCSI
DECCL
JZLP3
JNZLP1
SUBAL,7
JNZLP1;
将十六进制数转换成十进制数,并保存
MOVAL,[DI]
MOVBL,[DI+1]
MOVCL,4
SHLAL,CL
ADDAL,BL
LEASI,DATA3
XORAH,AH
MOVCL,100
DIVCL;
AH=AX%100,AL=AX/100
MOV[SI],AL;
保存百位数
MOVAL,AH
MOVCL,10
DIVCL
MOV[SI+1],AL;
保存十位数
MOV[SI+2],AH;
保存个位数
;
屏幕显示十进制数
MOVDL,[SI];
取百位数送显
ORDL,30H
MOVAH,02H
INT21H
MOVDL,[SI+1];
取十位数送显
MOVDL,[SI+2];
取个位数送显
MOVAH,4CH
CODEENDS
ENDSTART
运行图:
输入:
输出:
2.十进制数转换为七段码。
为了在七段显示器上显示十进制数,需要把十进制数转换为七段代码。
转换可采用查表法。
设需要转换的十进制数已存放在起始地址为DATA1区域中,七段代码转换表存放在起始地址为TABLE表中,转换结果存放到起始地址为DATA2区域。
假设待转换的数不是十进制数,那么相应结果单元容为00H。
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
LEASI,DATA1
LEABX,DATA2
LEADI,TABLE
外循环DATA1指向下一个
MOVCX,16;
循环TABLE16次
CMP[DI],AL
JELP3
ADDDI,COUNT;
循环TABLE指向下一组
DECCX
JNZLP2
MOVBYTEPTR[BX],00H;
假设不是十进制数,那么结果保存为00H
INCBX
CMPAL,'
设置完毕标志
JZLP4
MOVAL,[DI+1]
MOV[BX],AL;
转换结果保存在DATA2中
CMPCL,0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机实验九 数码转换 微机 实验 数码 转换