home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / testi / corsoasm / sorgenti4 / lezione8p1c.s < prev    next >
Text File  |  1995-09-29  |  3KB  |  92 lines

  1.  
  2. ; Lezione8p1c.s        Funzionamento dei Condition Codes con le DIVU/DIVS
  3.  
  4.     SECTION    CondC,CODE
  5.  
  6. Inizio:
  7.     moveq    #$0010,d0
  8.     moveq    #$0003,d1
  9.     divs.w    d1,d0
  10.  
  11.     move.l    #$200000,d0
  12.     moveq    #$0002,d1
  13.     divs.w    d1,d0
  14. stop:
  15.     rts
  16.  
  17.     end
  18.  
  19. ;    ·[oO]·
  20. ;      C
  21. ;     \__/
  22. ;       U
  23.  
  24. Vediamo ora un esempio d'uso delle istruzioni di divisione.
  25. Anche per la divisione ll 68000 ci mette a disposizione 2 diverse istruzioni:
  26. DIVS divide 2 numeri considerandoli come numeri in complemento a 2,
  27. mentre DIVU considera i numeri da dividere sempre positivi.
  28. Le differenze quindi sono analoghe a quelle tra MULS e MULU, pertanto non le
  29. illustreremo, fate degli esperimenti per esercizio.
  30. Gli esempi che faremo riguardano la DIVS.
  31. Le istruzioni di divisione dividono un operando a 32bit in un registro dati
  32. con un divisore a 16 bit, il quoziente a 16 bit sara' messo nella word bassa
  33. del registro destinazione e il resto nella word alta.
  34. Nel caso di divisione per 0, il 68000 effettuera' una routine di eccezione, 
  35. e nella maggior parte dei casi si avra' una bella GURU MEDITATION.
  36. La divisione puo' influenzare i codici condizione in questo modo:
  37.  
  38. 1) Carry (C) e' sempre posto a 0
  39. 2) Overflow (V) e' settato se il dividendo e' tanto maggiore del divisore che
  40. il risultato non puo' essere contenuto in 16bit
  41. es:
  42.     move.l    #$ffffffff,d0
  43.     divu.w    #2,d0
  44.  
  45. 3) Zero (Z) e' posto a 1 se il risultato dell'operazione e' 0
  46. 4) Negativo (N) e' posto a 1 se il risultato dell'operazione e' negativo
  47. 5) Extend (X) rimane invariato.
  48. ----------------------------------------------------------------------------
  49.  
  50. Prima vediamo un esempio normale: dividiamo il numero $10(=16) contenuto nel
  51. registro D0 per il numero 3, contenuto in D1.
  52.  
  53. D0: 00000010 00000003 00000000 00000000 00000000 00000000 00000000 00000000 
  54. A0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 07D32154 
  55. SSP=07D33287 USP=07D32154 SR=8000 T1 -- PL=0 ----- PC=07D34CE8
  56. PC=07D34CE8 81C1         DIVS.W  D1,D0
  57. >
  58.  
  59. Il risultato e` riportato sotto. Notate che vengono calcolati sia il quoziente
  60. (posto nella word bassa D0) che il resto (posto nella word alta di D0).
  61. Si tratta infatti di una divisione tra interi.
  62.  
  63. D0: 00010005 00000003 00000000 00000000 00000000 00000000 00000000 00000000
  64. A0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 07D32154
  65. SSP=07D33287 USP=07D32154 SR=8000 T1 -- PL=0 ----- PC=07D34CEA
  66. PC=07D34CEA 203C00200000     MOVE.L  #$00200000,D0
  67. >
  68.  
  69. Vediamo ora un'altro esempio.
  70. Dividiamo il numero $200000 (contenuto in D0) per $2 (in D1).
  71.  
  72. D0: 00200000 00000002 00000000 00000000 00000000 00000000 00000000 00000000 
  73. A0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 07D32154 
  74. SSP=07D33287 USP=07D32154 SR=8000 T1 -- PL=0 ----- PC=07D34CF6
  75. PC=07D34CF6 81C1         DIVS.W  D1,D0
  76. >
  77.  
  78. Il risultato esatto e` $100000, come potete verificare con il comando "?" di
  79. ASMONE. Questo numero pero` e` troppo grande per essere contenuto in una word.
  80. Pertanto la DIVS non riesce a effettuare il calcolo correttamente e segnala
  81. questo fatto ponendo a 1 il flag V:
  82.  
  83. D0: 00200000 00000002 00000000 00000000 00000000 00000000 00000000 00000000
  84. A0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 07D32154
  85. SSP=07D33287 USP=07D32154 SR=8002 T1 -- PL=0 ---V- PC=07D34CF8
  86. PC=07D34CF8 4E75         RTS
  87. >
  88.  
  89. In casi come questo si deve effetture la divisione mediante algoritmi
  90. particolari.
  91.  
  92.