如何在Assembly中使用ReadString?

时间:2014-11-27 00:24:02

标签: assembly masm32

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中。

2 个答案:

答案 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