DIY微型操作系统(2)—— 寄存器赋值

书上已经为我们提供了最简单的“hello world”程序了

相信大家玩的也挺欢乐的,不过这只是引导扇区的雏形

而且如果找不到完整的光盘上的源代码,新手估计很难学的下去

所以之后文中也会尽量贴出代码

不过在继续开始之前,我们有另外意见很重要的事情要做:

让所有东西都在掌控之中!

如果你觉得觉得有几个特殊寄存器的值不知道怎么给,那么

接下来我们要看看怎么样随心所欲地给所有寄存器赋值

 

 

Intel x86系列寄存器与赋值方式 (存放到内存顺序:低地址对低地址)

32bit名称

16bit名称

注释

赋值方式

EAX

AX

accumulator

 

ECX

CX

counter

 

EDX

DX

data

 

EBX

BX

base

可以用来控制制定内存地址(变址):

MOV [SI],AX

EBP

BP

base pointer

ESI

SI

source index

EDI

DI

destination index

ESP

SP

stack pointer

 

EFLAGS

FLAGS

flags

不可以用MOV直接赋值

 

IP

instruction pointer

 

CS

code segment

 

DS

data segment

不能用MOV赋立即数

但可以通过AX等寄存器赋值

 

ES

extra segment

 

SS

stack segment

 

FS

segment part2

 

GS

segment part3

 

GDT

global description table

通过LGDT赋值

 

LDT

local description table

通过LLDT赋值

 

 

赋值方式补充

寄存器

赋值方式

DS,ES,SS,FS,GS

MOV AX,7C00H

MOV DS,AX

PUSH 和 POP 指令

IP

JMP

CALL

CS:IP

JMP 0x0001:0x0000

CALL

PUSH 和 RET 指令

(E)FLAGES

PUSHFD    ;push flags double-word

POP EAX

...

PUSH EAX

POPFD    ;pop flags double-world

GDT

LGDT

LDT

LLDT

 

一看这些,估计头都有点晕了吧

没关系,也不用一下子就记住,只要用的时候知道上哪里查找就可以了。在以后的开发过程中用着用着就记住了。

那么这次我们就到这里,可以在看书的时候稍微留意一下作者川合先生的代码是怎么赋值的,或许会有不少新收获。

 

转载本文请保留以下网址:http://www.cnblogs.com/warren-wong/p/3976042.html

如果发现文中有错误之处,请务必告诉我,谢谢大家。

 

posted @ 2014-09-16 23:01  大火人  阅读(1556)  评论(0编辑  收藏  举报