编写一个8086程序,要求从键盘中输入不多于四位的ASCII十进制数,以回车结束,转换成十六位二进制数,然后输出。
悬赏分:150 | 解决时间:2011-10-13 08:16 |
=============================================
最佳答案:
题目要求的是输入四位十进制数(ASCII形式),假设是'1'、'3'、'5'、'7'。
那么就应该先变换成数字1、3、5、7,再计算出来:1 * 1000 + 3 * 100 + 5 * 10 + 7,把计算的结果存入到存储器,就是16位的二进制形式。
最后按照要求,以十六位二进制数形式输出。
程序如下:
;--------------------------------------------
DATA SEGMENT
PROMPT DB 'INPUT HEXADECIMAL: $'
HEX DB 5 ;计划输入的字符个数(含回车符)
NNN DB 0 ;存放实际输入的字符个数
DB 5 DUP(?)
BIN DW ? ;输入数字的二进制形式的存放单元
ERR DB 0AH, 0DH, ' ERROR !'
DB 0AH, 0DH, ' I HAVE NO TIME TO PLAY WITH YOU ! $'
DATA ENDS
;--------------------------------------------
STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS
;--------------------------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK1
START:
MOV AX, DATA
MOV DS, AX
MOV AX, STACK1
MOV SS, AX
LEA DX, PROMPT ;'INPUT HEXADECIMAL: $'
MOV AH, 09H ;9号功能调用,显示字符串
INT 21H
LEA DX, HEX ;实际输入的码存放到HEX后面的2个字节
MOV AH, 0AH ;10号功能调用,输入ASCII字符串
INT 21H
;---------------------------------------
MOV BIN, 0
LEA SI, HEX + 2;取输入字符串的首地址
MOV CH, NNN ;取输入字符的个数,用来控制循环处理的次数
CONV: ;代码转换
MOV BL, [SI]
CMP BL, 0DH
JZ END0 ;回车即结束
CMP BL, '0'
JB ERROR ;小于'0'转移
CMP BL, '9'
JA ERROR ;大于'9'转移
BIN1: ;是'0' ~ '9'之间的
AND BL, 0FH ;就转换二进制数
MOV BH, 0 ;再弄成16位数
PUSH CX
MOV AX, BIN ;把原来的数字乘以10
MOV CX, 10
MUL CX
ADD AX, BX ;加上新输入的
MOV BIN, AX ;存结果,这就是二进制数
INC SI ;指向下一个输入的字符
POP CX
DEC CH ;处理次数减一
JNZ CONV ;非零转移
;---------------------------------------
DISP:
MOV DL, 13 ;先显示回车
MOV AH, 2
INT 21H
MOV DL, 10 ;以及换行
MOV AH, 2
INT 21H
;---------------------------------------
MOV AX, BIN ;取来二进制数字
MOV CX, 16 ;显示16位数
DDDD:
MOV DL, '0' ;先计划显示0
TEST AX, 8000H ;测试最高位
JZ DDD1
INC DL ;非0就显示1
DDD1:
PUSH AX
MOV AH, 2 ;显示DL中的ASCII码
INT 21H
POP AX
SHL AX, 1 ;左移
LOOP DDDD ;CX-1,非零转移
JMP END0 ;16位显示完毕,转到结束
;---------------------------------------
ERROR:
LEA DX, ERR
MOV AH, 09H ;错误信息提示
INT 21H
;---------------------------------------
END0:
MOV AH, 4CH ;返回DOS
INT 21H
CODE ENDS
;---------------------------------------
END START
;---------------------------------------
回答时间:2011-10-9 11:17 |
回答者: 做而论道 | 十五级 采纳率:42% 名人 达人
原题网址:http://zhidao.baidu.com/question/327582058.html?fr=im100008
后记:
本题目的要求是输入十进制数字,这个也可以改为要求输入16进制的数字,这时的编程方法,可见下一篇文章。
=============================================