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

键盘录入数据的转换与显示程序设计说明书

INPUT2DB 0DH,0AH,'PLEASE IUPUT THE SECOND NUMBER FROM -9999 TO 9999!$';输入第二个数,在-9999 至 +9999范围
OUT_ASC_SUMDB 6 DUP(?),'$';将二个数的和转换为ASCII码后,放于此 处,以供9号调 用显示
DATAENDS
MOV AX,DATA
MOV DS,AX;设置DS
MOV DX,OFFSET INPUT1;取第一个输入数的首地址
MOV AH,09H
INT 21H;提示输入一个数
MOV DX,OFFSET IN_ASC_BUF
MOV AH,0AH
INT 21H;读取第一个数
MOV CX,3;设置次数
在程序得到正确的结果之前,会产生一些错误,只有经过调试阶段才能纠正程序中的错误,从而的到正确的结果。在程序编译过程中会提示语法错误,可再用编辑程序来修改源程序中的错误。当没有语法错误而得不到正确结果时,可用调试程序DEBUG来调试。它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
LOOP LP循环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;设置次数
ADD AX , BIN_BUF1;计算这二个数之和
CALL BIN_TO_ASCII;将和转换为ASCII码,以供显示用
MOV DX,0AH
MOV AH,02H
INT 21H
MOV DX,OFFSET IN_ASC_BUF1+2
MOV AH,09H
INT 21H
MOV DX,0AH
MOV AH,02H
INT 21H
MOV DL,'='
MOV AH,02H
INT 21H
MOV DX,OFFSET OUT_ASC_SUM
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
模块四.十进制数转换成二进制数:
入口:十进制数的ASCII码在IN_ASC_BUF内
出口:转换后的二进制数在AX内
ADD AL,30H
MOV OUT_ASC_SUM+3,AL;保存百位数字
MOVAL,AH
CBW
MOV BL,10
DIV BL
ADD AL,30H
MOV OUT_ASC_SUM+4,AL;保存十位数字
ADD AH,30H
MOV OUT_ASC_SUM+5,AH;保存个位数字
RET
B_TO_ASC ENDP
B_BUF1 DW ?
INPUT2DB 0DH,0AH,'PLEASE IUPUT THE SECOND NUMBER FROM -9999 TO 9999!$'
OUT_ASC_SUMDB 6 DUP(?),'$'
二).程序调试
在DOS环境下,键入EDIT。启动全屏幕编辑软件EDIT,输入源程序。输入完毕,按alt+F选择SAVE保存程序(规定扩展名为*.ASM),按alt+X退出EDIT状态。
退出EDIT环境后,输入ASM或MASM 文件名↙(省略扩展名,系统默认为.ASM),对源程序进行汇编。源程序经汇编后产生三个输出文件:第一个是OBJ文件,即二进制目标文件,这是汇编的主要目的;第二个是LST文件,即列表文件;第三个是CRF文件,对于一般的程序可以不建立后两个文件。
MOV OUT_ASC_SUM+1,AL;保存万位数字
MOV AX,DX;将余数置入AX内,以便当作被除数
CWD
MOV BX,1000
DIV BX
ADD AL,30H
MOV OUT_ASC_SUM+2,AL;保存千位数字
MOV AX,DX;将余数置入AX内,以便当作被除数
MOV BL,100
DIV BL
MOV DI,OFFSET IN_ASC_BUF+2;将第二个数的第一个字符放于目的数据区指针中
MOV SI,OFFSET IN_ASC_BUF1+7;将第二个数的第一个字符放于源数据区指针中
LP1:MOV AX,[DI]地址内容送入AX
MOV [SI],AX
INC SI
INC SI
INC DI
INC DI
出口:转换后的ASCII码在OUT_ASC_SUM变量内
算法:AX中的数范围在+32767到-32768之间,先检查AX中的符号位,以决定输出“+”还是“-”,若是负数,应先求补,得到原码后即可与正数作统一处理。转换方法为将被转换的二进制数先除以10000,商;即为万位数,再将余数除以1000,商为千位数,以此类推,求出百、十位数,剩下的为个位数。最后,将各个数加上30H,即成为对应字符。
六.设计总结:
七.参考文献:
<微机原理实验与课程设计知指导书>,陆红伟编,中国电力出版社,2006年
<8086微型计算机组成,原理及接口>,顾滨,机械工业出版社,2001
<微型计算机原理及应用>,吕淑萍等,哈尔滨工程大学出版社,2004年
<微型计算机技术及应用>,戴梅萼,清华大学出版社,2005年
八.附件材料:
南京工程学院
课程设计报告书
课 程 名 称微机原理及应用B
院(系、部、中心)自动化学院
专业自动化(数控技术)
班 级
姓 名
学 号
起 止 日 期
指 导 教 师
一、设计题目………………………………………2
二、设计任务(要求)……………………………2
三、总体方案………………………………………2
四、原理框图………………………………………3
5。子程序中,实现十进制数转换为二进制方法是先将累加和赋0,再用累加和乘10加X得出结果。转换后在16位补码的表示范围内,如果为负数,则需求补。
6.子程序中,实现二进制数转换为十进制前先检查符号位,若为负数则求补,转换方法为将二进制数除以1000,再将余数除以1000,依次类推,求出百,十位数,剩下的为个位数,最后将各个数加上30H,即成为对应字符。
汇编程序产生的二进制目标文件不是可执行文件,还必须用连接程序(LINK)把OBJ文件转换成可执行的EXE文件。LINK程序有两个输入文件OBJ和LIB,两个输出文件EXE和MAP。连接时,输入LINK 文件名↙,对汇编生成的*.OBJ文件进行连接,计算时会询问生成的EXE文件名、MAP文件名以及参与连接的库文件名,如果不想生成MAP文件,没有库文件参与连接,则按回车键作答。最后,生成相应的*.EXE文件。从LINK过程的提示信息中,可看到最后给出了一个“无堆栈段”的警告性错误,这并不影响程序的执行。至此,产生了一个EXE文件,在DOS环境下可以直接运行该文件。
IN_ASC_BUFDB 6;十进制数的输入缓冲区,共可接收6个字符
DB ?;保留,用于10号调用时DOS填入实际输入字符个数
DB 6 DUP(?),'$';一个符号位,四位数字ASCII码,加上一个回车 符, 共计6字符
IN_ASC_BUF1DB 6
DB ?
DB 12 DUP(?),'$'
B_BUF1 DW ?;将第一个数转换为二进制后,放于此处
2. 先输入主程序。 输入两个数时,键盘接收的十进制数以ASCII码形式存放在内存单元中,将其转换为十进制数字。数值在-9999至+9999范围内。
3. 主程序中,两个二进制数数求和,结果也在16位补码的表示范围内。
4. 主程序中,和显示前,首先把二进制转换为十进制数,检查和的符号位,若为负数则求补。
算法:先将其转换成十进制数字,再用累加和乘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
6.在输入数据之后,屏幕显示第二个数的输入的值。
7.最后显示器显示“****+****=****”,其中3个****分别是第一个加数,第二个加数,和。
三.总体方案:
1. 程序分为主程序和子程序,主程序主要是接收从键盘输入的数,两个数的求和,以及和的显示;子程序分别实现十进制数转换为二进制和将二进制数转换为十进制数。
MOV SI,10
L2:MUL SI
ADD AL,[BX]
ADC AH,0
INC BX
LOOP L2;累加乘10
CMP IN_ASC_BUF+2,'+'
JZ L3;符号是正号,转移
NEG AX;符号是负号,求补
L3:RET
ASC_TO_B ENDP
模块五.二进制数转换为十进制数:
入口:二进制数在AX内
LOOP LP1循环LP1,读取出第一个数
模块二:输入第二个数
模块三.两个二进制数求和并显示和:
显示结果:
MOV AH,09H
MOV DX,OFFSETOUT_ASC_SUM
INT 21H
将结果存入数据段中定义的缓冲区OUT_ASC_SUM中,再通过调用DOS系统的09H号功能——显示字符串(串尾字符为$,但不显示)来完成。
相关主题