30天自制操作系统(pdf+epub+mobi+txt+azw3)

30天自制操作系统(pdf+epub+mobi+txt+azw3)

第三个数字的存放地址:[ESP + 12]

第四个数字的存放地址:[ESP + 16]

(以下略)

我们想取得用参数指定的数字0x1234或0x56的内容,就用MOV指令读入寄存器。因为CPU已经是32位模式,所以我们积极使用32位寄存器。16位寄存器也不是不能用,但如果用了的话,不只机器语言的字节数会增加,而且执行速度也会变慢,没什么好处。

在指定内存地址的地方,如果使用16位寄存器指定[CX]或[SP]之类的就会出错,但使用32位寄存器,连[ECX]、[ESP]等都OK,基本上没有不能使用的寄存器。真方便。另外,在指定地址时,不光可以指定寄存器,还可以使用往寄存器加一个常数,或者减一个常数的方式。另外说一下,在16位模式下,也能使用这种方式指定,但那时候没有什么地方用得上,所以没有使用。

如果与C语言联合使用的话,有的寄存器能自由使用,有的寄存器不能自由使用,能自由使用的只有EAX、ECX、EDX这3个。至于其他寄存器,只能使用其值,而不能改变其值。因为这些寄存器在C语言编译后生成的机器语言中,用于记忆非常重要的值。因此这次我们只用EAX和ECX。

这次还给naskfunc.nas增加了一行,那就是INSTRSET指令。它是用来告诉nask“这个程序是给486用的哦”,nask见了这一行之后就知道“哦,那见了EAX这个词,就解释成寄存器名”。如果什么都不指定,它就会认为那是为8086这种非常古老的、而且只有16位寄存器的CPU而写的程序,见了EAX这个词,会误解成标签(Label),或是常数。8086那时候写的程序中,曾偶尔使用EAX来做标签,当时也没想到这个单词后来会成为寄存器名而不能再随便使用。

上面虽然写着486用,但并不是说会出现仅能在486中执行的机器语言,这只是单纯的词语解释的问题。所以486用的模式下,如果只使用16位寄存器,也能成为在8086中亦可执行的机器语言。“纸娃娃操作系统”也支持386,所以虽然这里指定的是486,但并不是386中就不能用。可能会有人问,这里的386,486都是什么意思啊?我们来简单介绍一下电脑的CPU(英特尔系列)家谱。

8086→80186→286→386→486→Pentium→PentiumPro→PentiumII→PentiumIII→Pentium4→…

从上面的家谱来看,386已经是非常古老的CPU了。到286为止CPU是16位,而386以后CPU是32位。

为了方便大家利用电子书更好的学习,精心整理了网络上的各种电子书,有PDF版本的,也有TXT版本的,现有一万多本PDF的,七万多本TXT的,还有精心整理的天涯神贴,而且还在不断增加中,有需要的可以点击下面的衔接或者扫码下载:

链接: https://pan.baidu.com/s/1z45OMvYM0Jy-BVuJJmRvtw?pwd=w3m9 提取码: w3m9 复制这段内容后打开百度网盘手机App,操作更方便哦

0

评论0

请先

没有账号? 注册  忘记密码?