输入四进制的数,转为十进制输出
程序运行:
代码:
datas segment
N_string_max_length db 0ffh
N_string db 0, 100h dup(?)
N dw 0,0
sum dd 0
input db 'input quanternary=$'
output db 0dh,0ah,'output decimal=$'
datas ends
stacks segment stack
db 100h dup(?)
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacks
main proc far
start:
push ds
mov ax,0h
push ax
mov ax,datas ;初始化ds
mov ds,ax
;输入提示
lea dx,input
mov ah,9
int 21h
;输入N
lea dx,N_string_max_length
mov ah,10
int 21h
;转换成为数字
lea si,N_string
call todigit
mov N,ax
mov N+2,dx
;输出提示
lea dx,output
mov ah,9
int 21h
mov ax,N
mov dx,N+2
call print_decimal
ret
main endp
todigit proc near uses bx cx si di
;si ,ax
mov cl,[si] ;设置循环次数
xor ch,ch
cmp cx,8
ja err
inc si ;si指向第一个元素
mov ax,0 ;初始化ax,dx
mov dx,0
mov di,4 ;乘数
dig:
mov bl,[si]
cmp bl,'0' ;判断是否小于'0'
jb err ;若低于'0',则错误字符
cmp bl,'3' ;判断是否大于'3'
ja err ;若高于'3',则错误字符
sub bl,30h ;否则,将数字字符转成数字
xor bh,bh
mul di ;乘4
add ax,bx ;加上个位
adc dx,0
inc si
loop dig
jmp exit
err: ;输出错误
push ds
push cs
pop ds
lea dx,error_tip
mov ah,9
int 21h
pop ds
mov ah,4ch
int 21h
exit:
ret
error_tip db 0dh,0ah,'input error$'
todigit endp
print_decimal proc near uses ax bx cx dx
mov bx,10
mov cx,0
dea:
div bx
push dx
inc cx
xor dx,dx
cmp ax,0
jnz dea
dea1:
pop dx
add dl,30h
mov ah,2
int 21h
loop dea1
ret
print_decimal endp
codes ends
end main