.S 文件如何在VC6下编译?

dibotiger 2012-07-18 07:04:18
第一次遇到这种文件.

大S文件, 属于汇编代码文件? 该如何使用VC6处理并最终编译到项目中去?
...全文
212 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fronz 2012-07-19
  • 打赏
  • 举报
回复
LINUX下的GCC编译器是可以预处理汇编
dibotiger 2012-07-19
  • 打赏
  • 举报
回复

#define subRoundX(a, b, c, d, e, f, k, data) \
f(b,c,d); \
movdqa a, tmp2; \
movdqa a, tmp3; \
paddd tmp1, e; \
pslld $5, tmp2; \
psrld $27, tmp3; \
por tmp3, tmp2; \
paddd tmp2, e; \
movdqa b, tmp2; \
pslld $30, b; \
paddd MANGLE(k), e; \
psrld $2, tmp2; \
por tmp2, b; \
movdqa (data*16)(edx_rsi), tmp1; \
movdqa tmp1, tmp2; \
pand MANGLE(const_ff00), tmp1; \
pand MANGLE(const_00ff), tmp2; \
psrld $8, tmp1; \
pslld $8, tmp2; \
por tmp2, tmp1; \
movdqa tmp1, tmp2; \
psrld $16, tmp1; \
pslld $16, tmp2; \
por tmp2, tmp1; \
movdqa tmp1, (data*16)(ecx_rdx); \
paddd tmp1, e;

#define subRoundY(a, b, c, d, e, f, k, data) \
movdqa ((data- 3)*16)(ecx_rdx), tmp1; \
pxor ((data- 8)*16)(ecx_rdx), tmp1; \
pxor ((data-14)*16)(ecx_rdx), tmp1; \
pxor ((data-16)*16)(ecx_rdx), tmp1; \
\
movdqa tmp1, tmp2; \
pslld $1, tmp1; \
psrld $31, tmp2; \
por tmp2, tmp1; \
movdqa tmp1, (data*16)(ecx_rdx); \
paddd tmp1, e; \
f(b,c,d); \
movdqa a, tmp2; \
movdqa a, tmp3; \
paddd tmp1, e; \
pslld $5, tmp2; \
psrld $27, tmp3; \
por tmp3, tmp2; \
paddd tmp2, e; \
movdqa b, tmp2; \
pslld $30, b; \
paddd MANGLE(k), e; \
psrld $2, tmp2; \
por tmp2, b;

.text

// arg 1 (eax) (64bit: rdi): context (4*20 bytes)

shasse2_init:
_shasse2_init:

movdqa MANGLE(const_init_a), ctxa
movdqa MANGLE(const_init_b), ctxb
movdqa MANGLE(const_init_c), ctxc
movdqa MANGLE(const_init_d), ctxd
movdqa MANGLE(const_init_e), ctxe

movdqa ctxa, 0(eax_rdi)
movdqa ctxb, 16(eax_rdi)
movdqa ctxc, 32(eax_rdi)
movdqa ctxd, 48(eax_rdi)
movdqa ctxe, 64(eax_rdi)

ret

// arg 1 (eax) (64bit: rdi): context (4*20 bytes)
// arg 2 (edx) (64bit: rsi) : digests (4*20 bytes)

shasse2_ends:
_shasse2_ends:

movdqa 0(eax_rdi), ctxa
movdqa 16(eax_rdi), ctxb
movdqa 32(eax_rdi), ctxc
movdqa 48(eax_rdi), ctxd
movdqa 64(eax_rdi), ctxe

movdqa MANGLE(const_ff00), tmp3
movdqa ctxa, tmp1
movdqa ctxb, tmp2
pand tmp3, ctxa
pand tmp3, ctxb
movdqa MANGLE(const_00ff), tmp3
pand tmp3, tmp1
pand tmp3, tmp2
psrld $8, ctxa
psrld $8, ctxb
pslld $8, tmp1
pslld $8, tmp2
por tmp1, ctxa
por tmp2, ctxb
movdqa ctxa, tmp1
movdqa ctxb, tmp2
psrld $16, ctxa
psrld $16, ctxb
pslld $16, tmp1
pslld $16, tmp2
por tmp1, ctxa
por tmp2, ctxb
movdqa ctxa, 0(edx_rsi)
movdqa ctxb, 16(edx_rsi)

movdqa MANGLE(const_ff00), tmp5
movdqa ctxc, tmp1
movdqa ctxd, tmp2
movdqa ctxe, tmp3
pand tmp5, ctxc
pand tmp5, ctxd
pand tmp5, ctxe
movdqa MANGLE(const_00ff), tmp5
pand tmp5, tmp1
pand tmp5, tmp2
pand tmp5, tmp3
psrld $8, ctxc
psrld $8, ctxd
psrld $8, ctxe
pslld $8, tmp1
pslld $8, tmp2
pslld $8, tmp3
por tmp1, ctxc
por tmp2, ctxd
por tmp3, ctxe
movdqa ctxc, tmp1
movdqa ctxd, tmp2
movdqa ctxe, tmp3
psrld $16, ctxc
psrld $16, ctxd
psrld $16, ctxe
pslld $16, tmp1
pslld $16, tmp2
pslld $16, tmp3
por tmp1, ctxc
por tmp2, ctxd
por tmp3, ctxe

movdqa ctxc, 32(edx_rsi)
movdqa ctxd, 48(edx_rsi)
movdqa ctxe, 64(edx_rsi)

ret

// arg 1 (eax) (64bit: rdi): context (4*20 bytes)
// arg 2 (edx) (64bit: rsi): input data (4*64 bytes)
// arg 3 (ecx) (64bit: rdx): workspace (1280 bytes)

shasse2_data:
_shasse2_data:

movdqa 0(eax_rdi), ctxa
movdqa 16(eax_rdi), ctxb
movdqa 32(eax_rdi), ctxc
movdqa 48(eax_rdi), ctxd
movdqa 64(eax_rdi), ctxe

dibotiger 2012-07-19
  • 打赏
  • 举报
回复
文件名:sha1-sse2.S

代码是使用INTEL SSE2指令, 对SHA1算法进行性能优化.

是不是我还要找Intel的C++编译器来编译? 又该如何做呢?

找了半天, 可怜的百度世界, 居然找不到一个可用的Intel C++ 8.0可以下载和使用的.

......

// SHA-1 SSE2 implementation, (C) 2008 Alvaro Salmador (naplam33@msn.com), ported from Simon Marechal's SHA-1 MMX
// SHA-1 MMX implementation, (C) 2005 Simon Marechal (simon@banquise.net)

// This code computes two (with sse now four) SHA-1 digests at the same time. It
// doesn't take care of padding (0x80 and size << 3), so make
// sure the last input block is properly padded. Both 64-byte
// input blocks must be (four bytes) interleaved.

#if defined(__x86_64__) && defined(__APPLE__)
#define MANGLE(x) x(%rip)
#else
#define MANGLE(x) x
#endif

#if defined(__i386__) || defined(__x86_64__)

.globl shasse2_init;
.globl shasse2_ends;
.globl shasse2_data;
.globl shasse2_cpuid;

.globl _shasse2_init;
.globl _shasse2_ends;
.globl _shasse2_data;
.globl _shasse2_cpuid;

.data
#ifdef __APPLE__
.align(12)
#else
.align(16)
#endif
const_init_a:
.long 0x67452301
.long 0x67452301
.long 0x67452301
.long 0x67452301
const_init_b:
.long 0xEFCDAB89
.long 0xEFCDAB89
.long 0xEFCDAB89
.long 0xEFCDAB89
const_init_c:
.long 0x98BADCFE
.long 0x98BADCFE
.long 0x98BADCFE
.long 0x98BADCFE
const_init_d:
.long 0x10325476
.long 0x10325476
.long 0x10325476
.long 0x10325476
const_init_e:
.long 0xC3D2E1F0
.long 0xC3D2E1F0
.long 0xC3D2E1F0
.long 0xC3D2E1F0
const_stage0:
.long 0x5A827999
.long 0x5A827999
.long 0x5A827999
.long 0x5A827999
const_stage1:
.long 0x6ED9EBA1
.long 0x6ED9EBA1
.long 0x6ED9EBA1
.long 0x6ED9EBA1
const_stage2:
.long 0x8F1BBCDC
.long 0x8F1BBCDC
.long 0x8F1BBCDC
.long 0x8F1BBCDC
const_stage3:
.long 0xCA62C1D6
.long 0xCA62C1D6
.long 0xCA62C1D6
.long 0xCA62C1D6
const_ff00:
.long 0xFF00FF00
.long 0xFF00FF00
.long 0xFF00FF00
.long 0xFF00FF00
const_00ff:
.long 0x00FF00FF
.long 0x00FF00FF
.long 0x00FF00FF
.long 0x00FF00FF

#define ctxa %xmm0
#define ctxb %xmm1
#define ctxc %xmm2
#define ctxd %xmm3
#define ctxe %xmm4
#define tmp1 %xmm5
#define tmp2 %xmm6
#define tmp3 %xmm7
#define tmp4 ctxa
#define tmp5 ctxb

#ifdef __x86_64__
#define edx_rsi %rsi
#define ecx_rdx %rdx
#define eax_rdi %rdi
#else
#define edx_rsi %edx
#define ecx_rdx %ecx
#define eax_rdi %eax
#endif

// movdqa movapd

#define F0(x,y,z) \
movdqa x, tmp2; \
movdqa x, tmp1; \
pand y, tmp2; \
pandn z, tmp1; \
por tmp2, tmp1;

#define F1(x,y,z) \
movdqa z, tmp1; \
pxor y, tmp1; \
pxor x, tmp1

#define F2(x,y,z) \
movdqa x, tmp1; \
movdqa x, tmp2; \
pand y, tmp1; \
por y, tmp2; \
pand z, tmp2; \
por tmp2, tmp1;

dibotiger 2012-07-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
;# This is a hybrid assembly source file supporting both the
;# MASM as well as the GNU assembler in one file.
;#
;#
;# MASM:
;# ml.exe /c /nologo /Fo"call.obj" /W3 /Zi /errorReport:prompt /Ta"ca……
[/Quote]

如果能有这么幸福的提示就好了! 代码后面贴出.
gfm688 2012-07-19
  • 打赏
  • 举报
回复
上面的注释来自NSIS源码中的Call.S
gfm688 2012-07-19
  • 打赏
  • 举报
回复
;# This is a hybrid assembly source file supporting both the
;# MASM as well as the GNU assembler in one file.
;#
;#
;# MASM:
;# ml.exe /c /nologo /Fo"call.obj" /W3 /Zi /errorReport:prompt /Ta"call.S"
;#
;# For enabling debug support use:
;# ml.exe /c /nologo /D"SYSTEM_LOG_DEBUG" /Fo"call.obj" /W3 /Zi /errorReport:prompt /Ta"call.S"
;#
;# GNU toolchain:
;# gcc -x assembler-with-cpp -s call.S -c
;#
;# For enabling debug support use:
;# gcc -x assembler-with-cpp -DSYSTEM_LOG_DEBUG -s call.S -c
stjay 2012-07-18
  • 打赏
  • 举报
回复
把S文件的内容贴出来看看(或贴图)
建议用UltraEdit之类的16进制编辑器打开

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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