昨晚被耽误了,今儿下午半天没课,继续开搞!
昨天看到了35页的尾部,后来今早看大神 ID:仰望天上的光 空间日志的时候发现一篇文章叫《我是一条内存》,看完了感觉很生动啊~ 不偏题了,看书
OK,要是想指定内存地址的话,在C语言里面就用:数据大小 []的格式来定义。
这里的数据大小我们可以选择的有Byte word dword,自然之前的日志已经查好了分别表示的是8位,16位和32位。一个字节。一个字,和2个字。 (字节就是Byte,字是word,双字?就是double word,这我自己臆想的,应该对吧~)这里我觉得用英文记忆比用中文记忆更不容易混乱。。。有的时候我看着一个熟悉的汉字半天想不出来这玩意叫啥,囧
下面就讲到地址的问题了,[]的地址可以使用常数可以使用寄存器。但是这里能够用于指定内存地址的寄存器只有4个。BX,BP,SI,DI。(我去,这几个叫啥来着。我回一下:BX,Byte Extend;BP:Byte Pointer;SI:忘了,靠;DI:Defination Index,哈哈~我说吧~Defination这个词读起来很装X的,很带感~检查下就是!!!错了!,base,不是Byte。怎么理解呢。这么记忆吧,Base不是基址么,他要的不就是内存地址么,这就好记忆了,下次不会错了。那个SI是source Index。源地址。下次我不会错了)
结构讲完下面就是example了。 想把DX中的内容给AL,就用:
MOV BX,DX
MOV AL,Byte[BX]
但是咧~MOV指令有个规则可以用来简化这个指令~规则是:源数据和目的数据位数必须相同,1B对1B嘛,所以能写进AL的就只有BYTE了,因此,这里的BYTE可以省略。
ADD指令。很简单啦,add就是+。
CMP,如果是按书上比较的意思来说的话就是compare。OK,那么啥时候用?example:当if语句条件是a==3的时候,汇编要改成CMP a,3。
JE指令。他是跳转指令,当条件满足的时候就会跳转~
example:CMP AL,0 JE fin就是满足AL和0 相等的时候跳到fin里面去。
INT是指的软件的中断指令。作者说目前不详细讲,就当函数调用。英文是interrupt.他说到了INT就提到了BIOS,BIOS的程序预先写在ROM里。
想用INT去显示自己想要的文字的话就自然想到会和显卡有关系。INT0x10.
下一个指令时HLT。。。HLT哦。。。停止CPU运作。但是进入的是待机状态。HLT~~~就是halt 的意思。。。。
OK,在39页终于把注释讲完了,下面要回过头来去看总的程序了。
好吧,是用C语言改写的最终程序的结尾。书上有,还是比较简单的。
用makefile开发简化流程,这个我按照书上做了一遍,没啥。就不写笔记了。
最终的结果都保存在了第二天的第五个文件夹,这下工具什么的都整理好了,很方便。~hAPPPYING~
第二天的结束了,明儿开始的是进入32位模式并且导入C语言。算是正式开始了吧~加油吧~一直坚持下去~