使用汇编语言转换为大写(如果语句问题)

时间:2014-02-05 05:33:41

标签: assembly masm

我是汇编语言的新手,我在一些初学者问题上遇到了一些麻烦。我正在尝试编写一个将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

}

}

1 个答案:

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

}
祝你好运。