Здравствуйте!
Написал небольшую программу, которая которая преобразовывает 16-й код в десятичный с сохранением разрядности.
Но столкнулся с проблемой того, что если в числе есть ноль, то он его не выводит. Как решить эту проблему, до меня не доходит.
#make_COM#
; COM file is loaded at CS:0100h
ORG 100h
MOV BP, 3021
MOV DI, 0
l1:
MOV AX, BP
CMP AX, 9999
JA mCX1
CMP AX, 999
JA mCX2
CMP AX, 99
JA mCX3
CMP AX, 9
JA mCX4
CMP AX, 0
JA mCX5
; Первая цифра
mCX1:
MOV DI, 1
MOV BX, 10000
XOR DX, DX
DIV BX
MOV BP, DX
ADD AX, 30h
MOV DL, AL
MOV AH, 2h
INT 21h
JMP l1
; Вторая цифра
mCX2:
MOV DI, 2
MOV BX, 1000
XOR DX, DX
DIV BX
MOV BP, DX
ADD AX, 30h
MOV DL, AL
MOV AH, 2h
INT 21h
JMP l1
; Третья цифра
mCX3:
CMP DI, 2
JNE st1
MOV AH, 2
MOV DL, 30h
INT 21h
st1:
MOV DI, 3
MOV BX, 100
XOR DX, DX
DIV BX
MOV BP, DX
ADD AX, 30h
MOV DL, AL
MOV AH, 2h
INT 21h
JMP l1
; Четвертая цифра
mCX4:
CMP DI, 3
JNE st2
MOV AH, 2
MOV DL, 30h
INT 21h
st2:
MOV DI, 4
MOV BX, 10
XOR DX, DX
DIV BX
MOV BP, DX
ADD AX, 30h
MOV DL, AL
MOV AH, 2h
INT 21h
JMP l1
; Пятая цифра
mCX5:
CMP DI, 4
JNE st3:
MOV AH, 2
MOV DL, 30h
INT 21h
st3:
MOV DI, 5
MOV BX, 1
XOR DX, DX
DIV BX
MOV BP, DX
ADD AX, 30h
MOV DL, AL
MOV AH, 2h
INT 21h
HLT
stop
Если в значении нет нуля, то все выводится великолепно.