将我的函数从C转换为程序集

时间:2015-05-22 02:23:42

标签: c assembly

嗨我在C中有一个函数,它返回数组中一组数字的最大值。我需要将它转换为汇编并使其可以从C调用.nums是存储所有数字的数组。 len是传递的数组的长度。我做的其他变量是局部变量

.global max
.text
.equ word_size, 4
max: 
#prologue
push %ebp
movl %esp, %ebp

.equ nums, 2*word_size
.equ len, 3*word_size
.equ cur_max, 4*word_size
.equ index, 5*word_size
#eax is index

#short cur_max = nums[0]    
movl cur_max(%ebp), %eax
movl $0, %ebx
mov nums(%ebp), %edx 
leal (%edx, %ebx, word_size), %edx 
mov %edx, cur_max(%ebp)

#for(index = 1; index < len;index++)
mov index(%ebp), %eax
mov len(%ebp), %ebx
mov nums(%ebp), %ecx
mov cur_max(%ebp), %edx

mov $1, %eax
for_loop_begin:
    cmp %ebx, %eax
    jl loop_begin
    jmp for_loop_end

        loop_begin:
            if_loop:
                leal (%ecx,%eax,word_size), %esi #nums[i] = esi
                cmp %edx,%esi
                jg in_if_loop
                in_if_loop_end:
                inc %eax
                jmp for_loop_begin
    for_loop_end:
        mov %edx,%eax

        ret

in_if_loop:
    mov %esi,%edx
    movl %ebp, %esp
    pop %ebp
    jmp in_if_loop_end

这是C代码

short max(short* nums, int len){
  int index;
  short cur_max = nums[0];
  for( index = 1; index < len; index++)
    if( nums[index] > cur_max)
      cur_max = nums[index];
  return cur_max;

}

0 个答案:

没有答案