Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - Assembly da esadecimale a decimale
Forum - Altri Linguaggi - Assembly da esadecimale a decimale

Avatar
shine1010 (Normal User)
Newbie


Messaggi: 1
Iscritto: 05/09/2012

Segnala al moderatore
Postato alle 12:42
Mercoledì, 05/09/2012
ciao ho trovato questo codice nelle sorgenti del sito, cè qualche anima buona che me lo può spiegare poichè sono un profano in assembly, mi bastano anche dei semplici commenti sulle operazioni più importanti grazie in anticipo

Codice sorgente - presumibilmente Delphi

  1. # Conversione da esadecimale a decimale
  2. # @author Riccardo Morico
  3.  
  4.     .data
  5.  
  6. # program output text constants
  7. prompt:     .asciiz  "\nInserire un numero esadecimale:  "
  8. result1:    .asciiz  "Il suo decimale equivalente e: "
  9. newline:    .asciiz  "\n"
  10. myString:
  11.     .space 64
  12.  
  13.     .text
  14.  
  15. #MIPS Variables for hexVal
  16. #
  17.  
  18.  
  19. # main program
  20. #
  21. # program variables
  22. #   num:   $s0
  23.  
  24. main:
  25.  
  26. while:
  27.     li      $v0, 4          # issue prompt
  28.     la      $a0, prompt
  29.     syscall
  30.  
  31.     li      $v0, 8
  32.     la      $a0, myString
  33.     li      $a1, 64
  34.     syscall
  35.  
  36.         la $s0, myString #$s0 = char *ptr = myString;
  37.         lbu $s1, ($s0)  #$s1 = myString[0];
  38.         beq $s1, 10, endw
  39.  
  40.         move $a0, $s0
  41.         jal readHex
  42.  
  43.         beq $v1,0,notAHexValue #test result
  44.         move $s0, $v0
  45.        
  46.     li      $v0, 4          # print "Il decimale equivalente è"
  47.     la      $a0, result1
  48.     syscall
  49.  
  50.     li      $v0, 1          #print result
  51.     move    $a0, $s0
  52.     syscall
  53.  
  54. notAHexValue:
  55.         b while
  56. endw:
  57.  
  58.     li      $v0, 10         # terminate the program
  59.     syscall
  60.  
  61.  
  62. readHex:
  63.         move $t8, $ra
  64.         li $t3, 0
  65.     li $t4, 0
  66.     li $t5, 1
  67.         li $t7, 16
  68. hexWhile:
  69.         lbu $t6, ($a0)
  70.     beq $t6,10,hexEndWhile
  71.     mul $t3, $t3, $t7
  72.    
  73.     lbu $v0, ($a0)
  74.     jal hexVal
  75.  
  76.         beq $s1, -1, failed
  77.  
  78.     add $t3, $t3, $s1
  79.    
  80.         add $a0, $a0, 1 #str++
  81.     b hexWhile
  82. failed:
  83.         li $t5, 0
  84. hexEndWhile:
  85.         move $v0, $t3
  86.     move $v1, $t5
  87.         jr $t8
  88.  
  89.  
  90. hexVal:
  91.         bge $v0, 48, greaterEqualThan0 #if ((ch1 >= '0'))
  92.     b elseIfChGreaterEqualA
  93. greaterEqualThan0:
  94.         ble $v0, 57, lessEqualThan9
  95.         b elseIfChGreaterEqualA
  96. lessEqualThan9: # && (ch <= '9')
  97.         sub $t0, $v0, 48
  98.         b endif
  99.  
  100. elseIfChGreaterEqualA: #else if (ch >= 'a')
  101.         bge $v0, 97, greaterEqualThanALower
  102.         b elseIfChGreaterEqualThanAUpper
  103. greaterEqualThanALower: #&& (ch <= 'f')
  104.         ble $v0, 102, lessThanEqualFLower
  105.         b elseIfChGreaterEqualThanAUpper
  106. lessThanEqualFLower:
  107.         sub $t0, $v0, 97
  108.         add $t0, $t0, 10
  109.         b endif
  110.  
  111. elseIfChGreaterEqualThanAUpper: #else if (ch >= 'A')
  112.         bge $v0, 65, greaterEqualThanAUpper
  113.         b else
  114. greaterEqualThanAUpper: #&& (ch <= 'F')
  115.         ble $v0, 70, lessThanEqualFUpper
  116.         b else
  117. lessThanEqualFUpper:
  118.         sub $t0, $v0, 65
  119.         add $t0, $t0, 10
  120.         b endif
  121. else:
  122.         li $t0, -1
  123. endif:
  124.         move $s1, $t0
  125.         jr $ra


Ultima modifica effettuata da shine1010 il 05/09/2012 alle 12:43
PM Quote