Assembly 如何使用GNU GAS中的字符文字来替换数字?
例如,我想写一些类似于Assembly 如何使用GNU GAS中的字符文字来替换数字?,assembly,gnu-assembler,Assembly,Gnu Assembler,例如,我想写一些类似于'a'的东西,而不是像在C中那样写0x61 手册在中提到了它们:但是没有一个例子,我不确定我是否理解 /* Immediate. Without the `$`, does a memory access, and segfaults! */ mov $'a, %al /* al == 0x61 */ /* Memory. */ mov c, %al /* al == 0x62 */ c: .byte 'b /* Space character works. */ m
'a'
的东西,而不是像在C中那样写0x61
手册在中提到了它们:但是没有一个例子,我不确定我是否理解
/* Immediate. Without the `$`, does a memory access, and segfaults! */
mov $'a, %al
/* al == 0x61 */
/* Memory. */
mov c, %al
/* al == 0x62 */
c: .byte 'b
/* Space character works. */
mov $' , %al
/* al == 0x20 */
/* Backslash escapes work. */
mov $'\n , %al
/* al == 0x0A */
实际上有一个例子:
我不喜欢这种语法,原因如下:
- 不能很好地使用C预处理器:
失败,因为cpp将宏($'a)
视为字符文本“
- 可能会生成尾随空格作为
,这很难观察到$”
- 不象C
- 不能很好地使用C预处理器:
失败,因为cpp将宏($'a)
视为字符文本“
- 可能会生成尾随空格作为
,这很难观察到$”
- 不象C
“
是可选的,您不必忽略它。(我还没意识到你甚至可以省略它)mov$'a',%al
汇编很好,这是我通常使用的。但不幸的是,mov$'abcd',%eax
不像NASM那样被接受。ab
部分看起来像标签97
的向后参考,像1b
但带有a
的ASCII码。因此,您会收到奇怪的错误消息。关闭“
是可选的,您不必忽略它。(我还没意识到你甚至可以省略它)mov$'a',%al
汇编很好,这是我通常使用的。但不幸的是,mov$'abcd',%eax
不像NASM那样被接受。ab
部分看起来像标签97
的向后参考,像1b
但带有a
的ASCII码。所以你会收到奇怪的错误信息。
.byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.