riccardinofuffolo

Calcolatori elettronici - #302

Jun 7th, 2011
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .MODEL SMALL
  2. .STACK
  3. .DATA    
  4.  
  5. .CODE
  6. .STARTUP
  7.  
  8. MOV AX, 49                ; int a [nota 1]
  9. MOV BL, 28                ; int b
  10. MOV DX, 0                 ; [nota 1]
  11.  
  12. MCD:     MOV DL, BL                ; t = b        
  13.          DIV BL                    ; b = a / b (in particolare, il resto finisce in AH)
  14.          MOV BL, AH                ; b = a % b (effettiva valorizzazione)
  15.          MOV AX, DX                ; a = t [nota 1]
  16.          CMP BL, 0
  17.          JNZ MCD
  18. .EXIT
  19. END
  20.  
  21. ; [nota 1]
  22. ; Siccome la DIV con un operando a 8 bit ha bisogno di un divisore a 16 bit, è opportuno
  23. ; che questi 16 bit non siano "sporchi". Per questo motivo:
  24. ; * AX in fase di definizione è espresso su 16 bit anche se ne bastano 8 (AH = 0)
  25. ; * la variabile temporanea DX viene azzerata su 16 bit (dovrò valorizzarci a)!
  26. ; * la MOV AX, DX non ha comportamenti inattesi in quanto DH = 0, motivo per cui il nuo=
  27. ;   vo AX non genererà errori di overflow alla prossima divisione
Advertisement
Add Comment
Please, Sign In to add comment