相关疑难解决方法(0)

寻找16位x86编译器

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

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

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

我的问题是:

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

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

c++ compiler-construction embedded x86-16

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

如何用"x/i $ pc"在GDB中反汇编16位x86引导扇区代码?它被视为32位

例如,使用BIOS打印a到屏幕的引导扇区main.asm:

org 0x7c00
bits 16
cli
mov ax, 0x0E61
int 0x10
hlt
times 510 - ($-$$) db 0
dw 0xaa55
Run Code Online (Sandbox Code Playgroud)

然后:

nasm -o main.img main.asm
qemu-system-i386 -hda main.img -S -s &
gdb -ex 'target remote localhost:1234' \
    -ex 'break *0x7c00' \
    -ex 'continue' \
    -ex 'x/3i $pc'
Run Code Online (Sandbox Code Playgroud)

我明白了:

0x7c00:      cli    
0x7c01:      mov    $0x10cd0e61,%eax
0x7c06:      hlt 
Run Code Online (Sandbox Code Playgroud)

所以看起来它mov ax, 0x0E61被解释为32位mov %eax并且将下一条指令int 0x10作为数据.

我怎么能告诉GDB这是16位代码?

也可以看看:

x86 assembly gdb qemu disassembly

7
推荐指数
3
解决办法
3732
查看次数

标签 统计

assembly ×1

c++ ×1

compiler-construction ×1

disassembly ×1

embedded ×1

gdb ×1

qemu ×1

x86 ×1

x86-16 ×1