bootloader相关内容
我正在学习引导扇区.我从 NASM 网站下载了nasm-installer-x64.exe.我的操作系统是win7-64bit.当我运行以下代码时,它将无法正常工作 mov ah, 0x0e; mov al, the_secret; int 0x10; mov al, [the_secret]; int 0x10; mov bx, [the_secret]; add bx, 0x7c0
..
我正在按照一个教程编写汇编中的hello world bootloader,并且我正在将NASM汇编程序用于x-86机器.这是我正在使用的代码: [BITS 16] ;Tells the assembler that its a 16 bit code [ORG 0x7C00] ;Origin, tell the assembler that where the code will
..
在过去一周的时间里,我一直在开发一个简单的OS,用于学习目的和...“乐趣". VirtualBox和NASM相继推出,我实际上有了一个不错的开端.最终,我决定通过臭名昭著的断链教程,直到从文件系统加载为止. 有了一些HexFiend的恶作剧和一些空白的FAT16图像,我最终弄清了BPB.还有一些其他的Assembly hackery(基础是Brokenthorn的教程,第6部分),我也得到
..
任何汇编专家都知道表示第一个USB驱动器的参数(寄存器 dl )吗? 我正在完成一些NASM教程,并且想要进行物理引导(我可以使用qemu获得干净的引导). 这是从磁盘加载“内核"数据的代码部分: loadkernel: mov si, LMSG ;; 'Loading kernel',13,10,0 call prints ;; ex puts()
..
我正在学习如何从osdev中制作一个引导程序.我正在使用NASM汇编我的代码,并使用一台x86机器来运行我的引导程序.这是一小段代码,它打印一个字符并进入无限循环: BITS 16 xor ax, ax mov ah, 0x0E mov al, 0x41 int 0x10 jmp $ times 510-($-$$) db 0x00 db 0x55 db 0xAA 我的问题是:为
..
我正在用汇编语言开发操作系统. 在某个时候,我从NASM收到此错误: os.asm:113:错误:TIMES值-138为负 我想结束这个项目.只有这样的错误使我感到绝望! 这是代码: BITS 16 start: mov ax, 07C0h ; Set up 4K stack space after this bootloader add ax
..
我将引导加载程序从CHS更改为LBA,因此我将int 13h 02h替换为int 13h 42h.它可以在QEMU中正常运行,但是,我在Bochs和笔记本电脑上运行时遇到麻烦. 我用dd if=main.bin of=/dev/sdb bs=512将引导加载程序写入USB闪存驱动器.笔记本电脑加载英特尔UNDI并给我以下错误:No bootable device - insert boot
..
一般问题 我一直在开发一个简单的引导加载程序,偶然发现了在某些此类指令不起作用的环境中的问题: mov si, call_tbl ; SI=Call table pointer call [call_tbl] ; Call print_char using near indirect absolute call ; vi
..
我正在编写汇编中的Stage 1引导加载程序,以尝试将FAT12文件系统加载到内存中,以便可以加载我的Stage 2引导加载程序.我已经设法将FAT加载到内存中,但是我正在努力将根目录加载到内存中. 我目前正在使用此作为参考,并产生了以下内容: .load_root: ;es is 0x7c0 xor dx, dx ; blank dx for
..
我在汇编编程中只有3-4天的时间.尝试在视频内存中打印字符串并通过qemu运行. 我希望这个程序能打印出你好世界.但是它什么也不打印. qemu窗口显示“从硬盘启动...",没有其他内容 引导加载程序只允许16位吗?在那种情况下,我将如何做MMIO?我遵循的是[bits 32] [org 0x7c00] loop: mov edx, 0xb8000 mov ah, 0x0f mov ebx,
..
我是学习OS开发的新手.从我读过的书中可以看出,引导加载程序会将第一个MBR复制到0x7c00,然后以实模式从那里开始. 并且,示例以16位汇编代码开头. 但是,当我查看当今的Linux内核时, arch/x86/boot 具有"header.S"和"boot.h",但是实际代码在main.c中实现. 这似乎对“不编写汇编"有用. 但是,这是如何在Linux中专门完成的呢? 我可以粗略
..
我有zynq微粉化的电路板,并且我的日志消息如下... [Mon Jun 09 19:28:38.231 2014] SF: Detected S25FL129P_64K/S25FL128S_64K with page size 64 KiB, total 16 MiB [Mon Jun 09 19:28:38.446 2014] SF: 1245184 bytes @ 0x520000 R
..
在 Android源文件中找到重启命令,找到以下行: __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, \ LINUX_REBOOT_CMD_RESTART2, argv[optind]); 这是使用特定命令重新引导系统的标准Linux系统调用,请参见 Unix系统调用重新启动. 在Android中,此命令用于告
..
我是编写引导加载程序的新手.我已经在asm中编写了helloworld引导程序,并且 我现在正在尝试用C语言编写一个.我已经用C语言编写了一个helloworld引导加载程序,但是我无法对其进行编译. 这是我的代码.我究竟做错了什么?为什么不编译? void print_char(); int main(void){ char *MSG = "Hello World!"; int i;
..
我正在使用链接器文件处理我的应用程序中的问题.发生了什么事是在资源管理器选项卡中似乎没有“选择"链接器文件 我必须指出我也有一个引导程序. 我在地址1FC02FF8h收到“(944)数据冲突"错误,并且我认为与此有关.有人可以帮我吗?非常感谢. 解决方案
..
我制作了一个非常简单的1级引导加载程序,它执行两个主要任务:它从16位实模式切换到64位长模式,并且从硬盘读取接下来的几个用于启动基本内核的扇区. /p> 对于基本内核,我试图用C而不是汇编语言编写代码,对此我有一些疑问: 我应该如何编译和链接nasm文件和C文件? 编译文件时,应该编译为16位还是64位?因为我从16位切换到64位. 我如何将C或程序集中的更多文件添加到项目中?
..
我正在尝试以纯汇编语言编写引导加载程序时,在gcc gnu汇编程序中构建16位内核,但是在单字符可以的情况下我无法打印出字符串: 这是我的bootloader.asm: org 0x7c00 bits 16 section .text mov ax,0x1000 mov ss,ax mov sp,0x000 mov esp,0xfffe xor ax,ax m
..
我知道加载程序是将程序加载到主存储器的程序.那么,这实际上如何工作?到底会发生什么?实际上,当加载程序加载程序时,会在PCB中创建一个条目,并将该程序放入作业池中.程序的可执行代码如何复制到主存储器?简单地说,如何使用C或C ++将文件的代码加载到主存储器中? 解决方案 这在很大程度上取决于操作系统.我将在这里写的是特定于Linux的,但是类似的事情也会在其他操作系统上发生. 首先,
..
我有一个用NASM编写的简单的2阶段引导程序,我想使用Rust继续OS内核. 所以我用Cargo创建了一个每晚的Rust项目,并在src/main.rs文件中禁用了std.现在,我试图将Assembly文件与Cargo项目链接,但没有成功. 我应该如何编译和链接NASM引导程序与Rust内核? 解决方案 几个小时后,我编译了代码. 解决方案是(如Michael Petch
..
我尝试使用此开发引导加载程序,但运行时显示: disk read error! 如果我忽略它,则在后面的部分中,它向我显示了错误的内存映射.我也跟踪了其他一些消息,但徒劳无功.感觉就像我只是在复制他们在做什么.如果我做的有些不同,每次都会产生一种新的错误. 我应该使用已经构建的引导加载程序还是该怎么做? 磁盘加载错误的代码如下: [org 0x7c00] KE
..