题目:把一个65535以内的十进制数转换成十六进制形式,并送显示,如:
输入 65535
输出 FFFF
6楼的大哥写的都对,但我是初学者,看不大懂,有哪位能帮我解释下?拜托了~!
[此贴子已经被作者于2006-12-10 21:15:22编辑过]
code segment
assume cs: code
org 100h
start:
MOV bx, 0
input : MOV ah, 01
int 21h
cmp al, 0dh
jz write ;
sub al, 30h
MOV cl, al
MOV ch, 0
MOV ax, bx
MOV bx, 0ah
mul bx ;乘以0AH而不是10H,一直理解错就在这里。
MOV bx, ax
add bx, cx
jmp input
write : MOV dl, 0dh
MOV ah, 02h
int 21h
MOV dl, 0ah
MOV ah, 02
int 21h ; 输出回车和换行
;例如我们输入“65535”,到这里为止BX中就是0FFFFH
MOV dh, 2
CC : MOV si, 2
BB: MOV AH, 0
MOV AL, BH ;BX中的BH给AL,那这时候AX变成了00FFH
MOV CL, 4
SHL AX, CL ;AX变成0FF0H
cmp ah, 10 ;AH=0FH
MOV BH, al ;BH=0F0H
jC disp ;AH小于,则CF=1,则跳转DISP
add ah, 7 ;这里是为了A到F的输出
disp: add ah, 30h
MOV dl, ah
MOV ah, 02
int 21h
dec si ;循环1次
mov cx, si
jcxz disp1
jmp bb
disp1 : MOV bh, bl
dec dh ; 像做BH一样处理BL
jnz cc
EXIT: MOV AH, 1
INT 21H
MOV AH, 4CH
INT 21H
code ends
end start
[此贴子已经被作者于2006-12-12 20:12:49编辑过]