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 字节,每个值 fillsizefill 都是绝对表达式。如果逗号和 @ 987654337@ 被省略,fill 被假定为零。"【参考方案2】:

你可以试试:

.lcomm min, 2

.comm min, 2

在 bss 部分为两个字节(一个字)留出空间。 bss 部分的要点是加载程序将分配空间并将内容设置为零加载,但它不会占用磁盘文件中的空间。

.lcomm 是如果您只需要从使用.lcomm 的文件中引用mincomm 是如果您需要从其他文件中引用min(因此链接器将使其可用于其他文件)。

如果您更喜欢使用数据部分,这会将零放在文件中并占用磁盘空间,那么放在数据部分中的这个应该可以工作:

min:
    .fill 2

【讨论】:

以上是关于NASM TO GAS:对应于 GAS 中的 resw的主要内容,如果未能解决你的问题,请参考以下文章

从 NASM 到 GAS 的翻译

NASM 与 GAS(实际差异)

如何将此代码从 Intel(nasm) 转换为 AT&T(gas) 语法?

1分钟搞清Gas/ Gas Price/ Gas Limit

将 scanf 与 x86-64 GAS 程序集一起使用

LeetCode 774. Minimize Max Distance to Gas Station