HEX ->DEC

Здравствуйте, уважаемые мудрецы-програмеры.Прошу подсказать, как в ASM реализовать перевод чисел из шест. системы в десятичную? Я сумел намучить только ввод чисел. А дальше как?само преобразование?
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG 
 
MAIN PROC NEAR 

MOV AX,CS
MOV DS,AX
A: MOV AH,0Ah
MOV DX,offset KEYB_MAX
INT 21H
MOV AL,KEYB_LEN
CMP AL,0
JZ A
MOV CL,KEYB_LEN
MOV BX,offset KEYB_DATA
A2: MOV AH,2
MOV DL,DS:[BX]
INT 21H
INC BX
LOOP A2

c: jmp c
ret

RET
MAIN ENDP
KEYB_MAX DB 5
KEYB_LEN DB ?
KEYB_DATA DB 6 DUP(?)
CODESG ENDS
END
1 ответ

могу привести 32 битный код под FASM. я думаю ты сможешь его перевести в 16 битный.функция dword_to_STR конвертирует число размером в двойное слово в строку
dword_to_STR:
;на входе EAX число 32 бит
; ESI указатель на строку
; *** разрядность результата
 pushad
 cmp ***, 16
 ja .end
 xor ecx, ecx
 jmp .repeat

.mesto db 32 dup (0)

 .repeat:
 xor edx, edx
 div ***
 mov edi, eax
 mov al, dl
 cmp al, 10
 sbb al, 69h
 das
 mov byte [.mesto+ecx], al
 mov eax, edi

 inc ecx
 cmp eax, 0
 jz .endrep
 jmp .repeat
 .endrep:
 mov edi, .mesto
 add edi, ecx
 .copyrep:
 dec edi
 mov dl, byte [edi]
 mov byte [esi], dl
 inc esi

 loop .copyrep
 .end:
 popad
 ret
хочу подметить что она может выводить число в любой системе счисления (разумеетя от 2 до 16), само число может быть размером в слово (AX) или байт (AL), главное что бы старшие части регистра EAX были нулями пример использования:
simv db 32 dup (0),0 

 mov eax,0F12CD44h
 mov esi, simv
 mov ***, 16
 call dword_to_STR

 push 0
 push simv
 push simv
 push 0
 call [MessageBox]
с тебя пиво,...т.е. отзыв (хотя всё равно твой отзыв ничего не даст)