书上已经为我们提供了最简单的“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
如果发现文中有错误之处,请务必告诉我,谢谢大家。
转载于:https://www.cnblogs.com/warren-wong/p/3976042.html
相关资源:JAVA上百实例源码以及开源项目