document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. ;algoritmo de multiplicacion de numeros negativos con complemento a la base
  2. ;los numeros a multiplicar son de maximo 8 bits, y el resultado de 16 bits
  3. ;autor Santiago Passalacqua
  4. ;version 1.0 28/09/2014
  5. %include "asm_io.inc"
  6.  
  7. segment .data
  8. ;se declaran los numeros a multiplicar
  9. MULTIPLICADOR db 11111001b
  10. MULTIPLICANDO db 11111101b
  11. N db 8
  12. segment .text
  13. global asm_main
  14. asm_main:
  15. ;inicializo
  16. enter 0,0
  17. mov eax, 0
  18. mov al, [MULTIPLICADOR]
  19. mov ah, 0
  20. mov ebx, 0
  21.  
  22. ;inicio del ciclo
  23. while:
  24. cmp bl, [N]
  25. je fin_while
  26.  
  27. shr al, 1
  28. jnc primero_cero
  29. ;si el primer numero es 1 lo restauro y pongo a su derecha el multiplicando
  30.  
  31. stc ;seteo el carry en 1
  32. rcl al, 1 ;restauro el 1 original que se cayo con el shifteo
  33. clc ;limpio el carry
  34.  
  35. add ah, [MULTIPLICANDO] ; sumo el multiplicando
  36. stc ;seteo el carry en 1
  37. rcr ax, 1 ;shifteo con el carry desde la izquierda
  38. clc ;limpio el carry
  39. jmp fin_if
  40.  
  41.  
  42.  
  43. primero_cero:
  44. shl al,1 ;restauro el 0 que se cayo
  45. stc ;seteo el carry en 1
  46. rcr ax, 1 ;shifteo con 1 desde la izquierda
  47. clc ;limpio el carry
  48.  
  49. fin_if:
  50. inc bl ;incremento el contador
  51. jmp while
  52. fin_while:
  53.  
  54. ;sumo el complemento a la base del multiplicando
  55. mov ecx, 0
  56. mov cl, [MULTIPLICANDO]
  57. not cl
  58. inc cl
  59. add ah, cl
  60. dump_regs 1
  61.  
  62.  
  63.  
  64.  
  65.  
  66. mov eax, 0
  67. leave
  68. ret
');