DB:DB指令是“data byte”的缩写,也就是往文件里直接写入1字节的指令。函数
DB:其次是DB指令的新用法。咱们竟然能够直接用它写字符串。在写字符串的时候,汇编语言会自动地查找字符串中每个字符所对应的编码,而后把它们一个字节一个字节地排列起来。编码
RESB:RESB指令是“reserve byte”的缩写,若是想要从如今的地址开始空出10个字节来,就能够写成RESB 10,意思是咱们预定了这10个字节(你们能够想象成在对号入座的火车里,预订了10个连号座位的情形)。操作系统
;:首先是“;”命令,这是个注释命令,至关于C语言或是C++中的“//”。翻译
DW/DD:再有就是DW指令和DD指令,它们分别是“data word”和“data double-word”的缩写,是DB指令的“堂兄弟”。word的意思是“单词”,但在计算机汇编语言的世界里,word指的是“16位”的意思,也就是2个字节。“double-word”是“32位“的意思,也就是4个字节。对象
$:对了,差点忘记说RESB 0x1fe-$了。这个美圆符号的意思若是不讲,恐怕谁也搞不明白,它是一个变量,能够告诉什么这一行如今的字节数(若是严格来讲,有时候它还会有别的意思,关于这一点咱们明天再讲)。内存
ORG:这个指令会告诉nask(做者本身写的汇编语言编译器),在开始执行的时候,把这些机器语言指令装载到内存中的哪一个地址。若是没有它,有几个指令就不能被正确的翻译和执行。另外,有了这条指令的话,美圆符($)的含义也随之变化,它再也不是指输出文件的第几个字节,而是表明将要读入的内存地址。ORG指令来源于英文”origin“,意思是”源头、起点“。它会告诉nask,程序要从指定的这个地址开始,也就是要把程序装载到内存中的制定地址。开发
JMP:下一个是JMP指令,它至关于C语言的goto语句,来源于英文的jump,意思是”跳转“。字符串
entry::再下面是”entry:“,这是标签的声明,用于制定JMP指令的跳转目的地等。input
MOV:这个指令的功能很是简单,即赋值。编译器
ADD:ADD是加法指令。若以C语言的形式改写”ADD SI, 1“的话,就是SI = SI + 1。
CMP:CMP是比较指令。或许有人想,比较指令是干什么的呢?简单说来,它是if语句的一部分。譬如C语言会有这种语句:
if(a == 3) { 处理; }
即对a和3进行比较,将其翻译成机器语言时,必须写成“CMP a, 3”,告诉CPU比较的对象,而后下一步写“若是两者相等,须要作什么”。
这里是“CMP AL, 0”,意思就是将AL中的值与0进行比较。这个指令源自英文中的compare,意为”比较“。
JE:JE是条件跳转指令中之一。所谓条件跳转指令,就是根据比较的结果决定跳转或不跳转。就JE指令而言,若是比较结果相等,则跳转到指定的地址;而若是比较结果不等,则不跳转,继续执行下一条指令。
INT:INT是软件中断指令。若是如今就讲中断机制的话,确定会让人头昏脑胀的,因此咱们暂时先把它看做一个函数调用吧。这个指令源自英文”interrupt“,是”中途打断“的意思。
电脑里有个名为BIOS的程序,出厂时就组装在电脑主板上的ROM单元里。电脑厂家在BIOS中预先写入了操做系统开发人员常常会用到的一些程序,很是方便。BIOS是英文” basic input output system“的缩写,直译过来就是”基本输入输出系统(程序)”。
最近的BIOS功能很是多,甚至包括了电脑的设定画面,不过它的本质正如其名,就是为操做系统开发人员准备的各类函数的集合。而INT就是用来调用这些函数的指令。INT的后面是个数字,使用不一样的数字能够调用不一样的函数。此次咱们调用的是0x10(即16)号函数,它的功能是控制显卡。
HLT:HLT是让CPU中止动做的指令,不过并非完全地中止(若是要完全中止CPU的动做,只能切断电源),而是让CPU进入待机状态。只要外部发生变化,好比按下键盘,或是移动鼠标,CPU就会醒过来,继续执行程序。说到这,请你们再仔细看看这个程序,咱们会发现其实无论有没有HLT指令,JMP fin都是无限循环,不写HLT指令也能够。
然而笔者讨厌让CPU毫无心义地空转。若是没有HLT指令,CPU就会不停地全力去执行JMP指令,这会使CPU的负荷达到100%,很是费电。这多浪费呀。咱们仅仅加上一个HLT指令,就能让CPU基本处于睡眠状态,能够省不少电。什么都不干,还要耗费那么多电,这就是浪费。即使是初学者,最好也要一开始就养成待机时使用HLT指令的习惯。或者说,偏偏应该在初学阶段,就养成这样的好习惯。这样既节能环保,又节约电费,或许还能延长电脑的使用寿命呢。
对了,HLT指令源自英文“halt”,意思是“中止”。
JC:所谓JC,是“jump if carry”的缩写,意思是若是进位标志(carry flag)是1的话,就跳转。
JNC:JNC是另外一个条件跳转指令,是“Jump if not carray”的缩写。也就是说进位标志是0的话就跳转。
JAE:JAE也是条件跳转,是“Jump if above or equal”的缩写,意思是大于或等于时跳转。
JBE:这也是一个条件跳转指令,是“jump if below or equal”的缩写,意思是小于等于则跳转。
JB:这也是条件跳转指令,是“jump if below”的缩写。翻译过来就是:”若是小于的话,就跳转。“
EQU:这至关于C语言的#define命令,用来声明常数。”CYLS EQU 10“意思是”CYLS = 10“。EQU是”equal“的缩写。
说明:
一、从新读盘以前,咱们作了如下的处理,AH=0x00,DL=0x00,INT 0x13。经过前面介绍的(AT)BIOS的网页咱们知道,这是“系统复位”。它的功能是复位软盘状态,再读一次。