引导加载程序不断向eAX添加eax

时间:2019-03-20 16:28:04

标签: assembly gdb nasm x86-16 bootloader

我正在尝试构建我的第一个引导程序,它实际上可以工作,但是根据gdb的说法,这是发生的一件事,我不理解。

这是我用nasm编写的引导程序:

split(s.notes, '/')[SAFE_OFFSET(0)] as part1,
split(s.notes, '/')[SAFE_OFFSET(1)] as part2

我在unbuntu机器上使用qemu并可视化8086架构。在gdb中多次使用org 0x7c00 bits 16 start: jmp boot msg db "Bootinggggg!", 0 Print: lodsb ;loading si to al cmp al,0 ;loop je PrintDone mov ah,0eh mov bl,14 ;yellow color int 10h jmp Print PrintDone: ret boot: mov ah,00h mov al,0eh int 10h ;stepping into graphic mode mov si,msg call Print cli cld hlt times 510-($-$$) db 0 dw 0xAA55 命令后,gdb显示该程序无休止地向al添加了eax。我多次按下ni,并且一直在添加它。但是,当我按继续时,它实际上可以工作,如您所见,它可以打印字符串。为什么会发生?

screenshot

1 个答案:

答案 0 :(得分:3)

您正在拆卸空白内存。 00 00add %al, (%eax)add [eax], al的编码。您可以使用this online disassembler

轻松检查
0:  00 00                   add    BYTE PTR [eax],al

请注意,该指令不是在al中添加eax 。它将al添加到eax指向的地址的值上