书上已经为我们提供了最简单的“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. Unity3D学习笔记(二十一):InputFiled、Dropdown、Scroll Rect、Mask

    InputFiled组件(输入框) Text Component(显示内容):显示输入内容的Text的组件 Text(输入内容):输入的文本内容 Character Limit:字符数量限值,0是无限 ...

  2. tyvj 1038 忠诚 区间最小值 线段树或者rmq

    P1038 忠诚 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天 ...

  3. MVC 子对象数据传递

    1.接受参数 public ActionResult Address(User user) { return View(); } 2. User对象类型 public class User { pub ...

  4. JavaMail直接发送邮件

    一般用JavaMail发送邮件都需要先登录到外部smtp服务器(如smtp.163.com) 二次转发,其实只要得到域名的邮件交换服务器地址(MX)就可以直接将邮件发出 这里用到了dnsjava(下载 ...

  5. ubuntu配置zsh和oh-my-zsh

    1安装zsh sudo apt-get install -y zsh chsh -s /bin/zsh 2安装oh-my-zsh $ sh -c "$(curl -fsSL https:// ...

  6. Python -- Scrapy 框架简单介绍(Scrapy 安装及项目创建)

    Python -- Scrapy 框架简单介绍 最近在学习python 爬虫,先后了解学习urllib.urllib2.requests等,后来发现爬虫也有很多框架,而推荐学习最多就是Scrapy框架 ...

  7. English trip -- Review Unit3 Family 家人

    Words daughter grandfather grandmother husband wife uncle aunt brother sister Who is ...? Loki's ... ...

  8. Docker 构建 redis 集群

    安装docker 1.yum install docker 方法一: 1. docker pull redis 2.docker run -d --name redis-1 -p 7001:6379 ...

  9. 『科学计算』通过代码理解线性回归&Logistic回归模型

    sklearn线性回归模型 import numpy as np import matplotlib.pyplot as plt from sklearn import linear_model de ...

  10. 让CLOVER默认引导WINDOWS

    解决问题帖子: http://www.insanelymac.com/forum/topic/296000-force-clover-to-always-choose-win-81-efi-as-de ...