【发布时间】:2019-03-05 01:48:13
【问题描述】:
我是汇编语言的新手。这些天我用 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
【问题讨论】:
-
这取决于您的 BIOS 是否将 CS=0 或 IP=0 设置为非零 CS,或其他。您可能不需要关心,只要您通过已知的段库访问数据(不是代码)。
-
据我所知,您的 BOCHS 创建了一个名为“bochsout.txt”的日志文件。在那里您会找到一个条目“从 0000:7c00 启动”。这是启动引导扇区时的
CS:IP,即您的代码。所以,CS的值为 0x0000。 -
org是汇编指令,而不是命令。它将影响汇编器如何计算代码中进一步使用的标签的偏移量,因此它是汇编器的命令,但不是二进制引导加载程序的一部分。
标签: assembly x86-16 boot bios bochs