mini-os-2

mini-os-2

这是第四章的补充知识

尚未完成啊啊啊

GNU C 内嵌汇编语言

  • __asm__ 关键字:用于声明这行代码是一个内嵌汇编的表达式
  • __volatile__ 关键字:其作用是告诉编译器此行代码不能被编译器优化,编译时保持代码原状。否则经过编译器优化后,汇编语句很可能被修改以至于不能达到预期的效果。

内嵌汇编表达式

GNU C 语言的内嵌汇编表达式由四个部分组成,它们之间使用 “:” 号分隔,其完整的格式为:指令部分:输出部分:输入部分:损坏部分

指令部分

汇编代码本身,其书写格式与 AT&T 汇编语言程序的格式基本相同,但有些微变化:

  • 当指令表达式中存在多条汇编代码的时候,可以全部书写在一对双引号中;亦可将汇编代码放在多对双引号中。如果将所有指令编写放在同一双引号中,那么相邻两条指令之间必须使用分号(;)或者换行符(\n)分隔,如果使用了换行符那么通常还会跟一个制表符(\t)。当汇编代码引用寄存器时,必须在寄存器名前再加上一个 % 符,以表示对寄存器的引用,例如代码 "movl $0x10, %%eax"

输出部分

记录指令的部分的输出信息,其格式为:“输出操作约束”(输出表达式),输出操作约束”(输出表达式), …。格式中的输出操作约束和输出表达式成对出现,每部分之间用逗号(,)分割。

  • 输出表达式部分主要负责保存指令部分的执行结果,通常情况下输出表达式是一个变量。
  • 双引号内的部分,被称为输出操作约束,输出约束必须用等号和加号修饰,等号表示这是一个纯粹的输出的标识,加号表示既用于输出也用于输入。不论加号还是等号,都只能用在输出部分,不能用在输入部分。

输入部分

记录指令部分的输入信息,其格式 “输出操作约束”(输出表达式),输出操作约束”(输出表达式), …。同样成对出现,但输入操作约束中不允许使用等号和加号,因此输入部分都是只读。

损坏部分

描述了在指令部分执行的过程中,将被修改的寄存器,内存空间或标志寄存器,并且这些修改部分并未在输出部分和输入部分出现过,格式为 “损坏描述”, “损坏描述”,…,如果要声明多个寄存器,则需要逗号隔开。

Author

Ctwo

Posted on

2020-11-29

Updated on

2020-12-12

Licensed under

Comments