21,458
社区成员
发帖
与我相关
我的任务
分享
decibin proc near
mov bx,0
newchar: mov ah,1
int 21h
sub al,30h
jl exit
cmp al,9d
jg exit
cbw
xchg ax,bx
mov cx,10d
mul cx
xchg ax,bx
add bx,ax
jmp newchar
exit: ret
decibin endp
;十进制转换为十六进制
;****************************
decihex segment
assume cs:decihex
main proc far
repeat: call decibin
call crlf
call binihex
call crlf
jmp repeat
main endp
;----------------------------
decibin proc near
mov bx,0
newchar: mov ah,1
int 21h
sub al,30h
jl exit
cmp al,9d
jg exit
cbw
xchg ax,bx
mov cx,10d
mul cx
xchg ax,bx
add bx,ax
jmp newchar
exit: ret
decibin endp
;----------------------------
binihex proc near
mov ch,4
rotate: mov cl,4
rol bx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printit
add al,7h
printit: mov dl,al
mov ah,2
int 21h
dec ch
jnz rotate
ret
binihex endp
;----------------------------
crlf proc near
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
crlf endp
;----------------------------
decihex ends
;****************************
end main
decibin proc near
mov bx,0 ; 用来存放累加和的,初始为 0
newchar: mov ah,1
int 21h ; 读入一个字符按键
sub al,30h ; 小于 '0' ?
jl exit ; 是, 非数字字符,结束
cmp al,9d ; 大于 9 ?前面减过 30h 了,所以对应原始的 '9' 字符
jg exit ; 是, 非数字字符,结束
cbw ; AL 扩展到 AX. 由于 AL 我[0,9], 所以 AH=0
xchg ax,bx ; 上个累加和 与 当前值
mov cx,10d
mul cx ; 上个累加和×10
xchg ax,bx
add bx,ax ; 加现在的值
jmp newchar
exit: ret
decibin endp
; 这个, 还是进调试软件,单步运行, 注意看 AX 和 BX 中值的变化更直观.
; 比如输入 291 (123h), BX 中的值的变化为 0 - 1 - 12 - 123