高手帮忙解释一个十进制转十六进制的汇编程序

来源:百度知道 编辑:UC知道 时间:2024/06/10 05:50:42
我刚开始学习汇编,很多不懂,下面这个是十进制转十六进制的汇编程序,能正确运行,但是有很多地方不懂,谁能帮忙解释下代码.
data segment
str db 0ah,0dh
num db 4 dup(?),'H$'
tab db '0123456789ABCDEF'
data ends
code segment
assume cs:code,ds:data
begin: mov ax,data
mov ds,ax
xor bx,bx
mov cx,10
next: mov ah,1
int 21h
cmp al,0dh
jz conv
push ax
mov ax,bx
mul cx
mov bx,ax
pop ax
and al,0fh
xor ah,ah
add bx,ax
jmp next
conv: mov ax,bx
mov ch,4
lea bx,tab
mov cl,4
lea si,num
lopa: rol ax,cl
push ax
and ax,000fh
mov [si],al
inc si

data segment
str db 0ah,0dh
num db 4 dup(?),'H$'
tab db '0123456789ABCDEF'
data ends
code segment
assume cs:code,ds:data
begin: mov ax,data
mov ds,ax ;初始化代码段
xor bx,bx
mov cx,10 ;进制
next: mov ah,1
int 21h
cmp al,0dh
jz conv ;如果是回车,表示输入结束,转换开始
push ax ;保存输入值,当然还有AH,因为堆栈的存取必须以字为单位
mov ax,bx
mul cx
mov bx,ax ;将先前的结果向上推一位
pop ax ;取回本次输入
and al,0fh ;屏蔽掉无用位,类SUB AL,30H
xor ah,ah ;高位归零
add bx,ax ;合并本次输入
jmp next
conv: mov ax,bx ;开始转换
mov ch,4
lea bx,tab ;没有见这个直接定址表起什么用啊!!!
mov cl,4
lea si,num
lopa: rol ax,cl ;把高4位移到低4位