Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- displays: resb 4 ;reservar a area do display
- ; vetor com configuracao de displays para cada algarismo de 0 a 9
- v_display: db 00111111b, 00000110b, 01011011b, 01001111b, 01100110b, 01101101b, 01111101b, 00000111b, 01111111b, 01100111b
- div10: dd 10; divisor para determinar o algarismo decimal
- MAIN:
- xor eax, eax
- mov al, [0x2]
- mov ecx, -1
- ; determinar primeiro operador
- ciclo1:
- inc ecx
- cmp [ecx+v_display], al
- jne ciclo1
- mov eax, ecx
- xor ebx, ebx
- mov bl, [0x0]
- mov ecx, -1
- ; determinar segundo operador
- ciclo2:
- inc ecx
- cmp [ecx+v_display], bl
- jne ciclo2
- test [0x1], 01000000b ; verificar a operacao
- jz SOMA
- neg ecx
- SOMA:
- add eax, ecx
- and [displays], 0x00 ; limpar o display
- POSITIVO:
- cmp eax, 0
- jl NEGATIVO
- mov bl, 01110011b
- mov [0x3], bl ; display P
- jmp DECOMPOR
- NEGATIVO:
- mov bl, 01010100b
- mov [0x3], bl ; display N
- DECOMPOR:
- xor edx, edx
- idiv dword [div10] ; dividir o resultado da operacao por 10
- cmp edx, 0 ; comparar o resto da divisao
- jge UNIDADES
- neg edx
- UNIDADES:
- mov bl, [edx+v_display]
- mov [0x0], bl ; display primeiro digito
- DEZENAS:
- cmp eax, 0
- je ZERO
- mov bl, 00000110b
- mov [0x1], bl ; display segundo digito, nesta caso 1
- jmp FIN
- ZERO:
- mov bl, 00111111b
- mov [0x1], bl ; display segundo digito, neste caso 0
- FIN:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement