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
如果发现文中有错误之处,请务必告诉我,谢谢大家。
DIY微型操作系统(2)—— 寄存器赋值的更多相关文章
- DIY微型操作系统(1)—— 开发的准备
这个连载是根据<30天自制操作系统>这本书所写 只是类似于补充之类的东西,要详细的讲解,还请参照书上的内容 所以,首先我们要感谢作者川合秀实先生!(鞠躬) 为什么我想写这么一个补充的? 因 ...
- 写在连载之前——DIY微型操作系统篇
这个博客开了这么久都没写过什么东西.可能是因为我想写的东西在网上都能找得到,所以自己也懒得去写了. 但是这次当我在看<30天自制操作系统>这本书的时候发现,如果不用作者原版的光盘软件,要自 ...
- 用JAVA制作微型操作系统4月23日情况
弄好了一个自认为十分精美的界面,但本想着昨天就在开始按钮上先套入控制jp222面板上的jb2标签上的时间更新,这按钮起到开始线程的作用(我认为按钮应该可以通过t.start()来触发线程,结果不知为什 ...
- 《30天自制操作系统》笔记4 --- (Day2 下节)了解如何用汇编写操作系统中的HelloWorld
关于上一节,我测试了发现3e.4c.4e都OK ,4b 4d 4f都进不去系统还把qemu卡死了. 50不会输出HelloWorld,可能需要hex偶数且在0x3e~4f区间吧.上节复制并运行命令如下 ...
- 《30天自制操作系统》笔记5 --- (Day3)
这个专题荒废了许久,今天补点东西 不够准确的小结 用汇编来开发操作系统,就是使用汇编本身的功能再加上BIOS中断提供的功能来完成功能的过程. 汇编本身的功能不够,毕竟没有外部IO,所以通过给多个寄存器 ...
- 操作系统(3)实验相关原理——bootloader启动uCore
x86启动顺序 CS+EIP决定启动地址. CS部分后面又4个0,相当于是左移了4位.总之就是要让CS左移4位之后加上EIP来得到要跳转的地址. 0x7c00地方开始的512字节的内容就是bootlo ...
- 【STM32】MDK中寄存器地址名称映射分析
对于MCU,一切底层配置,最终都是在配置寄存器 51单片机访问地址 51单片机经常会引用一个reg51.h的头文件.下面看看它是怎么把名字和寄存器联系在一起的: 1 sfr p0=0x80; 2 p0 ...
- arm: 使用结构体操作寄存器
使用结构体操作寄存器: //寄存器赋值和取值的时候,要注意寄存器的长度,有的寄存器的值只有8位. //还要注意,使用volatile修饰寄存器变量.volatile 参考http://www.cnbl ...
- 对stm32寄存器的理解(个人理解,大神轻喷)
学习了stm32有一年了,今天想来写写自己对寄存器的理解,帮助那些有志学习stm32的朋友们少走一些弯路. ---------------------------------------------- ...
随机推荐
- 2018 leetcode
2018-8-6 Lowest Common Ancestor of a Binary Tree(二叉树) Merge Intervals(排序) 2018-8-7 Maximal Square (动 ...
- 【转载】TCP慢启动、拥塞避免、快速重传、快速回复
转载自:TCP慢启动.拥塞避免.快速重传.快速回复 转自:http://blog.csdn.net/itmacar/article/details/12278769 感谢博主的辛勤成果! 为了防止网络 ...
- HDU 6073 Matching In Multiplication(拓扑排序+思维)
http://acm.hdu.edu.cn/showproblem.php?pid=6073 题意:有个二分图,左边和右边的顶点数相同,左边的顶点每个顶点度数为2.现在有个屌丝理解错了最佳完美匹配,它 ...
- MySQL数据库调优技巧
原文链接:https://m.aliyun.com/bbs/read/300762.html MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它 ...
- go变量赋初值
package main import "fmt" func variableinitial(){ , var s string="abc" fmt.Print ...
- cannot marshal None unless allow_none is enabled
今天运行一个launch文件的时候出现了以下报错 load_parameters: unable to set parameters (last param was [/robot_state_pub ...
- 利用Chrome的Heap Snapshot功能分析一个时间段内的内存占用率
在下图测试代码第13行和第16行设断点. 以调试方式运行,首先断点在第13行处触发: 打开Chrome开发者工具,点击Profiles tab, 再点击按钮"Take Snapshot&qu ...
- 雷林鹏分享:C# 文件的输入与输出
C# 文件的输入与输出 一个 文件 是一个存储在磁盘中带有指定名称和目录路径的数据集合.当打开文件进行读写时,它变成一个 流. 从根本上说,流是通过通信路径传递的字节序列.有两个主要的流:输入流 和 ...
- C# 中的集合(Array/ArrayList/List<T>/HashTable/Dictionary)
int [] numbers = new int[5]; // 长度为5,元素类型为 int. string[,] names = new string[5,4]; // 5*4 的二维数组 byte ...
- eclipse 与 tomcat 的那些路径
我们用mvn创建了一个web工程,同时希望在eclipse里调试开发.mvn有mvn的路径要求,eclispe有eclipse的默认路径,怎么整合二者? 首先介绍一下eclipse的默认路径. 重点在 ...