|
楼主 |
发表于 2012-6-10 22:04:51
|
显示全部楼层
孙九 发表于 2012-6-10 14:37
我没看明白,你的问题,到底你是会不会进制转换啊,我觉得刚学的时候先自己手算的啊,后来基本上就不用了, ...
5 码制转换程序实验
将ASCⅡ码数据转换成二进制数据。要求从键盘上输入十进制整数(假定范围0~32767),然后转换成二进制格式存储。
DATA SEGMENT
STRING1 DB 'PLEASE INPUT A NUMBER(0~32767):$'
STRING2 DB 'THE ASCII IS:$'
STRING3 DB 'THE BINARY IS:$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STRING1
MOV AH,09H
INT 21H
CALL CRLF
INPUT: MOV AH,01H ;输入数据
INT 21H
CMP AL,0DH
JZ NEXT
SUB AL,30H
JL INPUT
CMP AL,39H
JG INPUT
CBW
XCHG AX,BX ;AX为输入值,BX保存结果,两个对调为MUL做准备
MOV DX,10D ;将上一次结果乘10
MUL DX
XCHG AX,BX ;AX为本次输入的值,BX为之前的结果
ADD BX,AX
JMP INPUT
NEXT: CALL CRLF
MOV CL,4D (这里可以解释下 是什么 意思吗?)
MOV CH,4D (还有这里 我一直没看懂 现在 还是新手 )
MOV DX,OFFSET STRING2
MOV AH,09H
INT 21H
CALL CRLF
LOOP0: ROL BX,CL ;循环左移,将最高为存到BL的低四位
MOV AL,BL
AND AL,0FH ;
ADD AL,30H
CMP AL,3AH
JL OUTPUT
ADD AL,07H
OUTPUT:MOV AH,02H
MOV DL,AL
INT 21H
DEC CH
JNZ LOOP0
CALL CRLF
MOV DX,OFFSET STRING3
MOV AH,09H
INT 21H
CALL CRLF
MOV CH,16D
MOV CL,1D
LOOP1: ROL BX,CL
MOV AL,BL
AND AL,01H
ADD AL,30H
MOV AH,02H
MOV DL,AL
INT 21H
DEC CH
JNZ LOOP1
MOV AH,4CH
INT 21H
MAIN ENDP
OUTS PROC NEAR ;字符串输出子程序
MOV AH,09H
INT 21H
RET
OUTS ENDP
CRLF PROC NEAR ;回车换行子程序
MOV AH,02H ;回车
INT 21H
MOV DL,0AH ;换行
INT 21H
RET
CRLF ENDP
CODE ENDS
END START |
|