我是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中的字符?非常感谢你!