bmaxa
Legenda
- Poruka
- 70.808
Ovo rutina zapravo pretvara chetiri komada u cugu. Uzhivajte 

Kod:
format elf64 executable 3
include 'import64.inc'
interpreter '/lib64/ld-linux-x86-64.so.2'
needed 'libc.so.6'
import strtoul,printf,exit
segment executable
entry $
xor eax,eax
mov rdi,0
mov rsi,inbuf
mov rdx,16
syscall
mov rdi,inbuf
mov rsi,0
mov rdx,010h
call [strtoul]
mov rdi,rax
mov rsi,0xfedcba9876543210
mov ecx,1000000000
.L0:
call cvtq2hex
dec ecx
jnz .L0
mov rdi,fmt
vmovdqa yword[outbuf],ymm0
mov rsi,outbuf
xor eax,eax
call [printf]
xor edi,edi
call [exit]
; rdi,rsi input , ymm0 output
cvtq2hex:
vmovq xmm0,rdi
vmovq xmm1,rsi
vinserti128 ymm0,ymm0,xmm1,1
vpshufb ymm0,ymm0,yword[sf]
vmovdqa ymm1,ymm0
vpsllw ymm1,ymm1,4
vpand ymm1,ymm1,yword[mask1]
vpand ymm0,ymm0,yword[mask2]
vpor ymm0,ymm0,ymm1
vmovdqa ymm1,yword[val1]
vpcmpgtb ymm1,ymm1,ymm0
vpaddb ymm0,ymm0,yword[vala]
vpand ymm1,ymm1,yword[valamz]
vpsubb ymm0,ymm0,ymm1
vpshufb ymm0,ymm0,yword[invert]
ret
segment writeable
align 32
sf db 0,-128,1,-128
db 2,-128,3,-128
db 4,-128,5,-128
db 6,-128,7,-128
db 0,-128,1,-128
db 2,-128,3,-128
db 4,-128,5,-128
db 6,-128,7,-128
invert db 15,14,13,12
db 11,10,9,8
db 7,6,5,4
db 3,2,1,0
db 15,14,13,12
db 11,10,9,8
db 7,6,5,4
db 3,2,1,0
mask1 dw 16 dup(0xf00)
mask2 dw 16 dup(0xf)
val1 db 32 dup(0xa)
vala db 32 dup(0x57)
valamz db 32 dup(0x57-'0')
outbuf rb 32
db 0
inbuf db 16 dup(0xa)
dq 0
fmt db '%s',0ah,0
Kod:
~/.../examples/assembler >>> fasm cvtq2hex.asm
flat assembler version 1.73.27 (16384 kilobytes memory)
3 passes, 1309 bytes.
~/.../examples/assembler >>> ./cvtq2hex
abcd1234
00000000abcd1234fedcba9876543210
Poslednja izmena: