问题标签 [yasm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1440 浏览

assembly - yasm movsx, movsxd 操作数 2 的大小无效

我正在尝试使用 yasm 组装下面的代码。我在 yasm 报告错误“错误:操作数 2 的大小无效”的地方添加了“此处”注释。为什么会发生此错误?

0 投票
1 回答
91 浏览

assembly - 在 yasm 中为 ELF32 部分指定物理地址?

我正在尝试使用 yasm 构建一个简单的 ELF 程序。但是,我不知道如何让它以 .TEXT 部分为目标,以便它的 VMA 地址从 0x1000 开始,而不是 0。我尝试使用 START 和 ORG 指令,但这些仅在定位时似乎有效斌,不是精灵。这可以在yasm中做到吗?

0 投票
0 回答
155 浏览

assembly - YASM:不能在 64 位模式下应用 32 位绝对重定位

相关代码:

yasm 构建错误:

我对这些 x64 asm 代码知之甚少,有人可以帮我修复paddd指令中的这个错误吗?

0 投票
2 回答
2117 浏览

assembly - 带有 64 位指令的 Yasm

我正在尝试为使用64 位寄存器的 Intel 语法编写的 x86_64 汇编源代码。我使用以下命令行标志:

我不断收到以下错误:

所以,我在 stackoverflow 上看到了一个类似的问题,以及网络上的大量资源表明这个问题可以通过指定“BITS”指令来解决,特别是:

问题是,我不清楚这甚至意味着什么。我不明白什么是“指令”。这似乎是您需要在汇编代码本身中指定的内容。但是在这种情况下,我不控制代码,所以我只是试图找到一个命令行标志来组装它。

有没有办法BITS在我可以传递给 yasm 的命令行标志中指定指令?

0 投票
0 回答
58 浏览

assembly - 在yasm中,定义一个内容等于宏参数值的字符串

在宏内部,我想声明一个字符串,其值等于宏参数的文本值。

例如,我想要类似的东西:

宏扩展后应该导致装配:

这将组装到带有尾随空值的字符串“bar”。

0 投票
0 回答
951 浏览

linux - 汇编数字列表的最小值、中间值、最大值、总和和整数平均值

我需要创建一个简单的 x96-64 汇编语言程序来计算数字列表的最小值、中间值、最大值、总和和整数平均值。当我尝试组装时,它给了我错误。到目前为止我的代码:

使用 YASM 组装时遇到的错误类似于:

为什么我会收到这些错误,我该如何解决?

0 投票
0 回答
119 浏览

macos - 在 Yasm 中声明变量

这是一个简单的程序:

问题是变量a包含的值与 18 不同。这lldb向我展示了:

(lldb) pa
(void *) $0 = 0x0000000000001412
(lldb) pb
(void *) $1 = 0x0000000000000014
(lldb) p --format decimal a

有什么想法吗?我知道如果我声明adq,它会好的,但我想了解它为什么会发生。

0 投票
0 回答
265 浏览

assembly - x86-64汇编shell排序算法转换

我一直在研究这个汇编程序来对数字列表进行排序,似乎我正在遵循 shell 排序的逻辑,但是当我运行它时,它会连续运行,因此在我的排序中存在一个问题,我正在制作一个错误?我很确定以 36 为基数的整数宏可以工作,但我需要让排序工作,从头开始重写并遇到同样的问题。最初我使用的是整个 300 列表,我通过循环获得了大约 6 次运行的正确值,但我在某个时候遇到了问题,决定将 lst 缩短为 5 并重写。

0 投票
0 回答
263 浏览

macos - 在 macOS 上使用 brk 系统调用,Yasm

我一直在尝试找到一种brk在 macOS 上的 Yasm 程序中使用系统调用的方法。我查看了syscall.inc该系统调用的文件,但在那里找不到。brk在 macOS 上有什么替代方案吗?

0 投票
1 回答
649 浏览

assembly - YASM(x86_64架构)中的有符号乘法后跟有符号除法

我正在为处理器架构使用yasm汇编程序。x86_64假设我已经在该部分中定义了三个数字.data

我想要做的是将有符号双字dVar1乘以有符号字,dVar2然后再除以有符号字节bVar3

下面我将参考本书介绍我的“解决方案”,以了解我为什么要执行每个步骤。问题在文末。

dVar1 * wVar2(有符号)

我没有看到任何明确的规则,即乘法仅适用于相同大小的数字。但是看到一些隐含的。这就是为什么我使用转换wVar2

现在“它们”的大小相同,所以我只是将它们相乘:

...例如,将ax(16 位)乘以字操作数(也是 16 位)的结果提供双字(32 位)结果。然而,结果并没有放在eax中(这可能更容易),它放在两个寄存器中,dx用于高阶结果(16 位)和ax用于低阶结果(16 位),通常写为dx:ax(按照惯例)。

正如我正确理解的那样,结果现在在edx:eax.

edx:eax / bVar3(签名)

...被除数需要D寄存器(用于高阶部分)和A(用于低阶部分)...如果执行了先前的乘法,则DA寄存器可能已经正确设置(这是我的案例[OP的注释])。

...此外,必须将A以及可能的D寄存器组合用于被除数。

  • Byte Divide: ax for 16-bits
  • 字除法:dx:ax用于 32 位
  • 双字除法:edx:eax用于 64 位(这是我的情况 [OP's note])
  • 四字除法:rdx:rax for 128-bits

因此,最初我转换bVar3为双字,然后将其分开:

整个代码然后

我使用调试器并查看正确答案:

但我不确定以下几点。

  1. 真的有必要做我做过的那些步骤吗?它是“尽可能少的行数”解决方案吗?
  2. 这是正确的解决方案吗?我的意思是我可能在这里犯了一个错误或错过了一些重要的事情。

PS 也许这个问题更可能是 CodeReview SE 问题。如果你也这么认为,请告诉我。