• 欢迎光临~

第2天 汇编语言与makeFile

开发技术 开发技术 2022-10-10 次浏览

汇编

org

origin 表示程序加载的开始地址,也就是将程序从什么位置进行加载

JMP

相当于c语言的goto语句,无条件跳转。
jmp entry表示跳转到entry语句块。

MOV

数据传送指令,需要注意的是,mov的操作数和源操作数不能全是内存地址,因为cpu只能对内存进行读操作或者写操作,不能对内存进行即读又写。
mov ax, 20
将20赋值到ax寄存器中
mov SI, msg 将msg的地址存储到SI中
mov ax, [msg] 将msg地址保存的内容存储到ax中

寄存器

AX:累加器,可以将高位8位拆分位AH,将低8位拆分位AL
CX:计数器,可以将高8位拆分位CH,将低8位拆分位CL
DX:数据寄存器,可以将高8位拆分为DH,将低8位拆分位DL
BX:基址寄存器,可以将高8位拆分位BH,将低8位拆分位DL
SP:栈指针寄存器
BP:基址指针寄存器
SI:源变址寄存器
DI:目的变址寄存器
以上寄存器都是16位寄存器,只能存储16个二进制数。

ADD

加分指令
ADD ax, 50
表示 ax = ax + 50

CMP

一般与JE指令一起使用,比较操作数和源操作数的值,如果两者相等则JE进行跳转
CMP AL, 0
JE fin
如果al == 0则跳转到fin语句块中。

INT

调用BIOS中断,BIOS中断向量表详情可看维基百科。

HLT

全称halt,程序运行完毕时,可以使用HLT指令使CPU进入睡眠状态。

0x7c00

BIOS会将0面0道1扇区的数据结尾是不是aa55,如果是则将该硬盘的一个扇区也就是512字节加载到0x7c00-0x7eff处。

```asm
; hello-os
; TAB=4

org 0x7c00

; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述
		DB		0xeb, 0x4e, 0x90
		DB		"HELLOIPL"		; ブートセクタの名前を自由に書いてよい(8バイト)
		DW		512				; 1セクタの大きさ(512にしなければいけない)
		DB		1				; クラスタの大きさ(1セクタにしなければいけない)
		DW		1				; FATがどこから始まるか(普通は1セクタ目からにする)
		DB		2				; FATの個数(2にしなければいけない)
		DW		224				; ルートディレクトリ領域の大きさ(普通は224エントリにする)
		DW		2880			; このドライブの大きさ(2880セクタにしなければいけない)
		DB		0xf0			; メディアのタイプ(0xf0にしなければいけない)
		DW		9				; FAT領域の長さ(9セクタにしなければいけない)
		DW		18				; 1トラックにいくつのセクタがあるか(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:
    ; si中存储的是msg语句块的地址,将msg语句中的地址中保存的值取出来 存储到al中
    mov al, [si]
    ; 每次地址 + 1 也就挪动一个字符
    add si, 1
    ; 当移动到0时表示已经结尾了 当al等于0时 跳转到fin中
    cmp al, 0

    je  fin
    mov ah, 0x0e
    mov bx, 15
    int 0x10
    jmp putloop
fin:
    hlt
    
    mov ax, 0x0820
    mov es, ax
    mov ch, 0
    mov dh, 0
    mov cl, 2

    jmp 0x7dff  
msg:
    DB 0x0a, 0x0a
    DB "Hello Lyra OS"
    DB 0x0a
    DB 0

    RESB 0x7dfe-$
    DB 0x55, 0xaa
程序员灯塔
转载请注明原文链接:第2天 汇编语言与makeFile
喜欢 (0)
违法和不良信息举报电话:022-22558618 举报邮箱:dljd@tidljd.com