这一天咱们会学到汇编语言,与makefile,还记昨天用了大量的DD,DW等指令,虽然已经很不错了,但咱们想让它更为人看得懂。编辑器
一上来我也推荐个编辑器吧,我通常用Sublime(翻译推荐的是notepad++,这个通常被我用来打开某个单独文件)由于我之前用它习惯性写lua代码,因此,工程类的东西我仍是喜欢Sublime函数
ORG 0x7c00 ;指明程序装在地址工具
JMP entry
DB 0x90oop
; 程序核心学习
entry:lua
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 ; 给SI加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-$ ; 填写0x00直到0x001fe DB 0x55, 0xaa
这一下基本每句代码都比较好的来解释他的意思了。虽然汇编是个很古老的语言了,但至少咱们看得懂。后面大部分仍是用C来写逻辑,汇编提供底层接口函数。code
首先是ORG指令,他告诉编译器要让咱们的程序从这个地址开始,也就是装载到指定内存地址中去。缘由固然是没有啊,由于要是我来定我会定个520。
一些简单的指令就很少讲。
有几个比较具备表明性的寄存器,这里说说。
AX-累加寄存器
CX-计数寄存器
DX-数据寄存器
BX-基址寄存器
SP-栈指针寄存器
BP-基址指针寄存器
SI-源变址寄存器
DI-目标变址寄存器
而后这些寄存器能够拆为高八位与第八位分别是后缀改成LOW和HIGH这里有个比较蛋疼的问题,就是当我要取BP,SP,SI,DI这四个寄存器的低八位与高八位的时候,就得经过一个媒婆来实现,例如,MOV AX,SI 而后再用AL,AH取出来,固然可能当时Intel大叔们这样设计是有他们的缘由的。
这些都是16位的寄存器后来32后有了EAX等。。,EAX取高16位很是很差取,因此通常用低16位,由于要经过位运算来获得高16位。
还有一个段寄存器
ES-附加段寄存器
CS-代码段寄存器
SS-栈段寄存器
DS-数据段寄存器
FS-没有名称
GS-没有名称
这些寄存器均可以根据其名称知道他们的做用
首先是jmp到一个标号,这个标号会被编译器自动解析为所对应的内存地址,若是你想写指定内存地址那我认为你是疯了。
接下来看看[SI],这个表明的就是去取内存条中的字节
因为用做此做用的寄存器只有BX,BP,SI,DI这几个,因此又来了个蛋疼的问题
MOV BX,DX
MOV AL,BYTE[BX]
就得这样玩儿。因为AL是8位的寄存器,因此从指定内存地址中读取一个字节内容到AL,mov的规则是左右数据必须相同,和高级语言同样。
cmp比较指令,若成立执行下一句代码若不成立略过下一句代码向后执行。
如今要来说个颇有意思的指令了,int(中断指令)其实我最开始学的时候,我据把他当成调用函数来看待,和高级语言很是相似。首先就是根据BIOS说好的我先往哪些寄存器里填东西,而后再调用某个int则能够实现某个功能。
MakeFile:
这个makefile在之后几乎随时都要用到,掌握它,不吃亏。
集成开发环境的做用就是一个软件提供了,从代码编写到运行为你最终想要看到的样子,makefile就是在写这样一个规则,固然这中间的一个个具体工做的工具,做者已提供(其实我认为做者对这部分工具没有开源,对咱们来讲是不可控的,不是一件好事)。
我在这里讲解的makefile不建议读者学习,仅用于本身记录(忘理解),能够上Google参考更详细的makefile教程。
格式:
要生成的文件 : 须要为生成而准备的文件 若成立则会执行下一句命令
''表示此行不够补到下行继续
make很聪明,若须要准备的文件不存在,它会首先去检查一下以前是否有命令能够生成这个文件。
没有考察过是不是根据日期来是否从新生成,或者是md5呢(对于其内部不太清楚)
关于最后:
关于做者的提问数据也能"执行"吗?机器语言也能"显示"吗? 若是是初学者必定会问的问题,若提早了解过汇编,那么这个问题,或许早就在学汇编的时候问过了。无论你是图片仍是程序,甚至是音乐,在计算机看来都是0,1,关键在于你如何看待这些数据。
次日已经over啦。总结一下,从昨天到今天,主要用上了makefile对于咱们开发时常看效果简直是太方便啦。并且又解决了一些看不懂的代码,明天继续