riistvarapõhine programmeerimine loeng 6 andmeteisalduskäsud biti- ja stringikäsud...

58
Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsu d Biti- ja stringikäsud Sisend/ väljundkäsud Siirdekäsud

Upload: anthony-chase

Post on 17-Dec-2015

227 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

Riistvarapõhine programmeerimine

Loeng 6AndmeteisalduskäsudBiti- ja stringikäsudSisend/väljundkäsudSiirdekäsud

Page 2: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

2

Andmeedastuskäsud Andmete laadimine Aadresside laadimine Bit-käsud Stringikäsud

Page 3: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

3

Andmete laadimine I

Mov A, BXchg A, BPush APop A

Page 4: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

4

Mov I

Mov A, B

mov reg, regmov mem, regmov reg, memmov reg, immidiate datamov mem, immidiate datamov segreg, regmov segreg, mem

Page 5: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

5

Mov II

Page 6: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

6

Mov III

D bit encoding

D = 0reg -> mem

D = 1mem -> reg

Page 7: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

7

Mov IV

W bit encoding

W = 0A, B -> 8 bit

W = 1A, B -> 16 bit

Page 8: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

8

Mov V

Reg W=0 W=1

000 AL AX

001 BL BX

010 CL CX

011 DL DX

100 AH SP

101 BH BP

110 CH SI

111 DH DI

REG bit encoding

Page 9: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

9

Mov VIMod bit encoding

Mod Meaning

00 The r/m field denotes a register indirect memory addressing mode or a base/indexed addressing mode (see the encodings for r/m) unless the r/m field contains 110. If MOD=00 and r/m=110 the mod and r/m fields denote displacement-only (direct) addressing.

01 The r/m field denotes an indexed or base/indexed/displacement addressing mode. There is an eight bit signed displacement following the mod/reg/rm byte.

10 The r/m field denotes an indexed or base/indexed/displacement addressing mode. There is a 16 bit signed displacement (in 16 bit mode) following the mod/reg/rm byte .

11 The r/m field denotes a register and uses the same encoding as the reg field

Page 10: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

10

Mov VIIR/M Field Encoding

R/M Addressing mode (Assuming MOD=00, 01, or 10)

000 [BX+SI] or DISP[BX][SI] (depends on MOD)

001 [BX+DI] or DISP[BX+DI] (depends on MOD)

010 [BP+SI] or DISP[BP+SI] (depends on MOD)

011 [BP+DI] or DISP[BP+DI] (depends on MOD)

100 [SI] or DISP[SI] (depends on MOD)

101 [DI] or DISP[DI] (depends on MOD)

110 Displacement-only or DISP[BP] (depends on MOD)

111 [BX] or DISP[BX] (depends on MOD)

Page 11: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

11

Mov VIII

Mov reg8, reg8 2 baiti 2

Mov reg16, reg16 2 baiti 2

Mov reg16, mem 2 baiti 8+mem

Mov mem, reg16 2 baiti 9+mem

Mov reg16, imm.data 4 baiti 4

Mov mem16, imm.data 4 baiti 10+mem

Mov segreg,reg16 2 baiti 2

Mov segreg,mem 2 baiti 8+mem

Page 12: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

12

Mov IXOperandi suurus – byte/word:mov [bx], 0 ; 0 -> [bx]

mov byte ptr [bx], 0mov word ptr [bx], 0

Segment registers:mov ax, 40hmov es, ax

Page 13: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

13

Andmete laadimine II

xchg A, B

xchg reg, mem 2 baiti

xchg reg, reg 2 baiti

xchg ax, reg 1 bait

Lippud: ei mõjuta

Page 14: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

14

Andmete laadimine III

push A A -> pinusse

push reg16 push memorypush segreg pushf

Algoritm:SP := SP - 2[SS:SP] := 16 bit operand (store result at location SS:SP.)

Page 15: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

15

Andmete laadimine IV

pop A A <- pinust

pop reg16 pop memorypop segreg popf

Algoritm:16-bit operand := [SS:SP]SP := SP + 2

Page 16: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

16

Adressite laadimine I

lds reg16, mem32

Agoritm:

reg16 := [mem32]

ds := [mem32 + 2]

Page 17: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

17

Adressite laadimine II

les reg16, mem32

Algoritm:

reg16 := [mem32]

es := [mem32 + 2]

Page 18: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

18

Adressite laadimine III

lea reg16, mem

Lea ax, 1234h 1234h ->ax

Mov ax, 1234h 1234h ->ax

Page 19: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

19

Adressite laadimine IVlea reg16, mem

lea ax, [bx] ; mov ax, bx

lea bx, 3[bx] ; add bx, 3

lea ax, 3[bx] ; add bx, 3; mov ax, bx

Page 20: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

20

Adressite laadimine V

lea reg16, mem

lea bx, 128[bp+di]

mov al,[bx]

mov al,[bx]

mov al,128[bp+di]

mov al,128[bp+di]

Page 21: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

21

Bit-käsud

test A, B test

bt A, index bit test

btc A, index test and complement

btr A, index test and reset

bts A, index test and set

bsf A, B bit scan forward

bsr A, B bit scan reverse

Page 22: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

22

Testtest A, B A & B -> FR

Lipud:Cf -> 0Of -> 0Zf -> vastavalt tulemuseleSf -> vastavalt tulemuselePf -> vastavalt tulemuseleAf -> vastavalt tulemusele

Page 23: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

23

BT, BTS, BTR, BTC

Bt ax, 6 ; bit6 -> Cf

Bx = 33Bt A, bx ; bit 1 of A+4-> Cf

; effective address + index/8

Page 24: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

24

BSF, BSR I

bsf A, B ; 0 -> 15

bsr A, B ; 15 -> 0

Kui leitud “1”:Zf = 0, B = Bit indexKui ei leitud_Zf = 1, B - määramata

Page 25: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

25

BSF, BSR II

Kuidas leida “0”:

1. Kopeerida operand - mov

2. Inverteerida operand - not

3. Otsida “1” - bsf, bsr

Page 26: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

26

Set – käsud I

set** reg8

set** mem8

Set** Akui ** = true, A = 1kui ** = false, A = 0

Page 27: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

27

Set – käsud II

SET** Instructions That Test Flags

Page 28: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

28

Set – käsud III

SET** Instructions for Unsigned Comparisons

Page 29: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

29

Set – käsud IV

SET** Instructions for Signed Comparisons

Page 30: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

30

Set – käsud V

Bool := A <= B

Bool byte variable

A, B signed integer

mov ax, A

cmp ax, B

setle Bool

Page 31: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

31

Set – käsud VIBool := ((A <= B) and (D = E)) or (F <> G)

mov ax, Acmp ax, Bsetle bl ; A <= Bmov ax, Dcmp ax, Esete bh ; D = Eand bl, bh ; (A <= B) and (D = E)mov ax, Fcmp ax, Gsetne bh ; F <> Gor bl, bh ; * or *mov Bool, bh

Page 32: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

32

String-käsud I

movs (move string)

lods (load string element into the accumulator)

stos (store accumulator into string element)

scas (Scan string and check for match against the value in the accumulator)

cmps (compare two strings)

ins (input a string from an I/O port)

outs (output a string to an I/O port

Page 33: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

33

String-käsud II

rep (repeat a string operation)

repz (repeat while zero)

repe (repeat while equal)

repnz (repeat while not zero)

repne (repeat while not equal)

Page 34: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

34

String-käsud II

movs{size - b,w}: es:[di] := ds:[si]

if direction_flag = 0 then

si := si + size;

di := di + size;

else

si := si - size;

di := di - size;

endif;

Page 35: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

35

String-käsud III

cmps{size - b,w}: cmp ds:[si], es:[di]

if direction_flag = 0 then

si := si + size;

di := di + size;

else

si := si - size;

di := di - size;

endif;

Page 36: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

36

String-käsud IV

lods{size - b,w}: ax/al := ds:[si]

if direction_flag = 0 then

si := si + size;

else

si := si - size;

endif;

Page 37: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

37

String-käsud V

stos{size - b,w}: es:[di] := ax/al

if direction_flag = 0 then

di := di + size;

else

di := di - size;

endif;

Page 38: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

38

String-käsud VI

scas{size - b,w}: cmp ax/al, es:[di]

if direction_flag = 0 then

di := di + size;

else

di := di - size;

endif;

Page 39: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

39

String-käsud VII

ins{size b,w}: es:[di] := port(dx)

if direction_flag = 0 then

di := di + size;

else

di := di - size;

endif;

Page 40: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

40

String-käsud VIII

outs{size - b,w}: port(dx) := ds:[si]

if direction_flag = 0 then

si := si + size;

else

si := si - size;

endif;

Page 41: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

41

Sisend/väljundkäsud I

in ax/al, port ; inputin ax/al, dx

out port, ax/al ; outputout dx, ax/al

0 < port < 255Ei mõjuta lipud

Page 42: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

42

Sisend/väljundkäsud IIRead keyboard from port 60h

in al, 60h ; Read

Sent ‘data’ to printer port 378h

mov dx, 378h ; port to dx

mov al, data ; data to al

out dx, al ; send

Page 43: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

43

Siirdekäsud

Tingimatu siire

Tingimussiire

Protseduurid

Page 44: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

44

Tingimatu siire Ijmp A

jmp disp8 ;direct intrasegment, 8 bit displacement.jmp disp16 ;direct intrasegment, 16 bit displacement.jmp mem16 ;indirect intrasegment, 16 bit memory operand.jmp reg16 ;register indirect

intrasegment.

Page 45: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

45

Tingimatu siire IImov dx, 378h ;Parallel printer port

address.

Loop: in al, dx ;Read character from input port.

xor al, 1 ;Invert the L.O. bit.

out dx, al ;Output data back to port.

jmp Loop ;Repeat forever.

Loop: Statement label

Page 46: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

46

Tingimatu siire IIIWordVar word TargetAddress

.

.

.

jmp WordVar

mov ip, WordVar

Page 47: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

47

Tingimatu siire IV

jmp ax

mov ip, ax

Page 48: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

48

Tingimussiire I

JmpTbl word iffalse, iftrue

.

.

.

mov ax, X

cmp ax, Y

sete bl

jmp JmpTbl[bl*2]

Page 49: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

49

Tingimussiire II

J** A

j** disp8

Page 50: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

50

Tingimussiire III

Page 51: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

51

Tingimussiire IV

Page 52: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

52

Tingimussiire V

Page 53: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

53

Tingimussiire VIjc Target

jnc SkipJmp

jmp Target

SkipJmp:

128 baiti !!!

Page 54: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

54

Kokkuvõte I

Andmeedastuskäsud:movxchglealdsles

Page 55: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

55

Kokkuvõte II

Bit – käsud:testbt*set**

Page 56: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

56

Kokkuvõte III

String-käsud:mov*sto*loa*cmp*

Page 57: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

57

Kokkuvõte IV

Siirdekäsud:jmpj**

Page 58: Riistvarapõhine programmeerimine Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud

22/07/2004 ID218 Riistvaralähedane programmeerimine

58

Kokkuvõte V

Sisend / väljundkäsudinout