我是汇编语言的新手。这些天我使用 bochs 来模拟虚拟软盘的启动过程。但我不知道的一件事是系统初始化时CS
寄存器值是多少。
;; init registers
org 0x7c00
BaseOfStack equ 0x7c00
Label_Start:
mov ax, cs
mov ds, ax
mov es, ax
mov ss, ax
mov sp, BaseOfStack
;; clear screen
mov ax, 0600h
mov bx, 0700h
mov cx, 0
mov dx, 0184h
int 10h
上面的代码只是其中的一部分。当执行ORG
命令时,指令mov ax, cs
处的CS
寄存器值是多少。和0x7c00一样吗?谢谢。
以下是 bochsrc 配置:
romimage: file="$BXSHARE/BIOS-bochs-latest"
vgaromimage: file="$BXSHARE/VGABIOS-lgpl-latest"
boot: floppy
floppy_bootsig_check: disabled=0
floppya: type=1_44, 1_44="myboot.img", status=inserted
pci: enabled=1, chipset=i440fx
vga: extension=vbe, update_freq=15
cpu: ips=15000000
log: bochsout.txt
mouse: enabled=0
megs: 32
规范说CS:IP = 0000:7C00
在启动时,但一些 BIOS 供应商会关闭07C0:0000
。 最好的方法是编写引导扇区,使其与两种约定一起使用,方法是尽早跳转到已知的选择器:
org 0x7c00
xor ax, ax
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0x7c00
jmp 0x0000:set_cs
set_cs:
...