;请编写一个实现多种数制转换的小程序
assume cs:code
data segment
var db 2
hc db 64 dup (0)
db '$'
mess1 db 'Choose disables(2-16):$'
mess0 db 'Please input:$'
buff db 10 ;符合0AH号功能条用的缓冲区
db ? ;实际键入的字符数
db 10 dup (0)
buff1 db 3
db ?
db 3 dup (0)
data ends
code segment
start: mov ax,data
mov ds,ax
mov dx,offset mess1
call dismess
mov dx,offset buff1
mov ah,10
int 21h
xor si,si
mov si,offset buff1+2
mov bl,offset buff1+1 ;取输入的字符个数
xor bh,bh
call xas
cmp ax,16
ja hv
mov var,al
mov dx,offset mess0
call dismess
mov dx,offset buff
mov ah,10
int 21h
xor si,si
mov si,offset buff+2
cmp byte ptr [si],0dh
je hv
mov bl,offset buff+1 ;取输入的字符个数
xor bh,bh
call xas
mov bx,offset hc
mov cx,64
qc: mov byte ptr [bx],' '
inc bx
loop qc
mov bx,offset hc
sss1: call divdw
cmp bp,10
jb zh
add bp,7
zh: add bp,30h
mov cx,bp
mov byte ptr [bx],cl
inc bx
cmp dx,0
jne sss1
cmp ax,0
ja sss1
mov si,offset hc
mov cx,bx
sub bx,si
xchg bx,cx
test cx,1
jnz sxs1 ;结果为1则转
jmp ssf
sxs1: inc cx
ssf: cmp cx,1
je sf
shr cx,1
sf: mov al,byte ptr [si]
xchg al,byte ptr [bx]
mov byte ptr [si],al
dec bx
inc si
loop sf
mov dx,offset hc
call dismess
hv: call dismes
call newline
jmp start
mov ax,4c00h
int 21h
;子程序功能:显示
dismess proc
push ax
mov ah,9
int 21h
pop ax
ret
dismess endp
;清除输入的缓冲区
dismes proc
push ax
mov ah,0ch
int 21h
pop ax
ret
dismes endp
;字符转化成十进制数
xas proc
call newline ;回车换行
mov cl,byte ptr ds:[bx] ;字符个数给CX
xor ch,ch
xor bp,bp
xor di,di
xor ax,ax
xor dx,dx
s: mov bl,[si]
cmp bl,30h
jb hv
cmp bl,39h
ja hv
and bx,0fh
call ser
add ax,bx
adc dx,di
inc si
loop s
ret
ser proc
push ax
push dx
push cx
xor dx,dx
mov ax,1
mov bp,10
dec cx
jcxz aa
ss1: call mull
loop ss1
aa: mov bp,bx
call mull
mov bx,ax
mov di,dx
pop cx
pop dx
pop ax
ret
ser endp
;回车换行
newline proc
push ax
push dx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
pop dx
pop ax
ret
newline endp
;子程序DIVDW功能:不会产生溢出的除法运算
;参数:AX=DWORD数据的低16位,DX=DWORD数据的高16位,BX=除数VAR
;返回:AX=商低16位,DX=商的高16位,BP=余数
divdw proc
push bx
mov bl,var
xor bh,bh
push ax
mov ax,dx
xor dx,dx
div bx
mov di,ax
pop ax
div bx
mov bp,dx
mov dx,di
pop bx
ret
;ax dx bp 入口参数 返回ax,dx
mull proc
push si
push di
push dx
mov dx,0
mul bp
mov di,dx
mov si,ax
pop ax
mov dx,0
mul bp
;mov cx,dx
mov dx,ax
mov ax,si ;AX 低位
add dx,di ;DX 高位
;adc cx,0 ;CX 更高位
pop di
pop si
ret
code ends
end start
- [zaixuexi] 我以为是a0=0,a1=1,没仔细看 02/12 09:23
- [yang5731] 不对吧 我的结果应该是对的 N=9时 确实得217 你自己算算。你帮我看看论坛 算法上的程序吧 题 02/11 23:49
- [zaixuexi] 递归不是这么写的哦,我想你肯定没调试过自己写的这代码. 先看C代码吧: unsigned int 02/11 22:58
- [游客] <a href="http://www.playren.com/">整人方法</a> 12/15 17:11
- [wisji8] mov ax,0a0h mul dh mov bx,ax mov ax,2 mul 10/03 16:56
- [yang5731] 谢谢了 课程设计一做出来了 确实不能调用着个····· 08/25 02:50
- [mywiil] 课程设计一要用到这个子程序,这里暂不做评论。 赶紧完成课程设计一吧。 08/21 03:33