汇编语言程序设计——分支结构例7

汇编语言程序设计——分支结构例7

设计目标

十进制与十六进制转换。将键盘输入的一个两位十进制数以十六进制形式显示在屏幕上。可多次输入直到按下 ESC 键。

设计思路

(1)用 DOS 的 1 号功能输入一个两位数,以回车结束;

(2)将输入的数字减去 30H 保存在 X 单元,第 1 个数字扩大 10 倍再与第 2 个数相加,变为十进制数;

(3)用 9 号功能显示提示信息;

(4)将十进制数除以 16,形成十六进制数;

(5)再将十六进制数转换为 ASCII 码,用 2 号功能显示。

;5-7.asm  可多次输入一个两位十进制数并以十六进制显示出来,按ESC键退出。
data segment
    x db 2 dup(?)
    mess1 db 0dh,0ah,'decimal=$'
    mess2 db 0dh,0ah,'HEX=$'
data ends
code segment
    assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax
let0:
    mov x,0
    mov x+1,0
    mov si,0
    mov dx,offset mess1    ;显示提示1
    mov ah,9
    int 21h
let1:
    mov ah,1            ;键盘输入十进制数
    int 21h
    cmp al,27           ;是ESC键?
    jz out1             ;是,退出
	
    cmp al,0dh          ;回车?
    jz let2             ;是,转let2
	
    and ax,000fh        ;去掉ASCII码
    mov x[si],al        ;保存到x
    inc si              ;统计输入的位数
    jmp let1
let2:
    mov dx,offset mess2 ;显示提示2
    mov ah,9
    int 21h
    cmp si,1            ;判断输入的位数
    ja let3             ;输入了两位数转let3
    mov bl,x
    mov cl,1
    jmp let5            ;只输入1位数则直接去显示
let3:
    mov al,x
    mov cl,10
    mul cl              ;形成两位十进制数
    add al,x+1
    mov ah,0
    mov bl,16           ;除以16,转换为十六进制
    div bl
    mov bx,ax           ;AH为余数即低位,AL为商即高位
    ;分别显示十六进制高位、低位
    mov cl,2
let4:
    cmp bl,10           ;判断十六进制数码
    jl let5
    add bl,7            ; ≥10 则加7(是字母A~F) 
let5:                                
    add bl,30h          ;加上ASCII码
    mov dl,bl
    mov ah,2            ;显示
    int 21h
    mov bl,bh           ;再去显示低位
    dec cl
    jnz let4
    jmp let0            ;返回let0继续输入
out1:
    mov ah,4ch
    int 21h
code ends
    end start

运行结果:

汇编语言程序设计——分支结构例7_第1张图片

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