标签: bootloader

为什么这个启动加载程序代码不起作用?

我的期望是它打印一个字符串,但没有打印出来.当我把字符串缩短时,它有时会起作用,当我再次使它们变长时,它有时会起作用.

我不知道为什么这不起作用.

有人能帮帮我吗?谢谢.

我正在使用的汇编代码是:

(Emacs 23,Ubuntu 10.10,nasm,VirtualBox OSE)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0x7c00
bits 16
str:
    db "Some say the world will end in fire",10,13
    db "Some say in ice",10,13
    db "From what I've tasted of desire",10,13
    db "I hold with those who favor fire",10,13
    db "But if I had to perish twice,",10,13
    db "I think I know enough of hate",10,13
    db "To say that for destruction ice",10,13
    db "is also great and would suffice."
    db "Robert Frost - Fire and Ice" …
Run Code Online (Sandbox Code Playgroud)

x86 assembly bios nasm bootloader

2
推荐指数
1
解决办法
594
查看次数

装配中的实验操作系统 - 无法在屏幕上显示字符(pmode)

我希望这里有一些经验丰富的汇编/操作系统开发人员,即使我的问题不是很大.我正在尝试使用汇编并创建一个小型操作系统.事实上,我想要的是一个启动加载器和第二个启动加载器,它激活pmode并在屏幕上显示一个字符,使用视频内存(显然没有中断).我正在使用VirtualBox来模拟代码,我在VHD磁盘中手动粘贴(两个代码段)

首先,我的代码:

boot.asm
这是第一个启动加载器

bits    16
org     0
mov     al, dl

jmp     07c0h:Start

Start:
    cli
    push    ax
    mov     ax, cs
    mov     ds, ax
    mov     es, ax
    pop     ax
    sti
    jmp     ReadDisk

ReadDisk:
    call    ResetDisk
    mov     bx, 0x1000
    mov     es, bx
    mov     bx, 0x0000
    mov     dl, al
    mov     ah, 0x02
    mov     al, 0x01
    mov     ch, 0x00
    mov     cl, 0x02
    mov     dh, 0x00
    int     0x13
    jc      ReadDisk
    jmp     0x1000:0x0000

ResetDisk:
    mov     ah, 0x00
    mov     dl, al
    int     0x13
    jc      ResetDisk
    ret

times …
Run Code Online (Sandbox Code Playgroud)

memory video assembly operating-system bootloader

2
推荐指数
1
解决办法
329
查看次数

如何擦除闪存的某些字节?

我的PIC18F87J11一次只能擦除1024个字节.有没有强迫它一次只擦除2个字节或更多?

我正在制作一个Bootloader,有时候只有一行HEX文件(16字节)更改为应用程序,所以我想用新的16字节替换内存中的那一行.如果我尝试擦除这16个字节,则自动擦除1024个字节.然后我被迫重写它们,这需要一些时间并降低Bootloader的速度.

是否有另一种方法可以在不擦除1024个字节的情况下从闪存中擦除某些内容?希望有.

谢谢!

embedded microcontroller microchip pic bootloader

2
推荐指数
1
解决办法
940
查看次数

STM32从用户闪存启动

STM32提供从用户闪存,系统内存和嵌入式SRAM启动的选项.在固件方面"从用户Flash启动"是否意味着执行自定义引导加载程序?

stm32 bootloader

2
推荐指数
1
解决办法
3271
查看次数

引导程序的第二阶段使用Int 0x10/ah = 0x0e打印垃圾

我正在尝试学习汇编并编写引导程序.以下代码将软盘驱动器的内容加载到内存并跳转到它(开始在地址0x1000加载).此代码应该在屏幕上打印"X",但由于某种原因,它会打印一个空格.有人可以告诉我有什么问题吗?

[bits 16]
jmp reset
reset:          ;Resets floppy drive
    xor ax,ax   ;0 = Reset floppy disk
    mov dl,0        ;Drive 0 is floppy
    int 0x13
    jc reset        ;If carry flag was set, try again

    mov ax,0x1000   ;When we read the sector, we are going to read address 0x1000
    mov es,ax       ;Set ES with 0x1000

floppy:
    mov ah,0x2  ;2 = Read floppy
    mov al,0x11 ;Reading one sector
    mov ch,0x0  ;Track 1 
    mov cl,0x2  ;Sector 2, track 1
    mov dh,0x0  ;Head 1
    mov …
Run Code Online (Sandbox Code Playgroud)

x86 assembly real-mode nasm bootloader

2
推荐指数
1
解决办法
718
查看次数

使用int13h从软盘加载段

我目前正在尝试编写16位实模式启动代码,该代码打印一个字母,然后从软盘加载第二个段并跳转到该段,然后再打印一个字母。

但是,我对“从云端硬盘读取扇区”呼叫的工作方式有些困惑。到目前为止,这是我的代码:

[BITS 16]
org 0x7B00

start:
        mov ax, 0xB800 ; Video buffer
        mov es, ax     ; Copy address of video buffer to extra segment

        mov byte [es:0], 'A'    ; Move character A to first address
        mov byte [es:1], 0x17   ; Format for blue background, white foreground

        mov ah, 0x02 ; Read sectors from drive
        mov al, 1    ; Read 1 sector
        mov ch, 0    ; Cylinder 0
        mov cl, 0    ; Sector 0
        mov dh, 0    ; Head 0 …
Run Code Online (Sandbox Code Playgroud)

assembly nasm osdev bootloader x86-16

2
推荐指数
1
解决办法
913
查看次数

如何更改或设置8086组件中的背景色?

我正在学习8086汇编。我需要使用8086组件更改屏幕的背景色。我看了一些教程,他们只能设置屏幕的一部分。我不想通过DOS中断来执行此操作,而所有教程都在DOS中断中进行。如果有人向我展示使用BIOS中断设置整个屏幕(背景色)的代码,那将是很好的。

assembly operating-system kernel bootloader x86-16

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

在实模式下使用BIOS格式化磁盘时出错

我正在大学学习集会.我正在尝试编写个人格式例程,但我遇到了一些问题.例程在引导时启动,但在第一次中断(INT 13h/AH = 7)后进入错误流程.打印AH状态值表明错误是:

检测到0Eh控制数据地址标记(硬盘)

这是我的引导程序代码:

[BITS 16]
[ORG 0x7C00]

init:
call main
ret


main:
xor ax, ax
mov ds, ax

mov si, string0
call print
call delay
mov si, string1
call print
call delay
mov si, string2
call print
call delay
mov si, string3
call print
call delay
mov si, string4
call print
call delay
mov si, string5
call print
call delay
mov si, string6
call print
call delay
mov si, string7
call print …
Run Code Online (Sandbox Code Playgroud)

x86 assembly bios bootloader x86-16

2
推荐指数
1
解决办法
265
查看次数

从引导加载程序运行时,STOSB指令不存储字节

在制作了一个小型引导程序来教我自己的汇编语言后,我注意到该stosb指令似乎不起作用.我将问题压缩到一个最小的例子:

BITS 16

start:
mov ax, 07C0h       
add ax, 288     
mov ss, ax
mov sp, 4096

mov ax, 07C0h       
mov ds, ax ;setting up stack

mov al, 'j'
mov di, buffer
stosb

mov si, buffer
jmp loops

loops:
mov ah, 0Eh
lodsb
cmp al, 0
je done
int 10h
jmp loops

done:
hlt

buffer times 64 db 0

times 510-($-$$) db 0   ; Pad remainder of boot sector with 0s
dw 0xAA55
Run Code Online (Sandbox Code Playgroud)

当运行此引导加载程序时,它应将字母存储j到缓冲区中,然后将该缓冲区打印到显示器.输出应该是:

Ĵ

运行时似乎没有打印任何东西.有什么问题,我该如何解决?

x86 assembly real-mode bootloader x86-16

2
推荐指数
1
解决办法
314
查看次数

int 13h 42h在Bochs中没有加载任何东西

我将引导加载程序从CHS更改为LBA,因此我将其替换int 13h 02hint 13h 42h.它在QEMU中正常工作,但是,我在使用Bochs和笔记本电脑时遇到了麻烦.

我把bootloader写入了USB闪存盘dd if=main.bin of=/dev/sdb bs=512.笔记本电脑加载英特尔UNDI并给我以下错误:No bootable device - insert boot disk and press any key.

所以我尝试用Bochs调试它,并注意到Bochs将这个二进制文件识别为可引导的.但是,int 13h执行后没有加载任何内容.

然后我尝试从这个闪存驱动器加载我的旧PC,它的工作原理!它加载程序并正确执行它.QEMU给了我相同的结果.

这是引导加载程序代码:

org 0x7c00
bits 16

boot:
    cli
    ; Overlap CS and DS
    mov ax, cs
    mov ds, ax
    mov es, ax
    ; Setup 4K stack before this bootloader
    mov ax, 0x07c0
    mov ss, ax
    mov sp, 4096
    ; Load next sectors
    mov si, DAP
    mov ah, 42h
    ; …
Run Code Online (Sandbox Code Playgroud)

x86 bios nasm bootloader bochs

2
推荐指数
1
解决办法
1257
查看次数