Académique Documents
Professionnel Documents
Culture Documents
microprocesseurs
Dr - Wassim El Falou 1
Langages Machine et Langage Assembleur
Dr - Wassim El Falou 2
Langages Machine et Langage Assembleur
Dr - Wassim El Falou 3
Langages Machine et Langage Assembleur
Dr - Wassim El Falou 4
Langages Machine et Langage Assembleur
Dr - Wassim El Falou 5
Langages Machine et Langage Assembleur
Langages machine:
les instructions binaires c..d exprimes
sous forme de squences de 0 et de 1
Langages Assembleur:
Cest une reprsentation symbolique (mnmoniques)
des instructions binaires excutables par la machine
Trs proche du langage machine mais reste
comprhensible pour des dveloppeurs.
Dpend troitement du type de processeur utilis
(chaque type de processeur peut avoir son propre
langage machine). Ainsi, un programme dvelopp
pour une machine ne pourra pas tre port sur un
autre type de machine.
Dr - Wassim El Falou 7
Langages Machine et Langage Assembleur
Langages haut Niveau:
peut communiquer avec la machine sans tenir
compte de leur architecture. De ce fait, ils sont dits
machine - indpendant et les programmes crits dans
ces langages sont portables dune machine une
autre.
Ces langages sont plus proches de la formulation
logique de lalgorithme, ceci permet bien entendu
une criture plus rapide du programme.
Lindpendance vis vis de la machine a permis de
disposer dinstructions plus volues possdant un
niveau smantique suprieur celui des instructions
assembleur.
Dr - Wassim El Falou 8
Langages Machine et Langage Assembleur
Langages haut Niveau:
Lutilisation dun langage volu permet donc dlever le niveau dabstraction
dinstructions. Les notions des registres, positions mmoire et adressage
disparaissent et le programmeur peut travailler directement avec des entits
plus volues telles que des nombres en virgule flottante, des vecteurs, des
piles, etc..
Lexistence des telles structures de donnes, acclre considrablement la
programmation et minimise les risques derreur. En plus, avec la
programmation structure les notions dtiquettes (adresses dinstructions)
disparaissent ; le programmeur ne dit pas o le programme doit continuer,
mais ce quil doit faire ; il en rsulte une plus grande lisibilit des programmes
et une plus grande facilit de maintenance.
Le dsavantage essentiel reste nanmoins avec de tels langages volus, le fait
que lutilisateur ne puisse pas commander directement et efficacement toutes
les ressources de la machine. Le langage C a essay de remdier ce
problme et a eu de ce fait un grand succs surtout quil tait encore le
langage dimplantation du systme dexploitation UNIX.
Dr - Wassim El Falou 9
Un p vu par un programmeur
Dr - Wassim El Falou 10
Un p vu par un programmeur
Ces lments sont essentiellement :
Lensemble des registres du p accessibles au
programmeur.
Le jeu dinstructions du p.
Les diffrents modes dadressage disponibles.
Le mapping ou lorganisation mmoire, en particulier
les zones rserves.
Un ensemble dentres asynchrones (Reset, Ready, )
dont les actions peuvent influer directement sur le
squencement des instructions.
La frquence du squenceur pour calculer le temps
dexcution du programme.
Les types de donnes manipules par le p (digits,
BCD, octets, caractres).
Dr - Wassim El Falou 11
Un exemple de programmation
Soit effectuer en dcimal lopration : 8-3+2=7.
On suppose que les oprations sont codes sur 4 bits
On suppose galement que les donnes sont codes en
complment 2 sur un octet sign.
Si on considre dans un premier temps un adressage
immdiat et quon suppose que les codes oprations des
diffrentes instructions sont les suivants:
0001 : remise zro de laccumulateur
0010 : addition dun nombre laccumulateur
0100 : complmentation 1
1000 : incrmentation
Le programme est suppos dmarr une adresse code
sur un octet par exemple 39 : 00111001. La mmoire est
organise en mots de 4 bits.
Dr - Wassim El Falou 12
Un exemple de programmation
En Hex Adresse Instruction Commentaire Contenu de
Contenu du PC Opration oprande laccumulateur
Dr - Wassim El Falou 13
Un exemple de programmation
Dans le cas dun adressage direct 00100000810
En Hex Adresse Instruction 00100100210
Contenu du PC Opration oprande 00100010310
39 00111001 0001 00100110pour
3A 00111010 0010 0010 0010
ranger le rsultat.
3D 00111101 0100
3E 00111110 1000
3F 00111111 0010 0010 0000
Dr - Wassim El Falou 15
MC6800: Architecture et Brochage
Dr - Wassim El Falou 16
Motorola 6800: Point de vue dun programmeur
Dr - Wassim El Falou 17
MC6800: Modes dadressages
Adressages Inhrent
Adressages Immdiat
Adressages direct
Adressages tendue
Adressage indexe
Adressage relatif PC
Dr - Wassim El Falou 18
MC6800: Adressages Inhrent
Codeop sans mot dextension
Dr - Wassim El Falou 19
MC6800: Adressages Immdiat
Dr - Wassim El Falou 20
MC6800: Adressages Direct
Dr - Wassim El Falou 22
MC6800: Adressages Etendue
Exemple:
Org $1000 $1000 $4C
Loop: $1001 $20
INCA $1002 $FD
Bra Loop
Dr - Wassim El Falou 25
MC6800: Adressages Relatif PC
Exemple:
$1000 $4C
Org $1000
$1001 $7E
Loop:
$1002 $10
INCA
$1003 $00
Jmp Loop
Exemple:
Org $1000 $1000 $20
Bra Suite $1001 $01
INCA $1002 $4C
Suite:
..
Dr - Wassim El Falou 26
MC6800: Jeux dinstructions
Instructions des transferts des donnes
Instructions arithmtiques
Instructions logiques
Instructions de rotation et dcalage
Instructions de comparaison
Instructions dorganisation de programme
Autres Instructions
Dr - Wassim El Falou 27
MC6800: Instructions des transferts des donnes
LDAA, LDAB
STAA, STAB
TAB, TBA,TAP, TPA,TXS, TSX
LDX,LDS
STX,STS
PSHA, PSHB, PULA,PULB
Dr - Wassim El Falou 28
MC6800: Instructions des transferts des donnes
Exemples:
LDX #$0010 (Adressage Immdiat)
Avant Excution Aprs Excution
X = ???? X=$0010
LDX $0010 (Adressage Etendue)
Avant Excution Aprs Excution
X = ???? X=$3344
($0010) = $33
($0011) = $44
Dr - Wassim El Falou 29
MC6800: Instructions des transferts des donnes
Exemples:
STX $03,X (Adressage Indexe)
Avant Excution Aprs Excution
X = $AA00 X=$AA00
($AA03)=$?? AE=$AA03
($AA04)=$?? ($AA03)=$AA
($AA04)=$00
Dr - Wassim El Falou 30
MC6800: Instructions des transferts des donnes
Dr - Wassim El Falou 31
MC6800: Instructions des transferts des donnes
Exemples:
Org $0000
LDS #$03FF
LDAA #$AA
LDAB #$3F
PSHA 1
PSHB 2
PULA 3
PULB 4
Dr - Wassim El Falou 32
MC6800: Instructions des transferts des donnes
Dr - Wassim El Falou 33
MC6800: Instructions des transferts des donnes
Dr - Wassim El Falou 34
MC6800: Instructions des transferts des donnes
Dr - Wassim El Falou 35
MC6800: Instructions des transferts des donnes
Dr - Wassim El Falou 36
MC6800: Instructions Arithmtiques
ADDA, ADDB, ABA,ADDCA,ADDCB
SUBA,SUBB,SBA,SBCA,SBCB
INC, INCA,INCB, INX,INS
DEC,DECA,DECB,DES,DEX
DAA
Dr - Wassim El Falou 37
MC6800: Instructions Arithmtiques
Exemples: ($1000 = $02)
LDX #$1000 ; X=$1000
LDAA #$FF ; A = $FF
ADDA #$33 ; A = $32, C=1,Z=0,N=0,V=0
ADDCA 0,X ; A= $35, C=0,Z=0,N=0,V=0
ADDA $1000 ; A=$37, C=0,Z=0,N=0,V=0
Dr - Wassim El Falou 38
MC6800: Instructions Arithmtiques
Exemples:
SUBA #$02
Avant Excution Aprs Excution
A= $03 A=$01
C=0,N=0
Z=0, V=0
03 03
- 02 + FE
-------
01
Dr - Wassim El Falou 39
MC6800: Instructions Arithmtiques
Exemples:
LDAA #$03 ;A= $03
ADDA #$09 ; A= $0C
DAA ; A= $12 (car 3+9=12 en
dcimale)
Exemples:
LDAA #$99 ;A= $99
ADDA #$99 ; A= $32, H=1, C=1
DAA ; A= $98 , C=1
(car 99+99=198 en
Dr - Wassim El Falou 40
dcimale)
MC6800: Instructions Logiques
ANDA, ANDB (Et bit a bit)
BITA, BITB (Et bit a bit sans modifier A)
ORAA,ORAB (Ou bit a bit)
EORA, EORB (Ou exclusif bit a bit)
COM,COMA,COMB (C1)
NEG, NEGA, NEGB (C2)
Dr - Wassim El Falou 41
MC6800: Instructions Logiques
Exemples: ($0000 = $33; $000F = 6B)
Org $FC00
LDX #$000F ; X = $000F
LDAA $0000 ; A = $33
ANDA #$FE ; A = $32
ORAA #$AB ; A = $BB
EORA #$CC ; A = $77
COM ,X ; ($000F)= $94
NEGA ; A= $89
END
Dr - Wassim El Falou 42
MC6800: Instructions Logiques
Utilisation:
PORTA: Ports dentres dadresse $2000
Loop:
LDAA PORTA
ANDA #$08
BEQ Loop
Dr - Wassim El Falou 43
MC6800: Instructions Logiques
Utilisation:
PORTA: Ports de sortie
Forage a zro du bit numro 5
LDAA PORTA
ANDA #$DF
STAA PORTA
Dr - Wassim El Falou 44
MC6800: Instructions Logiques
Utilisation:
PORTA: Ports de sortie
Forage a un du bit numro 2
LDAA PORTA
ORAA #$04
STAA PORTA
Dr - Wassim El Falou 45
MC6800: Instructions Logiques
Utilisation:
PORTA: Ports de sortie
Inversion des numro 1 et 6
LDAA PORTA
EORA #$42
STAA PORTA
Dr - Wassim El Falou 46
MC6800: Instructions de rotation et dcalage
Dr - Wassim El Falou 47
MC6800: Instructions de rotation et dcalage
Dr - Wassim El Falou 48
MC6800: Instructions de Comparaison
CMPA : A (M) avec ajustement des Flags
CPX : X- (M:M+1) avec ajustement des Flags
CBA : A B avec ajustement des Flags
TSTA : A-00 avec ajustement des Flags
TSTB: B -00 avec ajustement des Flags
TST : M -00 avec ajustement des Flags
Dr - Wassim El Falou 49
MC6800: Instructions dorganisation de programmes
(Saut)
JMP
JSR : Jump to subroutine
RTS: Return from subrotine
Dr - Wassim El Falou 50
MC6800: Instructions dorganisation de programmes
(Branchement)
Dr - Wassim El Falou 51
MC6800: Instructions dorganisation de programmes
(Branchement)
Dr - Wassim El Falou 53
MC6800: Instructions dorganisation de programmes
(Branchement)
Dr - Wassim El Falou 55
MC6800: Mcanisme Sous Programme
Adresse Code
Org $FC00
$FC00 LDAA #$FF
$FC02 LDAB #$AC
$FC04 LDX #$3001
$FC07 BSR SP1
$FC09 INCA
$FC0A SWI
Dr - Wassim El Falou 56
MC6800: Mcanisme Sous Programme
Adresse Code
SP1 Org $FC10
$FC10 PSHA
$FC11 PSHB
$FC12 BSR SP2
$FC14 PULA
$FC15 PULB
$FC16 RTS
Dr - Wassim El Falou 57
MC6800: Mcanisme Sous Programme
Adresse Code
SP2 Org $FC30
$FC30 LDX #$600B
$FC33 RTS
Dr - Wassim El Falou 58
A B X SP PC Pile
Dr - Wassim El Falou 59
A B X SP PC Pile
Dr - Wassim El Falou 60
MC68000: Architecture et Brochage
Dr - Wassim El Falou 61
Motorola 68000: Point de vue dun programmeur
Dr - Wassim El Falou 62
Motorola 68000: Point de vue dun programmeur
Dr - Wassim El Falou 63
Motorola 68000: Point de vue dun programmeur
Dr - Wassim El Falou 64
MC68000: Modes dadressages
Adressage absolue (Court, et Long)
Direct par registres des donnes : Dx
Direct par registres des dadresses: Ax
Immdiat : #constante
Indirect par registre dadresses: (Ax)
Indirect par registre dadresses post-incrment : (Ax)+
Indirect par registre dadresses pr-dcrment : - (Ax)
Indirect par registre dadresses avec dplacement : d16 (Ax)
Indirect par registre dadresses index avec dplacement :
d8 (Ax , Rx)
Indirect par PC avec dplacement : d(16)(PC)
Indirect par PC avec dplacement et index : d(8)(PC,Rx)
Dr - Wassim El Falou 65
MC68000: Exemples
Directives DC (Define constant)
org $2000
array
dc.b $11,$22,$33,$44,$55,$66,$77,$88,$99,$AA
dc.w $11AA,255
dc.L $AABBCCDD
dc.b 'AB'
end
Dr - Wassim El Falou 66
MC68000: Exemples
Instructions MOVE
Dr - Wassim El Falou 67
MC68000: Exemples
Dr - Wassim El Falou 68
Dr - Wassim El Falou 69
Dr - Wassim El Falou 70
Dr - Wassim El Falou 71
Dr - Wassim El Falou 72
Dr - Wassim El Falou 73
Dr - Wassim El Falou 74
Dr - Wassim El Falou 75
Dr - Wassim El Falou 76
Dr - Wassim El Falou 77
Dr - Wassim El Falou 78
Dr - Wassim El Falou 79
Dr - Wassim El Falou 80
Dr - Wassim El Falou 81
Dr - Wassim El Falou 82
MC68000: Exemples
org $2000
array
dc.b $11,$22,$33,$44,$55,$66,$77,$88,$99,$AA
org $1000
move.l #$2000,A1 ;A1=$00002000
move.l #2,D5 ; D5=$00000002
move.w 0(A1,D5),D0 ; AE = $2000 + 2 + 0
; D0=$00003344
move.l #6,D5 ; D5=$0000006
move.l -2(A1,D5),D1 ; AE = $2000 + 6- 2
; D1=$55667788
rts
end $1000
Dr - Wassim El Falou 83
MC68000: Codage des Instructions
Dr - Wassim El Falou 84
MC68000: Codage des Instructions
Dr - Wassim El Falou 85
MC68000: Codage des Instructions
Par exemple le code de:
- move.l #$12345678,D0 est 203C 1234 5678
-move.w (A0)+,D0 est 3018
- move.l #table,D0 est 203C 0000 2000
- move.w $02(A0),D1 est 3228 0002
- moveq #1,D1 est 7201
Dr - Wassim El Falou 86
Assembler Directives
An assembler directive is simply a message to the assembler
that tells it how to go about translating instructions into
machine code. Assembly directives are not translated into
machine code because they are not instructions. Typical
assembler directives tell the assembler where to put a
program in memory, what space to allocate to variables, and
allow you to preset memory with data. When code is
assembled, a location counter in the assembler keeps track of
where the code and data is to go in memory.
Dr - Wassim El Falou 87
Assembler Directives
We are going to use the following directives in this course:
<label> EQU <value> Equate
ORG <value> Origin
<label> DC <value> Define constant
<label> DS <value> Define storage
END <value> End of assembly language
program and "starting address" for execution
Dr - Wassim El Falou 88
Assembler Directives: EQU
Equate
The EQU assembler directive simply equates a symbolic name
to a numeric value. Consider:
Sunday EQU 1
Monday EQU 2
The assembler substitutes the equated value for the symbolic
name; for example, if you write the instruction ADD.B
#Sunday,D2, the assembler treats it as if it were ADD.B #1,D2.
You could also write
Sunday EQU 1
Monday EQU Sunday + 1
In this case, the assembler evaluates "Sunday + 1" as 1 + 1
and assigns the value 2 to the symbolic name "Monday".
Dr - Wassim El Falou 89
Assembler Directives: EQU
Do not think that the EQU directive creates variables or
constant. It doesn't and it has no effect on the code
generated by the program. This directive simply allows you to
make a name equivalent to its value (i.e., it's a form of short
hand).
Dr - Wassim El Falou 90
Assembler Directives: ORG
Origin
The origin directive tells the assembler where to load
instructions and data into memory. The 68000 reserves the
first 1024 bytes of memory for exception vectors. Your
programs will start at location 1024; that is, you should begin
your program with ORG 1024 or ORG $400 (remember that
1024 = $400).
Dr - Wassim El Falou 91
Assembler Directives: DC
Define Constant
The define constant assembler directive allows you to put a
data value in memory at the time that the program is first
loaded. The DC directive takes the suffix .B, .W, or .L. You can
put several values on one line (each value is separated by a
comma). The optional label field is given the address of the
first location in memory allocated to the DC function.
Consider the example:
ORG $2000
Val1 DC.B 20,34
Val2 DC.L 20
Me DC.B Alan Clements
Dr - Wassim El Falou 92
Assembler Directives: DC
The effect of this code is to store the value $14 in location
$2000, $22 in location $2001, $00000014 in locations $2002,
$2003, $2004, $2005. Remember that a 32-bit long word
takes four bytes of memory. The ASCII string Alan Clements
is stored in bytes $2006 to $2012.
If you write MOVE.B Val2,D2, the assembler translates it as
MOVE.B $2002,D2. When this instruction is executed, data
register D2 is loaded with the contents of memory location
$2002. The value loaded into D2 might be 20. Might be?? Yes,
might be, because another instruction might modify the
contents of Val2. By the way, if you execute MOVE.B Me,D0,
data register D0 would be loaded with $41 (the ASCII code for
A). However, if you execute MOVE.W Me,D0, data register D0
would be loaded with $416C (the ASCII code for Al).
Dr - Wassim El Falou 93
Assembler Directives: DS
Define Storage
The define storage directive is used to reserve one or more
memory locations. This directive is similar to the Pascal type
declaration. Consider:
Result DS.B 1
Table DS.W 10
Point DS.L 1
Dr - Wassim El Falou 95
Dr - Wassim El Falou 96
Assembler Directives: Examples
Dr - Wassim El Falou 97
68000 Assembly Language Program Structure
Dr - Wassim El Falou 98
Assembler
Dr - Wassim El Falou 99
Assembler
BCHG, BCLR, BSET: test a bit and change/clear/set ; BTST: test a bit
the specified bit location is tested, and Z flag is updated accordingly (if
the tested bit is 0, Z=1, otherwise, Z=0) then the test bit is complemented
(BCHG), or cleared to 0 (BCLR), or set to 1 (BSET)
if the bit location is 0-7, an immediate value can be used,
otherwise, a data register is used to specify the bit location
Assembler syntax: Bxxx #<data>, <ea>
Bxxx Dn, <ea>
Size ={Byte, Long} where, xxx is CHG, CLR, SET, or TST
Examples: D2 = $FF007A4B
BCHG #3, D2 ;D2= $FF007A43, Z=0
MOVE #15, D1
BSET D1, D2 ;D2= $FF00FA43,Z=1
Dr - Wassim El Falou 135
MC68000: Instructions de manipulation des bits
ORG $1000
MOVE.B D0,D1
MOVE.W #$44FF,D1
ADD.W $00002000,D2
MOVE.B (a0)+,D0
MOVE.L -2(a0),$0000300F
END
Calculer les nombres des octets occups par ce programme?
Solution:
2+4+6+2+8 = 22 octets
Short T[100];
Short i;
Int S=0;
For (i=0;i<=98;i++)
S=S+T(i)*T(i+1);
Rappel: le type Short en C est un nombre sign code sur 16 bits, et le type Int est signe code sur 32 bits.
Solution:
ORG $1000
CLR.L D2
MOVE.B #N-1,D0
LEA T,A0
LOOP
MOVE.W (A0)+,D1
MULS (A0),D1
ADD.L D1,D2
DBRA D0,LOOP
MOVE.L D2,S
RTS
END $1000
short i,j,n,count,premier;
count=0;
for (i=0;i<=19;i++)
{
n=t[i]/2;
premier=1;
for (j=2;j<=n;j++)
if ((t[i] %j) ==0)
{
premier=0;
break;
} ; end if
if (premier ==1)
count++;
} ; end for
} ; end main
Ce programme compte les nombres premiers qui existent dans le tableau t. Il se traduit en assembleur par le compilateur comme suit:
n=t[i]/2;
move.l #_t,A0
move.w -2(A6),D0
muls #2,D0
add.w D0,A0
move.w (A0),D0
ext.l D0
divs #2,D0
move.w D0,-6(A6)
premier=1;
move.w #1,-10(A6)
break;
bra main_4