Advertisement
Guest User

Untitled

a guest
Sep 19th, 2014
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. %include "asm_io.inc"
  2.  
  3. segment .data
  4.  
  5.         num1 dd 1111b        
  6.         num2 dd 1101b
  7. segment .bss
  8.  
  9. segment .text
  10.         global  asm_main
  11.  
  12. asm_main:
  13.         mov edx, 32  ;se va decrementando hasta 0
  14.         mov ebx, 0   ; contador de unos
  15.         push dword [num1]
  16.         push dword [num2]
  17.         call subru
  18.         add esp, 8
  19. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
  20.     mov     eax, 0            ; return back to C
  21.     leave                    
  22.     ret
  23.  
  24.  
  25. subru:
  26.      mov eax,dword[esp+4]
  27.      mov ecx,dword[esp+8]    
  28.          
  29. mira_si_es_uno:  
  30.      shl eax,1      ; pone el ultimo num en el carry
  31.      jc es_uno      ; si el numero del carry es uno salta a es_uno
  32.      dec edx        ;decrementa en uno el 32 inicial
  33.      cmp edx,0      ;si el registro sigue siendomyor a 0 salta a mira_si_es_uno
  34.      jg mira_si_es_uno  
  35.      jmp salir
  36.      
  37.      
  38. es_uno:             ; en el caso de qe el carry tenga un 1 se ejecuta esto
  39.       inc ebx       ; incrementa en uno el contador de unos
  40.       dec edx       ;decrementa en uno el 32 inicial
  41.       cmp edx,0     ;si el registro sigue siendomyor a 0 salta a mira_si_es_uno
  42.       jg mira_si_es_uno
  43.       jmp salir     ; sino salgo  
  44.      
  45.  
  46. salir:
  47.      
  48.      cmp ecx, dword[esp+4]  
  49.      jne prox_numero
  50.      je salir_del_todo
  51.      
  52.      
  53. prox_numero:
  54.     mov eax, dword[esp+8]
  55.         mov VARIABLE_LOCAL, ebx   ; muevo a ecx la cantidad de 1 que tenia el primer numero
  56.         mov edx, 32  
  57.         mov ebx, 0   ; vuelvo a inicializar los contadores
  58.     mov ecx, dword[esp+4] ;LINEA AGREGADA
  59.         jmp mira_si_es_uno
  60.        
  61. salir_del_todo:
  62.         cmp ebx, VARIABLE_LOCAL
  63.         je son_iguales
  64.         jne son_distintos
  65.  
  66. son_iguales:
  67.        mov eax, 1
  68.        call print_int  ;muestro el eax
  69.        call print_nl
  70.        jmp rett
  71.        
  72. son_distintos:
  73.        mov eax, 0
  74.        call print_int  ;muestro el eax
  75.        call print_nl
  76.        jmp rett
  77.  
  78.        
  79. rett:
  80.      ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement