我正在网上搜索一段十六进制到十进制的代码,我偶然发现了这个。我对其进行了测试,尽管我不明白为什么,但它运行良好。
DATA SEGMENT
NUM DW 01FH
BUFFER DB 10 DUP ('$')
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV AX,NUM
LEA SI,BUFFER
CALL HEX2DEC
LEA DX,BUFFER
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
HEX2DEC PROC NEAR
MOV CX,0
MOV BX,10
LOOP1:
MOV DX,0
DIV BX ;<--------------------------------
ADD DL,30H ;<----------???
PUSH DX
INC CX
CMP AX,9
JA LOOP1
ADD AL,30H
MOV [SI],AL
LOOP2:
POP AX
INC SI
MOV [SI],AL
LOOP LOOP2
RET
HEX2DEC ENDP
END START
虽然发生了分裂,但这家伙用 DL 代替 AL,就这样把它推入堆栈。这是如何运作的?