69,382
社区成员
发帖
与我相关
我的任务
分享
void Udadress(UINT *adress,size_t len, UINT newValue, size_t ex)
{
assert(ex<8 && len>0);
for (size_t pos=0; pos<len-1; ++pos)
{
adress[pos] = (adress[pos]<<ex) | (adress[pos+1] >> (32-ex));
}
adress[len-1] = (adress[len-1]<<ex) | ((0x01<<len) -1) & (newValue);
return ;
}
#define UINT unsigned int
#define size_t int
void Udadress(UINT *adress, size_t len, UINT newValue, size_t ex)
{
assert(ex<8 && len>0);
for (size_t pos=0; pos<len-1; ++pos)
{
adress[pos] = (adress[pos]<<ex) | (adress[pos+1] >> (32-ex));
}
adress[len-1] = (adress[len-1]<<ex) | ((0x01<<len) -1) & (newValue);
return ;
}
.file "new.c"
.text
.globl _Udadress
.def _Udadress; .scl 2; .type 32; .endef
_Udadress:
pushl %ebp
movl %esp, %ebp
pushl %edi
pushl %esi
pushl %ebx
subl $12, %esp
movl $0, -20(%ebp)
cmpl $7, 20(%ebp)
jg L2
cmpl $0, 12(%ebp)
jle L2
movl $1, -20(%ebp)
L2:
movl -20(%ebp), %eax
movl %eax, (%esp)
call _assert
movl $0, -16(%ebp)
L3:
movl 12(%ebp), %eax
decl %eax
cmpl %eax, -16(%ebp)
jl L6
jmp L4
L6:
movl -16(%ebp), %eax
leal 0(,%eax,4), %esi
movl 8(%ebp), %edi
movl -16(%ebp), %eax
leal 0(,%eax,4), %edx
movl 8(%ebp), %eax
movzbl 20(%ebp), %ecx
movl (%eax,%edx), %eax
movl %eax, %ebx
sall %cl, %ebx
movl -16(%ebp), %eax
sall $2, %eax
addl 8(%ebp), %eax
leal 4(%eax), %edx
movl $32, %eax
movl %eax, %ecx
subl 20(%ebp), %ecx
movl (%edx), %eax
shrl %cl, %eax
orl %ebx, %eax
movl %eax, (%edi,%esi)
leal -16(%ebp), %eax
incl (%eax)
jmp L3
L4:
movl 12(%ebp), %eax
sall $2, %eax
addl 8(%ebp), %eax
leal -4(%eax), %ebx
movl 12(%ebp), %eax
sall $2, %eax
addl 8(%ebp), %eax
subl $4, %eax
movzbl 20(%ebp), %ecx
movl (%eax), %eax
movl %eax, %edx
sall %cl, %edx
movl $1, %eax
movzbl 12(%ebp), %ecx
sall %cl, %eax
decl %eax
andl 16(%ebp), %eax
orl %edx, %eax
movl %eax, (%ebx)
addl $12, %esp
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
.def _assert; .scl 2; .type 32; .endef