Итак, мое задание состояло в том, чтобы написать программу в ассемблере, которая могла бы сделать инструкцию, получить строку, введенную пользователем. Распечатайте эту строку, затем отмените ее, используя стек процессора, и распечатайте его снова. это то, что у меня есть до сих пор.Как отменить и распечатать строку на языке ассемблера
INCLUDE Irvine32.inc
.data
buffer byte 20 DUP(0)
byteCount DWORD ?
Question byte "Please enter your name." ,0
Greeting byte "Hello " ,0
Statement byte " Here is your name backwards"
.code
main proc
mov edx , OFFSET Question
call WriteString
call CRLF
Call CRLF
mov edx, OFFSET buffer
mov Ecx, SIZEOF buffer
call ReadString
push edx
mov EDX ,OFFSET greeting
Call WriteString
pop edx
call WriteString
Call CRLF
Call CRLF
Как вы можете видеть, это успешно принимает введенный пользователем ввод и отображает его, но Im действительно изо всех сил пытается его перевернуть.
Я пробовал здесь, что я скопировал из книги из главы об обратных строках.
; Push the name on the stack.
mov ecx,nameSize
mov esi,0
L1: movzx eax,aName[esi] ; get character
push eax ; push on stack
inc esi
loop L1
; Pop the name from the stack in reverse
; and store it in the aName array.
mov ecx,nameSize
mov esi,0
L2: pop eax ; get character
mov aName[esi],al ; store in string
inc esi
loop L2
Invoke ExitProcess,0
main endp
end main
но я получаю как вывод ничего.
он говорит: «Привет, (вашеимя здесь)»
он говорит: «это ваше имя в обратном направлении»
ив пытался почти все разные ипостаси этого я могу думать и безрезультатно. im в конце моей «строки» здесь
Хорошо, что обратная строка будет основной частью вашего задания. Можете ли вы показать/рассказать нам то, что вы пробовали, что не удалось? –
Код, который вы добавили, даже не использует имена переменных, которые являются одинаковыми. Вы на самом деле пытались фактически интегрировать этот код в свою программу? –
Да, я изменил все ссылки так, чтобы это было сеткой. –