汇编语言:编写一个程序,显示AL寄存器中的两位十六进制数

如题所述

data segment

data ends

stack segment
db 256 dup(?)
stack ends

code segment
assume cs:code, ds:data, ss:stack

start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax

mov al, 0c5h
call disp_al

mov al, 065h
call disp_al

mov ah, 04ch
int 21h

;disp_al子程序将寄存器AL中的数值以十六进制显示出来
disp_al:
mov dh, al

mov bx, 2 ;bx用于循环,一个字节最多可以显示成两个字符,所以循环次数是2次

mov cl, 4 ;首先显示高4位,在下次循环进再显示低4位
shr al, cl
again:
and al, 0fh
cmp al, 9
ja hex
add al, '0' ;如果小于9,加上字符'0'将数字转换字符
jmp disp
hex:
sub al, 10 ;如果大于9,先减去10,再加上字符'A',就可以将数字转换成相应的'A'~'F'
add al, 'A'
disp:;利用中断显示字符
mov dl, al
mov ah, 02h
int 21h

mov al, dh

dec bx
test bx, bx
jnz again

ret

code ends
end start
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-09
寄存器是16位的吗?
mov a,al
and a,0ffh
mov ax,a 做与运算取出低8位
call disp 调用显示子程序

mov a,al
and a,0ff00h 做与运算取出高8位
mov bx,a
swap bx 高低交换位置
call disp 调用显示子程序
第2个回答  2012-05-05
AAM
PUSH AX
MOV AH,2
POP BX
MOV DL,BH
ADD DL,30H
INT 21H
MOV AH,2
MOV DL,BL
ADD DL,30H
INT 21H
相似回答