下面这段是来自<<Professional Assembly Language>>(汇编语言程序设计)的测试列出在处理器上找到SIMD特性的汇编代码:
# features.s -Determin MMX SSE SSE2 and SSE3 capabilites
.section .data
gotmmx:
.asciz "Supperts MMX"
gotsse:
.asciz "Supperts SSE"
gotsse2:
.asciz "Supperts SSE2"
gotsse3:
.asciz "Supperts SSE3"
output:
.asciz "%s\n"
.section .bss
.lcomm ecxdata,4
.lcomm edxdata,4
.section .text
.global _start
_start:
nop
movl $1,%eax
cpuid
movl %ecx,ecxdata
movl %edx,edxdata
test $0x00800000,%edx
jz done
pushl $gotmmx
pushl $output
call printf
addl $8,%edx
movl edxdata,%edx
test $0x02000000, %edx
jz done
pushl $gotsse
pushl $output
call printf
addl $8,%esp
movl edxdata,%edx
test $0x04000000, %edx
jz done
pushl $gotsse2
pushl $output
call printf
addl $8,%esp
movl edxdata,%edx
test $0x00000001, %edx
jz done
pushl $gotsse3
pushl $output
call printf
addl $8,%esp
done:
pushl $0
call exit
汇编后显示下面错误:
$as -o features.o features.s
features.s: Assembler messages:
features.s:0: Warning: end of file not at end of a line; newline inserted
features.s:28: Error: suffix or operands invalid for `push'
features.s:29: Error: suffix or operands invalid for `push'
features.s:36: Error: suffix or operands invalid for `push'
features.s:37: Error: suffix or operands invalid for `push'
features.s:44: Error: suffix or operands invalid for `push'
features.s:45: Error: suffix or operands invalid for `push'
features.s:52: Error: suffix or operands invalid for `push'
features.s:53: Error: suffix or operands invalid for `push'
features.s:58: Error: suffix or operands invalid for `push'
将pushl改为push后可以顺利汇编,但连接运行时显示:
$./features
段错误
还有Google上的都是pushl啊,求大侠解答.