Vous êtes sur la page 1sur 147

( - 1 )2

EBCDIC BCD

BIT
NIBBLE
BYTE
WORD
DOUBLEWORD
QUADWORD
KILOBYTE
MEGABYTE
GIGABYTE
TERABYTE

ROM

RAM

CPU

Cpu
Pentium
pentium 80486 80386 80286 8086
Pro

1M

16

16

20

16M
16
16
24

4G
32
32
32

4G
32
32
32

4G
32
64
32

64G
32
64
36

8086
CS
ES
SS

AL

AH

BL

BH

CL

CH

DL

DH

DS

BP

IP

DI
SI
SP


OPERAND

ALU
FLAGS


)AX,BX,CX,Dx (AH,AL,

CS , DS , SS , ES

()

SP

FR

DI
,

BP

SI
IP ,

AX

BX

CX
DX
.
CH

CL
CX

BH

BL

AH

AL
AX

BX

DH

DL
DX


16
64
:
() DS
()SS
() ES
() CS

FLAG

16 .

CF

PF

CF
PF
AF
ZF
SF
TF
IF
DF
OF

AF

SF ZF

TF

OF DF IF


4
] ;[] [ ] [
:
MOV AL,BL

MOV
MOV destination, source
MOV CL,55H
MOV AH,DL
MOV AX,BX
MOV SI,DI

DS SS ES CS

MOV SS,2345H


MOV AX,2345H
MOV SS,AX
FF

MOV BX,5H


MOV BL,7F2H
MOV AX,2FE456H

ADD
ADD destination, source

Mov AL,25H
MOV BL,34H
ADD AL,BL

MOV DH,25H
ADD DH,34H

:

MOV BH,38H
ADD BH,2FH
38 0011 1000
2F 0010 1111
---- -------------67 0110 0111
CF=0 PF=0 AF=1 zf=0 SF=0


8086

A32FFH
00000H FFFFFH


64K
0000H FFFFH
EF32




2500:95F3

:
2500

25000+95F3=2E5F3H


()



CS IP
CS:IP .
: CS=24F6H IP=634AH:
-
-
-
-
-


DS
BX DI
SI .
:

]ADD AL,[BX


8 16

.
:
MOV AX,35F3H
MOV [1500],AX

F3

DS:1500

35

DS:1501

:
DS:6826=48H
DS:6827=22H
BX ] MOV BX,[6826
.

STACK
RAM CPU
.
SS SP .
sp
.


:
SP:=1236H
AX=24B6
DI=85C2
DX=5F93
.
PUSH AX
PUSH DI
PUSH DX

SS:1230

93

SS:1231

5F

SS:1232

C2

C2

85

85

B6

B6

B6

24

24

24

PUSH DI

PUSH DX

SS:1233
SS:1234
SS:1235

SS:1236

START

PUSH AX


.
: sp=18FA


POP CX
POP DX
POP BX

SS:18FA
SS:18FB
SS:18FC
SS:18FD
SS:18FE
SS:18FF

23
14
6B

6B

2C

2C

91

91

91

F6

F6

F6

POP CX

POP DX

SP=18FC
CX=1423

SP=18FE
DX=2C6B

SS:1900

START

POP BX
SP=1900
BX=F691




MOV BX,DX
MOV ES,AX
ADD AL,BH




DS
FLAG
MOV AX,2550H
MOV CX,635
MOV BL,40H



.

DS .
]MOV DL,[2400

:
DS=1512H
MOV AL,99H
MOV [3518],AL



. SI
DI BX
DS
]MOV AL,[BX
]MOV CL,[SI
MOV [DI],AH

: DS=1120 SI=2498 AX=17FE


MOV [SI],AX


BX BP

MOV CX,[BX]+10


DI SI
.
MOV DX,[SI]+5
MOV CL,[DI]+20

: DS=4500 SS=2000 BX=2100


DI=8500 BP=7814 AX=2512
AX

MOV [BX]+20,AX -
MOV [SI]+10,AX -
MOV [DI]+4,AX -
MOV [BP]+12,AX -



.
MOV CL,[BX][DI]+8
MOV CH,[BX][SI]+20
MOV AH,[BP][DI]+12

()

] MOV AX,[BX DS:BX

]MOV AX,ES:[BX
:
]MOV AX,CS:[BP


IP
SI,DI,BX
SI,DI,BX


CS
DS
ES

SP,BP

SS

DS

] [

DS

][BX],[SI],[DI

DS
SS

, [BP]+[BX]+

DS
DS

, [SI]+[DI]+

DS
DS
SS

[BX][SI]+
[BX][DI]+
[BP][SI]+


Label SEGMENT [options]

Label ENDS

STACK _ SEG

SEGMENT

PARA STACK STACK


.

STACK _ SEG
DATA _ SEG

ENDS
SEGMENT PARA

DATA


DATA _ SEG ENDS
EXTRA _ SEG SEGMENT PARA EXTRA


EXTRA _ SEG
ENDS
CODE _ SEG SEGMENT PARA CODE


CODE _ SEG

ENDS

DB

.
DATA1 DB 25
DATA2 DB 10001001B
DATA3 DB 12H
DATA4 DB 2591
? DATA5 DB

DUP

)DATA DB 6DUP(12H
)?(DATA DB 32DUP
))DATA DB 5DUP(2DUP(99

DW

DATA1 DW 954
DATA2 DW 1001010100B
DATA3 DW 253FH
DATA4 DW 9,2,7,0CH,00100000B,HI
)?(DATA5 DW 8DUP

DD

DATA DD 1023
DATA1 DD 100010010110010111000B
DATA2 DD 5C2A57F2H
DATA3 DD 23H,24789H,65533

DQ

DATA20 DQ 4523C2H
DATA1 DQ HI
? DATA2 DQ

EQU

.
COUNT EQU 25

ORG

.
ORG 0030H

TITLE PROG3
PAGE 60,132
STSEG SEGMENT
DB 32 DUP(?)
STSEG ENDS
DTSEG SEGMENT
ORG 10H
DATA_IN DB 25H.4FH,85H,1FH,2BH,C4H
ORG 28H
COPY DB 6 DUP(?)
DTSEG ENDS
CDSEG SEGMENT
MAIN PROC FAR
ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG
MOV AX,DTSEG
MOV DS,AX
MOV SI,OFFSET DATA_IN
MOV DI,OFFSET COPY
MOV CX,06H
MOV_LOOP: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
DEC CX
JNZ MOV_LOOP
MOV AH,4CH
INT 21H
MAIN ENDP
CDSEG ENDS
END MAIN

STSEG SEGMENT
DB 32 DUP(?)
STSEG ENDS
DTSEG SEGMENT
DATA_IN DW 234DH,1DE6H,3BC7H,566AH
ORG 10H
SUM DW ?
DTSEG ENDS
CDSEG SEGMENT
MAIN PROC FAR
ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG
MOV AX,DTSEG
MOV DS,AX
MOV CX,04
MOV DI,OFFSET DATA_IN
MOV BX,00
ADD_LP: ADD BX,[DI]
INC DI
INC DI
DEC CX
JNZ ADD_LP
MOV SI,OFFSET SUM
MOV [SI],BX
MOV AH,4CH
INT 21H
MAIN ENDP
CDSEG ENDS
END MAIN

PAGE 60,132
TITLE SAMPLEPROG
STSEG SEGMENT
DB 32 DUP(?)
STSEG ENDS
DTSEG SEGMENT
DATA_IN DB 25H,12H,15H,1FH,2BH
SUM DB ?
DTSEG ENDS
CDSEG SEGMENT
MAIN PROC FAR
ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG
MOV AX ,DTSEG
MOV DS,AX
MOV CX,05
MOV BX,OFFSET DATA_IN
MOV AL,0
AGAIN: ADD AL,[BX]
INC BX
DEC CX
JNZ AGAIN
MOV SUM,AL
MOV AH,4CH
INT 21H
MAIN: ENDP
CDSEG ENDS
END MAIN

NEG
(
MOV AL,100
NEG AL

NOT
(
)
MOV AL,05H
NOT AL

LEA

LEA destination ,source


source destination
LEA BX,X
X BX
MOV BX, OFFSET X
destination : 16

SUB
:

( )


SUB destination, source

Destination=destination-source
: CF
CF=0 CF=1
( )
.

: AL
CF ZF PF AF SF

MOV AL,3FH
MOV BH,23H
SUB AL,BH
:
MOV AL,3FH
MOV BH,23H
SUB BH,AL

SBB
: CF=0
SUB CF=1

: CF=1 AL=95H BL=4F

SBB AL,BL

:
DATA_A DD 62562FAH
DATA_B DD 412963BH
RESULT DD ?
.
MOV AX,WORD PTR DATA_A
SUB AX,WORD PTR DATA_B
MOVE WORD PTR RESULT,AX
MOV AX,WORD PTR DATA_A+2
SBB AX,WORD PTR DATA_B+2
MOVE WORD PTR RESULT+2,AX

ADC
.
ADC AH,BL
:
AH=AH+BL+CF

X
DD
45ED23AF
Y
DD
6785FF23
Z
DD
?
MOV
AX ,WORD PTR X
ADD
AX , WORD PTR Y
MOV WORD PTR Z , AX
MOV
AX ,WORD PTR X + 2
ADC
AX , WORD PTR Y + 2
MOV
WORD PTR Z + 2 , AX

:
.
DTSEG SEGMENT
DATA1 DQ 548FB9963CE7H
DATA2 DQ 3FCD4FA23B8DH
DATA3 DQ ?
SEGMENT
.
CLC
MOV SI,OFFSET DATA1
MOVE DI,OFFSET DATA2
MOVE BX,OFFSET DATA3
MOV CX,04

BACK: MOV AX,[SI]


ADC AX,[DI]
MOV [BX],AX
INC DI
INC DI
INC SI
INC SI
INC BX
INC BX

LOOP BACK
.

) )MUL



AL
AX
AH=0,AL

AX
DX:AX
DX:AX

:1

RESULT DW ?
.
MOV AL,25H
MOV BL,65H
MUL BL
MOV RESULT,AX

:
DATA3 DW 2378H
DATA4 DW 2F79H
RESULT1 DW 2 DUP(?)
.
MOV AX,DATA3
MUL DATA4
MOV RESULT1,AX
MOV RESULT1+2,DX

DATA5 DB 6BH
DATA6 DW 12C3H
RESULT3 DW 2 DUP(?)
.
MOV AL,DATA5
SUB AH,AH
MUL DATA6
MOV BX,OFFSET RESULT3
MOV [BX],AX
MOV [BX]+2,DX

DATA1 DB 25H
DATA2 DB 65H
RESULT DW ?
..
MOV AL,DATA1
MOV SI,OFFSET DATA2
MUL BYTE PTR [SI]
MOV RESULT,AX

DIV

AH=0,AX

AL

AH

=DX=0,AX

AX

DX

=AX

AL

AH

AX

DX

=DX:AX

MOV AL,95
SUB AH,AH
DIV 10
MOV Q,AL
MOV R,AH

AND
AND
MOV BL,35H
AND BL,0FH
AND CF OF .
AND
AND AL,AL
JZ WER
.

WER: ..

OR
OR

MOV BL,35H
OR BL,0FH
OR CF OF

OR
OR BL,0
OR BL,BL

XOR

XOR

MOV BL,35H
XOR BL,0FH
XOR CF OF

XOR

XOR AH,BL
XOR

XOR BH,06H

SHR

CF
.

CL .
CF

LSB

MSB

:
MOV AL,9AH
MOV CL,3
SHR AL,CL
:
MOV BX,FFFFH
SHR BX,1

:
DATA1 DW 7777H
TIMES EQU 4
MOV CL,TIMES
SHR DATA1,CL

SHL
SHR

LSB

MSB

CF

:
MOV DH,6
MOV CL,4
SHL DH,CL

JMP
JMP goto .
JMP LABEL
-128 127 ( IP
).

:
JMP L1
..
..
L1:..

LABEL:..
..
..
JMP LABEL


IF
. :

ZF = 1
ZF = 0

Je
Jz
Jne
Jnz

SF = 1

Js

SF = 0

Jns

CF = 1

Jc

CF = 0

Jnc

PF = 1

Jp
Jpe

PF = 0

Jnp
Jpo

OF = 1

Jo

OF = 0

Jno


CMP .
:
CMP OPR1 , OPR2
CMP SUB
.

AX , 100

CMP

CMP
:

JA

JNBE

JAE

JNB

JB

JNAE

JBE

JNA

CF=0,ZF=0

CF=0

CF=1

ZF=1 CF=1

CMP
:

JG
JNLE

SF=OF,ZF=0

JGE

JNL

JL

JNGE
JLE

SF=OF

SF<>OF

ZF =1 SF<>OF

:
CMP AL,61H
JB NEXT
CMP AL,7AH
JA NEXT
AND AL,DFH
NEXT: MOV [SI],AL



. CX
LOOP .
:
MOV CX , 10
LABI : .......
..........
. ........
LOOP LAB1
.
LOOP CX
. CX .

JCXZ
JCXZ .
CX
.
MOV
CX , 50
LABI: .......
..............
..............
DEC
CX
JCXZ
LABEND
JMP
LABI
LABEND:

LOOPNZ , LOOPZ
LOOPNZ , LOOPZ LOOP
CMP .
CX LOOPNZ
.
CX LOOPZ
.
:

MOV
FOR :

CX , 10
.
.
.
BX , 0
FOR

CMP
LOOPNZ

ROR
ROL
RCR
RCL

ROR


.

CF

MSB ----------------- LSB

:
MOV AL,36H
ROR AL,1
ROR AL,1

:
MOV BX,C7E5H
MOV CL,6
ROR BX,CL

ROL


CF

MSB -----------LSB

CF

MOV BH,72H
ROL BH,1
:
MOV DX,672AH
MOV CL,3
ROL DX,CL


DATA1 DB 97H
COUNT DB ?
.
SUB BL,BL
MOV DL,8
MOV AL,DATA1
AGAIN:ROL AL,1
JNC NEXT
INC BL
NEXT: DEC DL
JNZ AGAIN
MOV COUNT,BL

RCR


.

CF

MSB------------ LSB

:
CLC
MOV AL,26H
RCR AL,1

:
STC
MOV BX,37F1H
MOV CL,5
RCR BX,CL

RCL

MSB --------------- LSB

CF

STC
MOV BL,15H
RCL BL,1

CLC
MOV AX,191CH
MOV CL,5
RCL AX,CL

BCD
BCD

BCD
0000 0
0001 1
0010 2
0011 3
0100 4

5
6
7
8
9

0101
0110
0111
1000
1001

BCD
BCD :
.
: 5 00000101
BCD :
.
: 59 01011001

BCD,ASCII
BCD

00000000

0110000

30

00000001

0110001

31

00000010

0110010

32

00000011

0110011

33

00000100

0110100

34

00000101

0110101

35

00000110

0110110

36

00000111

0110111

37

00001000

0111000

38

00001001

0111001

39

BCD
.
ASC DB 9562481273
ORG 0010H
UNPACK DB 10 DUP(?)
..
MOV CX,5
MOV BX,OFFSET ASC
MOV DI,OFFSET UNPACK
AGAIN:MOV AX,WORD PTR [BX]
AND AX,0F0FH
MOV WORD PTR [DI],AX
ADD DI,2
ADD BX,2
LOOP AGAIN

BCD
.
VAL_ASC DB 47
VAL_BCD DB 2DUP(?)

MOV AX,WORD PTR VAL_ASC


AND AX,0F0FH
XCHG AH,AL
MOV CL,4
SHL AH,CL
OR AL,AH
MOV VAL_BCD,AL

BCD
VAL1_BCD DB 29H
VAL3_ASC DW ?
..
MOV AL,VAL1_BCD
MOV AH,AL
AND AX,F00FH
MOV CL,4
SHR AH,CL
OR AX,3030H
XCHG AH,AL
MOV VAL3_ASC,AX

BCD
ADD BCD

:
MOV AL,17H
ADD AL,28H
3FH BCD 45
. 06
:
MOV AL,87H
ADD AL,52H
D9 BCD . 60

DAA Logic
If (AL(lo) > 9) or (AuxCarry = 1)
AL = AL + 6
AuxCarry = 1
If AL = AL + 6 sets the
Carry flag, its value is
Else
used when evaluating
AuxCarry = 0
AL(hi).
Endif
If (AL(hi) > 9) or Carry = 1
AL = AL + 60h
Carry = 1
Else
Carry = 0
Endif
106

DAA
6
6
ADD ADC 9
AF=1 0110
9 CF=1
0110 .
: 29H 18H AF=1
0110 .

:
DATA1 DB 47H
DATA2 DB 25H
DATA3 DB ?
.
MOV AL,DATA1
MOV BL,DATA2
ADD AL,BL
DAA
MOV DATA3,AL

DAA Examples
Example: calculate BCD 35 + 48
mov al,35h
add al,48h
daa

Example: calculate BCD 35 + 65


mov al,35h
add al,65h
daa

; AL = 7Dh
; AL = 83h, CF = 0

; AL = 9Ah
; AL = 00h, CF = 1

Example: calculate BCD 69 + 29


mov al,69h
add al,29h
daa

; AL = 92h
; AL = 98h, CF = 0
109

BCD
BCD
DAS

SUB SBB 9
AF=1 0110
9 CF=1 0110
.

DAS Logic
If (AL(lo) > 9) OR (AuxCarry = 1)
AL = AL 6;
AuxCarry = 1;
If AL = AL - 6 sets the
Else
Carry flag, its value is
AuxCarry = 0;
used when evaluating AL
Endif
If (AL > 9FH) or (Carry = 1)
AL = AL 60h;
Carry = 1;
Else
Carry = 0;
Endif

in the second IF
statement.

111

BUD DT 87965141012
EXP DT 31610640392
BAL DT ?
..
MOV CX,11
MOV BX,00
CLC
BACK: MOV AL,BYTE PTR BUD[BX]
SBB AL,BYTE PTR EXP[BX]
DAS
MOV BYTE PTR BAL[BX],AL
INC BX
LOOP BACK

DAS Examples (1 of 2)
Example: subtract BCD 48 35
mov al,48h
sub al,35h
das

Example: subtract BCD 62 35


mov al,62h
sub al,35h
das

; AL = 13h
; AL = 13h CF = 0

; AL = 2Dh, CF = 0
; AL = 27h, CF = 0

Example: subtract BCD 32 29


mov al,32h
add al,29h
daa

; AL = 09h, CF = 0
; AL = 03h, CF = 0
113

DAS Examples (2 of 2)
Example: subtract BCD 32 39
mov al,32h
sub al,39h
das

; AL = F9h, CF = 1
; AL = 93h, CF = 1

Steps:
AL = F9h
CF = 1, so subtract 6 from F9h
AL = F3h
F3h > 9Fh, so subtract 60h from F3h
AL = 93h, CF = 1

114

ASCII Decimal
A number using ASCII Decimal
representation stores a single ASCII digit in
each byte
For example, 5,678 is stored as the following
sequence of hexadecimal bytes:
35 36 37 38

115

AAA Instruction
The AAA (ASCII adjust after addition)
instruction adjusts the binary result of an ADD
or ADC instruction. It makes the result in AL
consistent with ASCII decimal representation.
The Carry value, if any ends up in AH

Example: Add '8' and '2'


mov
mov
add
aaa
or

ah,0
al,'8'
al,'2'
ax,3030h

;
;
;
;

AX
AX
AX
AX

=
=
=
=

0038h
006Ah
0100h (adjust result), CF=1
3130h = '10'

116

AAS Instruction
The AAS (ASCII adjust after subtraction)
instruction adjusts the binary result of an SUB or
SBB instruction. It makes the result in AL
consistent with ASCII decimal representation.
It places the Carry value, if any, in AH

Example: Subtract '9' from '8'


mov ah,0
mov al,'8'
sub al,'9'
aas
or al,30h

;
;
;
;

AX
AX
AX
AL

=
=
=
=

0038h
00FFh
FF09h, CF=1
'9'

117

AAM Instruction
The AAM (ASCII adjust after multiplication)
instruction adjusts the binary result of a MUL
instruction. The multiplication must have been
performed on unpacked BCD numbers.
mov bl,05h
mov al,06h
mul bl
aam

;
;
;
;

first operand
second operand
AX = 001Eh
AX = 0300h

118


BIOS DOS
INT
. INT
INT xx
Xx 00 FF
256

INT 10H BIOS


. 06H INT 10H
MOV AH,06
MOV AL,00
MOV BH,07
MOV CH,00
MOV CL,00
MOV DH,24
MOV DL,79
INT 10H

MOV AX,0600H
MOV BH,07
MOV CX,0000
MOV DX,184FH
INT 10H


INT 10H 02
.
MOV AH,02
MOV BH,00
MOV DL,25
MOV DH,15
INT 10H


INT 10H 03
DH
DL
MOV AH,03
MOV BH,00
INT 10H

INT 21H DOS




INT 21H 09 ASCII

DATA_ASC DB THE EARTH, $
.
MOV AH,09
MOV DX,OFFSET DATA_ASC
INT 21H


INT 21H 02

MOV AH,02
MOV DL,J
INT 21H


INT 21H 0AH


.....
)DATA1 DB 6DUP(FF
..
MOV AH,0AH
MOV DX,OFFSET DATA1
INT 21H

PROCEDURE

.

.
.
.

.

.


.
PROC ENDP

.
NEAR
FAR
.
.

INITIALIZE
NEAR

PROC

.
.
.
INITIALIZE

ENDP

:
CALL

INITIALIZE

POPFPUSHF

PUSH pop
flag
PUSHF
POPF

CDSEG SEGMENT
MAIN PROC FAR

.
CALL ASC
..
ENDP
ASC PROC
..
.
ASC ENDP


OF :

CF=0
CF=1
CF=1
OF=0

:
MOV AL,96
MOV BL,70
ADD AL,BL

:
MOV AL,-2
MOV CL,-5
ADD CL,AL

:
MOV AL,-120
MOV BL,-10
ADD AL,BL

:
MOV AL,92
MOV BL,89
ADD AL,BL

16 OF

CF=0
CF=1

CF=1
OF=0

:
MOV AX,6E2FH
MOV CX,13D4H
ADD AX,CX

:
MOV DX,542FH
MOV BX,12E0H
ADD DX,BX


CBW AH

AL

AH

CWD DX

AX

DX


MOV AX,260
CWD

MOV AL,-2
CBW


DATA1 DB 96
DATA2 DB 70
RESULT DW ?
.
SUB AH,AH
MOV AL,DATA1
MOV BL,DATA2
ADD AL,BL
JNO OVER
MOV AL,DATA2
CBW
MOV BX,AX
MOV AL,DATA1
CBW
ADD AX,BX
OVER: MOV RESULT,AX

IDIV

CBW =AL



AL

AH

CWD=AX

AX

DX

AX

AL

AH

DX:AX

AX

DX


SIGN_DAT DB +13,-10,+19,+14,-18
AV DW ?
RE DW ?
..
MOV CX,5
SUB BX,BX
MOV SI,OFFSET SIGN_DAT
BACK: MOV AL,[SI]
CBW
ADD BX,AX
INC SI
LOOP BACK
MOV AL,5
CBW
MOV CX,AX
MOV AX,BX
CWD
IDIV CX
MOV AV,AX
MOV RE,DX

IMUL

AL

AX

AX

DX:AX

DX:AX

CBW=AL

SAR

CF

MSB----------- LSB

MSB

:
MOV AL,-10

SAR AL,1
SAR 2

:
MOV AX,-9
MOV BL,2
IDIV BL
MOV AX,-9
SAR AX,1
SHL SAL

NEG
(
MOV AL,100
NEG AL

NOT
(
)
MOV AL,05H
NOT AL

Vous aimerez peut-être aussi