问题标签 [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.
assembly - x86指令含义
我现在正在 gdb 上运行一些代码,但我不知道这两条指令实际上是做什么的。如果有人可以帮助我,我将不胜感激。
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
我怎么了?
assembly - leal (%eax, %eax) 有什么作用?
做什么leal (%eax, %eax)
?%eax * 2 处的内容是否会相乘,因为它有括号?
assembly - 如何在 AT&T 汇编中正确定位变量?
我正在练习使用程序集(在 AT&T 语法和 gnu/gas 中)编写引导程序。小程序组装链接,然后复制到虚拟磁盘的第一个扇区。BIOS 会将其加载到0000:7c00
中,问题就来了。将在运行期间call hello
从 转换call 0010
为call 7c10
。但movw $message, %as
不会搬迁。ax
仍然,0026
不是7c26
。结果是我无法Hello World
在屏幕上显示。0000:0026
相反,屏幕上会显示一些随机数据。
如何在引导期间使其正确?我应该使用某些指令更改 asm 源代码吗?或者我应该更改我的链接脚本?
谢谢!
我使用以下汇编和链接脚本
assembly - x86 程序集中的 movl,intel 语法
只是一个简短的问题。任何人都知道我是否可以在装配中做到这一点?
我要做的基本上是创建一个循环,从堆栈中添加下一个参数(固定大小)。
例子:
只有当我确定前两个条件为真时,我才能将 a 加载到寄存器中,而不是立即将 x、y、z 和 a 加载到寄存器中。
p / s:即时编写代码,并没有真正做任何有用的事情。
c - 'C' 显示为 2 个不同的值?
我正在尝试比较汇编中的 2 个不同的字符(在 C 程序中调用汇编函数)。其中一个char属于结构,另一个在调用函数时传入。
当我使用 gdb 调试时,%ebx 是 83,而 10(%edi) 是 21315。如果我将它们作为字符打印出来,两者似乎都是“C”。有什么方法可以将 21315 转换为 83?
assembly - GAS 无法识别寄存器 %ip
在我的 16 位程序中,GAS 对指令犹豫不决:
我觉得这很奇怪,因为移动段寄存器可以正常工作,例如:
完整的错误信息是:
错误:错误的寄存器名称 `%ip'
我的版本字符串是:
GNU 汇编器 (GNU Binutils) 2.22
pointers - 汇编中的星号指针 (I32 / x86)
违规行:
位置 804a400 的反汇编代码中没有指令(我的列表以 804a247 结尾)
当我检查该内存位置的内容时,我得到:
这个 jmp 语句到底想做什么?
pointers - 将指针的值复制到 Assembly 中的另一个新指针
更新:我被允许在我的代码中使用 strcpy。
我正在尝试在 x86 汇编(att 语法)中编写 strdup 的实现,将 C 中的代码转换为汇编中的代码。
C中的代码:
汇编代码:
当我运行代码时,我只得到 char* 的一部分。示例:传入“Stack Overflow”让我得到“Stac@@#$$”。我想我在 movl 上做错了什么,不太确定是什么。
p/s:我很确定我的 strlen 有效。
第 2 部分:我编写的代码会将指针传回给调用者吗?就像释放我稍后分配的任何空间的能力一样。
arrays - 将值分配给二维数组时的垃圾值
我对组装完全陌生,在为我的二维“数组”分配值时遇到了一个问题。我的数组是一个.space
命名的screen
并分配有HEIGHT * WIDTH * 4
,所以有足够的空间。
在我执行数组下面的命令之前只包含0
值(我知道这一点,因为在发出下面的命令之前,我循环遍历数组并将所有值设置为0
,并通过打印出所有值来验证它)。
这就是我所做的:
这就是它的结果(列出所有行和列时):
我所期待的只是看到 : 的screen[0][1]
变化x:0 y:1 value:20
。是什么导致了这些“垃圾”值(335544320
,1310720
等5120
)?
正如我提到的,我是一个完整的初学者,所以要友善!
编辑: 我提供了零填充函数和列出数组中所有值的函数。
编辑2:在安德烈亚斯的输入之后,我做了这个功能:
编辑 3 还有一些地方不对劲。现在这样做时:
我得到(3x3 数组):