汇编语言进阶和Makefile进阶---第二天

摘要: 原创博文:转载请标明出处:http://www.cnblogs.com/zxouxuewei

首先加载启动代码:

; hello-os
; TAB=4

        ORG        0x7c00            ; 指明程序装载地址

; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy code

        JMP        entry              ;程序跳转指令
        DB        0xeb, 0x4e, 0x90
        DB        "HELLOIPL"          ; 启动扇区名称(8字节)
        DW        512                 ; 每个扇区(sector)大小(必须512字节)
        DB        1                   ; 簇(cluster)大小(必须为1个扇区)00,
        DW        1                   ; FAT起始位置(一般为第一个扇区)
        DB        2                   ; FAT个数(必须为2)
        DW        224                 ; 根目录大小(一般为224项)
        DW        2880                ; 该磁盘大小(必须为2880扇区1440*1024/512)
        DB        0xf0                ; 磁盘类型(必须为0xf0)
        DW        9                   ; FAT的长度(必??9扇区)
        DW        18                  ; 一个磁道(track)有几个扇区(必须为18)
        DW        2                   ; 磁头数(必??2)
        DD        0                   ; 不使用分区,必须是0
        DD        2880                ; 重写一次磁盘大小
        DB        0,0,0x29            ; 意义不明(固定)
        DD        0xffffffff          ; (可能是)卷标号码
        DB        "HELLO-OS   "       ; 磁盘的名称(必须为11字?,不足填空格)
        DB        "FAT12   "          ; 磁盘格式名称(必??8字?,不足填空格)
        RESB    18                    ; 先空出18字节

; 程序主体

entry:
        MOV        AX,0            ; 初始化累加寄存器
        MOV        SS,AX           ; 将栈段寄存器初始为0
        MOV        SP,0x7c00       ; 栈指针寄存器赋值为0x7c00         MOV        DS,AX           ; 数据段寄存器清零
        MOV        ES,AX           ; 附加段寄存器清零

        MOV        SI,msg          ; 将msg的地址装入SI寄存器中
putloop:
        MOV        AL,[SI]         ;
        ADD        SI,1            ; 给SI加1
        CMP        AL,0
        JE        fin
        MOV        AH,0x0e            ; 显示一个文字
        MOV        BX,15            ; 指定字符颜色
        INT        0x10            ; 调用显卡BIOS
        JMP        putloop
fin:
        HLT                        ; 让CPU停止,等待指令
        JMP        fin                ; 无限循环

msg:
        DB        0x0a, 0x0a        ; 换行两次
        DB        "hello, world"
        DB        0x0a            ; 换行
        DB        0

        RESB    0x7dfe-$        ; 填写0x00直到0x001fe

        DB        0x55, 0xaa
时间: 2024-10-24 18:53:24

汇编语言进阶和Makefile进阶---第二天的相关文章

Python:什么是进阶,如何进阶?

目录 Python:什么是进阶,如何进阶? 1. 什么是进阶? 2. 如何进阶? 3. 除此之外呢? Python:什么是进阶,如何进阶? 1. 什么是进阶? 一门编程语言的基础部分,往往非常简单.如果只考虑基本语法.数据类型.基本控制结构的话,大部分人应该一两天就学完 Python 了吧.之后,调用几个常用的库,写一些脚本,或者做爬虫,或者做数据分析,或者做一些其它自动化工作,就可以说已经入门了. 那么,接下来呢?当我们问如何进阶的时候,我们具体问的是什么呢?我们为什么要追求进阶,进阶又是一种

Makefile学习与进阶之Makefile.am和$$(M)的意思

(1)makefile 中,出现$$(M) 是什么意思,发现还是看实际的Makefile长知识啊 在makefile中,会经常使用shell命令,也经常见到$var 和 $$var的情况,有什么区别呢,区别大了.不要认为在makefile的规则的命令行中使用$var就是将makefile的变量和shell共享了,这里仅仅是读取makefile的变量然后扩展开,将其值作为参数传给了一个shell命令.而$$var是在访问一个shell命令内定义的变量,而非makefile的变量.此外,如果某规则有

【Java 进阶篇】【第二课】异常处理

概念 异常处理的存在是为了:   允许程序员跳过无法处理的问题,继续开发后续的工作,或根据异常做出更加聪明的处理方式. Java中存在一类对象叫“异常对象”. 当异常情况发生时,就会暗战预先的设定,抛出(throw) 代表当前状况的对象:抛出其实就是一种特殊的返回方式,该线程会暂停,逐层退出调用,直到遇到异常处理器(Exception Handler). 异常处理器可以捕捉(catch)的异常对象,然后根据对象来决定下一步是提醒用户.处理一次还是退出程序等等.. 基本结构 异常处理器由 try,

flaskweb开发实战,入门进阶和原理解析第二章,http部分实例

import os from jinja2 import escape from flask import Flask, make_response,request, redirect,url_for,abort,session,jsonify from urllib.parse import urlparse, urljoin from jinja2.utils import generate_lorem_ipsum app = Flask(__name__) app.secret_key =

iOS进阶路线以及进阶书籍

第一,熟悉ARC机制:首先要了解ARC的前世今生:如果了解不清楚会导致两种可能,1,一个对象的引用莫名奇妙为空,或失效了.这个一般都能在开发阶段及时发现,因为会导致应用异常.2,导致内存溢出:不了解ARC机制很容易导致内存不能被正确释放,这类问题会很隐蔽.若非特意去做内存测试,那么都会在用户使用的阶段才会被暴露出来,因为内存消耗是个累积的过程,用户不断使用APP,至到内存耗尽,异常退出. 第二,了解Block的用法:我使用后的感受是,可以把一个操作的不同结果的处理放在一起,而不用分散到各处:逻辑

【 D3.js 进阶系列 】 进阶总结

进阶系列的文章从去年10月开始写的,晃眼又是4个多月了,想在年前总结一下. 首先恭祝大家新年快乐.今年是羊年吧.前段时间和朋友聊天,聊到十二生肖里为什么没猫,我张口就道:不是因为十二生肖开会的时候猫迟到了吗? 呵呵,不知道这是谁给我灌输的观点.o(>﹏<)o 进阶系列的文章分为两部分,文章前括号里写有: [D3.js 进阶系列] [D3.js 选择集与数据详解] 虽然称之为"进阶",但并不是说一定要看完"入门"才能看.由于本人能力有限,不能很好地整理成由

30天自制OS笔记:2 汇编语言学习与Makefile入门

进一步提高代码的高级程度,在之前的代码基础上修改,所以先拷贝再重命名为helloos.nas: 感觉还是添加个git比较方便,等helloos3完成后添加个git,这样可以保留历史,而不用每次都被覆盖了. --------------------------------- 先回顾下昨天的程序结构: 只有显示部分,昨天看懂了,继续2016年9月7日18:37:10,说实话那个 因为只能提醒很麻烦,所以取消notepad++自动补全: ? ? 下面把对代码的注释添加上: 寄存器: ? ? X表示扩展

王爽《汇编语言》第三版 第二章 寄存器

CPU概述 一个典型的CPU由运算器.控制器.寄存器等器件组成,这些器件靠内部总线相连. 内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其它器件的联系. 8086CPU有14个寄存器 它们的名称为:AX.BX.CX.DX.SI.DI.SP.BP.IP.CS.SS.DS.ES.PSW. 2.1 通用寄存器 8086CPU所有的寄存器都是16位的,可以存放两个字节. 8086上一代CPU中的寄存器都是8位的: 为保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用. 1.

中M2018秋C入门和进阶练习(进阶部分41——)

7-41 计算阶乘和 (10 分)(PTA) 对于给定的正整数N,需要你计算 S=1!+2!+3!+...+N!. 输入格式:输入在一行中给出一个不超过10的正整数N. 输出格式:在一行中输出S的值. 输入样例:3输出样例:9 // 计算阶乘和 #include<stdio.h> int factorial(int num){ if (num==1) return 1; else return num*factorial(num-1); } int main(){ int N, sum=0;