NASM TO GAS:对应于 GAS 中的 resw
Posted
技术标签:
【中文标题】NASM TO GAS:对应于 GAS 中的 resw【英文标题】:NASM TO GAS: counterpart of resw in GAS 【发布时间】:2015-01-31 17:14:15 【问题描述】:我的任务是将使用 NASM 的汇编程序转换为 GAS。不幸的是,有很多不匹配的陈述。我已经转换了其中一些,但我仍然无法转换此语句
min resw 1
【问题讨论】:
【参考方案1】:保留 一个 单词(初始化器为 0)非常简单:
min: .word 0
对于 x86,.word
是 16 位的。其他尺寸:.byte
、.long
、.quad
。
如果您想保留一大块,比如 50 个字,请使用 .fill
或 .space
指令:
buff1: .fill 50, 1, 0 # count, size, value
buff2: .space 50, 0 # count (bytes), value (defaults to 0)
对于重复模式大于 1 字节的初始化器,.dcb.size
采用值和长度:
int_array: .dcb.l 50, 12345 # 32-bit integer 12345 repeated 50 times
【讨论】:
gas 有一个.space size,fill
指令,它 " 发出 size
字节,每个值 fill
。size
和 fill
都是绝对表达式。如果逗号和 @ 987654337@ 被省略,fill
被假定为零。"【参考方案2】:
你可以试试:
.lcomm min, 2
或
.comm min, 2
在 bss 部分为两个字节(一个字)留出空间。 bss 部分的要点是加载程序将分配空间并将内容设置为零加载,但它不会占用磁盘文件中的空间。
.lcomm
是如果您只需要从使用.lcomm
的文件中引用min
。 comm
是如果您需要从其他文件中引用min
(因此链接器将使其可用于其他文件)。
如果您更喜欢使用数据部分,这会将零放在文件中并占用磁盘空间,那么放在数据部分中的这个应该可以工作:
min:
.fill 2
【讨论】:
以上是关于NASM TO GAS:对应于 GAS 中的 resw的主要内容,如果未能解决你的问题,请参考以下文章
如何将此代码从 Intel(nasm) 转换为 AT&T(gas) 语法?