书上已经为我们提供了最简单的“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)—— 寄存器赋值的更多相关文章

  1. DIY微型操作系统(1)—— 开发的准备

    这个连载是根据<30天自制操作系统>这本书所写 只是类似于补充之类的东西,要详细的讲解,还请参照书上的内容 所以,首先我们要感谢作者川合秀实先生!(鞠躬) 为什么我想写这么一个补充的? 因 ...

  2. 写在连载之前——DIY微型操作系统篇

    这个博客开了这么久都没写过什么东西.可能是因为我想写的东西在网上都能找得到,所以自己也懒得去写了. 但是这次当我在看<30天自制操作系统>这本书的时候发现,如果不用作者原版的光盘软件,要自 ...

  3. 用JAVA制作微型操作系统4月23日情况

    弄好了一个自认为十分精美的界面,但本想着昨天就在开始按钮上先套入控制jp222面板上的jb2标签上的时间更新,这按钮起到开始线程的作用(我认为按钮应该可以通过t.start()来触发线程,结果不知为什 ...

  4. 《30天自制操作系统》笔记4 --- (Day2 下节)了解如何用汇编写操作系统中的HelloWorld

    关于上一节,我测试了发现3e.4c.4e都OK ,4b 4d 4f都进不去系统还把qemu卡死了. 50不会输出HelloWorld,可能需要hex偶数且在0x3e~4f区间吧.上节复制并运行命令如下 ...

  5. 《30天自制操作系统》笔记5 --- (Day3)

    这个专题荒废了许久,今天补点东西 不够准确的小结 用汇编来开发操作系统,就是使用汇编本身的功能再加上BIOS中断提供的功能来完成功能的过程. 汇编本身的功能不够,毕竟没有外部IO,所以通过给多个寄存器 ...

  6. 操作系统(3)实验相关原理——bootloader启动uCore

    x86启动顺序 CS+EIP决定启动地址. CS部分后面又4个0,相当于是左移了4位.总之就是要让CS左移4位之后加上EIP来得到要跳转的地址. 0x7c00地方开始的512字节的内容就是bootlo ...

  7. 【STM32】MDK中寄存器地址名称映射分析

    对于MCU,一切底层配置,最终都是在配置寄存器 51单片机访问地址 51单片机经常会引用一个reg51.h的头文件.下面看看它是怎么把名字和寄存器联系在一起的: 1 sfr p0=0x80; 2 p0 ...

  8. arm: 使用结构体操作寄存器

    使用结构体操作寄存器: //寄存器赋值和取值的时候,要注意寄存器的长度,有的寄存器的值只有8位. //还要注意,使用volatile修饰寄存器变量.volatile 参考http://www.cnbl ...

  9. 对stm32寄存器的理解(个人理解,大神轻喷)

    学习了stm32有一年了,今天想来写写自己对寄存器的理解,帮助那些有志学习stm32的朋友们少走一些弯路. ---------------------------------------------- ...

随机推荐

  1. 深度优先搜索之小z的房子与验证码识别

    题目:小z的房子 高级语言程序设计实践题目:2.4 小z 的房子 ★实验任务 小z 通过自己的努力,终于发家致富.现在小明有一个大小为N*M 的 院子,雨后积起了水.四联通的积水被认为是连接在一起的. ...

  2. 成对HMM(Pair HMMs)用于双序列比对--转载

    http://blog.163.com/bioinfor_cnu/blog/static/19446223720118205527863/ 所有文章:http://blog.163.com/bioin ...

  3. nginx 跨域解决

    server { listen 8811 default_server; root /opt/bp; # Make site accessible from http://localhost/ ser ...

  4. django查询集API

    本节将详细介绍查询集的API,它建立在下面的模型基础上,与上一节的模型相同: from django.db import models class Blog(models.Model): name = ...

  5. DDD领域模型和充血对象

    DDD领域模型 官方说法 领域驱动设计,它是对面向对象的的分析和设计(OOAD,Object Orient Analysis Design)的一个补充,对技术框架进行了分层规划,同时对每个类进行了策略 ...

  6. Flutter学习笔记(二)

    *.assets 当引用图片的时候,需要在pubspec.yaml的文件中的flutter下添加assets,类似于下面的样子: image.png 这里需要注意的是文件里的assets只要一个缩进即 ...

  7. 怒学Java8系列一:Lambda表达式

    PDF文档已上传Github  Github:https://github.com/zwjlpeng/Angrily_Learn_Java_8 第一章 Lambda 1.1 引言 课本上说编程有两种模 ...

  8. [.NET开发] C#实现发送手机验证码功能

    之前不怎么了解这个,一直以为做起来很复杂. 直到前两天公司要求要做这个功能. 做了之后才发现 这不过就是一个POST请求就能实现的东西.现在给大家分享一下,有不足之处还请多多指教. 废话不多说 直接上 ...

  9. R & ggplot2 & Excel绘图(直方图/经验分布图/QQ图/茎叶图/箱线图)实例

    持续更新~ 散点图 条形图 文氏图 饼图 盒型图 频率直方图 热图 PCA图 3D图 火山图 分面图 分面制作小多组图 地图 练习数据: year count china Ame jap '12 2. ...

  10. 4-3 atom订阅源

    部分章节还没有实做练习. 网上购买了安道的Rails指南中文版.联系了这个作者问了一个问题Rails5的翻译问题. try(), 判断是否存在,不存在的话返回nil.例子:pasting @perso ...