将输入与汇编中的字符进行比较时出错

Error when comparing input to character in assembly

我正在尝试接受字符 f 或 c 的输入。然后根据打印出一条消息,然而,当我尝试比较我存储在变量中的值与输入值 (conv) 时,它没有产生预期的结果,我也不知道为什么。我将在下面附上该特定部分的代码并解释输出。

;Read and store the user input
    mov eax, 3
    mov ebx, 0
    mov ecx, conv  
    mov edx, 4 
    int 0x80


;Output the letter entered
 mov eax, 4
 mov ebx, 1
 mov ecx, conv
 mov edx, 4
 int 80h
 
 cmp ecx,66h ;comparing with ascii char that has hex val 66h i.e 'f'
 je toFarenheit

toCelcius:
    ;display test message for C
    mov edx, lenTestC    ;message length
    mov ecx, testMsgC    ;message to write
    mov ebx, 1      ;file descriptor (stdout)
    mov eax, 4      ;system call number (sys_write)
    int 0x80        ;call kernel
    jmp exit  

 toFarenheit:
    ;display test message for F
    mov edx, lenTestF    ;message length
    mov ecx, testMsgF    ;message to write
    mov ebx, 1      ;file descriptor (stdout)
    mov eax, 4      ;system call number (sys_write)
    int 0x80        ;call kernel

exit:
        mov eax, 1      ;system call number (sys_exit)
        int 0x80        ;call kernel

section .bss
res resb 4
conv resb 4

尽管 ecx 中的输入是 f 并且它正在与 66h 进行比较(也是 f),但对于 je 语句,它的计算结果不为真,因此不会跳转到华氏度,因此 toCelcius 块运行,然后程序跳转退出然后结束

ecx 或低字节 cl 中的值不对应任何 ASCII 代码点。 ecx 中的值用于将指向内存的指针传递给系统调用。因此,可以在 conv 缓冲区的第一个字节中找到 ASCII 码。此外,您不必自己将字母转换为数字代码,NASM 允许在单引号中指定字母以自动插入数字代码。因此,您的比较应该如下:

cmp byte [conv], 'f'