请大大帮忙解读一下这个程序的BX和AX的功能
data segmentinput db 0ah, 0dh, 'Please input a Dioxde number:', '$'
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 ;操作数自身异或,值不变,可使进位标志CF=0, 可以清0。速度比赋值快.还可以做位运算。
mov cx,10
mov dx, offset input
mov ah, 9
int 21h
next: mov ah,1 ;1号功能:按下任何键,将其对应字符的ASCII码送入AL中,并在屏幕上显示该字符
int 21h
cmp al,0dh
jz conv ;判断al是否等于0DH,为什么是0Dh???
push ax
mov ax,bx ;把bx=0移入ax,ax也未零了???
mul cx ;0和CX相乘???
mov bx,ax ;零移入零???
pop ax
and al,0fh ;取AL低位
xor ah,ah ;AL高位清零
add bx,ax ;AX移入BX
jmp next ;在AL=0dH前一直执行NEXT循环
conv: mov ax,bx
mov ch,4
lea bx,tab
mov cl,4
lea si,num
lopa: rol ax,cl ;AX左循环四位
push ax
and ax,000fh ;取AX低四位
xlat ;把待查表格的一个字节内容送到AL累加器中
mov [si],al ;表格数据存放入num
inc si ;指向num下一位
pop ax
dec ch ;lopa循环4次后退出
jnz lopa
lea dx,str ;换行回车后未退出,继续打印num中数据直到$处退出
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end begin