首页 > 编程语言 >第2天 汇编语言与makeFile

第2天 汇编语言与makeFile

时间:2022-10-10 10:12:42浏览次数:56  
标签:汇编语言 makeFile DB mov DW 寄存器 msg ax

汇编

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

标签:汇编语言,makeFile,DB,mov,DW,寄存器,msg,ax
From: https://www.cnblogs.com/lyraHeartstrings/p/16772524.html

相关文章

  • VScode开发STM32/GD32单片机-MakeFile工程JlinkRTT配置
    本次使用开发板为STM32F401CCU6,使用CubeMX配置一个Makefile工程  配置时候为内部时钟  工程选择makefile工程类型 只生成需要的文件  用VSCode打开后显......
  • Can't exec "mysql_config": No such file or directory at Makefile.PL line 89.
     001、问题Can'texec"mysql_config":NosuchfileordirectoryatMakefile.PLline89.  002、解决方法(base)[[email protected]]#yuminstal......
  • make/Makefile --- 默认规则
    make有一条默认规则,当找不到xxx.o文件时,会查找目录下的同名xxx.c文件进行编译MakeFile:  make ......
  • GDB及Makefile学习
    GDB(1)下载安装gdb:sudoapt-getinstallgdb(2)启动gdbgdbtest(3)启动后界面如下:参考老师所给ppt内容我们可以输入(gdb)l列出文件的代码清单·(gdb)b1.函数......
  • makefile2
    一、make执行解析与实例操作1、#make后没有指定,只执行第一个定义。优先执行依赖,依赖没有就依次查找依赖,找到后执行依赖生成文件,在继续执行。make-s#不打印输出命令例1......
  • MakeFile编写深入进阶
    make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,VisualC++的nmake,Linux下GNU的make。Makefile里有什么?Mak......
  • Makefile学习笔记
    基本格式target:dependence command#冒号之前是目标名,冒号之后是依赖#每个command独占一行,每行之前必须有一个tab.phony:clean clean-command#以.phony修饰,使......
  • dos下edit;汇编语言编辑器edit;edit.com
    学习汇编语言的过程中可能会听到一个软件edit,但是很少有这个软件的来源。汇编语言工具edit全名为edit.com。edit.com是WINDOWS自带的MS-DOS应用程序,它的作用是编辑所有的......
  • 彻底掌握Makefile(二)
    彻底掌握Makefile(二)前言在前面的文章彻底掌握Makefile(一)当中,我们简要的介绍了一些常见的makefile使用方法,在本篇文章当中我们将继续介绍一些makefile当中的常见用法。Ma......
  • 彻底掌握Makefile(一)
    彻底掌握Makefile(一)介绍makefile就是一个可以被make命令解析的文件,他定义了一系列编译的规则,帮助我们更加方便、简洁的去完成编译的过程。在一个大工程当中我们会有各种......