15得票4回答
如何在x86汇编程序中表示十六进制值,例如FFFFFFBB?

我正在学习x86内联汇编编程。 我想写mov ecx, FFFFFFBB,但是编译器无法识别它。在内联汇编代码中,应该如何编写这样的十六进制数?

15得票4回答
如何告诉GCC生成16位的实模式代码

我正在编写实模式函数,它应该是普通的带有堆栈帧的函数,但它应该使用%sp而不是% esp。 有没有什么方法可以做到这一点? 我正在编写一个实模式函数,它应该像普通函数一样具有堆栈帧,但需要使用%sp而不是%esp。是否有办法实现这个要求?

14得票1回答
GCC/x86内联汇编:如何告诉gcc内联汇编部分将修改%esp?

尝试让一些旧代码重新起作用(https://github.com/chaos4ever/chaos/blob/master/libraries/system/system_calls.h#L387, FWIW),我发现在最近的10-15年中,gcc 的某些语义似乎以一种微妙但仍然危险的方式发生...

14得票2回答
为什么MSVC不支持AMD64和Itanium目标的内联汇编?

昨天我了解到,在使用Microsoft Visual C++ 编译AMD64和Itanium目标时,不支持使用__asm关键字进行内联汇编。 这是否正确?如果是的话,有人知道为什么不支持这些目标上的内联汇编吗?似乎这是一个相当重要的特性就这样消失了...

14得票1回答
如何从程序中访问控制寄存器cr0、cr2、cr3?出现分段错误。

我编写了一个程序,试图读取和写入控制寄存器。 该程序编译正常,但是当内联汇编即将执行时,会产生分段错误。 代码:void instructions(int val) { int i; int value; for(i = 0; i < val; i++) ...

14得票1回答
clang(LLVM)内联汇编 - 多个约束条件导致无用的储存/加载操作。

clang / gcc :一些内联汇编操作数可以满足多个约束条件,例如使用 "rm",当一个操作数可以使用寄存器或内存位置时。以64 x 64 = 128位乘法为例:__asm__ ("mulq %q3" : "=a" (rl), "=d" (rh) : "%0" (x), "rm" (y) ...

14得票1回答
如何获取VESA BIOS信息

我正在跟随Phil-Opp Tutorials关于在Rust中编写操作系统的教程,并且在玩弄一下后,我想尝试在屏幕上显示真正的图形。 我已经想到应该从使用带有VESA的线性帧缓冲开始。我在osdev.org上找到了一些教程here和here,但它们不断谈论“函数代码”和es:di。第二个链...

13得票2回答
使用gcc而不是内联汇编访问寄存器

我想读取堆栈指针寄存器的值,而不必编写内联汇编代码。我之所以这样做是因为我想将堆栈指针寄存器的值分配给数组的一个元素,并且我觉得使用内联汇编访问数组很麻烦。因此,我希望能够像这样做一些事情。register "rsp" long rsp_alias; <--- How do I achi...

13得票4回答
GCC内联汇编,混合寄存器大小(x86)

有人知道我该如何消除以下汇编器警告吗? 代码是x86,32位: int test (int x) { int y; // do a bit-rotate by 8 on the lower word. leave upper word intact. asm ("rorw $8...

13得票4回答
以编程方式引发未定义指令异常

我想为我的测试夹具进行ARM Cortex-M3未定义指令异常的测试。IAR编译器支持使用内联汇编实现此功能,代码如下: asm("udf.w #0"); 很遗憾,GNU CC内联汇编器不支持NXP LPC177x8x的此操作码。它会输出以下诊断信息: ccw3kZ46.s:404: ...