操作系统学习
Posted 牛刀杀鸡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统学习相关的知识,希望对你有一定的参考价值。
一.先行课程
1.C/C++语言
1-1.static 静态变量、函数:http://c.biancheng.net/view/3...
1-2.inline 内联函数 http://c.biancheng.net/view/1...
2.gcc编译内联汇编
2-1.内嵌汇编语法如下:
__asm__(汇编语句模板: 输出部分: 输入部分: 破坏描述部分)
“asm”表示后面的代码为汇编代码,__asm__ 是 asm的别名。
“volatile”告诉gcc编译器不要进行代码优化,后面的代码保持原样。
2-2.汇编语言模板:
模板语句由汇编语言序列组成,汇编语句间使用";"、"\\n"、"\\n\\t"进行分隔。
指令中的操作数可以使用占位符引用C语言变量,占位符最多有10个,名称是0%、...9%。
指令中占位符表示操作数,总是被当做long类型(4字节);但也可以显示的控制其,"b"表示低字节,如%b1,"h"表示高字节,如%h1.
2-3.输出部分:
输出部分描述输出操作数,不同的操作数之间用 "," 隔开,每个操作数描述符由限定字符串和C语言变量组成。
每个输出操作数的限定字符串必须包含"="表示他是一个输出操作数。
描述符字符串表示对该操作数的限制,这样gcc编译器可以根据限制决定如何分配寄存器,如何产生必要的代码将占位符与C语言或C语言变量联系起来。
2-4.输入部分:
输入部分描述输入操作数,不同的操作数描述符之间使用逗号格开,每个操作数描述符由限定字符串和C语言表达式或者C语言变量组成。
2-5.破坏描述符:
破坏描述符用于通知编译器我们使用了哪些寄存器或内存,由逗号格开的字符串组成,每个字符串描述一种情况,一般是寄存器名;除寄存器外还有"memory"。
例如:"%eax","%ebx","memory"等。
2-6.限定符表:
分类 | 限定符 | 描述 |
---|---|---|
通用寄存器 | “a” | 将输入变量放入eax |
“b” | 将输入变量放入ebx | |
“c” | 将输入变量放入ecx | |
“d” | 将输入变量放入edx | |
“s” | 将输入变量放入esi | |
“d” | 将输入变量放入edi | |
“q” | 将输入变量放入eax,ebx,ecx,edx中的一个 | |
“r” | 将输入变量放入通用寄存器,也就是eax,ebx,ecx,edx,esi,edi中的一个 | |
"A" | 把eax和edx合成一个64 位的寄存器(use long longs) | |
内存 | “m” | 内存变量 |
“o” | 操作数为内存变量,但是其寻址方式是偏移量类型, 也即是基址寻址,或者是基址加变址寻址 | |
“V” | 操作数为内存变量,但寻址方式不是偏移量类型 | |
" " | 操作数为内存变量,但寻址方式为自动增量 | |
“p” | 操作数是一个合法的内存地址(指针) | |
寄存器或内存 | “g” | 将输入变量放入eax,ebx,ecx,edx中的一个 或者作为内存变量 |
“X” | 操作数可以是任何类型 | |
立即数 | “I” | 0-31之间的立即数(用于32位移位指令) |
“J” | 0-63之间的立即数(用于64位移位指令) | |
“N” | 0-255之间的立即数(用于out指令) | |
“i” | 立即数 | |
“n” | 立即数,有些系统不支持除字以外的立即数, 这些系统应该使用"n"而不是"i" | |
匹配 | " 0 " | 表示用它限制的操作数与某个指定的操作数匹配 |
“1” | 也即该操作数就是指定的那个操作数,例如"0" | |
“9” | 去描述"%1"操作数,那么"%1"引用的其实就是"%0"操作数,注意作为限定符字母的0-9 与 指令中的"%0"-"%9"的区别,前者描述操作数,后者代表操作数。 | |
&; | 该输出操作数不能使用过和输入操作数相同的寄存器 | |
操作数类型 | “=” | 操作数在指令中是只写的(输出操作数) |
“+” | 操作数在指令中是读写类型的(输入输出操作数) | |
浮点数 | “f” | 浮点寄存器 |
“t” | 第一个浮点寄存器 | |
“u” | 第二个浮点寄存器 | |
“G” | 标准的80387浮点常数 | |
% | 该操作数可以和下一个操作数交换位置,例如addl的两个操作数可以交换顺序 (当然两个操作数都不能是立即数) | |
# | 部分注释,从该字符到其后的逗号之间所有字母被忽略 | |
* | 表示如果选用寄存器,则其后的字母被忽略 |
3.x86汇编语言
3-1.汇编语言表
https://www.cnblogs.com/lsgxe...
以上是关于操作系统学习的主要内容,如果未能解决你的问题,请参考以下文章