mov edx,offset Prompt1
call WriteString
mov ecx,32
mov edx,offset String1
call ReadString
现在,我该如何访问String1
?如何将其移动到寄存器中以便我可以对其进行移位操作?
例如,
mov eax, edx
shr eax, 1
我遇到的问题是我无法弄清楚如何访问String1
。它似乎没有进入eax寄存器,但是如果我调用WriteString
它会出现,所以我相信它是在EDX中。
答案 0 :(得分:1)
数据从String1
的地址开始读入内存。在最后一个输入字符后面有一个空字节(0)。
因此,如果在call ReadString
之后编写mov edx,offset String1
,则EDX指向字符串的第一个字符。
然后您可以处理字符串。例如,要为每个字符添加1:
call ReadString
mov edx,offset String1
theLoop:
mov al,[edx]
cmp al,0
jz done ; the character is 0, so done
inc al
mov [edx],al
inc edx ; next character
jmp theLoop
done:
因此,如果输入为" 0123abc",则会将字符串更改为" 1234bdc"。
(对于挑剔的人:是的,我知道这可以进行优化。特别是cmp al,0
。但对于初学者来说,考虑比较会更好...我们可以在他们拥有优化之后进行优化牢牢掌握在处理器级别工作。)
答案 1 :(得分:0)
INCLUDE Irvine32.inc
.data
buffer BYTE 21 DUP(0)
byteCount DWORD ?
.code
main PROC
mov edx, OFFSET buffer
mov ecx, SIZEOF buffer
call ReadString
mov byteCount, eax
call writestring
exit
main ENDP
END main