Каково было значение регистра CS во время загрузки? - PullRequest
0 голосов
/ 29 сентября 2018

Я зеленая рука для ассемблера.В эти дни я использовал 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, каким было значение регистра CS в инструкции mov 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 голосов
/ 29 сентября 2018

В спецификации сказано, что 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:
    ...
...