我有一个8086 CPU模拟器.它仅模拟8086条指令.我正在寻找一个C编译器来定位这个模拟器.有没有可以做到这一点的C编译器?
此外,拥有一个可用的libc等对我来说并不重要.模拟器使用自定义(即非PC)硬件,因此任何libc甚至ctr0都可能不得不重写
我希望能够%rbp在内联asm中使用基指针寄存器().这样的玩具示例是这样的:
void Foo(int &x)
{
asm volatile ("pushq %%rbp;" // 'prologue'
"movq %%rsp, %%rbp;" // 'prologue'
"subq $12, %%rsp;" // make room
"movl $5, -12(%%rbp);" // some asm instruction
"movq %%rbp, %%rsp;" // 'epilogue'
"popq %%rbp;" // 'epilogue'
: : : );
x = 5;
}
int main()
{
int x;
Foo(x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望,因为我使用通常的序幕/结尾函数调用方法来推送和弹出旧的%rbp,这样就可以了.但是,当我尝试在内x联asm之后访问时,它会出现故障.
GCC生成的汇编代码(略微剥离)是:
_Foo:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -8(%rbp)
# INLINEASM
pushq %rbp; // prologue
movq %rsp, …Run Code Online (Sandbox Code Playgroud) 我正在研究一个嵌入式系统项目,并遇到了编译器的问题,该编译器以编程方式嵌入到Paradigm C++ IDE中.我希望能够自动化建设.
处理器是AMD186ES.我没有使用操作系统 - 只是裸机的东西.我需要从C++生成实模式16位8086机器代码.
我的谷歌搜索表明G ++可以构建这样的代码.
我的问题是:
可以配置g ++来构建这个机器代码吗?
还有其他C++编译器可以做到吗?
我正在编写实模式函数,它应该是具有堆栈帧的正常函数,但是它应该使用%sp而不是%esp.有办法吗?
我打算用C来编写一个小内核,我真的不希望它因不必要的指令而膨胀.
我有两个ç这是所谓的文件main.c和hello.c.我使用以下GCC命令编译并链接它们:
gcc -Wall -T lscript.ld -m16 -nostdlib main.c hello.c -o main.o
Run Code Online (Sandbox Code Playgroud)
我正在使用以下OBJDUMP命令转储.text部分:
objdump -w -j .text -D -mi386 -Maddr16,data16,intel main.o
Run Code Online (Sandbox Code Playgroud)
并获得以下转储:
00001000 <main>:
1000: 67 66 8d 4c 24 04 lea ecx,[esp+0x4]
1006: 66 83 e4 f0 and esp,0xfffffff0
100a: 67 66 ff 71 fc push DWORD PTR [ecx-0x4]
100f: 66 55 push ebp
1011: 66 89 e5 mov ebp,esp
1014: 66 51 push ecx
1016: 66 …Run Code Online (Sandbox Code Playgroud)