Извлечение цифры в конце строки сборки 8086 мАм - PullRequest
0 голосов
/ 11 ноября 2018

Я должен извлечь цифру из регистра si.вот мой код

lea si, userInput
inc si

mov bx, [si]

mov dx, [si+bx]
add dx, 30h
mov ah, 2h 
int 21h

Так что я думаю, что код работает нормально, если я помещаю жесткое значение в регистр dx, например mov dx, [si+2], но если попытаться использовать mov dx, [si+bx], он не работает и не дает ожидаемого выхода

1 Ответ

0 голосов
/ 11 ноября 2018

Предполагая, что ваши userInput указывают на структуру ввода, необходимую для буферизированной функции ввода DOS 0Ah, вот мои рекомендации по исправлению вашего кода:

  • Второй байт содержит количество введенных символов. Вы по ошибке получаете это, как если бы это было слово .
  • Ввод состоит из символов шириной 1 байт . В настоящее время вы получаете его, как если бы они были 2 байта .
  • Поскольку ввод уже состоит из символов , вам не нужно выполнять какие-либо преобразования для него. (Попытка mov dx, 30h) Тот факт, что этот символ может представлять (числовую) цифру, букву, знак пунктуации или что-либо еще, не меняет этого.

Ваш код становится:

lea si, userInput
inc si

mov bl, [si]     ;Number of inputted characters
mov bh, 0        ;Need to zero to be able to use the whole address-register BX next

mov dl, [si+bx]  ;Retrieve the last inputted character (right before the terminating CR)
mov ah, 02h 
int 21h          ;Display the character
...