#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 .