;==============================================================================
;== TP5 : Programme verif_globale.s
;==============================================================================
;Il s'agit ici d'un fichier commenté du programme verif_globale.
;
;La première zone correspond à la zone programme. Elle comporte :
; Code assembleur : colonnes 1,2,3 (label, code, operande)
; Le PC corresponsant à l'adresse de l'instruction en cours : colonne 4
; (afficheur 7 seg de gauche aux cycles 1 et 3)
; L'adresse en RAM de l'éventuelle opérande : colonne 5
; (afficheur 7 seg de gauche au cycle 2)
; Le registre I (instruction en cours) : colonne 6
; (Leds rouge, en binaire, qui ne sont valides qu'à partir du cycle 2)
; Accumulateur, Z et C après exécution de l'instruction en cours : colonnes 7,8 et 9
; (afficheur 7 seg de droite / valides seulement à partir du cycle 3 : EX)
; Commentaire : colonne 10
;
;Les constantes indiquées sous forme $xx sont en hexadécimal.
;
;La deuxieme zone correspond a la zone des données. De même, elle comporte
; Code assembleur : colonne 1,2,3 (nom variable, valeur, adresse)
; Valeur variable : colonne 4,5,6 (décimal, binaire et hexadécimal)
;
;==============================================================================
;== Zone programme
;==============================================================================
;label code operande; PC I AD accu C Z Commentaire
:DEBUT NOP ZERO ; $00 $0 $39 $00 0 0
LDA DATA0 ; $02 $A $30 $FF 0 0 (DATA0 : donnée à l'adresse $30)
XOR DATA1 ; $04 $1 $31 $3A 0 0 (A = $FF XOR $C5)
AND DATA2 ; $06 $2 $32 $10 0 0 (A = $3A AND $10)
OR- DATA3 ; $08 $3 $33 $31 0 0 (A = $10 OR $21)
ADD DATA4 ; $0A $4 $34 $00 1 1 (A = $31 + $CF)
ADC DATA5 ; $0C $5 $35 $01 0 0 (A = $00 + $00 + 1)
SUB DATA6 ; $0E $6 $36 $FF 1 0 (A = $01 - $02)
SBC DATA7 ; $10 $7 $37 $00 0 1 (A = $FF - $FD - 1)
XOR DATA1 ; $12 $1 $31 $C5 0 0 (A = $00 XOR $C5)
ROL ZERO ; $14 $8 $39 $8A 0 0 (A = ROL($C5))
ROR ZERO ; $16 $9 $39 $C5 0 0 (A = ROR($8A))
STA RESULT ; $18 $B $3B $C5 0 0 (Memoire[$3B] <- $C5)
LDA ZERO ; $1A $A $39 $00 0 1 (A <- Memoire[$39])
LDA RESULT ; $1C $A $3B $C5 0 0 (A <- Memoire[$3B])
LDA COUNT ; $1E $A $38 $03 0 0 (A <- Memoire[$38])
OUT UN ; $20 $C $3A $03 0 0 (BZ <- Memoire[$3A][0])
:COMPT1 SUB UN ; $22 $6 $3A $02 0 0 (A = $03 - $01)
JNC COMPT1 ; $24 $E $22 $02 X 0 Retour à COMPT1 3 fois
LDA COUNT ; $26 $A $38 $03 0 0 (A <- Memoire[$38])
OUT ZERO ; $28 $C $39 $03 0 0 (BZ <- Memoire[$39][0])
:COMPT2 SUB UN ; $2A $6 $3A $02 0 0 (A = $03 - $01)
JNZ COMPT2 ; $2C $F $2A $02 0 0 Retour à COMPT2 2 fois
JMP DEBUT ; $2E $D $00 $00 0 1 Retour à debut
;==============================================================================
;== Zone donnees
;==============================================================================
;Nom variable Valeur Ad Décimal Binaire Hexadécimal
:DATA0 .db 255 ; $30 255 11111111 $FF
:DATA1 .db 197 ; $31 197 11000101 $C5
:DATA2 .db 16 ; $32 16 00010000 $10
:DATA3 .db 33 ; $33 33 00100001 $21
:DATA4 .db 207 ; $34 207 11001111 $CF
:DATA5 .db 0 ; $35 0 00000000 $00
:DATA6 .db 2 ; $36 2 00000010 $02
:DATA7 .db 254 ; $37 254 11111110 $FD
:COUNT .db 3 ; $38 3 00000011 $03
:ZERO .db 0 ; $39 0 00000000 $00
:UN .db 1 ; $3A 1 00000001 $01
:RESULT .db 0 ; $3B 0 00000000 $00
;== TP5 : Programme verif_globale.s
;==============================================================================
;Il s'agit ici d'un fichier commenté du programme verif_globale.
;
;La première zone correspond à la zone programme. Elle comporte :
; Code assembleur : colonnes 1,2,3 (label, code, operande)
; Le PC corresponsant à l'adresse de l'instruction en cours : colonne 4
; (afficheur 7 seg de gauche aux cycles 1 et 3)
; L'adresse en RAM de l'éventuelle opérande : colonne 5
; (afficheur 7 seg de gauche au cycle 2)
; Le registre I (instruction en cours) : colonne 6
; (Leds rouge, en binaire, qui ne sont valides qu'à partir du cycle 2)
; Accumulateur, Z et C après exécution de l'instruction en cours : colonnes 7,8 et 9
; (afficheur 7 seg de droite / valides seulement à partir du cycle 3 : EX)
; Commentaire : colonne 10
;
;Les constantes indiquées sous forme $xx sont en hexadécimal.
;
;La deuxieme zone correspond a la zone des données. De même, elle comporte
; Code assembleur : colonne 1,2,3 (nom variable, valeur, adresse)
; Valeur variable : colonne 4,5,6 (décimal, binaire et hexadécimal)
;
;==============================================================================
;== Zone programme
;==============================================================================
;label code operande; PC I AD accu C Z Commentaire
:DEBUT NOP ZERO ; $00 $0 $39 $00 0 0
LDA DATA0 ; $02 $A $30 $FF 0 0 (DATA0 : donnée à l'adresse $30)
XOR DATA1 ; $04 $1 $31 $3A 0 0 (A = $FF XOR $C5)
AND DATA2 ; $06 $2 $32 $10 0 0 (A = $3A AND $10)
OR- DATA3 ; $08 $3 $33 $31 0 0 (A = $10 OR $21)
ADD DATA4 ; $0A $4 $34 $00 1 1 (A = $31 + $CF)
ADC DATA5 ; $0C $5 $35 $01 0 0 (A = $00 + $00 + 1)
SUB DATA6 ; $0E $6 $36 $FF 1 0 (A = $01 - $02)
SBC DATA7 ; $10 $7 $37 $00 0 1 (A = $FF - $FD - 1)
XOR DATA1 ; $12 $1 $31 $C5 0 0 (A = $00 XOR $C5)
ROL ZERO ; $14 $8 $39 $8A 0 0 (A = ROL($C5))
ROR ZERO ; $16 $9 $39 $C5 0 0 (A = ROR($8A))
STA RESULT ; $18 $B $3B $C5 0 0 (Memoire[$3B] <- $C5)
LDA ZERO ; $1A $A $39 $00 0 1 (A <- Memoire[$39])
LDA RESULT ; $1C $A $3B $C5 0 0 (A <- Memoire[$3B])
LDA COUNT ; $1E $A $38 $03 0 0 (A <- Memoire[$38])
OUT UN ; $20 $C $3A $03 0 0 (BZ <- Memoire[$3A][0])
:COMPT1 SUB UN ; $22 $6 $3A $02 0 0 (A = $03 - $01)
JNC COMPT1 ; $24 $E $22 $02 X 0 Retour à COMPT1 3 fois
LDA COUNT ; $26 $A $38 $03 0 0 (A <- Memoire[$38])
OUT ZERO ; $28 $C $39 $03 0 0 (BZ <- Memoire[$39][0])
:COMPT2 SUB UN ; $2A $6 $3A $02 0 0 (A = $03 - $01)
JNZ COMPT2 ; $2C $F $2A $02 0 0 Retour à COMPT2 2 fois
JMP DEBUT ; $2E $D $00 $00 0 1 Retour à debut
;==============================================================================
;== Zone donnees
;==============================================================================
;Nom variable Valeur Ad Décimal Binaire Hexadécimal
:DATA0 .db 255 ; $30 255 11111111 $FF
:DATA1 .db 197 ; $31 197 11000101 $C5
:DATA2 .db 16 ; $32 16 00010000 $10
:DATA3 .db 33 ; $33 33 00100001 $21
:DATA4 .db 207 ; $34 207 11001111 $CF
:DATA5 .db 0 ; $35 0 00000000 $00
:DATA6 .db 2 ; $36 2 00000010 $02
:DATA7 .db 254 ; $37 254 11111110 $FD
:COUNT .db 3 ; $38 3 00000011 $03
:ZERO .db 0 ; $39 0 00000000 $00
:UN .db 1 ; $3A 1 00000001 $01
:RESULT .db 0 ; $3B 0 00000000 $00