为什么dos下的com文件都要org 0100h呢?为什么系统启动时要org 07c00h呢

这是因为 .com   载入内存后的起始偏址就是100h.   前面的100h字节是该程序的PSP 部分.   所以, 为了程序中对地址引用的正确,   必需加上org   100h语句。
-------------------------------------------------------------------------------------------------------------------------------------------------
FFFF0h与07C00h,这两个都是机器启动后默认访问的内存地址。曾经让我一度很晕,搞不清他们之间的关系。现在终于搞明白了,写到博客司上与大家分享。
首先要知道bios是用来初始化硬件的最底层的软件(然后才是操作系统),因此计算机启动后必须最先被执行。另外我们都知道CPU只能执行内存中的内容的,而一般内存中的数据是易失性的,断电之后内容就会消失。工程师的解决方法是:将存放bios的rom芯片与内存芯片统一编址(不明白的话去看看微机原理与接口的书就明白了)。这样就可以把存放bios的ROM芯片看作是数据永远不会消失不允许被更改的内存了。
开机启动后默认的CS=FFFFh IP=0000h。这个地址就是bios的地址。这段内存空间很小,所以不能够容下操作系统等大型程序。
相对bios而言操作系统的功能更强大,更新也更快但是也需要更多的空间,通常放在硬盘中。但是如果没有bios的话,那么将会连硬盘都不能使用,又如何启动存放在硬盘中的操作系统呢?正是由于此,机器启动后自动执行bios使其它完成硬件初始化(这样包括硬盘在内的cpu以外的其他硬件设备就可以工作了)。bios完成硬件初始化的任务后,就要把权力移交给操作系统。
工程师进行了强制性的规定:到内存中的07c00h 处寻找系统的引导程序,即CS=0000h IP=7c00h。也就是说任何系统,他的引导程序都必须安排在07c00h开始的地方,否则就不能被正确的引导。当引导程序完成后我们就进入了Linux Windows等系统了。
后面为了调试方便,还可以吧org 07c00h改为0100h,生成 com文件就能直接在dos下运行。cx表示的是字符串的个数,10进制的,可以自行修改,boot sector的结束地址也是固定的,为0xAA55,呵呵,好玩
----------------------------------------------------------------------------------------------------------------------------------------------------1. boot sector 
在我们接通电源打开计算机时,系统会加电自检,自检什么呢?系统加电时cpu会自动进行复位,把相关的寄存器设置成默认值,在IA32架构下,eip被设置为如下值:0000FFF0H,CS的值看起来是这个样子的:Selector=F000H,Base=FFFF0000H,Limit=FFFFH,Attribute=Present,R/W,Accessed,cr0可能会被设置成如下值:0x60000010。从cr0的值可以知道,系统加电后CPU工作在实模式下(PE位为0)。从eip和cs的值我们知道,加电后CPU执行的第一条指令是:F000H:FFF0H,这条指令一般存在boot rom中,此条指令一般是一条跳转指令,主要完成CPU外围设备的初始化,一旦完成后,系统接着会搜索可用的设备(根据BIOS的设置)寻找开始512字节,如果发现其是以0xAA55结束的话,则把其读入内存位置:0x0000:0x7C00处,然后开始执行。这就是为什么书上的事例代码要从0x7C00处开始的缘故。好了,到这里,计算机已经开始转入我们自己写的操作系统了,另外,书中的代码如果要在DOS下运行,需要把org 07C00h改为org 0100h,这样做的目的是因为在DOS下,装载程序会事先创建一个称为程序段前缀(PSP)256字节的数据区,用来和被装载的程序通信,具体的细节请查验相关资料。而0100h刚好是256个字节的处,这也是代码段开始执行处。
       说完程序的加载运行,让我们看看BIOS的10号中断处理子程序的显示功能。这里10号中断有很多子程序,书中用到了13子程序,此子程序就是显示字符串的,其中的参数如下:ES:BP=串地址;CX=串长度;DH=起始行;DL=起始列;BH=页号;BL=属性;AH=子程序编号,这里为13;这里BL是这样子定义的:闪烁 背景红 背景绿 背景蓝 高亮 前景红 前景绿 前景蓝(顺序为高字节到低字节)。这样BL=0Ch,二进制为:1100,由其定义可知为黑底高亮红字。
-------------------------------------------------------------------------------------------------------------------------------------------------

转载于:https://www.cnblogs.com/wanghj-dz/archive/2011/05/12/2044062.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt中的TableWidget初始化表头、行高、选中、自动扩展和接受修改

一、需求 设置QT中的TableWidget样式,初始化表头,行高和颜色,行选中,是否修改,是否自动扩展宽度等。 二、代码 void MainWindow::TimerListInit() {QStringList InfHeader;int columnNum;columnNum 7;ui->table…

JTAG、SWD接口定义

版权声明:本文为博主原创文章,转载请注明。 博客已转到 http://blog.csdn.net/upc_xbt https://blog.csdn.net/u014124220/article/details/50829713Jlink仿真器接口仿真器端口连接目标板备注1. VCCMCU电源VCCVCC2. VCCMCU电源VCCVCC3. TRSTTRSTTest ReS…

[leedcode 215] Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element. For example,Given [3,2,1,5,6,4] and k 2, return 5. Note: You may assume k is always valid, 1 ≤ k ≤ arrays lengt…

Ubuntu 修改默认的PDF打开方式

Ubuntu自带了可以打开PDF的文档编辑器,如GIMP和文档查看器,但这些自带的文档编辑器并不是很好用,很可能会产生乱码,以至于不方便…… 由于在WIN下对foxit的产品感觉很满意,并且知道它也为linux做了一个PDF查看器&#…

[react] React组件的构造函数有什么作用?

[react] React组件的构造函数有什么作用? 在react的新的写法中,每一个组件都是一个类,这个很符合es6的语法规范,在es6中要想创建一个对象,就要调用相应的构造函数, react的组件渲染有两种情况,第一种情况是…

高级Linux程序设计第五章:进程间通信

From: http://www.cnblogs.com/forfuture1978/archive/2010/04/29/1723417.html 五种进程间通信的方式: 共享内存(shared memory):其允许多个进程通过读写同一块内存地址来相互通信。 内存映射(Mapped memory):其和共享内存相似,…

Qt 给应用程序添加图标

一、需求 给应用程序.exe添加图标。 二、代码 1、资源文件中添加进去main.ico 32X32pt 2、xxxx.pro文件中 添加RC_ICONS main.ico

#pragma pack(push,1)与#pragma pack(1)的区别

这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式。#pragma pack (n) 作用:C编译器将按照n个字节对齐。#pragma pack () 作用:取消自定义字节对齐方式…

Drainage Ditches - poj 1273(网络流模板)

题意:1是源点,m是汇点,求出来最大流量,没什么好说的就是练习最大流的模板题 ************************************************************** 先用Edmonds-Karp的算法做一下试试吧重边贡献了 1W,要加上所有的重边才算…

sawmill全方位日志分析大师

Sawmill 是一套崭新的集中式(中文)日志报表系统,除了提供收集设备或服务的日志,整合、分析成有效报表外,并能降低企业成本与信息管理人员减少学习报表时间,且能于全球各地上网即可获得IT信息。 集中式 : 集中整合各式设…

[react] React中在哪捕获错误?

[react] React中在哪捕获错误? 在react 15 极其以前的版本中,组件内的UI异常将中断组件内部状态,导致下一次渲染时触发隐藏异常。React并未提供友好的异常捕获和处理方式,一旦发生异常,应用将不能很好的运行。而React 16版本有所…

VC6.0 控件Radio Button的使用

From: http://www.cppblog.com/Lee7/archive/2007/09/13/32152.html 使用方法: 1.建立一个基于对话框的用用程序,在其中加入三个Radio Button,ID分别为: IDC_RADIO1,IDC_RADIO2,IDC_RADIO3 2.控件的初始化: 在对话框类的OnInitDialog中加入代码: …

Qt 实现QT控件中的QLabel显示图片并自适应显示

一、需求 实现QT控件中的QLabel显示图片,并自适应显示。 二、代码 QImage Image; Image.load(":/image/image/logo.jpg"); QPixmap pixmap QPixmap::fromImage(Image); int with ui->label_logo->width(); int height ui->label_logo->…

linux RTC 驱动模型分析

linux RTC 驱动模型分析RTC(real time clock)实时时钟,主要作用是给Linux系统提供时间。RTC因为是电池供电的,所以掉电后时间不丢失。Linux内核把RTC用作“离线”的时间与日期维护器。当Linux内核启动时,它从RTC中读取时间与日期,…

Install Docker Mac OS X

检查 Mac OS version 要求必须是 OS X 10.6 Snow Leopard or newer to run Boot2Docker安装 Boot2Docker 列表内容下载地址:https://github.com/boot2docker/osx-installer/releases/download/v1.7.0/Boot2Docker-1.7.0.pkg 下载后点击安装,就是按照提示…

linq to sql报错,

以上是由于我把关联表中的string类型写成int类型所导致的,记一下,备用。转载于:https://www.cnblogs.com/server126/archive/2011/05/25/2057416.html

[react] React怎样引入svg的文件?

[react] React怎样引入svg的文件&#xff1f; import React from react; import logo from ./logo.png; // Tell Webpack this JS file uses this imagefunction Header() {// Import result is the URL of your imagereturn <img src{logo} alt"Logo" />; } …

[VC6] RadioBox使用入门

基于对话框的应用程序&#xff0c;界面如下&#xff1a; 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 具体请参考代码&#xff1a; 关键代码&#xff1a; // del2Dlg.cpp : implementation file //#include "stdaf…

树莓派使用STEP1:装系统

1、windows安装SD卡格式化软件&#xff1a;SDFormatter.exe 2、windows安装系统烧录软件Win32DiskImager.exe 3、下载镜像&#xff1a;https://www.raspberrypi.org/downloads/raspbian/ 并解压缩 4、用Win32DiskImager将下载的镜像文件烧录进SD卡。 5、插上SD到树莓派&…

css实现文字过长省略显示

.simpleName {width:110px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }<div class"simpleName"><a target"_blank" href"">文本</a></div> 1、width:超高110px部分省略显示。 2、white-space:now…