MASM32直接寻址 - A2070无效指令操作数

时间:2017-10-06 09:39:55

标签: masm cpu-registers masm32 addressing-mode

我是MASM编码的新手。我发现由于缺乏内置函数的知识,很难处理寄存器。

我正在尝试编写一个程序来将输入字符串中的所有字母更改为大写字母。这是我的代码:

.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include msvcrt.inc
includelib msvcrt.lib

.data
InputMsg db "String Input: (At most 20 characters)", 10, 0
OutputMsg db "Your string is ", 0
StringFormat db "%s", 0

.data?
StringData db 20 dup(?)

.code
start:
    invoke crt_printf, addr InputMsg
    invoke crt_scanf, addr StringFormat, addr StringData, 20

    ;Change lowercase letter to uppercase
    lea ecx, StringData
    CounterLoop:
        .if [ecx] >= 97
            .if [ecx] <= 122
                sub [ecx], 32
            .endif
        .endif

        inc ecx
        .if [ecx] != 0
            jmp CounterLoop
        .endif

    invoke crt_printf, addr OutputMsg
    invoke crt_printf, addr StringData
    invoke ExitProcess, NULL
end start

我想使用ecx来存储StringData的有效地址。但是,当我想获取StringData的内容时,发生了A2070错误。

[ecx]不正确吗?如何使用直接寻址获取StringData中的字符?非常感谢你!

0 个答案:

没有答案