问题标签 [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 回答
305 浏览

assembly - “000000q”是什么意思?

我正在用这本教科书学习x86_64汇编程序(yasm) 。在那里,我遇到了以下定义文件访问标志的行:

问题是他们的价值观是什么意思?代表什么q

0 投票
2 回答
6313 浏览

assembly - 如何在组装中打印三角形的星星?

我需要得到以下输出:

所以它有 10 行,我的星星将从 1 开始到 10。

目前我得到:

我的代码:

我尝试了又尝试了,但我无法得到我需要得到的东西。

由于所有这些pushpop.

老实说,我不太了解这些。我被告知执行循环需要它们,但我不确定为什么,例如,在函数中star我需要调用外部循环。

我找不到任何有效push的组合pop。我经常得到很多星或每行一颗星或只有一颗星。

我真的很困惑我正在改变哪些位并保持不变。我能够获得所需的输出,但输出永远不会增加。

我能够得到从 10 颗星开始下降到 1 颗星的输出,但从来都不是我想要的。

我究竟做错了什么?我该怎么做这个问题?

0 投票
0 回答
347 浏览

ascii - 如何在 x86_64 汇编器(yasm)中将不可打印的 ASCII 字节传递给 STDIN 文件描述符

问题

假设我有一个x86_64汇编程序(见下文),它在某个时刻yasm通过系统服务请求用户输入。SYS_read该输出在程序中被进一步视为字节数。用户可以轻松地提供与可打印 ASCII 符号对应的所有数字,即从0x200x7f(可能更多)。但是如何提供0x90例如?

几个字符的可能解决方案

我可以使用以下组合来提供所需的数字:

但是当需要输入许多字符时,这种解决方案可能会很繁琐。

程序片段

这是负责从 STDIN 读取的程序部分。

0 投票
1 回答
137 浏览

assembly - 为什么 nasm 和 yasm 为 mov r16, word [r64 - 3] 指令产生 67 个操作码?

x86-64汇编中,我有以下说明

Nasm2.13.03生成:

yasm1.3.0生成:

66 67操作码是修饰符,因此它8B 56 FB本身就是:

我注意到:

还评估为:

我有两个问题:
1)为什么nasm&yasm发出这个67操作码字节填充?(67仅靠它自己不足以减少edxdx,它需要包含66) 2)有没有办法在没有nasm / yasm 的情况下
发出较短的 4 字节指令? 67

0 投票
2 回答
1174 浏览

assembly - 为什么在 NASM 中我们必须使用方括号 ([ ]) 来移动到内存位置?

例如,如果我有一个名为 test 的变量声明如下:

如果我这样做:

但是,当我尝试保存它时,如果我们遵循相同的模式:

但实际上是:

那么,为什么方括号的行为会根据它们是第一个操作数还是第二个操作数而有所不同呢?

0 投票
2 回答
1192 浏览

assembly - 最小操作码大小 x86-64 strlen 实现

我正在研究我的代码打高尔夫球/二进制可执行文件的最小操作码大小x86-64 strlen实现,它不应该超过一定大小(为简单起见,请考虑 demoscene)。
总体思路来自这里,尺寸优化思路来自这里这里

输入字符串地址 in rdi,最大长度不大于Int32

最终结果总共ecx11 个字节

问题是关于设置ecx-1

选项 1 已说明

选项 2

选项 3

选项4,可能是最慢的一个

我了解:
选项 1 依赖于先前的ecx
选项 2 依赖于先前的rax
选项 3 我不确定它是否依赖于先前的ecx值?
选项 4 是最慢的?

这里有明显的赢家吗?
标准是保持操作码的大小尽可能小,并明智地选择性能最好的一个。
我完全知道有使用现代 cpu 指令的实现,但这种传统方法似乎是最小的一种。

0 投票
1 回答
468 浏览

assembly - YASM 行开头的标签或指令

我正在尝试构建组件 YASM 代码,该代码应该计算 2D 平面上两点(A 和 B)之间的距离。

这是我用来构建代码的命令:

distance.asm:2:错误:行首预期的标签或指令 distance.asm:4:错误:行首预期的标签或指令

我是组装新手,无法弄清楚如何修复错误:

我的问题是:为什么我会收到上面显示的错误?(我已经阅读过关于 stackoverflow 的类似问题,但我仍然无法弄清楚我的代码有什么问题)

0 投票
0 回答
185 浏览

windows - 组装,在 YASM 中使用 resq 保留空间

使用 YASM 我尝试为 2000 个四字保留空间,但是当我这样做时,当我尝试写入保留的四字块时,我得到一个 SIGSEGV。如果我只为 300 个四字保留空间,程序运行不会出错。这是什么原因造成的?

0 投票
1 回答
67 浏览

assembly - 每次 jmp 后跳过一个输入

所以我有这段代码应该要求输入 2 个数字,然后对它们进行一些操作,在完成一个操作并输出答案后,它应该再次要求输入 2 个数字和一个选项,直到用户选择退出选项。但是由于某种原因,在打印一次结果之后,第二次它跳过了一个输入。

我非常感谢有人指出它有什么问题,因为我对这种编程语言非常陌生。

编辑:这是我运行代码时发生的情况。

因此,在通过一个 jmp 回到 _start 之后,它会跳过一个输入,但是如果我取出“getMenuOption”并让它每次运行正常时都执行一个操作。

0 投票
2 回答
71 浏览

assembly - 比较负整数的困惑

我已经开始学习汇编,但我对示例程序有些困难。

我写了一个宏,可以找到数组中的最小值:

该程序成功编译,但是当我调试它(​​使用 DDD)时,在eax寄存器中我0xFFFFFFFD4294967293.

但是,如果我使用计算器,这0xFFFFFFFD确实-3是正确的值。

在您看来,我的程序是否正确?

提前感谢您的回答。