在linux-mips中经常看到的一些伪指令,在这里做一个小结。再碰见再补充啦
//Mips中常见的.set伪指令;//下面的解说,优先使用中文,缺少的部分使用英文。
.set 告诉汇编器如何进行汇编;
标号:"1:"是数字标号,大多数汇编器都接受它作为局部标号。在一个程序里你可以有任意多个标号都为“1:”
通过“1f”引用下一个标号“1:通过“1b”来引用上一个“1:”
.text告诉汇编器,除非另有说明,应当把此后产生的代码直接放进目标文件中名叫“.text”的区中;
.globl声明“name”为全局变量,该变量名要包括在模块的符号表内,而且名字在整个程序范围内必须是唯一的。
.ent 对生成的代码没有影响,只是告诉汇编器将这一点标志为“xxx”函数的起始点;
.name在汇编器的输出中,为改点提供一个名为“name”的标号。
.set mipsn
.set push --> save all settings
.set pop --> restore saved settings
.set reorder/noreorder --> let/don't let assembler reorder instructions
.set at/noat --> let/don't let assembler use the register $at in instruction aliases (li,la, etc.)
.set volatile/novolatile
.set nomacro
1..set mipsn
n是一个从0到5的数字,或是数字32或64。简单说,下面使用什么样的mips子令集;
2..set push .set pop
" The directives .set push and .set pop may be used to save and restore the current settings for all the options which are controlled by .set. The .set push directive saves the current settings on a stack. The .set pop
directive pops the stack and restores the settings.
These directives can be useful inside an macro which must change an option such as the ISA level or instruction reordering but does not want to change the state of the code which invoked the macro.
Traditional MIPS assemblers do not support these directives. "//这句话告诉我们什么是新式mips
For case here, the thing is: we will change the .set reorder, which may be .set noreorder before.
3..set noreorder/reorder
默认汇编器处在reorder的模式下,该模式允许汇编器对指令进行重新排序,以避免流水线堵塞并获得更好的性能,在这种模式下,是不允许在代码中插入 nop指令的。反之,在
noreorder模式下,指令的顺序不会被改变也不会对代码进行任何优化。这样做的优点是程序员可以完全控制代码的执行顺序,缺点是必须手工对指令排序,并在分支和加载指令的
延迟槽中填上有用的指令或nop指令.比如:
.set noreorder
lw t0, 0(a0)
nop #加载指令延迟槽
sub t0, 1
bne t0, zero, loop
nop #分支指令延迟槽
.set reorder
4..set volatile/novolatile
处在volatile区的所有存取指令都不会被移动位置(特别是存取指令之间的相对位置)。这一点对访问内存映射设备的寄存器非常重要。因为对于外围设备而言,读写的次序十分重
要。另外对读状态寄存器也非常重要。因为想得到的状态都是最新的。举例来说,如果下列代码没有使用.set volatile,那么汇编器很有可能会对第二个lw指令移到指令的前面,因为
这样可以填充第一条lw指令的延迟槽:
.set volatile
lw t0, 0(a0)
sw t0, 0(a1)
lw t0, 4(a0)
.set novalatile
避免流水线堵塞的操作以及其他各种优化措施不受该设定的影响.
5. .set noat
阻止汇编器将汇编代码翻译成二进制序列依赖at/$1寄存器
6..set nomacro
阻止汇编器将一条汇编代码翻译成多条指令
参考引用地址: http://blog.csdn.net/adaptiver/article/details/6760220 《see mips run》网络
阅读(8144) | 评论(0) | 转发(0) |