assembly 相关问题

汇编语言(asm)编程问题。请务必使用您正在使用的处理器和/或指令集以及汇编程序。警告:对于.NET程序集,请改用标签[.net-assembly]。对于Java ASM,请改用标签[java-bytecode-asm]。

6502 汇编器 - RTS 命令和堆栈

我要回答以下关于6502汇编语言的问题: “在堆栈上,有以下值(首先是顶部元素):0x01、0x02、0x03、0x04、0x05、0x06 地址 0xc000 处是...

回答 3 投票 0

IA32 使用字符串基元转换字符串的汇编

我是一名正在上课的学生,我在这个项目上遇到了真正的麻烦。现在,我不仅仅是在寻找答案,因为我很想了解正在发生的事情,但我...

回答 1 投票 0

为什么没有实现 DIV 指令来设置 CF 而不是引发异常

我知道在组装时必须非常小心,即: 这样做: 移动啊,10小时 移动,00h;股息 = 1000h 移动 bl,10 小时;除数 = 10h div...

回答 1 投票 0

给定的机器码对应什么版本的ARM?

我尝试用两个不同的汇编器(其中一个是在线的,另一个是FASMARM)来汇编以下代码: lsl r1、r2、#4 lslge r1、r2、#4 生成的机器代码是(小-

回答 1 投票 0

为什么复合文字(C99)的返回会生成更多汇编代码?

我有两个返回结构的函数,一个通过复合文字返回它,另一个初始化一个变量然后返回它: 类型定义结构{ 整数存储[256]; } 数据_t; 数据_t

回答 1 投票 0

x86 CR3在SPARC架构中对应的寄存器是什么?

我知道在x86架构中,我可以在内核上下文中读取CR3寄存器 跟踪内核的页目录。 现在我正在尝试使用 SPARC 架构在 Linux 上做同样的工作。 我怎样才能...

回答 3 投票 0

如何使用Assembly在8051中创建2个占空比为50%的方波

我正在尝试在Proteus仿真环境中通过8051的p2.6和p2.7端口创建两个230和460Hz的方波。它还将通过 p2.0 的开关输入来改变其行为。当

回答 1 投票 0

在 Windows 上使用 MASM 在 x64 程序集中写入文件的问题

我尝试在 Windows 上使用 x64 程序集和 MASM 写入文件,但内容未正确写入。我在下面包含了我的代码,但我不确定问题出在哪里。我正在使用

回答 1 投票 0

如何在Linux中反汇编二进制可执行文件以获得汇编代码?

我被告知要使用反汇编程序。 gcc 有内置的东西吗?最简单的方法是什么?

回答 11 投票 0

失败排序与 x86 原子操作相关吗?

考虑compare_and_exchange_strong_explicit的定义: _Boolatomic_compare_exchange_strong_explicit( 易失性 A* obj, C* 期望,C 渴望...

回答 1 投票 0

ARM CPU 的移位器的进位是什么

我正在阅读《ARM 架构参考手册》来编写一个具有 ARM7TDMI CPU 的 Game Boy Advance 模拟器。我对ARM架构不太熟悉。手册中提到“从...

回答 2 投票 0

如何使用ARM DS解决重定位警告L6437W?

我正在为 Cortex-R5 编写一些启动代码。代码编译、链接和运行没有问题。但是,我收到以下警告。 警告:L6437W:在startup.o中重定位#REL:7(

回答 1 投票 0

如何单步执行Golang运行时代码

我想知道如何单步执行运行时代码(大概是在 Visual Studio Code 中)。我不认为这个问题与 Go 的任何特定版本有关,但就上下文而言,我在 Intel Mac 上使用 1.18.3。 W...

回答 1 投票 0

在 IRQ 上添加或删除代码中的数据时发生崩溃

我正在开发一个操作系统作为一种爱好,并且在处理键盘IRQ时遇到了一个奇怪的问题,我不知道为什么,但是当出现的字符串太少时,我收到了无效的操作码ISR。 ..

回答 2 投票 0

如何使用内联汇编将ID_AA64MMFR1_EL1寄存器的内容读取到64位变量中?

这是此答案的后续问题。 我正在尝试使用内联汇编将 ID_AA64MMFR1_EL1 寄存器的内容读入 64 位变量: #包括 #包括 这是this答案的后续问题。 我正在尝试使用内联汇编将 ID_AA64MMFR1_EL1 寄存器的内容读取到 64 位变量中: #include <stdio.h> #include <stdint.h> #include <inttypes.h> int main(void) { uint64_t foo; __asm volatile("mov %0, ID_AA64MMFR1_EL1" : "=r"(foo) ::); printf("%"PRIx64"\n", foo); } 注意:我需要读取 ID_AA64MMFR1_EL1 才能知道 AFP 字段的值。 但是,汇编器拒绝此代码: $ gcc t1b.c /tmp/ccTDGH7d.s: Assembler messages: /tmp/ccTDGH7d.s:22: Error: undefined symbol ID_AA64MMFR1_EL1 used as an immediate value 一个简单的问题:如何正确做? 如果您的程序在 EL0 上运行,您应该使用 hwcaps 中提供的 HWCAP_CPUID API - 更多详细信息,请参阅本文 ARM64 CPU 功能寄存器。请参阅此处了解工作示例代码。 mov助记符仅用于在通用和/或 FP/SIMD 寄存器(x0-x30、xzr、sp、q0-q31)之间移动,以及将立即值移动到通用寄存器中。移入和移出系统寄存器分别使用 msr 和 mrs。所以在这里你想要 mrs 而不是 mov。 请注意,从您的标头来看,您似乎是在普通用户空间 C 程序中执行此操作。在典型的操作系统上,用户空间运行在异常级别 0 (EL0)。但ID_AA64MMFR1_EL1名称上的EL1标签表明它只能在EL1及更高版本(即内核模式)下读取。所以执行这条指令会陷入陷阱。 某些操作系统可能通过模拟指令来处理陷阱。我知道 Linux 对某些功能 ID 寄存器执行此操作,但不记得这是否是其中之一。但是,在这种情况下,返回到程序的值不一定等于硬件实际返回的值。例如,操作系统可以屏蔽它不想让您知道的功能位。 在其他操作系统上(例如 MacOS,如果我没记错的话),你的程序会因 SIGILL 而死掉。 通常,操作系统会提供其他类似这样的CPU特性查询机制。例如,Linux 有 /proc/cpuinfo,MacOS 有 sysctl。

回答 2 投票 0

(x86) ESP 的值是否相对于 EBP?

我一直认为 SP 是相对于 BP 而言的,这意味着在堆栈上压入和弹出内容将使用地址 BP - SP,其中 BP 是堆栈的开始,SP 是当前...

回答 2 投票 0

内存访问次数

代码的访问次数是多少: MOV R1、R0 STR R4,[R1,#4]! LDR R3,[R1] R1-R4均为32位。 答案是五个,我真的很困惑。有人能帮我吗? 所以...

回答 1 投票 0

x86 汇编中的“lock”指令是什么意思?

我在Qt的源代码中看到了一些x86汇编: q_atomic_increment: movl 4(%esp), %ecx 锁 包括 (%ecx) 移动 $0,%eax 塞内%al 雷特 .对齐4,0x90 .type q_atomic_increment,@

回答 4 投票 0

CPU进入保护模式后如何立即寻址下一条指令?

我一直在研究MIT6.828的Lab1。我对用于切换到保护模式的代码有疑问。 这是汇编代码 # 使用 bootst 从实模式切换到保护模式...

回答 1 投票 0

为什么两个模块化操作不能像一个模块化操作那样优化

我正在读一个处理时间戳的C++函数,有一个像这样的表达式: % (60 * 60) % 60 我认为这个表达式严格等同于: 吨% 60 然而,当我进入这个

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.