汇编语言:十进制转十六进制(子程序设计)

目的

编写十进制到十六进制转换程序。要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来

设计思路

设计子函数readchar用于读入操作,利用循环语句input进行循环读入,对读入的每一个字符进行判断,若读入字符在’0’-'9’之外,则结束输入,且每一次输入后将前一次输入的总和×10。设计子函数convert用于将bx中保存的10进制数字转化为16进制并输出。

程序代码

assume cs:code,ds:data

data segment
   str1 db 0AH,'Input decimal number: ','$' 	 
   str2 db 0AH,'hexadecimal number: ','$' 
data ends

code segment
start:
    mov ax,data
    mov ds,ax
main:
    call readchar
    call convert
    mov ah,4ch
    int 21h
readchar proc near:    ;读入函数
    lea dx,str1
    mov ah,09
    int 21h
    mov bx,0
  input:                   
    mov ah,01h
    int 21h
    cmp al,'9'        ;输入数字之外的字符,就结束输入
    ja exit
    cmp al,'0'
    jb exit
    sub al,'0'        ;把字符转换为数字
    mov ah,0h    ;避免ah数值的影响
    mov dx,ax
    mov ax,bx
    mov bx,dx
    mov cx,0ah
    mul cx           ; 把之前输入的数乘以10,加上本次输入,保存到bx
    mov dx,ax
    mov ax,bx
    mov bx,dx
    add bx,ax
    jmp input

    exit:
    ret
readchar endp

convert proc near:    ;转换函数
    lea dx,str1
    mov ah,09
    mov ch,04h
  loopc:
    mov cl,04h
    rol bx,cl
    mov al,bl
    and al,0fh
    add al,30h
    cmp al,'9'       
    jbe printf        ;字符为'9'之下,直接显示。
    add al,07h        ;大于9的数字转换为'A'-'F'

  printf:
    mov dl,al
    mov ah,2
    int 21h
    dec ch
    jne loopc         ; 单独用ch进行循环操作
    ret
convert endp

code ends
    end start

运行结果:

汇编语言:十进制转十六进制(子程序设计)_第1张图片

你可能感兴趣的:(汇编语言)