【发布时间】:2015-11-13 04:18:12
【问题描述】:
所以我的任务是用汇编代码编写一个程序,它可以发出语句,接收用户输入的字符串。打印该字符串,然后使用 cpu 堆栈将其反转并再次打印。这就是我迄今为止所拥有的。
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
正如您所看到的,这成功地接受了用户输入的输入并显示它,但我真的很难尝试扭转它。
我在这里尝试了这些,这些是我从书中关于反转字符串的一章中复制的。
; 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
但我什么也没得到。
上面写着“你好,(这里是你的名字)”
上面写着“这是你的名字倒过来”
我尝试了几乎所有我能想到的不同的化身,但无济于事。我在我的“字符串”的末尾
【问题讨论】:
-
好的,反转字符串将是您作业的主要部分。您能否向我们展示/告诉我们您尝试过但没有成功的事情?
-
您添加的代码甚至没有使用相同的变量名称。您是否真的尝试将该代码实际集成到您的程序中?
-
是的,我更改了所有引用,以便它可以网格化。
-
我这边所有变量名都正确对应
-
我创建了一个答案,可以帮助您在 Windows 上开始使用 MASM/Irvine32 库。变量不一样。您的反转代码使用 aName 并且您编写的原始代码使用 buffer 。您的原始代码不会保存读取的字符数(用户名中的字符数)。变量 nameSize 未出现在您的原始代码等中。
标签: assembly x86 reverse masm irvine32