Advertisement
caciojg

inb2.asm

Aug 11th, 2012
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; adaptação do programa do capitulo 4 do livro
  2. ; linguagem assembly para IBM PC - Peter Norton.
  3. ; Imprimindo numeros binários
  4. ; Cacio José Gazola - Versão de teste 11ago2012
  5. ;***********************************************
  6. ; Correção realização com ajuda de Mounter, do osdevbrasil.net
  7.  
  8.  
  9. section .data
  10.    
  11. descri: db "Adaptação do programa 'imprimindo números binários', CAP 4, \
  12. livro Linguagem assembly para IBM PC",10," de Peter Norton e John Socha",10
  13. cdes: equ $-descri
  14.  
  15. linha: db 10
  16.  
  17. ind: equ 8
  18. dado: equ 0x45
  19.  
  20.  
  21. section .bss
  22.  
  23. bff: resb 8                 ; buffer com 0's e 1's
  24.  
  25.  
  26.  
  27. section .text
  28.  
  29.     global main
  30.  
  31. ;Rotina de impressão do dados do buffer
  32. imprime:
  33.     mov     edx,8           ; imprime dados do buffer
  34.     mov     ecx,bff
  35.     mov     ebx,1
  36.     mov     eax,4
  37.     int     0x80            ; usando a syscall write
  38.     mov     edx,1
  39.     mov     ecx,linha
  40.     mov ebx,1
  41.     mov eax,4
  42.     int 0x80
  43.     ret
  44.        
  45. ;Rotina principal do programa, em conformação com as especificações do GCC
  46. main:
  47.     mov     edx,cdes        ; imprime texto inicial do programa
  48.     mov     ecx,descri
  49.     mov     ebx,1
  50.     mov     eax,4
  51.     int     0x80            ; usando a syscall write
  52.     mov     esi,bff         ; si aponta para o inicio do buffer
  53.     xor ecx,ecx
  54.     mov     cx,ind          ; cx conta 8 bytes do buffer
  55.     xor eax,eax         ; zera eax
  56.     mov     al,dado         ; al contem dados para rodar
  57.     xor     edx,edx
  58. aqui:  
  59.     mov     dl,0            ; prepara o temporario
  60.     rcl     al,1            ; roda bit para carry
  61.     adc     dl,0x30         ; transforma bit em byte ASCII em al
  62.     mov     byte[esi],dl        ; move dl para buf
  63.     inc     esi             ; si aponta para proximo byte no buffer
  64.     loop    aqui            ; roda 8 vezes
  65.     call    imprime         ; imprime buffer
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement