Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
为什么我能够在 Linux 内核模块内执行浮点运算?
我在 x86 CentOS 6 3 内核 v2 6 32 系统上运行 我将以下函数编译到一个简单的字符驱动程序模块中作为实验 以了解 Linux 内核对浮点运算的反应 static unsigned floatstuff void floa
c
Linux
gcc
Linuxkernel
x86
cmpxchg 是否会在失败时写入目标缓存行?如果不是,对于自旋锁来说它比 xchg 更好吗?
我假设简单的自旋锁不会进入操作系统等待这个问题的目的 我发现简单的自旋锁通常使用以下方式实现lock xchg or lock bts代替lock cmpxchg 但没有cmpxchg如果期望不匹配 避免写入值 那么失败的尝试不是更便宜吗c
Assembly
x86
cpucache
microoptimization
compareandswap
emu8086 上的 Dos 指令 3Bh 更改工作目录
我最近开始学习x8086指令 对指令的了解比较少 我试图使用 dos 函数 3Bh 更改当前工作目录 然后使用 39h 在该目录上创建一个名为 test2 的文件夹 不明白问题是什么 还是 emu8086 的问题 MODEL SMALL C
Assembly
x86
DOS
执行指令和读/写数据时,x86 如何处理字节寻址和字寻址?
所以我正在学习 x86 的工作原理 并且遇到过人们说它是字节寻址的 但可以读取字 双字等 处理器如何决定使用哪种方法以及何时使用 例如 为了访问下一条指令以及当用户想要读 写存储器时 使用哪种寻址模式 每个内存访问都有一个由机器代码指令指定
Assembly
x86
cpuarchitecture
instructionset
instructionencoding
访问损坏的共享库
这是代码cpuid2 s cpuid2 s view the cpuid vendor id string using c library calls section data output asciz The processor Vend
Assembly
x86
32bit64bit
NASM:远程调用,段和偏移量存储在寄存器中
我已经将代码段和偏移值存储在两个寄存器中 比如说AX and BX分别 在 NASM 中 我如何编码远程调用AX BX 我试过call AX BX 但我得到了错误invalid combination of opcode and opera
Assembly
x86
nasm
无法从 MSR 读回
我正在编写一个内核模块 它是关于读写 MSR 的 我写了一个简单的程序进行测试 但仍然失败 它所做的就是写入 MSR 然后读回 这是代码 static int init test3 init void uint32 t hi lo hi 0
c
gcc
Assembly
x86
inlineassembly
为什么不将函数参数存储在 XMM 向量寄存器中?
我目前正在阅读一本书 计算机系统 程序员的视角 我发现 在 x86 64 架构上 我们仅限于 6 个整数参数 这些参数将传递给寄存器中的函数 接下来的参数将在堆栈上传递 此外 前最多 8 个 FP 或向量参数在 xmm0 7 中传递 为什么
Assembly
x86
parameterpassing
x8664
callingconvention
RET后的指令一定是CALL后的指令吗?
在行为良好的 C 程序中 返回语句 RET 是否始终返回到 CALL 语句后面的指令 我知道这是默认设置 但我想检查是否有人知道或记得不适用此标准的真实示例 常见编译器优化或其他事情 有人告诉我 函数指针可能会发生这种情况 函数指针会将值放
c
x86
Return
Call
functionpointers
如何查看已初始化数组与未初始化数组占用的内存
我目前正在按照 Kip Irvine 的 x86 处理器的汇编语言 学习汇编编程 在第 3 4 12 节中 作者指出 The DATA 指令声明未初始化的数据 当定义一个 大块未初始化的数据 DATA 指令减少了 已编译程序的大小 例如 下
Arrays
Assembly
x86
MASM
irvine32
SCI - 系统控制中断向量是如何定义的?
根据 ACPI 规范 FADT 固定 ACPI 描述表 表包含一个字段 用于报告SCI中断操作系统的编号 该字段定义如下 我在 Intel x86 平台上转储了 FADT 表 看到 SCI 中断与编号相关联9 但根据英特尔手册 0 31是
x86
interrupt
interrupthandling
在 c 可执行文件中运行数据 shellcode
我正在研究这个c 程序 我在 64 位 x64 linux 上用 gcc 编译它 include
Assembly
memorymanagement
x86
reverseengineering
i3 或 i7 处理器中的 clflush()
是否可以在 i3 i7 处理器中使用 clflush 指令 函数来刷新缓存并检查缓存是否为空 如果是这样 请建议正确的使用格式 直接在 C 中或在 C 中内联汇编 有人告诉我 clflush 确实可以在 core 2 双核处理器之外正常工作
caching
Assembly
x86
如何在 x86 汇编中移动两个浮点相乘的结果?
我目前正在尝试将两个浮点数相乘 其中一个来自浮点向量 存储在 ebx 中的地址 并与我存储在 ecx 中的值相乘 我已经确认输入值是正确的 但是 例如 如果我将 32 乘以 1 则 EAX 中的值将更改为 00000000 而 EDX 中的
c
Assembly
floatingpoint
x86
multiplication
x86 操作码有模式吗? (方向和大小位除外)
许多重要的 x86 指令 例如 MOV 和 ADD 的操作码部分将最后两位标准化为方向位和数据大小位 此处灰色显示的操作码部分是否有任何模式 例如 对于 ADD 某些指令使用代码 000000 而其他指令则使用代码 100000 None
Assembly
encoding
x86
opcode
实模式中断处理例程未按预期工作
我设法通过执行远跳转的引导加载程序将一个小内核加载到内存中0x0090 0x0000 当我从那里打印一个字符来测试它时 内核已成功加载 并且它可以正常工作 我想重新映射中断0x08 gt 0x0F and 0x70 gt 0x77打断0x2
Assembly
x86
VirtualBox
nasm
interrupthandling
加载引导加载程序的第二阶段
我正在尝试为 x86 机器创建一个小型操作系统 并开始为相当小的引导加载程序编写代码 我创建的引导加载程序非常简单 它从位于主引导记录后面的扇区加载一个小的第二引导加载程序 并跳转到该代码 主引导记录中的引导加载程序代码似乎运行良好 当它尝
Assembly
x86
nasm
BootLoader
realmode
循环“xorl %edx,%eax; shrl $1,%edx”的目的是什么?
我有以下 x86 汇编代码 movl 8 ebp edx get an argument from the caller movl 0 eax testl edx edx je L1 L2 what s the purpose of thi
Assembly
x86
reverseengineering
decompiling
att
为什么使用push/pop而不是sub和mov?
当我使用不同的编译器时https godbolt org 我注意到编译器生成这样的代码是很常见的 push rax push rbx push rcx call rdx pop rcx pop rbx pop rax 我明白每个push o
Assembly
x86
x8664
cpuarchitecture
microoptimization
x86 中如何使用进位和溢出标志来计算乘法
当两个数字相乘溢出寄存器时 如何使用两个标志来正确计算答案 E g if al holds 0xff并乘以0x2 导致溢出到ax 这些标志对此有何帮助 Multiplication on x86 x64 never overflows wh
Assembly
x86
carryflag
eflags
«
1 ...
36
37
38
39
40
41
42
...53
»