在开始讲述as86汇编器前,这本书引用内核中bootsect.s框架程序汇编代码来解释,记录下这一小段代码中不理解的地方,下面是这段实例代码:

.globl begtext, begdata, begbss, endtext, enddata, endbss
.text !正文段
begtext: !标号
.data !数据段
begdata: !标号
.bss !未初始化数据段
begbss: !标号 .text !正文段
BOOTSEG = 0X07C0
!BIOS加载bootsect代码的原始段地址 entry start
start:
jmpi go,BOOTSEG
go:
     mov ax,cs
mov ds,ax
mov es,ax
mov [msg1+],ah
mov cx,#
mov dx,#0x1004
mov bx,#0x000c
mov bp,#msg1
mov ax,#0x1301
int 0x10 !BIOS中断调用0x10,功能0x13,子功能01
loop1:
jmp loop1 !死循环
msg1: .ascii "Loading system..." !调用BIOS中断显示的信息,共20个ASCII码字符
.byte ,
.org !表示以后语句从地址510(0x1FE)开始存放
.word 0xAA55 !有效引导扇区标志,供BIOS加载引导扇区使用
.text
endtext:
.data
enddata:
.bss
endbss:

问题1:书中说“ entry是保留关键字,用于迫使ld86链接器在生成可执行文件中包括进其后指定的标号'start'”,又说“在我们的示例中以及Linux内核boot/bootsect.s和boot/setup.s汇编程    序中完全可以忽略这个关键词,因为我们不希望在生成的纯二进制文件中包含任何符号信息”。以前学汇编的时候,把entry理解为定义程序的入口,如果在二进制可执行文件中没有这    个入口start,那程序从哪里开始执行是怎么确定的呢?

问题2:jmpi go,BOOTSEG,“这是一个段间远跳转语句。BIOS把程序加载到0X7C00并跳转到该处时,所有段寄存器的值均为0,这个跳转语句是为了给CS赋值0X7C0,即此时        CS:IP=0X07C0:0X0005.“,为什么要把程序默认加载到0X7C00,为什么IP的值是0X0005?

问题3:.word 0XAA55,”在此处放置有效扇区引导标志字0XAA55“,什么是有效扇区引导标志字?

3.1 as86汇编器的更多相关文章

  1. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...

  2. Linux内核完全注释之编程语言和环境(一)

    as86汇编器 1.来源与对于linux的用途 as86来源minix-386开发的intel 8086.80386汇编编译程序和链接程序,他主要为linux创建16位的启动引导扇区程序boot/bo ...

  3. linux0.12 编译过程

    感谢这篇文章的作者:    http://www.cnblogs.com/strugglesometimes/p/4231359.html 编译是个很蛋疼的事情,本想把linux0.12在bochs上 ...

  4. 3.2 GUN as汇编(本文内容大部分引用原文,非原创)

    as86汇编仅仅用于编译内核中的boot/bootsect.s引导扇区程序和实模式下的设置程序boot/setup.s.内核中其余所有汇编语言程序(包括C语言产生的汇编程序)均使用gas来编译,并与C ...

  5. [Operating System Labs] 我对Linux0.00中 head.s 的理解和注释

    ?21,#  head.s contains the 32-bit startup code.#  head.s 是32位的启动代码 #  Two L3 task multitasking. The ...

  6. 实现一个简单的boot

    1.汇编语言.分别汇编器和链接as86和ld86.码如下面: .globl begtext,begdata,begbss,endtext,enddata,endbss .text begtext: . ...

  7. Linux 桌面玩家指南:08. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  8. <摘录>Linux 环境下编译 0.11版本内核 kernel

    系统环境:Fedora 13 + gcc-4.4.5 最近在看<linux内核0.11完全注释>一书,由于书中涉及汇编语言的地方众多,本人在大学时汇编语言学得一塌糊涂,所以实在看不下去了, ...

  9. CSAPP读书随笔之一:为什么汇编器会将call指令中的引用的初始值设置为-4

    CSAPP,即<深入理解计算机系统:程序员视角>第三版,是一本好书,但读起来确需要具备相当的基本功.而且,有的表述(中译文)还不太直白. 比如,第463页提到,(对于32位系统)为什么汇编 ...

随机推荐

  1. Linux命令之yes

    yes命令用于重复输出字符串(output a string repeatedly until killed).这个命令可以帮你自动回答命令行提示,例如,进入一个含有多个文件的目录,执行 " ...

  2. 【HDOJ】1558 Segment set

    并查集+计算几何. /* 1558 */ #include <cstdio> #include <cstring> #include <cstdlib> #defi ...

  3. 调用test case集,并生成测试报告

    结构是 test_all.py 进行配置,执行所有测试用例集,并合并测试报告到同一个文件 #test_all.py 进行配置,执行所有测试用例集 # coding = utf-8 from time ...

  4. python模块管理

    参考python的模块管理,请看如下 http://blog.sina.com.cn/s/blog_90bc5fc6010159e0.html http://hi.baidu.com/billsche ...

  5. 把struts2-convention-plugin丢进太平洋

    struts2-convention-plugin是一个插件,通过这个插件可以实现对于struts2的零配置,基本用法可以参考这个博客(http://javeye.iteye.com/blog/358 ...

  6. RAM区间最值

    RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就 ...

  7. IMPLEMENTED IN PYTHON +1 | CART生成树

    Introduction: 分类与回归树(classification and regression tree, CART)模型由Breiman等人在1984年提出,CART同样由特征选择.树的生成及 ...

  8. Java获取文件大小的正确方法(转)

    Java中获取文件大小的正确方法 2014-03-28 14:03 64507人阅读 评论(9) 收藏 举报  分类: Java笔记(36)  研究成果(42)  版权声明:本文为博主原创文章,未经博 ...

  9. 使用FTPClient进行文件服务器内文件的上传和下载

    我用的FTPClient是由Apache组织的commons-net.jar包中的API,这个包用起来非常的方便,很容易上手.我在项目开发的过程中主要用到了文件的上传和下载功能,下面将我开发的代码贴出 ...

  10. Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50096, now running 50173.

    IDEA链接mysql提示 Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50096, ...