You are on page 1of 13

ILISI premire anne

TITRE
INTRODUCTION
Ajouter un nombre une liste
Divisibilit Par 8
Division par 5
Division par 8
Le nombres total des nombres

PAGE
1

positives
Suppression dun lment dune
Liste
Trois 1 successives
Suppression dun lment dune
liste
Compter dans un pia et
clignoter 5 fois lors dune
interruption IRQ

Table des Matires

Ajouter un nombre une liste

Soit une liste ordonne, dont la taille est


stocke dans la case mmoire $0000, et
qui commence de la case mmoire $0001
pour ajouter un lment cette liste, on
va suivre les tapes suivantes :
1.

On met un pointeur sur le dernier

lment de la liste
2.
Si llment point est infrieur la
valeur de llment quon
veut ajouter on doit le dcaler vers sa
position + 1

3.

On recommence ltape 2 jusqu

ce quon trouve un lment qui est


infrieur, et puis on insre.

Programme
LDA $0000
LDB $0001
LDX #$0002
LEAX B,X
LEAY $FF,X
ENCORE:
CMPA ,Y
BLO CONTINUE
STA ,X
END
CONTINUE:
CMPY #$0002
BNE SUITE
LDB ,Y
STB ,X
STA ,Y
END
SUITE:
LDB ,Y
STB ,X
LEAX ,Y
LEAY $FF,Y
BRA ENCORE

;charger A avec le contenu de ladresse $0000


;charger B avec le contenu de ladresse $0001
;charger X avec $0002
; charger X par B+X
;charger Y par X - 1
; Comparer A avec (,Y) si A est plus petit que (,Y)
; si A et < (,y) on saut vers Continue
; sinon on stock A dans la mmoire pointe par X
;comparer Y avec #$0002
; sils ne sont pas egaux on saute vers Suite
; sinon on charge B avec (,Y)
;on stock B dans X
; stock A dans Y
; on charge B par (,y)
; on stock B dans (,X)
; on charge X par (,Y)
; on charge Y par Y - 1
; on refaire les tapes commenons par Encore.

Dbut

Organigrame

Dbut

A <- ($0000)
B <- ($0001)
X <- #$0002
X <- X + (B)
Y <- (X) - 1

A < (,Y)

Encore
oui

(,X) <- (A) (fin)

fin

Y = $0002

B <- (,Y)
(,X) <- (B)
(,y) <- (A)

Non
Continue

fin

B <- (,Y)
(,X) <- (B)
X <- Y
Y <- (Y )- 1

Divisibilit Par 8
LDA $0001 ;on charge A par le contenu de $0001 (linformation)
CLR $0000 ; remise de $0000 a 0
ANDA #$07 ; le et logique entre A et #$07
BNE FIN
; il nest pas divisible par 8 on saute vers la fin
LDA #$01 ;il est divisible par 8 on change la valeur de $0000 par 1
STA $0000
FIN:
END

organigramme
Dbut

A <- ($0001)
$0000 <- #$00
(A) ET #$07

Suite

A=0
Non

A <- #$01
$0000 <-(A)

FIN

Division par 5
CLRB
LDA $0002
ENCORE:
CMPA #$05
BLO SUITE
INCB
SUBA #$05
BRA ENCORE
SUITE:
STB $0000
STA $0001
END

;B <- 0
;charger A avec le contenu de $00002
; comparons A avec #$05
;
; incrmentation de B
; A <- A - 5
;sauvgarder B dans $0000 le quotient
; sauvgarder A dans $0001 le reste

Organigramme
Dbut

A <- ($0002)
A<5

Encore
oui

Suite
A <- ($0002)

$0000 <- (B)

B <- (B) + 1

$0001 <- (A)

A <- A - #$05

FIN

Division par 8
CLRB
LDA $0002
ENCORE:
CMPA #$08
BLO SUITE
INCB
SUBA #$08
BRA ENCORE
SUITE:
STB $0000
STA $0001
END

;B <- 0
;charger A avec le contenu de $00002
; comparons A avec #$08
;
; incrmentation de B
; A <- A - 5
;sauvgarder B dans $0000 le quotient
; sauvgarder A dans $0001 le reste

Organigramme
Dbut

A <- ($0002)
A<8

Encore
oui

Suite
A <- ($0002)

FIN <- (B)


$0000

B <- (B) + 1

$0001 <- (A)

A <- A - #$08

Nombre Totale des nombre positives


CLRA
LDX #$0003
LDB $0002
BEQ FIN
ENCORE:
TST ,X+
BLE SUITE
INCA
SUITE:
DECB
BNE ENCORE
FIN:
STA $0000
END

;A <- 0
; X <- #$0003 le dbut de la liste
; B <- $0002 la taile de liste
; si B est Nulle alore Fin
;test de (,X+)
;si (,X+) est inferieur ou gale zero on saut vers suite
; sinn on incrment A
; decrementation de B
;si B est diferent de zero refaire les tapes si dessus
; stock A dans $0000

Organigramme

Dbut

A <- #$00
X <- #$0003
B <- ($0002)
B=0

Encor
e
oui

TST ,X+
(,X) < 0
A <- (A) + 1

suite
B <- (B) - 1

oui

non

B=0

FIN
Supprimer
un lment
$0000 <- (A)
LDB $0003
LDX #$0004
ABX
STX $0001
LDX #$0004
LDY #$0005
LDA ,X
ENCORE:
CMPA $0000
BNE SUITE
LDA #$00
STA ,X
LDA ,Y
CMPA $0000
BEQ SUITE
STA ,X
LEAX $01,X
LEAY $01,Y
SUITE:
CMPY $0001
BEQ FIN
LDB ,Y
CMPB $0000
BNE CONTINUE
LDB #$00
STB ,Y
LEAY $01,Y
BRA SUITE
CONTINUE:
LDA ,Y
STA ,X
LEAX $01,X
LEAY $01,Y
BRA ENCORE
FIN:
END

fin

Dbut
B <- ($0003)
X <- #$0004
X <- X + B
STX $0001
X <- #$0004
Y <- #$0005
A <- (,X)
A=0

A <- #$00
(,X) <- A
A <- (Y)

A = ($0000)

A <- (,X)
X <- (X)+1
Y <- (Y) + 1

y = ($0001)

Trois 1 successives
LDB #$03
; B <- #$03
LDA $0001
;A <- ($0001) la donne
ENCORE:
TSTA
BNE SUITE
; si A est Nulle
LDA #$00
;A <- #$00
STA $0000
; $0000 <- (A) charger A dans $0000
END
SUITE:
LSLA
;left shifting, A<BCS NUL
;si C = 1
LDB #$03
;charger B par #$03
BRA TEST
; sauter vers TEST
NUL:
DECB
; DEcrementer B
TEST:
BNE ENCORE ; si B nest pas Nulle alore refaire
LDA #$FF
;charger A par #$FF
STA $0000
; stock A dans $0000
END

Compter dans un pia et clignoter 5 fois lors dune


interruption IRQ
;$FFF8 db $FC
;$FFF9 db $50

;vectorisation

DDRB EQU $8002


ORB EQU $8002
CRB EQU $8003

; initialisation

ORG $FC00
CLR CRB
LDA #$FF
STA DDRB
LDA #$04
STA CRB
LDA #$00
COMPTAGE:
STA ORB
BSR TEMP
INCA
BRA COMPTAGE

; stocker A dans ORB


;Appel du sous programme de temporisation
;incrmentation de A
;retourner au debut du programme de comptage

TEMP:
LDX #$000A

;programme de temporisation
;X <- #$000A

SOSO:
LEAX $FF,X
BNE SOSO
RTS

;decrementer X
; si X nest pas nulle
; retourner

ORG $FC50
LDB #$05

; programme dinterruption
; charger B par 5

TOTO:
CLR ORB
BSR TEMP
COM ORB
BSR TEMP
DECB
BNE TOTO
RTI

; ORB <- 0
; appel du programmme de temporisation
; le complement de ORB
;appel du sous programme TEMP
;decrementatoin de B
;si b nest pas nulle alore aller vers TOTO
;retourner

END:
END