Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. stack segment para stack    
  2.         db 64 dup ('stack')
  3. stack ends
  4.  
  5. data segment para 'data'
  6.     ;variaveis
  7.    
  8.     line1 db "Insira o primeiro numero: $"
  9.     line2 db "Insira o segundo numero: $"
  10.     line3 db "Soma = $"
  11.     newline db 0ah, 0dh, "$"
  12.  
  13. data ends
  14.  
  15. code segment para 'code'
  16.  
  17. ;codigo
  18. main proc far
  19.     assume cs:code,ds:data,es:data,ss:stack
  20.     push ds
  21.     sub ax,ax
  22.     push ax
  23.     mov ax,data
  24.     mov ds,ax
  25.     mov es,ax
  26.  
  27.     ;codigo do main
  28.    
  29.     lea dx, line1
  30.     call writeString                                                                        
  31.     call readH
  32.     mov dx, bx
  33.     push dx
  34.    
  35.     lea dx, newline
  36.     call writeString
  37.  
  38.     lea dx, line2
  39.     call writeString
  40.     call readH
  41.    
  42.     lea dx, newline
  43.     call writeString
  44.    
  45.     pop dx
  46.     xor cx, cx
  47.     add bx, dx
  48.     adc cx, '0'
  49.     push cx
  50.    
  51.     lea dx, line3
  52.     call writeString
  53.    
  54.    
  55.     pop dx
  56.     call writeChar
  57.     call writeH
  58.    
  59.    
  60.    
  61.     ret
  62. main endp
  63.  
  64. ;procedimentos
  65.  
  66. ;escreve o bx em hexadecimal no ecra
  67. writeH proc near
  68.     mov ax, bx
  69.     mov cl, 4
  70.     rol ax, cl
  71.     and al, 0fh
  72.     call intToChar
  73.     mov dl, al
  74.     call writeChar
  75.    
  76.     mov ax, bx
  77.     mov cl, 8
  78.     rol ax, cl
  79.     and al, 0fh
  80.     call intToChar
  81.     mov dl, al
  82.     call writeChar
  83.    
  84.     mov ax, bx
  85.     mov cl, 12
  86.     rol ax, cl
  87.     and al, 0fh
  88.     call intToChar
  89.     mov dl, al
  90.     call writeChar
  91.    
  92.     mov ax, bx
  93.     and al, 0fh
  94.     call intToChar
  95.     mov dl, al
  96.     call writeChar
  97.    
  98.     ret    
  99. writeH endp
  100.  
  101. ;escreve o char em dl no ecra
  102. writeChar proc near
  103.     mov ah, 2
  104.     int 21h
  105.     ret
  106. writeChar endp    
  107.  
  108.  
  109. ;le um numero em hexadecimal e retorna em bx; numero maximo de carateres = 4
  110. readH proc near
  111.     xor bx, bx  
  112.     mov cx, 4
  113.     readH1:
  114.         mov ah, 1
  115.         int 21h  
  116.         cmp al, 0dh
  117.         je exit
  118.         push cx
  119.         call checkHChar
  120.         cmp cl, 1
  121.         je readHInvalidChar
  122.         pop cx
  123.         shl bx, 1
  124.         shl bx, 1
  125.         shl bx, 1
  126.         shl bx, 1
  127.         call charToInt
  128.         add bl, al
  129.         loop readH1
  130.        
  131.     exit:
  132.         ret
  133.        
  134.     readHInvalidChar:
  135.         pop cx        
  136.         call backspace
  137.         jmp readH1     
  138.                
  139. readH endp
  140.  
  141. ;verifica se o char em al e um algarismo da numeracao hexadecimal; retorna em cl 1 senao for algarismo hexadecimal e 0 se for
  142. checkHChar proc near
  143.     cmp al, '0'
  144.     jl checkHCharExit
  145.     cmp al, '9'
  146.     jg checkHCharContinuacao1
  147.    
  148.     ;e um numero
  149.     mov cl, 0
  150.     ret
  151.    
  152.     checkHCharContinuacao1:
  153.         cmp al, 'A'
  154.         jl checkHCharExit
  155.         cmp al, 'F'
  156.         jg checkHCharContinuacao2
  157.        
  158.         ;e um char maiusculo e esta correto
  159.         mov cl, 0
  160.         ret
  161.        
  162.         checkHCharContinuacao2:
  163.                 cmp al, 'a'
  164.                 jl checkHCharExit
  165.                 cmp al, 'f'
  166.                 jg checkHCharExit
  167.                
  168.                 ;e um char minusculo e esta correto
  169.                 mov cl, 0
  170.                 ret      
  171.    
  172.    
  173.     checkHCharExit:
  174.         mov cl, 1
  175.         ret    
  176.    
  177. checkHChar endp    
  178.  
  179. ;apaga um char
  180. backspace proc near
  181.     ;move o cursor para tras
  182.     mov dl, 8
  183.     call writeChar
  184.     ;coloca um espaco para apagar o char que la esta
  185.     mov dl, 32
  186.     call writeChar
  187.     ;mete o cursor outra vez para tras
  188.     mov dl, 8
  189.     call writeChar      
  190.    
  191.     ret
  192. backspace endp    
  193.  
  194. ;recebe um int em al e retorna o char em al
  195. intToChar proc near
  196.     cmp al, 10
  197.     jl intToCharExit
  198.    
  199.     add al, 55
  200.     ret
  201.    
  202.     intToCharExit:
  203.         add al, '0'
  204.         ret                      
  205. intToChar endp
  206.  
  207. ;recebe um char em al e retorna o int em al
  208. charToInt proc near
  209.     cmp al, 'A'
  210.     jl charToIntExit1
  211.     cmp al, 'a'
  212.     jl charToIntExit2
  213.        
  214.     sub al, 87
  215.     ret
  216.    
  217.     charToIntExit2:
  218.         sub al, 55
  219.         ret
  220.    
  221.     charToIntExit1:
  222.         sub al, '0'
  223.         ret                    
  224. charToInt endp
  225.  
  226. ;escreve o que estiver no endereco de dx
  227. writeString proc near
  228.     mov ah, 09h
  229.     int 21h
  230.     ret
  231. writeString endp
  232.  
  233. code ends
  234. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement