哪为高手能告诉我下面程序的bits 32什么意思吗???谢谢!!我无法编译这个asm

tsling 2003-05-13 10:51:57
bits 32

section .data

%macro cglobal 1
%ifdef PREFIX
global _%1
%define %1 _%1
%else
global %1
%endif
%endmacro

align 16

ignore_dc dw 0, -1, -1, -1, -1, -1, -1, -1

section .text

cglobal calc_cbp_sse2


%macro LOOP_SSE2 1
movdqa xmm0, [edx+(%1)*128]
pand xmm0, xmm7
movdqa xmm1, [edx+(%1)*128+16]

por xmm0, [edx+(%1)*128+32]
por xmm1, [edx+(%1)*128+48]
por xmm0, [edx+(%1)*128+64]
por xmm1, [edx+(%1)*128+80]
por xmm0, [edx+(%1)*128+96]
por xmm1, [edx+(%1)*128+112]

por xmm0, xmm1 ; xmm0 = xmm1 = 128 bits worth of info
psadbw xmm0, xmm6 ; contains 2 dwords with sums
movhlps xmm1, xmm0 ; move high dword from xmm0 to low xmm1
por xmm0, xmm1 ; combine
movd ecx, xmm0 ; if ecx set, values were found
test ecx, ecx
%endmacro

align 16

calc_cbp_sse2:
mov edx, [esp+4] ; coeff[]
xor eax, eax ; cbp = 0

movdqu xmm7, [ignore_dc] ; mask to ignore dc value
pxor xmm6, xmm6 ; zero

LOOP_SSE2 0
test ecx, ecx
jz .blk2
or eax, (1<<5)
.blk2
LOOP_SSE2 1
test ecx, ecx
jz .blk3
or eax, (1<<4)
.blk3
LOOP_SSE2 2
test ecx, ecx
jz .blk4
or eax, (1<<3)
.blk4
LOOP_SSE2 3
test ecx, ecx
jz .blk5
or eax, (1<<2)
.blk5
LOOP_SSE2 4
test ecx, ecx
jz .blk6
or eax, (1<<1)
.blk6
LOOP_SSE2 5
test ecx, ecx
jz .finished
or eax, (1<<0)
.finished

ret

我以前学的是8086的指令,我根本看不懂这段代码,您能给我解释一下吗??谢谢你了!!!bits 32 是什么意思??
%macro cglobal 1
%ifdef PREFIX
global _%1
%define %1 _%1
%else
global %1
%endif
%endmacro 又是什么意思,我根本没有办法编译它,您能告诉我怎么作吗???急死我了!!谢谢了!!
...全文
73 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
firstrose 2003-05-13
  • 打赏
  • 举报
回复
这是intel 的sse指令,要用支持sse的编译程序。
bits 32是说使用32位指令

%macro cglobal 1
%ifdef PREFIX
global _%1
%define %1 _%1
%else
global %1
%endif
%endmacro
是一个宏,定义数据的。

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧