Si intrucciones de 32 bit asigna a o a los 32 bits ms

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: ned) Below (unsigned) 19 LEYENDO ¢༊  CÓDIGOS DE CONDICIÓN SetX Instrucciones: —༉  ¢༊  LOS Establecer un solo byte basado en la combinación de los códigos de condición Uno de 8 registros de bytes direccionables —༉  —༉  No altera los 3 bytes restante Tipicamente se usa movzbl para finalizar el trabajo int gt (int x, int y) { return x > y; } movl 12(%ebp),%eax cmpl %eax,8(%ebp) setg %al movzbl %al,%eax # # # # eax = y Compare x : y al = x > y Zero rest of %eax %eax %ah %al %ecx %ch %cl %edx %dh %dl %ebx %bh %bl %esi %edi %esp %ebp 20 LEYENDO ¢༊  LOS CÓDIGOS DE CONDICIÓN X86-64 SetX Intrrucciones: —༉  —༉  Establecer un solo byte basado en la combinación de los códigos de condición No altera los 3 bytes restante int gt (int x, int y) { return x > y; } long lgt (long x, long y) { return x > y; } Bodies cmpl %esi, %edi setg %al movzbl %al, %eax ¢༊  ¢༊  cmpq %rsi, %rdi setg %al movzbl %al, %eax Es %rax zero? Si: Intrucciones de 32- bit asigna a o a los 32 bits más significa;vos! 21 SALTOS ¢༊  jX Instrucciones —༉  Saltar a diferentes partes del código en función de los códigos de condición jX Condi;on Descrip;on jmp 1 Uncondi;onal je ZF Equal / Zero jne ~ZF Not Equal / Not Zero js SF Nega;ve jns ~SF Nonnega;ve jg ~(SF^OF)&~ZF Greater (Signed) jge ~(SF^OF) Greater or Equal (Signed) jl (SF^OF) Less (Signed) jle (SF^OF)|ZF Less or Equal (Signed) ja ~CF&~ZF Above (unsigned) jb CF Below (unsigned) 22 SALTO CONDICIONAL (FORMA ¢༊  VIEJA) Generación gcc –O1 –m32 –fno-if-conversion control.c int absdiff(int x, int y) { int result; if (x > y) { result = x-y; } else { result = y-x; } return result; } absdiff: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx movl 12(%ebp), %eax cmpl %eax, %edx jle .L6 subl %eax, %edx movl %edx, %eax jmp .L7 .L6: subl %edx, %eax .L7: popl %ebp ret Setup Body1 Body2a Body2b Finish 23 SALTO CONDICIONAL: EJEMPLO int goto_ad(int x, int y) { int result; if (x <= y) goto Else; result = x-y; goto Exit; Else: result = y-x; Exit: return result; } ¢༊  ¢༊  absdiff: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx movl 12(%ebp), %eax cmpl %eax, %edx jle .L6 subl %eax, %edx movl %edx, %eax jmp .L7 .L6: subl %edx, %eax C permite ”goto", como medio de transferir el control .L7: popl %ebp —༉  Más cerca de la programación ret de nivel de maquina Setup Body1 Body2a Body2b Finish Generalmente se considera un mal estilo de codificación 24 SALTO CONDICIONAL: EJEMPLO int goto_ad(int x, int y) { int result; if (x <= y) goto Else; result = x-y; go...
View Full Document

Ask a homework question - tutors are online