引导时CS寄存器的值是多少?

时间:2018-09-29 06:50:35

标签: assembly x86-16 boot bios bochs

我是汇编语言的绿色代表。这些天来,我用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命令后,指令CSmov ax, 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

1 个答案:

答案 0 :(得分:5)

该规范说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:
    ...