问题标签 [att]

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 投票
2 回答
981 浏览

assembly - x86指令含义

我现在正在 gdb 上运行一些代码,但我不知道这两条指令实际上是做什么的。如果有人可以帮助我,我将不胜感激。

0 投票
1 回答
857 浏览

assembly - 指令的参数顺序

函数 main 的汇编代码转储:

我学到了mov %rsp,%rbp意味着move the value of rsp to rbp
但我知道在英特尔架构中,这意味着move the value of rbp to rsp 根据英特尔手册(英特尔架构软件开发人员手册。第 2 卷。3-104 MOV 指令),mov a, b应该意味着move b to a

下一个sub指令是相同的。我知道sub a,b手段a = a-b。但这里的sub $0x30, %rsp意思是rsp = rsp - 0x30

我怎么了?

0 投票
1 回答
1136 浏览

assembly - leal (%eax, %eax) 有什么作用?

做什么leal (%eax, %eax)?%eax * 2 处的内容是否会相乘,因为它有括号?

0 投票
1 回答
955 浏览

assembly - 如何在 AT&T 汇编中正确定位变量?

我正在练习使用程序集(在 AT&T 语法和 gnu/gas 中)编写引导程序。小程序组装链接,然后复制到虚拟磁盘的第一个扇区。BIOS 会将其加载到0000:7c00中,问题就来了。将在运行期间call hello从 转换call 0010call 7c10。但movw $message, %as不会搬迁。ax仍然,0026不是7c26。结果是我无法Hello World在屏幕上显示。0000:0026相反,屏幕上会显示一些随机数据。

如何在引导期间使其正确?我应该使用某些指令更改 asm 源代码吗?或者我应该更改我的链接脚本?

谢谢!

我使用以下汇编和链接脚本

0 投票
2 回答
4719 浏览

assembly - x86 程序集中的 movl,intel 语法

只是一个简短的问题。任何人都知道我是否可以在装配中做到这一点?

我要做的基本上是创建一个循环,从堆栈中添加下一个参数(固定大小)。

例子:

只有当我确定前两个条件为真时,我才能将 a 加载到寄存器中,而不是立即将 x、y、z 和 a 加载到寄存器中。

p / s:即时编写代码,并没有真正做任何有用的事情。

0 投票
2 回答
67 浏览

c - 'C' 显示为 2 个不同的值?

我正在尝试比较汇编中的 2 个不同的字符(在 C 程序中调用汇编函数)。其中一个char属于结构,另一个在调用函数时传入。

当我使用 gdb 调试时,%ebx 是 83,而 10(%edi) 是 21315。如果我将它们作为字符打印出来,两者似乎都是“C”。有什么方法可以将 21315 转换为 83?

0 投票
1 回答
2090 浏览

assembly - GAS 无法识别寄存器 %ip

在我的 16 位程序中,GAS 对指令犹豫不决:

我觉得这很奇怪,因为移动段寄存器可以正常工作,例如:

完整的错误信息是:

错误:错误的寄存器名称 `%ip'

我的版本字符串是:

GNU 汇编器 (GNU Binutils) 2.22

0 投票
1 回答
3464 浏览

pointers - 汇编中的星号指针 (I32 / x86)

违规行:

位置 804a400 的反汇编代码中没有指令(我的列表以 804a247 结尾)

当我检查该内存位置的内容时,我得到:

这个 jmp 语句到底想做什么?

0 投票
1 回答
1251 浏览

pointers - 将指针的值复制到 Assembly 中的另一个新指针

更新:我被允许在我的代码中使用 strcpy。

我正在尝试在 x86 汇编(att 语法)中编写 strdup 的实现,将 C 中的代码转换为汇编中的代码。

C中的代码:

汇编代码:

当我运行代码时,我只得到 char* 的一部分。示例:传入“Stack Overflow”让我得到“Stac@@#$$”。我想我在 movl 上做错了什么,不太确定是什么。

p/s:我很确定我的 strlen 有效。

第 2 部分:我编写的代码会将指针传回给调用者吗?就像释放我稍后分配的任何空间的能力一样。

0 投票
1 回答
440 浏览

arrays - 将值分配给二维数组时的垃圾值

我对组装完全陌生,在为我的二维“数组”分配值时遇到了一个问题。我的数组是一个.space命名的screen并分配有HEIGHT * WIDTH * 4,所以有足够的空间。

在我执行数组下面的命令之前只包含0值(我知道这一点,因为在发出下面的命令之前,我循环遍历数组并将所有值设置为0,并通过打印出所有值来验证它)。

这就是我所做的:

这就是它的结果(列出所有行和列时):

我所期待的只是看到 : 的screen[0][1]变化x:0 y:1 value:20。是什么导致了这些“垃圾”值(335544320,13107205120)?

正如我提到的,我是一个完整的初学者,所以要友善!

编辑: 我提供了零填充函数和列出数组中所有值的函数。

编辑2:在安德烈亚斯的输入之后,我做了这个功能:

编辑 3 还有一些地方不对劲。现在这样做时:

我得到(3x3 数组):