汇编语言学习与Makefile入门
Table of Contents
汇编语言
; hello-os 分号是注释 ; TAB=4 ORG 0x7c00 ; 指明程序的装载地址 ; 以下的描述用于标准FAT12格式的软盘 JMP entry DB 0x90 DB "HELLOIPL" ; 启动区的名称可以是任意的字符串(8字节) DW 512 ; 每个扇区(sector)的大小(必须为512字节) DB 1 ; 簇(cluster)的大小(必须为1个扇区) DW 1 ; FAT的起始位置(一般从第一个扇区开始) DB 2 ; FAT的个数(必须为2) DW 224 ; 根目录的大小(一半设成224项) DW 2880 ; 该磁盘的大小(必须是2880扇区) DB 0xf0 ; 磁盘的种类(必须是0xf0) DW 9 ; FAT的长度(必须是9扇区) DW 18 ; 1个磁道(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 MOV SP,0x7c00 MOV DS,AX MOV ES,AX MOV SI,msg putloop: MOV AL,[SI] ADD SI,1 ; 给SL加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 ; 换行2次 DB "hello!world!" DB 0x0a ; 换行 DB 0 RESB 0x7dfe-$ ; 0x7dfe到0x00来填补命令 DB 0x55, 0xaa ; 以下是引导扇区以外的部分记述 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 RESB 4600 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 RESB 1469432
ORG指令: 告诉系统, 在开始执行的时候, 把这些机器语言指令装载到内存中的哪个地址. 指令名称来源于英文origin.
entry: 声明标签, 用于指定JMP指令的跳转目的地.
MOV: 赋值.
Generated by Emacs 25.x(Org mode 8.x)
Copyright © 2014 - pinvon - Powered by EGO