asm("load_immediate_value %%r5,0;"
/* ... */
"add_immediate_value %%r5,%%r5,42"
/* ... */
:
:
: "r5");
在本例中,我选择register r5,并通过clobber列表告诉gcc我正在使用它。但是如果r5是ABI寄存器呢?!我需要一种方法,简单地要求一个登记册,而不需要自己命名。
通常这样做的方式是:
static __inline__ void set_archctrl0(unsigned long val) {
register unsigned long archctrl0 __asm__("archctrl0") = val;
__asm__ __volatile__("" : "+r"(archctrl0) : : "cc", "memory");
}
空的asm
语句的存在只是为了迫使编译器不优化整个过程。
或者,一个更实际的示例,读取stackpointer寄存器可以执行如下操作:
static __inline__ void * getSP(void) {
register void * sp asm("sp");
asm ("" : "=r"(sp));
return sp;
}
static __inline__ void set_archctrl0(unsigned long val) {
__asm__ __volatile__("setarchctrl0 %0" : : "r"(val) : "cc", "memory");
}
问题内容: 如何在JavaScript中使用内联语句?是否也有内联语句? 像这样: 问题答案: 您不一定需要jQuery。仅JavaScript就能做到这一点。 该变量将是如果该值,并且如果该值是。 这称为条件(三元)运算符。
类似这样的事情:
我正在为一个操作系统分配编写内联汇编代码。我有一些关于内联汇编和gcc编译器将其转换为机器代码的问题。 null
我正在尝试同时处理MSVC和GCC编译器,同时更新这个代码库以在GCC上工作。但我不确定GCCs内联ASM是如何工作的。现在我并不擅长将ASM转换为C,否则我就会使用C而不是ASM。 我假设ROR13的工作方式类似于,但代码不会产生相同的输出。 什么是将这个内联ASM翻译成GCC的正确方法,或者这个代码的C翻译是什么?
6.1.2 段寄存器的说明语句 在汇编语言源程序中可以定义多个段,每个段都要与一个段寄存器建立一种对应关系。建立这种对应关系的说明语句格式如下: ASSUME 段寄存器名:段名[,段寄存器名:段名, ……] 其中:段寄存器是CS、DS、ES、SS、FS和GS,段名是在段定义语句说明时的段名。 在一条ASSUME语句中可建立多组段寄存器与段之间的关系,每种对应关系要用逗号分隔。例如, ASSUME