我是汇编语言的新手,我在一些初学者问题上遇到了一些麻烦。我正在尝试编写一个将char *从低级转换为大写的函数。在我的代码中,我编写了一个if语句来检查所选字符是否位于小写字符的ascii边界之间。关于这个问题,我有2个问题。一个是我在if语句中不断收到有关我使用的其中一个错误的编译器错误。其次,我计划迭代整个char *转换每个字符,如果它在必要范围内。使用循环我怎么能这样做?任何帮助都会很棒我真的很感激!谢谢!
void toUpper(char *string) {
__asm{
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
PUSH ESI
PUSH EDI
MOV EBX, string
/* Your code begins below this line. */
mov eax, dword ptr[ebx]
cmp eax, 97d
jl ELSE
cmp eax, 122d
jg ELSE
sub eax, 32d
jmp END_IF
END_IF:
/* Your code ends above this line. */
POP EDI
POP ESI
POP EDX
POP ECX
POP EBX
POP EAX
}
}
答案 0 :(得分:0)
您似乎正在使用32位寄存器,即EAX
来比较由EBX
(使用dword ptr[ebx]
)寻址的明确定义的32位数据。必须使用8位数据,因为ASCII字符的长度始终为1个字节。因此,假设ELSE
标签已在程序中的某处定义,则正确的代码为:
void toUpper(char *string) {
__asm{
push eax
push ebx
push ecx
push edx
push esi
push edi
mov ebx, string
/* Your code begins below this line. */
mov al, byte ptr[ebx]
cmp al, 97d
jl ELSE
cmp al, 122d
jg ELSE
sub eax, 32d
jmp END_IF
END_IF:
/* Your code ends above this line. */
pop edi
pop esi
pop edx
pop ecx
pop ebx
pop eax
}
祝你好运。