Могу ли я положить все в стек в TASM?
Я новичок в сборке, и любая помощь будет оценена. Вот мой код:
.MODEL SMALL
.DATA
Textstring db "I'm a string$"
.CODE
START:
mov dx, Textstring
push dx
getche:
mov ah, 06h
int 21h
push al
END START
Я продолжаю получать сообщения о том, что типы операндов не совпадают в строке 8, а аргумент операции или инструкции имеет неправильный размер в строке 13.
Я думаю, проблема в том, что я пытаюсь подтолкнуть AL
в стек. Есть ли в любом случае я мог бы толкнуть содержимое AL
в стек? Я пытаюсь создать код, в котором я запрашиваю у пользователя символ и возвращаю этот символ обратно в вызывающую его программу.
2 ответа
Вы не можете подтолкнуть AL
в стек, потому что каждый элемент стека является словом и AL
Размер байта.
Что вы можете сделать, это сброс AH
ценность и толчок AX
в стек так AL
будет содержать значение, которое вы хотите, и AH
будет просто 0, что не повлияет на данные в AL
,
Вы спрашивали об этих 2 ошибках.
типы операндов не совпадают в строке 8
Когда ты пишешь mov dx, Textstring
TASM захочет закодировать операцию чтения байта из памяти. Это байт, потому что вы определили строку текста с помощью db
директивы. Ошибка не существовала бы, если бы вы написали
mov dl, Textstring
Если вы хотите получить указатель на текст в Textstring, вы должны написать вместо
mov dx, offset Textstring
аргумент операции или инструкции имеет недопустимый размер в строке 13.
ни push
ни pop
принять операнд размером в байт. Архитектура просто не позволяет этого.
Выдвинуть содержимое регистра байтового размера (например, AL
), вы просто нажимаете соответствующий регистр размером слова (AX
).
Позже, когда ты pop
Эти данные размером с слово, вы просто игнорируете часть, которая не содержала полезного значения. Это может потребовать от вас, чтобы тщательно выбрать регистр, чтобы попасть в!