Язык ассемблера: двукратный пользовательский ввод (mix char и int)
Я новичок в программировании на ассемблере, и мне нужна помощь в понимании и исправлении кода, с которым я боролся: я хочу предоставить пользовательский ввод:
Подсказка 1: введите подсказку о значении прочитанного назначения 2: введите значение считывания получателя Показать расстояние и пункт назначения.
Я использую VS2012 с библиотеками Irvine32 на оборудовании x64. Я компилирую как x32.
Проблема Код компилируется и собирается. Но вывод не правильный. Первая подсказка отображается только без ввода. Второе приглашение "Расстояние" отображается с разрешенным вводом. Если я изменю первый запрос на "readInt" вместо "readString", я получу приглашения в обоих, но я получу ошибку "Invalid Integer". Почему это? Как это исправить, а также отображать входные значения.
Мой код
INCLUDE irvine32.inc
;*************************************************************************
.data
queryDest byte "Destination", 0
queryDist byte "Distance", 0
destination dword ?
distance dword ?
.code
main proc
call clrscr
mov edx, offset queryDest
call writeString
call readString
mov destination, eax
call crlf
mov edx, offset queryDist
call writeString
call readInt
mov distance, eax
call crlf
Call WaitMsg ;causes a wait for a key to be pressed
exit
main endp
end main
Токовый выход
Место назначения
Distance50
Нажмите любую клавишу для продолжения...
1 ответ
Не проверено, потому что мой VS 2012 отказывается работать (работает над этим). Ваша главная проблема в том, что destination
должна быть строкой, а не числом:
INCLUDE irvine32.inc
;*************************************************************************
.data
queryDest byte "Destination=", 0
queryDist byte "Distance=", 0
destination byte " " ; LENGTH 21.
distance dword ?
.code
main proc
call clrscr
;READ DESTINATION.
mov edx, offset queryDest
call writeString ;DISPLAY MESSAGE.
mov edx, offset destination ;STORE STRING HERE (ZERO TERMINATED).
mov ecx, 20 ;MAX CHARS TO READ.
call readString ;STORES STRING WHERE EDX POINTS.
call crlf
;READ DISTANCE.
mov edx, offset queryDist
call writeString ;DISPLAY MESSAGE.
call readInt
mov distance, eax
;DISPLAY DESTINATION AND DISTANCE.
call crlf
call crlf
mov edx, offset destination ;EDX POINTS TO STRING TO DISPLAY.
call writeString ;DISPLAY DESTINATION.
call crlf
mov eax, distance ;NUMBER TO DISPLAY.
call writeInt ;DISPLAY DISTANCE.
call crlf
Call WaitMsg ;causes a wait for a key to be pressed
exit
main endp
end main