Преобразование строки сборки 8086 в число

#assembly #x86

#сборка #x86

Вопрос:

Я хочу преобразовать заданную строку в ее числовое значение в десятичном формате, «123» -> 123, но по какой-то причине я получаю 0 для каждого введенного числа, и я не знаю почему. Переменная apob — это моя строка, а bx должен хранить результат преобразования. Что заставляет мой bx регистр быть равным 0?

 MOV si, 2
MOV ax, 10
XOR bx, bx
wartosc1:
MOV ax, 10
MOV dl, [apob si]
CMP dl, 13
JE  end         
SUB dl, 48
INC si
MUL bx
MOV bx, ax
ADD bx, dx
JMP wartosc1
 

Комментарии:

1. si инициализируется 2 , а затем увеличивается. Если apob это действительно ваша строка, то это не имеет смысла. mul bx уничтожает dx и, следовательно, вашу текущую цифру. Прокомментируйте свой код и используйте отладчик. Кроме того, dh кажется неинициализированным.

2. Я имею в виду, что apob — это массив, определенный таким образом для инструкции INT 21h, AH 10. apob db 6 db 0 УМНОЖЕННЫЙ НА 7 db ‘$’ si инициализируется на 2, потому что именно здесь начинаются мои символы в этом массиве. И он увеличивается каждый раз, чтобы получить новый символ, пока dl не станет 13 (введите). Я считаю, что MUL bx — это 16-битное умножение, поэтому его результат сохраняется в DX: AX, но поскольку мой результат невелик, он будет сохранен в AX. О, подождите, так это сделает DX = 0 и, следовательно, DL = 0. Похоже, это должно быть проблемой. Спасибо, что указали на это.

Ответ №1:

Попробуйте использовать это

 xor bx,bx
lea si,apob


wartosc1:
xor dx,dx
MOV dl, [si]
CMP dl,'

Ваш ответ будет сохранен в bx


Комментарии:

1. Вы могли бы использовать CX вместо того, чтобы сохранять / восстанавливать DX вокруг MUL.

2. Если вы внимательно посмотрите на код и комментарии OP, вы увидите, что текстовые цифры начинаются с apob 2 .

JE endpr
SUB dl, 48
push dx

mov ax,10
MUL bx
MOV bx, ax

pop dx

ADD bx, dx

INC si

JMP wartosc1
Ваш ответ будет сохранен в bx

Комментарии:

1. Вы могли бы использовать CX вместо того, чтобы сохранять / восстанавливать DX вокруг MUL.

2. Если вы внимательно посмотрите на код и комментарии OP, вы увидите, что текстовые цифры начинаются с apob 2 .