assembly相关内容

有可能使汇编语言程序永远自我编写吗?

基本上,您可以让汇编代码在最后一行结束后不断地编写新代码,以便它可以永远保持直线运行,尽管开始的代码量是有限的吗?不允许循环。 推荐答案 它必须是为某种带有无限磁带的机器(如图灵机)组装的,否则最终会到达地址空间的末尾。 除非您对指令指针具有定义明确的无错误回绕语义。您将需要一台在其可用地址空间中没有任何间隙的计算机(因此不是x86-64),而是具有PC相对寻址(因此不是i386 ..
发布时间:2022-04-10 16:21:04 其他开发

指令流水线和每条指令的周期之间的链接

我了解instruction pipelining的基本原理。 我还了解到某些指令可能需要更长时间才能执行(cycles per instruction)。 但我不明白两者之间的联系。 我看到的所有流水线图似乎都有“完美”的指令,它们都有相同的长度(周期数)。 但是,如果第一条指令需要5个周期,而第二条指令需要3个周期,该怎么办?CPU是否停顿了2个周期? 这个摊位叫 ..
发布时间:2022-04-08 14:31:31 其他开发

分支预测器如何知道它是否正确?

这是我第二次问这个问题;第一次有人回复了,但我花了很长时间才回复,因此没有得到充分的理解。 我试图做的是更多地了解现代体系结构的取指令部分;我假设所有指令都是由分支预测器预测的,以供取指令单元根据预测进行取。 另一位绅士试图帮助提到有关“分支指令”的内容,该指令也与预测指令一起发送。此“分支指令”测试分支预测器的预测是否正确的条件。我还假设这些分支指令进入分支执行单元,并且不需要从内存 ..
发布时间:2022-04-08 14:25:52 其他开发

NASM特定--节与[节]

我似乎在NASM的文档中找不到任何关于在代码中使用Section或[Section](带括号)之间的区别的明确内容。我知道这些都是宏,但我看到它们几乎可以互换使用。真的是这样吗?换句话说,就是 [SECTION .text] 相当于 Section .text ? 方括号是否暗示了某种神秘的副作用? 谢谢 推荐答案 [SECTION .xyz]是SECT ..
发布时间:2022-04-06 11:27:39 其他开发

如何为汇编语言程序制作Makefile?

我遇到了这样一个任务,即为我用汇编语言制作的程序构建一个Makefile(没有什么新奇的东西,比如Hello World)。该程序是在Linux 32位,我使用的是NASM汇编语言。到目前为止,我只能找到C程序的Makefile,我知道它们之间没有太大区别,但我不熟悉这个东西。我所拥有的是: Program: main.o gcc -o Program main.o main.o: ..
发布时间:2022-04-06 11:22:14 服务器开发

Linux 64位外壳代码

我正试图在我的64位Ubuntu上编写我的第一个“Hello world”外壳代码,但它不能工作。 我有文件hello.asm: ; 64-bit "Hello World!" in Linux NASM global _start ; global entry point export for ld section .text _start: ; ..
发布时间:2022-04-06 11:19:30 其他开发

第二次使用MUL后出现分段故障

我是汇编语言中的新手,我尝试创建函数并在C中使用它。这个函数得到3个变量a,x,y,它们是包含两个64位int的结构。我想返回a+x*y。不幸的是,这段代码是NASM导致段错误 %define a1 [rdi] %define a2 [rdi+8] %define x1 [rsi] %define x2 [rsi+8] %define y1 [rdx] %define y2 [rdx+8] ..
发布时间:2022-04-06 11:15:09 其他开发

NASM:在运行时从RIP(指令指针)获取重新定位的二进制的偏移量

我有一个适用于x86_64的兼容Multiboot2的ELF文件,其中开始符号在start.asm中定义,这是一个NASM程序集文件。Multiboot2标头包含relocatable标记。 由于GRUB不支持Multiboot2+a可重定位ELF(至少在2021年7月[3]),我希望自己解决一些重定位问题以解决此问题,并只加载静态ELF。 为此,我需要在运行时在我的第一个条目符号(在EL ..
发布时间:2022-04-06 11:10:48 其他开发

Yasm:vmovaps指令导致分段错误

问题:movaps出现分段错误。 上下文:x86-64指令vmovaps旨在与Core I系列处理器(我正在运行此系统)上的AVX寄存器一起使用。AVX寄存器的宽度是SSE寄存器的两倍(分别为256位和128位)。指令vmovaps应将对齐的浮点值(32位)向量移入指定的ymm寄存器。 可能的原因:源数据的对齐特别重要,因为不正确对齐的数据是分段错误的来源。然而,即使我已经对齐了我的数 ..
发布时间:2022-04-06 11:09:13 其他开发

NASM:%Include文件中操作码和操作数的组合无效,报告的行号是否已超过末尾?

我正在构建一个简单的操作系统,并尝试从引导加载程序中获取屏幕上的一些文本。 每当我编译它(nasm -fbin bootloader.asm)时,都会出现以下错误: print.asm:23:错误:操作码和操作数的组合无效 我不明白出了什么问题,print.asm甚至没有那么多行,所以不清楚NASM不喜欢哪行。 这是bootloader.asm: [org 0x7c0 ..
发布时间:2022-04-06 11:04:56 其他开发

使用NASM__?浮点宏

NASM手册谈到了这些宏,但就我所见,它并没有真正解释如何使用它们。Section 3.4.6状态: 浮点常量仅可作为DW、DD、DQ、DT和DO的参数,或作为特殊运算符__?float16?__、__?bfloat16?__、__?float32?__、__?float64?__、__?float80m?__、__?float80e?__、__?float128l?__的参数,和__?fl ..
发布时间:2022-04-06 11:02:14 其他开发

正确的用户输入-x86 Linux程序集

所以我正在使用NASM为Linux开发一个x86汇编程序。这个程序基本上是要求用户输入他们的名字和他们最喜欢的颜色。在这样做并将两个字符串存储在.bss部分中声明的变量中之后,程序将打印“不可能用户名,最喜欢的颜色也是我最喜欢的颜色!” 我遇到的问题是输出中有很大的空格,因为我不知道用户输入的字符串有多长,只知道我声明的缓冲区的长度。 section .data greet: ..
发布时间:2022-04-06 10:58:45 服务器开发

NASM除以负值

正在尝试将正数除以负数。 目前我的程序将正确划分,并且我可以正确访问剩余部分。 但当我输入一个正数除以负值时,它根本不会被除法。 我知道有一种方法可以“标记扩展”,并且它将正确划分。我就是看不懂手册 Movsss$imm/%reg%reg/mem移动,符号扩展231 Movzss$imm/%reg%reg/mem移动,零扩展 当然这是ATT语法,我需要英特尔语法 以 ..
发布时间:2022-04-06 10:56:40 其他开发

在x86 ASM的NASM语法中,括号是什么意思?

给定以下代码: L1 db "word", 0 mov al, [L1] mov eax, L1 [L1]中的括号表示什么? 这个问题是关于NASM的。英特尔语法汇编的另一个主要特点是MASM风格,当不涉及寄存器时,括号的工作方式不同: 请参见Confusing brackets in MASM32 推荐答案 [L1] ..
发布时间:2022-04-06 10:50:34 其他开发