汇编网首页登录博客注册
yang5731的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
友情链接

[2011-02-13 17:08] 十进制转换成多种进制的小程序

;请编写一个实现多种数制转换的小程序
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
评论次数(0)  |  浏览次数(780)  |  类型(章节要点) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码