LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 808|回复: 8

请问下面的这段汇编代码有什么功能

[复制链接]
发表于 2004-12-4 20:51:59 | 显示全部楼层 |阅读模式
__asm__ __volatile__ (
           "0:    lwarx %0,0,%1 ;"
           "      xor. %0,%3,%0;"
           "      bne 1f;"
           "      stwcx. %2,0,%1;"
           "      bne- 0b;"
           "1:    "
        : "=&r"(ret)
        : "r"(p), "r"(newval), "r"(oldval)
        : "cr0", "memory");
几天前我还特地的看了一下gcc中inline的汇编,结果还是看不懂这段代码
这里"0:    lwarx %0,0,%1 ;"表示的是什么啊?好像没有lwarx指令吧,而且一开始还有一个0
 楼主| 发表于 2004-12-4 20:54:34 | 显示全部楼层
而且有些指令还有3个参数
发表于 2004-12-5 08:46:57 | 显示全部楼层
是什么体系结构的汇编?IA-32的吗?
发表于 2004-12-5 08:53:07 | 显示全部楼层
估计是mips
发表于 2004-12-5 08:53:52 | 显示全部楼层
查了一下,lwarx和stwcx是PowerPC的指令。
发表于 2004-12-5 09:02:51 | 显示全部楼层
说错了,哈哈!只是知道mips指令都是3个操作数。
 楼主| 发表于 2004-12-5 22:31:52 | 显示全部楼层
那这段代码怎么会在glibc中?
而且这段代码旁边也没有类似于#ifndef #endif这样的语句说明这是powerpc的指令
 楼主| 发表于 2004-12-5 22:39:21 | 显示全部楼层
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.3.2/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux
Thread model: posix
gcc version 3.3.2 20031022 (Red Hat Linux 3.3.2-1)
/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/cc1 -quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=2 test.c -quiet -dumpbase test.c -auxbase test -version -o /tmp/cccg16tb.s
GNU C version 3.3.2 20031022 (Red Hat Linux 3.3.2-1) (i386-redhat-linux)
        compiled by GNU C version 3.3.2 20031022 (Red Hat Linux 3.3.2-1).
GGC heuristics: --param ggc-min-expand=38 --param ggc-min-heapsize=15747
ignoring nonexistent directory "/usr/i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/include
/usr/include
End of search list.
as -V -Qy -o /tmp/cc375Cdd.o /tmp/cccg16tb.s
GNU assembler version 2.14.90.0.6 (i386-redhat-linux) using BFD version 2.14.90.0.6 20030820
/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../../crt1.o /usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../../crti.o /usr/lib/gcc-lib/i386-redhat-linux/3.3.2/crtbegin.o -L/usr/lib/gcc-lib/i386-redhat-linux/3.3.2 -L/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../.. /tmp/cc375Cdd.o -lgcc -lgcc_eh -lc -lgcc -lgcc_eh /usr/lib/gcc-lib/i386-redhat-linux/3.3.2/crtend.o /usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../../crtn.o

好多啊,看得我的眼睛都花了
基本上看不懂
发表于 2004-12-6 09:13:19 | 显示全部楼层
很多商用的risc机器都是三操作数的
这样可以减少防存,对于优化编译也有好处
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表