30天自制操作系统:第2天:继续开发

第2天:继续开发


汇编语言讲解
  • ORG:ORG 0x7c00 指明程序在内存中的装载地址,把下面的程序装载到内存的这个地址。有了这个符号,$符号的意义也就变了,代表将要读入的内存地址。

  • JMP:相当于C语言的goto语句,跳转。JMP entry 意为跳转到标号entry代表的地址继续执行。

  • MOV: move,其实相当于赋值语句。MOV AX,0 相当于AX=0;MOV SS,AX相当于SS=AX。但MOV有一个规则:源数据和目的数据必须位数相同。

  • []、BYTE、WORD、DWORD **BYTE表示保存1字节信息,WORD表示保存2字节信息,DWORD表示保存4字节信息。MOV BYTE [678],123 意为要用内存的678号地址来保存数字123,保存1个字节的信息(因为前面有BYTE)。[]是取地址运算符,可以理解为把123保存到地址678代表的内存单元。**同理MOV WORD [678],123意为保存123到地址678单元和它附近的679单元(合计两个字节的存储单元)。

  • 数据大小 [地址] 如上面的BYTE [678]。指定数据大小来存储数据。如果指定大小比1字节大,就向地址增大的方向选取更多数据单元来存储数据。地址可以是确定的数字,也可以是变量。注意,下文的AX、CX、DX、SP不能用在这里指定内存地址,因为CPU没有能够处理这四种指令的电路。其他四个可以。

  • ADD SI,1 意为SI=SI+1

  • CMP 比较指令。 CMP AL,0 意为将AL中的值与0相比较,如果比较结果相等,就跳转到指定地址,如果结果不等,就不跳转,继续执行下一条指令。

  • JE 条件跳转指令之一,根据比较结果决定跳转或不跳转。JE来源于"jump if equal".

    CMP AL,0

    JE fin

    两指令相当于 if (AL == 0) { goto fin; }.fin是个标号,和上文的entry等一个类型。

  • INT 软件中断指令

  • HLT 让CPU处于待机状态

寄存器

CPU中有存放数据的寄存器,容量小但是速度快。有代表性的有以下一些。

  1. AX——accumulator 累加寄存器
  2. CX——counter 计数寄存器
  3. DX——data 数据寄存器
  4. BX——base 基址寄存器
  5. SP——stack pointer 栈指针寄存器
  6. BP——base pointer 基址指针寄存器
  7. SI——source index 源变址寄存器
  8. DI——destination index 目的变址寄存器

注意,汇编语言中所有的标号(如entry,msg等)都是数字地址,是根据ORG计算得到的确定的地址值。

Makefile入门

Makefile是一个用于编译链接的方式,用一个Makefile文件控制。

在目录下新建一个Makefile文件,用记事本编辑该文件,写入文件生成规则,接下来调用make命令会直接按文件要求进行编译连接和更新。

让我们先来粗略地看一看makefile的规则。

target ... : prerequisites ...
    command
    ...
    ...
  • target

    可以是一个object file(目标文件),也可以是一个执行文件,还可以是一个标签(label)。

  • prerequisites

    生成该target所依赖的文件和/或target

  • command

    该target要执行的命令(任意的shell命令)

    如下例

#文件生成规则

ipl.bin : ipl.nas Makefile
	../z_tools/nask.exe ipl.nas ipl.bin ipl.lst

helloos.img : ipl.bin Makefile
	../z_tools/edimg.exe imgin:../z_tools/fdimg0at.tek \
		wbinimg src:ipl.bin len:512 from:0 to:0		imgout:helloos.img

如果在Makefile文件中增加如下内容,则每次输入make img就相当于输入了make -r helloos.img

#命令
img :
	../z_tools/make.exe -r helloos.img
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值