如何将一个字母(保存在字节中)转换为长字母?(NASM组件)



现在我正在尝试将.byte类型的变量(可以保存'a'、'B'、'C'、'D'或'E'的值((十六进制字母(转换为十进制等价值(分别为10、11、12、13、14和15(

.data:
bit: .byte 'A'
result: .long 0
.letters:
movb bit, %ah
movb $'A', %al
subb %al,%ah
movb %ah, result
addl $10, result

但是,当我运行代码时,结果等于我想要的结果+7。我做错了什么?

您用错误的标签nasm标记问题,但代码看起来像gas

如果要将字母"A"、"B"、"C"、"D"、"E">转换为存储在result中的数字10,11,12,13,14,请将十六进制字母加载到寄存器中,例如MOVZX EAX,byte ptr [bit],然后从寄存器中减去常数值"A"并加10。这可以在一个步骤中实现,例如ADD EAX,10 - 'A'
在您的AT&T语法它将是

movzb bit,%eax
addl $10 - 'A',%eax
movl %eax,result

bit包含字母"B"时,result将为11(0x0000000B(等。如果您需要其他十六进制数字0..9,a.-f,请搜索从十六进制转换为

最新更新