код компилируется нормально [NASM
]код падает во время исполнения (Монтаж)
Но как только я ввода моего первого значения он выходит из строя
Я не знаю, что случилось, цель состоит в том, чтобы строка ввода и вывода в обратной последовательности, в то время как все в цикле, чтобы повторить, если пользователь говорит да («Y» или «Y»)
**.DATA
; Initialized Data Definitions
strlength EQU 40
PromptStr dd "Please input a string (must be less than 40 characters long): ", 0
OutputStr dd "The reverse string is: ", 0
AgainStr dd "Would you like ot try again? ('Y' or 'y' for yes): ", 0
.UDATA
; Uninitialized Data Definitions
string resb strlength
.CODE
; Program Code
.STARTUP
nwln ; start output at a new line
PutStr PromptStr
nwln
while:
GetStr string
mov EBX, string
loop_in:
push dword[EBX]
add EBX, 4
cmp dword[EBX], 0
jnz loop_in
loop_out:
XOR EBX, EBX
pop EBX
PutCh [EBX]
cmp dword[EBX], 0
jnz loop_out
nwln
PutStr AgainStr
GetStr EBX
mov AL, [EBX]
cmp AL, 'Y'
jz while
cmp AL, 'y'
jz while
Pause
.EXIT**
Я изменил первый цикл для
loop_in:
mov AL, [EBX]
push byte[AL]
add EBX, 4
cmp byte[AL], 0
jnz loop_in
и им получать эту ошибку «ошибка: недопустимый эффективный адрес»
Когда я изменяю «байты»
loop_in:
push byte[EBX]
add EBX, 4
cmp byte[EBX], 0
jnz loop_in
я получаю «ошибка: неправильное сочетание опкода и операндов»
для линии {добавьте EBX, 4}
Таким образом, я изменил
loop_in:
push EBX
inc EBX
cmp byte[EBX], 0
jnz loop_in
loop_out:
XOR EBX, EBX
pop EBX
PutCh [EBX]
cmp byte[EBX], 0
jnz loop_out
и теперь он собирает, и я получаю это далеко
Please input a string (must be less than 40 characters long):
asdf
fdsaêë
, прежде чем он выходит из строя в окнах
Используйте отладчик, ступая в инструкции машины. 'PutStr' не является инструкцией ассемблера. –
с использованием файла макроса – BKreger
Затем покажите файл макроса или, по крайней мере, ссылку на него. –