北京工业大学 微机原理 实验九Word文档格式.docx
- 文档编号:21113749
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:10
- 大小:17.66KB
北京工业大学 微机原理 实验九Word文档格式.docx
《北京工业大学 微机原理 实验九Word文档格式.docx》由会员分享,可在线阅读,更多相关《北京工业大学 微机原理 实验九Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
STACKSEGMENTPARASTACK'
STACK'
DB256DUP(?
);
为堆栈段留出256个字节单位
STACKENDS
DATASEGMENTPARA'
DATA'
;
定义数据段
DATA1DB32;
缓冲区最大长度
DB?
DB32DUP(?
)
DATA2DB32DUP(?
DATAENDS
CODESEGMENT;
定义代码段
ASSUMESS:
STACK
ASSUMECS:
CODE
ASSUMEDS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEADX,DATA1;
规定:
DX存放输入字符串的缓冲区首地址
MOVAH,0AH
INT21H;
字符串输入AL=键入的ASCII码
LEASI,DATA1
LEADI,DATA2;
DI存放DATA2首地址
INCSI
MOVCH,0
MOVCL,[SI];
取输入字符串长度
INCSI;
指向第一个输入字符
LP1:
MOVAL,[SI]
SUBAL,30H;
输入的字符存为ASCII码,将其转换成十进制数
CMPAL,0;
若AL<
0(AL-0<
0),跳转到LP2
JLLP2
CMPAL,9;
若AL>
9(AL-9>
JGLP2
MOVBL,AL;
将AL->
BL
MOV[DI],BL;
将结果存到DATA2开始的单元中
INCDI
DECCL
JMPLP1
LP2:
MOVAL,0FFH;
若输入的不就是十进制数,在相应的单元存放FFH
;
以字母开头的十六进制数前面需加'
0'
MOV[DI],BL
INCDI
INCSI
CMPCL,0
JNZLP1;
CL=0,执行LP3中的语句
LP3:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2、BCD码转换为二进制码
DATASEGMENT
DATA1DW2497H
DATA2DW?
CODESEGMENT
ASSUMECS:
CODE
ASSUMEDS:
START:
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,所以不用最后不用放入循环中去
取个位数字
进行累加,直接将最后的累加结果放到AX中
MOVDATA2,AX
INT21H
ENDSTART
3、十六进制数转换为ACSII码
STACKSEGMENT
DATA1DB24H,06DH
DATA2DB4DUP(?
存放ASCII码
JUMPDB4DUP(?
4位十六进制数分别存放在DATA3的4个字节中
ASSUMESS:
STACK,DS:
DATA,CS:
LEADI,JUMP
MOVCH,2;
循环2次,取两次两位十六进制数
LP0:
MOVAL,[SI];
取2位十六进制数
ANDAL,0F0H;
低四位为零
MOVCL,4
RORAL,CL;
右移4位相当于除以16
MOV[DI],AL;
高位数存放在高地址字节中
ANDAL,0FH;
高四位为零
低位数存放在低地址字节中
DECCH
JNZLP0
LEASI,JUMP;
SI=JUMP的首地址偏移量
LEADI,DATA2;
DI=DATA2的首地址偏移量
MOVCH,4;
因为就是四位十六进制数,所以设置为循环4次
取JUMP中的十六进制数
CMPAL,9
JGLP2;
ADDAL,30H;
0~9H+30H=ASCII
JMPLP3
ADDAL,37H;
A~FH+30H=ASCII
将ASCII码依次存入DATA2中
JNZLP1
MOVAH,09H
MOVDX,OFFSETDATA2
ENDSTART
六、实验习题与思考
1、编程实现:
从键盘上输入两位十六进制数,转换成十进制数后显示在屏幕上。
DB256DUP(?
DATA1DB5,?
2DUP(?
DATA2DB2DUP(?
DATA3DB2DUP(?
MOVAX,DATA
MOVDS,AX
LEADX,DATA1
MOVAH,0AH
INT21H;
输入字符串
LEASI,DATA1+2
LEADI,DATA2
MOVCL,2;
将ASC码转换为十六进制数
SUBAL,30H
CMPAL,9
JALP2
MOV[DI],AL
INCDI
INCSI
DECCL
JZLP3
JNZLP1
SUBAL,7
JNZLP1;
将十六进制数转换成十进制数,并保存
LEADI,DATA2
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;
保存个位数;
屏幕显示十进制数
LP4:
MOVDL,[SI];
取百位数送显
ORDL,30H
MOVAH,02H
INT21H
MOVDL,[SI+1];
取十位数送显
MOVDL,[SI+2];
取个位数送显
MOVAH,4CH
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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京工业大学 微机原理 实验九 微机 原理 实验