终于要开始学习新的东西了,进入2013年以来,一直准备着各种考试。虽然这两天也在学校待着准备美赛,但终是有时间看是第二天的学习了(亲啊,才第二天哎…)。那就闲话不多说,开始吧:
汇编语言接触的不多,也许与本科没开这门课有关,课内学习还是偏向于高层语言,对底层设计的较少。而对于Makefile,上一个暑假去东软实训的时候有做过一些学习,算是有一些基础了。
第二天确实是比较简单,书上讲的很清楚,操作起来也不难,根据以下步骤我们做一遍就好,也有一些注意事项会提出:
首先我们参考书上的代码,来写出启动区的最初512个字节,自己写的代码,就没写注释了:
ORG 0x7c00
JMP entry
DB 0x90
DB "HELLOIPL"
DW 512
DB 1
DW 1
DB 2
DW 224
DW 2880
DB 0xf0
DW 9
DW 18
DW 2
DD 0
DD 2880
DB 0,0,0x29
DD 0xffffffff
DB "HELLO-PEACH"
DB "FAT12_RY"
RESB 18
entry:
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
CMP AL,0
JE fin
MOV AH,0x0e
MOV BX,15
INT 0x10
JMP putloop
fin:
HLT
JMP fin
msg:
DB 0x0a,0x0a
DB "Hello Peach"
DB 0x0a
DB 0
RESB 0x7dfe-$
DB 0x55,0xaa
很少写汇编代码,参开书上C语言的注释,自己画瓢了一下,不过感觉还挺不错的,起码正确运行了,这里注意入口处与JMP处的大小写要统一。
写好之后,利用作者的nask.exe产生.bin和.lst:
z_tools\nask.exe ipl.nas ipl.bin ipl.lst
这里感叹一下作者自己编写的nask着实挺强大,反汇编溜溜的,若有错还可以指出错误,牛b:
通过上图.lst文件,你可以清晰地看出汇编代码和机器码的对应关系。一下思维什么的有没有觉得清晰了一点呢?反正我是感觉好清晰啊~~(花痴…)
好的,生成了.bin文件后,接着我们生成makeimg.bat批处理文件(什么名都可以)来利用作者编写的edimg.exe这款磁盘映像管理工具(神马东东,不明觉厉啊…),来得到img文件,然后利用原先的run.bat,在命令行里顺序执行asm->makeimg(或者你的批处理名)->run就ok了:
我的makeimg.bat是这样写的,可以参考一下,不过要着重注意路径了:
z_tools\edimg.exe imgin:z_tools/fdimg0at.tek wbinimg src:ipl.bin len:512 from:0 to:0 imgout:hello.img
就是下图这样了:
然后会直接弹出我修改的简单界面了:
这一课就简单的实践过了,注意事项这边没什么,就这里结束,明天把剩下一点点makefile相关的东西我们再看看。对了,对于汇编代码的意思和各寄存器为什么这样执行的原理,我们也可以明天探讨探讨。