Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 蜂鸣引导加载程序(英特尔x86)_Assembly_Nasm_X86 16_Bootloader_Bios - Fatal编程技术网

Assembly 蜂鸣引导加载程序(英特尔x86)

Assembly 蜂鸣引导加载程序(英特尔x86),assembly,nasm,x86-16,bootloader,bios,Assembly,Nasm,X86 16,Bootloader,Bios,我终于了解了汇编和裸机编程的基础知识。至少我是这么想的。我写了这个(我自己第一次:) 我将其刻录到USB中(我很清楚在真正的硬件中测试它们不是一个好主意),然后重新启动。BIOS执行了它的测试,并引导到我的引导加载程序(或者更确切地说是“程序”,因为它实际上并不引导某个东西)。它什么也没打印出来,我的电脑开始发出嘟嘟声 我已经禁用了启动扇区病毒保护,快速启动,我真的尝试了一切,但每次我启动到我的东西,它只是在我的脸上发出哔哔声,直到我按下CTRL+ALT+DELETE键 我做错了什么?提前感谢。

我终于了解了汇编和裸机编程的基础知识。至少我是这么想的。我写了这个(我自己第一次:)

我将其刻录到USB中(我很清楚在真正的硬件中测试它们不是一个好主意),然后重新启动。BIOS执行了它的测试,并引导到我的引导加载程序(或者更确切地说是“程序”,因为它实际上并不引导某个东西)。它什么也没打印出来,我的电脑开始发出嘟嘟声

我已经禁用了启动扇区病毒保护,快速启动,我真的尝试了一切,但每次我启动到我的东西,它只是在我的脸上发出哔哔声,直到我按下CTRL+ALT+DELETE键


我做错了什么?提前感谢。

在查看注释后,工作代码不会发出嘟嘟声,而是打印出我想要的字符串:

org 7c00h
bits 16
main:
xor ax, ax
mov ds, ax
mov es, ax         
mov ss, ax
mov sp, 7c00h      
cld                
xor bx, bx        
mov si, MESAJ      
call yaz
cli
durdur:
hlt
jmp durdur
yaz:
push ax
mov  ah, 0Eh       
yenikarakter:
lodsb                                
test al, al
je   bitir         
int  10h           
jmp  yenikarakter     
bitir:
pop ax
ret
MESAJ:
db "Test basarili!", 10, 13, 0
times 510-($-$$) db 00h
dw 0xAA55 

可能要尝试以下操作:。但我怀疑,由于您没有设置DS(将其设置为零),这可能是一个问题(从错误的段读取字符串),并且您不会以无限循环结束。您认为必须在
Halt:hlt
之后移动
JMP-Halt
。由于你没有一个合适的无限循环,它可能正在运行
hlt
之后内存中发生的任何事情。这可能有助于指定你的主板,因为嘟嘟声代码通常具有制造商特定的含义,可以帮助调试。此外,我实际上没有看到你设置AH(Int 10h的子功能)那应该是印刷品。我想你要把0eh放进寄存器啊使用。另外,在打印之前,您应该检查NUL(0)终止符,而不是重新启动。而不是重新启动计算机,您可能要开始考虑仿真器或虚拟机中的测试。这段代码在这些环境中也应该失败(尽管失败的表现可能有所不同)。QEMU、Bochs、VirtualBox等是一些知名的免费模拟器和虚拟机。如果您有问题的答案,请回答问题,不要使用解决方案修改原始问题。我还原了您的更改,并根据上次编辑创建了一个答案。
org 7c00h
bits 16
main:
xor ax, ax
mov ds, ax
mov es, ax         
mov ss, ax
mov sp, 7c00h      
cld                
xor bx, bx        
mov si, MESAJ      
call yaz
cli
durdur:
hlt
jmp durdur
yaz:
push ax
mov  ah, 0Eh       
yenikarakter:
lodsb                                
test al, al
je   bitir         
int  10h           
jmp  yenikarakter     
bitir:
pop ax
ret
MESAJ:
db "Test basarili!", 10, 13, 0
times 510-($-$$) db 00h
dw 0xAA55