当前位置:文档之家› 键盘录入数据的转换与显示程序课程设计报告

键盘录入数据的转换与显示程序课程设计报告

课程设计报告书
课程名称微机原理及应用B
院(系、部、中心)自动化学院




起指止导
-i -
五.系统模块详细设计与调试: 一).模块设计 模块一•输入第一个数:
MOV AH,09H
INT 21H
通过调用DOS 系统的01H 号功能——键入字符并回车来实现,
其出口参数为键入字符的ASCII 码,存在AL 中 详细设计方案:
DB 0DH,0AH,'PLEASE IUPUT A FIRST NUMBER FROM
;输入第一个数,在-9999至 范围内
;十进制数的输入缓冲区, 共可接收6个字符
;保留,用于10号调用时 DOS 填入实际输入字符 个数 ;一个符号位,四位数字 ASCII 码,加上一
个回车 符,共计6字符
DB ?
DB 12 DUP ⑺,'$'
;将第一个数转换为二
进制后,放于此处
DB 0DH,0AH,'PLEASE IUPUT THE SECOND NUMBER FROM -9999 TO
9999!$'
;输入第二个数,在-9999
DATA INPUT1
IN_ASC_BUF
IN_ASC_BUF1
B_BUF1 DW INPUT2
SEGMENT
-9999 TO 9999!$' +9999 DB 6 DB ?
DB 6 DUP ⑺,'$'
DB 6
;将二个数的和转换为
ASCII码后,放于此
处,以供9号调用显示ENDS
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET INPUT1
LP: MOV AH,09H
INT 21H
MOV DX,OFFSET IN_ASC_BUF MOV AH,0AH
INT 21H
MOV CX,3
MOV DI,OFFSET IN_ASC_BUF+2 MOV SI,OFFSET IN_ASC_BUF1+2
MOV AX,[DI]
MOV [SI],AX
INC SI
INC SI
INC DI
INC DI
LOOP LP
模块二:输入第二个数
MOV B_BUF1,AX
MOV DX,OFFSET INPUT2
MOV AH,09H
INT 21H
MOV DX,OFFSET IN_ASC_BUF
MOV AH,0AH
INT 21H
MOV CX,3
MOV DI,OFFSET IN_ASC_BUF+2
;提示输入一个

;读取第一个数
;设置次数
;将第一个数的第一个字符放于目的数据区指针中
;将第二个数的第一个字符放于源数据区指针中地址内容送入AX
循环LP读取出第
一个数
;取第二个输入数
的首地址
;提示输入二个

;读取第二个数
;设置次数
;将第二个数的第一个字符放
于目的数据区指

OUT ASC SUM 至+9999范围DB 6 DUP⑺,'$'
DATA
;设置DS
;取第一个输入数的
首地址
INT 21H
模块四.十进制数转换成二进制数:
入口:十进制数的ASCII 码在IN_ASC_BUF 内 出口:转换后的二进制数在AX 内 算法:先将其转换成十进制数字,再用累加和乘10加X 的方法变成 二进制数,如将358转换为二进制数,可先将累加和赋0,再计算 (((0*10+3)*10+5)*10+8) ,结果为二进制数,再由符号位决定是否需 要求补。

ASC_TO_B PROC NEAR
MOV CL,IN_ASC_BUF+1 MOV CH,0 DEC CL
MOV BX,OFFSET IN_ASC_BUF+3
PUSH BX PUSH CX L1:
MOV AL,[BX]
AND AL,0FH MOV [BX],AL INC BX LOO L1
将所有数字字 符的高四位清 0,使之变为数
字值
ASC_TO_B ENDP
模块五.二进制数转换为十进制数:
;取字符个数 ;符号位
■.
调整BX 指向 十进制数的最 高位
POP CX POP BX MOV AX,0 MOV SI,10 L2:
MUL SI
ADD AL,[BX] ADC AH,0 INC BX LOOP L2
CMP IN_ASC_BUF+2,'+' JZ L3 NEG AX
L3: RET
;累加和赋初值
;累加乘10
;符号是正号,
转移
;符号是负号,
求补
入口:二进制数在AX 内
出口:转换后的ASCII 码在OUT_ASC_SUM 变量内
算法:AX 中的数范围在+32767到-32768之间,先检查AX 中的符号 位,以决定输出“ + ”还是“-”,若是负数,应先求补,得到原码后 即可与正数作统一处理。

转换方法为将被转换的二进制数先除以 10000,商;即为万位数,再将余数除以1000,商为千位数,以此类推, 求出百、十位数,剩下的为个位数。

最后,将各个数加上30H ,即成 为对应字符。

CWD
MOV BX,1000 DIV BX
ADD AL,30H
MOV OUT_ASC_SUM+2,AL MOV AX,DX
MOV BL,100 DIV BL
ADD AL,30H
MOV OUT_ASC_SUM+3,AL MOV AL,AH CBW MOV BL,10
B_TO_ASC PROC NEAR
MOV OUT_ASC_SUM,'+' CMP AX,0 JGE L4
NEG AX
MOV OUT_ASC_SUM,'-' L4:
CWD
MOV BX,10000 DIV BX
ADD AL,30H
;不是负数,
转 移
MOV OUT_ASC_SUM+1,AL MOV AX,DX
;将万位转换为 数字(商应在 AX
内,但因为 商不大于3,所 以有效部分在
AL 内)
保存万位数字
;将余数置入AX
内,以便当作被 除数
;保存千位数字 ;将余数置入AX
内,以便当作被 除数
;保存百位数字
-9 -
-11 -
课程设计报告书
-13 -
CBW
MOV BL,1O
DIV BL
ADD AL,30H
MOV OUT_ASC_SUM+4,AL
ADD AH,30H MOV OUT_ASC_SUM+5,AH RET ENDP ENDS
END START
B_TO_ASC
CODE。

相关主题