相关疑难解决方法(0)

是否有针对8086的C编译器?

我有一个8086 CPU模拟器.它仅模拟8086条指令.我正在寻找一个C编译器来定位这个模拟器.有没有可以做到这一点的C编译器?

此外,拥有一个可用的libc等对我来说并不重要.模拟器使用自定义(即非PC)硬件,因此任何libc甚至ctr0都可能不得不重写

c compiler-construction x86 x86-16

14
推荐指数
2
解决办法
8796
查看次数

在C++内联asm中使用基指针寄存器

我希望能够%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)

c++ x86 assembly red-zone

13
推荐指数
1
解决办法
4119
查看次数

寻找16位x86编译器

我正在研究一个嵌入式系统项目,并遇到了编译器的问题,该编译器以编程方式嵌入到Paradigm C++ IDE中.我希望能够自动化建设.

处理器是AMD186ES.我没有使用操作系统 - 只是裸机的东西.我需要从C++生成实模式16位8086机器代码.

我的谷歌搜索表明G ++可以构建这样的代码.

我的问题是:

可以配置g ++来构建这个机器代码吗?

还有其他C++编译器可以做到吗?

c++ compiler-construction embedded x86-16

12
推荐指数
6
解决办法
1万
查看次数

如何告诉GCC为实模式生成16位代码

我正在编写实模式函数,它应该是具有堆栈帧的正常函数,但是它应该使用%sp而不是%esp.有办法吗?

c assembly gcc inline-assembly x86-16

11
推荐指数
4
解决办法
9011
查看次数

gcc在调用之前从esp中减去

我打算用C来编写一个小内核,我真的不希望它因不必要的指令而膨胀.

我有两个ç这是所谓的文件main.chello.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)

c x86 assembly stack gcc

3
推荐指数
1
解决办法
452
查看次数