Ниже приведен мой код. Блок в hex2dec успешно работает для преобразования одного шестнадцатеричного числа в десятичное число. Было бы очень полезно, если бы кто-нибудь мог указать, где я ошибался в использовании массива. Благодарю.Преобразование массива шестнадцатеричных чисел в десятичные числа Intel 8086 Язык сборки
DATA SEGMENT
NUM DW 1234H,9H,15H
RES DB 3*10 DUP ('$','$','$')
SIZE DB 3
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA, CS:CODE
START:
MOV AX, DATA
MOV DS,AX
MOV DI,0
LOOP3:
MOV AX,NUM[DI]
LEA SI,RES[DI]
CALL HEX2DEC
LEA DX,RES[DI]
MOV AH,9
INT 21H
INC DI
CMP DI,3
JL LOOP3
MOV AH,4CH ; end program
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
JG LOOP1
ADD AL,30H
MOV [SI],AL
LOOP2:
POP AX
INC SI
MOV [SI],AL
LOOP LOOP2
RET
HEX2DEC ENDP
END START
я переставлял INC DI с ADD, как предложено вами, а также изменен RES, чтобы он всегда работал как буфер. Тем не менее он дал неверный ответ. – Anurag
Вы завершили строку с символом ** $ ** для каждого вывода? –
Вы уверены, что ваш ассемблер не требует, чтобы вы писали 'MOV AX, @ DATA'' MOV DS, AX'? Поэтому добавление ** @ **. –