Assembly 使用寄存器内容作为标签
想象一下: 假设ECX==3 我想要数字“65”,即ASCII“A”,作为我代码的标签:Assembly 使用寄存器内容作为标签,assembly,x86,nasm,labels,Assembly,X86,Nasm,Labels,想象一下: 假设ECX==3 我想要数字“65”,即ASCII“A”,作为我代码的标签: ;NB This is an example/code snippet mov ecx, 65 jmp .%+[ecx] ... .A: [do stuff here] 当我使用上述思想编译代码时,它给出了以下信息: error: comma, colon or end of line expected 我想问的是我犯了什么语法错误——我很确定我遵循了NA
;NB This is an example/code snippet
mov ecx, 65
jmp .%+[ecx]
...
.A:
[do stuff here]
当我使用上述思想编译代码时,它给出了以下信息:
error: comma, colon or end of line expected
我想问的是我犯了什么语法错误——我很确定我遵循了NASM手册第3.1章中概述的标签定义规则:
“…唯一可用作标识符第一个字符的字符是字母、。(具有特殊含义:见第3.9节),u.和?…”
此外,我还问是否有更有效的方法来解决我的问题?您不能在汇编中“计算”标签。但是你可以计算地址
此处,ecx
将用作包含多个标签对应地址的表的索引:
mov ecx, 65
jmp [table - 'A'*4 + ecx*4]
...
table:
dd .A ; address of .A:
dd .B ; address of .B:
dd .C ; address of .C:
...
.A:
[do stuff here]
.B:
[do stuff here]
.C:
[do stuff here]
谢谢你的帮助,阿列克西。我想把65移到EAX中也证明了关于名称中运算符优先级的另一点(即[table-'A'*4+ecx*4]),即乘法是否发生在加法之前。我不认为NASM对+-*/具有异常的优先级。