标签: bootloader

通过Assembler在引导加载程序级别执行C程序

我在Assembler中编写了一个自定义(非常基本的"Hello world!")引导加载程序,我想在其中执行一个C程序.C程序是否可以工作,或者由于stdio.h文件丢失而失败?我怎么能将C程序和引导加载程序捆绑到单个.bin文件中dd到闪存驱动器/ CD?

c assembly bootloader

0
推荐指数
1
解决办法
1037
查看次数

读取 CD 扇区时出现问题 INT 13h AH=42H

我一直在尝试编写一个引导加载程序,它可以从 CD 而不是软盘上读取扇区,并且我一开始只是读取第一个扇区,但是当我运行它时,进位标志仍然设置,并且根据此处的文档:http://en.wikipedia.org/wiki/INT_13H#INT_13h_AH.3D42h%3a_Extended_Read_Sectors_From_Drive 这意味着它无法从映像读取扇区这是我的完整启动代码:

BITS   16

ORG  0x00

Start: jmp main


;Colors for text
%DEFINE TEAL 0x03
%DEFINE RED 0x04
%DEFINE PURPLE 0x05
COL: db 0
ROW:  db 0

;macro for print
%macro Print 2
    xor dx, dx
    mov dh, BYTE[ROW];puts the row into the dh register
    xor bx, bx
    mov bl, %2
    mov si, %1
    call cPrint


    mov ah, 0x02            ;set cursor pos
    mov bh, 0x00            ;page 00
    inc dh                  ;row 00
    mov dl, 0x00            ;col. 00    
    int …
Run Code Online (Sandbox Code Playgroud)

assembly bootloader

0
推荐指数
1
解决办法
1926
查看次数

如何获取RAM大小,bootloader

我会问如何在引导程序中获得总RAM大小和可用RAM大小.截至目前,我知道如何获得更低的内存.但由于某种原因,我无法将其打印到屏幕上,因为它保存在ax寄存器中.这是我到目前为止:

[BITS 16] ; BootLoader always starts 16 BIT Moded

    jmp main_bootloader ; Jump to Main Bootloader

     ;************** INITALIZED VARIABLES *********************;
      string db 'BoneOS Loading . . .', 0x0
      string2 db 'Starting of 16Bit Bootloader' , 0x0
      press_to_cont db 'Press any key to continue . . .' , 0x0
      carry_flag_err db ' CARRY FLAG HAS BEEN SET! ERROR ' , 0x0
      magic_number equ 0x534D4150
      limit dw 0
      base  dw 0
      low_memory dd 0
      answer resb 64
     ;*********************************************************;  

     ;******************** GDTs *****************************; …
Run Code Online (Sandbox Code Playgroud)

ram x86 assembly osdev bootloader

0
推荐指数
1
解决办法
1443
查看次数

在没有 int 10h 的情况下以实模式显示字符?

网络上的一些程序似乎在不使用int指令的情况下也能完成相同的工作,例如直接写入bx800. 在这种情况下,BIOS 究竟如何知道是否应该将某些文本写入控制台?是否保证初始中断发生?如果是这样,ah那么完成相同工作的等效装配线(或中断向量 和 的组合)是什么时候?

x86 operating-system intel bios bootloader

0
推荐指数
1
解决办法
584
查看次数

将标头添加到固件映像 stm 32

我正在着手在 STM32(类似于 IAP AN4657)上开发自定义引导加载程序。假设flash分为3个区域scratch,user area,IAP code(bootloader)和待升级的固件都在scratch area。我想要一个带有固件版本和校验和的标头,我需要了解如何实现固件标头并从 IAP(引导加载程序)代码检查固件的有效性。对资源的任何参考表示赞赏。

c stm32 bootloader

0
推荐指数
1
解决办法
1953
查看次数

MASM:如何解决错误“不允许立即操作数”

我的汇编程序具有以下结构:

BPB_FAT16   STRUCT                     ; Base BPB_FAT16. Size=0x19=25.
BytesPerSector      DW  0x0200 ; Size of HW sector, usualy 512.
SectorsPerCluster   DB  0x01   ; Valid values 1,2,4,8,16,32,64,128.
ReservedSectors     DW  0x0001 ; NrOfSectors preceding FAT.
NumberOfFats        DB  0x02   ;
RootEntries         DW  0x00E0 ; Max number of YWORD entries in the 
                               ;root dir.
SmallSectors        DW  0x0B40 ; See also .LargeSectors.
MediaDescriptor     DB  0xF0   ; 0xF0 floppy disk, 0xF8 hard disk.
SectorsPerFat       DW  0x0009 ;
SectorsPerTrack     DW  0x0012 ;
NumberOfHeads       DW  0x0002 ;
HiddenSectors       DW 0x00000000 …
Run Code Online (Sandbox Code Playgroud)

x86 assembly masm bootloader data-structures

0
推荐指数
1
解决办法
289
查看次数

无法理解堆栈段寄存器

段寄存器用于将可寻址存储器的范围从 64K 字节增加到 1M 字节。但是,我很难理解堆栈段寄存器(SS),因为堆栈已经有两个与之关联的其他寄存器:spbp

假设我将SS设置为5000h ,然后决定通过初始化bpsp寄存器来初始化堆栈。最初堆栈应该是空的。因此,spbp最初应该具有相同的内容。我可以使用任何随机地址初始化sp吗?或者我会有一些限制吗?

例如,用地址7000h初始化sp可以吗

assembly bootloader memory-segmentation x86-16 stack-pointer

0
推荐指数
1
解决办法
1172
查看次数

为什么我的汇编子例程被调用,即使我没有在引导加载程序的 _start 中调用它

我目前正在开发一个 BIOS 引导加载程序,我对汇编比较陌生,我一直在阅读它,我了解它是如何工作的,但有一些事情我不明白,涉及我的汇编代码的执行顺序。

所以基本上我的子例程 _print 是如何被调用的,即使我没有调用它。其次,如果BIOS幻数一直在文件末尾,即使我没有到达,它是如何分配的。

我将不胜感激任何帮助,谢谢。

[ORG 0000:7C00]

global _start 

_print:
    mov ah, 0x0e 
    mov al, '['
    int 0x10
    mov al, '+'
    int 0x10
    mov al, '['
    int 0x10
    ret

_start:
    jmp $

times 510 - ($-$$) db 0
dw 0xAA55
Run Code Online (Sandbox Code Playgroud)

assembly nasm bootloader x86-16

0
推荐指数
1
解决办法
66
查看次数

哪种寻址方式用于访问磁盘?

我正在学习OS开发,我处于初级水平.我创建了一个简单的启动加载器 要访问磁盘上的其他文件(比如HDD或USB驱动器),我应该使用哪种寻址模式?(CHS或LBA或INT 13h扩展).

哪种寻址方式非常有效(手段,可以用于大多数驱动器)?

谢谢

x86 assembly kernel disk-access bootloader

-1
推荐指数
1
解决办法
136
查看次数

如何用鼠标移动光标?

我正在x86汇编中开发一个实模式操作系统。我设法用键盘移动了光标,但我想用鼠标移动了光标。我不知道 我发现int 33h处理鼠标,但是我似乎无法使用int 33h移动光标。

assembly operating-system osdev bootloader x86-16

-1
推荐指数
1
解决办法
167
查看次数