Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. displays: resb 4    ;reservar a area do display
  2. ; vetor com configuracao de displays para cada algarismo de 0 a 9
  3. v_display: db 00111111b, 00000110b, 01011011b, 01001111b, 01100110b, 01101101b, 01111101b, 00000111b, 01111111b, 01100111b
  4. div10: dd 10; divisor para determinar o algarismo decimal
  5.  
  6. MAIN:
  7. xor eax, eax
  8. mov al, [0x2]
  9. mov ecx, -1
  10.  
  11. ; determinar primeiro operador
  12. ciclo1:
  13. inc ecx
  14. cmp [ecx+v_display], al
  15. jne ciclo1
  16.  
  17. mov eax, ecx
  18. xor ebx, ebx
  19. mov bl, [0x0]
  20. mov ecx, -1
  21.  
  22. ; determinar segundo operador
  23. ciclo2:
  24. inc ecx
  25. cmp [ecx+v_display], bl
  26. jne ciclo2
  27.  
  28. test [0x1], 01000000b     ; verificar a operacao
  29. jz SOMA
  30.  
  31. neg ecx
  32.  
  33. SOMA:
  34. add eax, ecx
  35.  
  36. and [displays], 0x00    ; limpar o display
  37.  
  38. POSITIVO:
  39. cmp eax, 0
  40. jl NEGATIVO
  41.  
  42. mov bl, 01110011b
  43. mov [0x3], bl                  ; display P
  44. jmp DECOMPOR
  45.  
  46. NEGATIVO:
  47. mov bl, 01010100b
  48. mov [0x3], bl                  ; display N
  49.  
  50. DECOMPOR:
  51. xor edx, edx
  52. idiv dword [div10]         ; dividir o resultado da operacao por 10
  53. cmp edx, 0                    ; comparar o resto da divisao
  54. jge UNIDADES
  55.  
  56. neg edx
  57.  
  58. UNIDADES:
  59. mov bl, [edx+v_display]
  60. mov [0x0], bl                           ; display primeiro digito
  61.  
  62. DEZENAS:
  63. cmp eax, 0
  64. je ZERO
  65.  
  66. mov bl, 00000110b
  67. mov [0x1], bl                        ; display segundo digito, nesta caso 1
  68. jmp FIN
  69.  
  70. ZERO:
  71. mov bl, 00111111b
  72. mov [0x1], bl                      ; display segundo digito, neste caso 0
  73.  
  74. FIN:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement