Cirrus Logic CS485 Manual de usuario Pagina 24

  • Descarga
  • Añadir a mis manuales
  • Imprimir
  • Pagina
    / 67
  • Tabla de contenidos
  • MARCADORES
  • Valorado. / 5. Basado en revisión del cliente
Vista de pagina 23
CS485G Spring 2015 24
(b) %ebx, %esi, %edi are non-volatile (callee-save) general-purpose
registers.
(c) %esp and %ebp are non-volatile (callee-save) special-purpose
registers.
5. Example
1 int bitCount(unsigned x) {
2 if (x == 0)
3 return 0;
4 else
5 return (x & 1) + bitCount(x >> 1)
6 }
bitCount:
pushl %ebp # save %ebp (non-volatile)
movl %esp, %ebp # new %ebp
pushl %ebx # save b (non-volatile)
subl $4, %esp # room for p1
movl 8(%ebp), %ebx # b = x
movl $0, %eax # a = 0
testl %ebx, %ebx # x ==? 0
je .L3 # if (x==0) jump
movl %ebx, %eax # a = x
shrl %eax # a = x >> 1
movl %eax, (%esp) # p1 = x >> 1
call bitCount # a = bitCount(p1)
movl %ebx, %edx # d = x
andl $1, %edx # d = x & 1
leal (%edx,%eax), %eax # a = (x&1) + bitCount(p1)
.L3:
addl $4, %esp # remove p1
popl %ebx # restore b
popl %ebp # restore ebp
ret # return
24 Code for local variables, pointers
1. Lecture 14, 2/18/2015
Vista de pagina 23
1 2 ... 19 20 21 22 23 24 25 26 27 28 29 ... 66 67

Comentarios a estos manuales

Sin comentarios