1 / 58

Riistvarapõhine programmeerimine

Riistvarapõhine programmeerimine. Loeng 6 Andmeteisalduskäsud Biti- ja stringikäsud Sisend/väljundkäsud Siirdekäsud. Andmeedastuskäsud. Andmete laadimine Aadresside laadimine Bit-käsud Stringikäsud. Andmete laadimine I. Mov A, B Xchg A, B Push A Pop A. Mov I. Mov A, B

kimball
Download Presentation

Riistvarapõhine programmeerimine

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Andmeedastuskäsud • Andmete laadimine • Aadresside laadimine • Bit-käsud • Stringikäsud ID218 Riistvaralähedane programmeerimine

  3. Andmete laadimine I Mov A, B Xchg A, B Push A Pop A ID218 Riistvaralähedane programmeerimine

  4. Mov I Mov A, B mov reg, reg mov mem, reg mov reg, mem mov reg, immidiate data mov mem, immidiate data mov segreg, reg mov segreg, mem ID218 Riistvaralähedane programmeerimine

  5. Mov II ID218 Riistvaralähedane programmeerimine

  6. Mov III D bit encoding D = 0 reg -> mem D = 1 mem -> reg ID218 Riistvaralähedane programmeerimine

  7. Mov IV W bit encoding W = 0 A, B -> 8 bit W = 1 A, B -> 16 bit ID218 Riistvaralähedane programmeerimine

  8. Mov V REG bit encoding ID218 Riistvaralähedane programmeerimine

  9. Mov VI Mod bit encoding ID218 Riistvaralähedane programmeerimine

  10. Mov VII R/M Field Encoding 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 ID218 Riistvaralähedane programmeerimine

  12. Mov IX Operandi suurus – byte/word: mov [bx], 0 ; 0 -> [bx] mov byte ptr [bx], 0 mov word ptr [bx], 0 Segment registers: mov ax, 40h mov es, ax 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 ID218 Riistvaralähedane programmeerimine

  14. Andmete laadimine III push A A -> pinusse push reg16push memory push segregpushf Algoritm: SP := SP - 2 [SS:SP] := 16 bit operand (store result at location SS:SP.) ID218 Riistvaralähedane programmeerimine

  15. Andmete laadimine IV pop A A <- pinust pop reg16pop memory pop segregpopf Algoritm: 16-bit operand := [SS:SP] SP := SP + 2 ID218 Riistvaralähedane programmeerimine

  16. Adressite laadimine I lds reg16, mem32 Agoritm: reg16 := [mem32] ds := [mem32 + 2] ID218 Riistvaralähedane programmeerimine

  17. Adressite laadimine II les reg16, mem32 Algoritm: reg16 := [mem32] es := [mem32 + 2] ID218 Riistvaralähedane programmeerimine

  18. Adressite laadimine III lea reg16, mem Lea ax, 1234h 1234h -> ax Mov ax, 1234h 1234h -> ax ID218 Riistvaralähedane programmeerimine

  19. Adressite laadimine IV lea 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 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] 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 ID218 Riistvaralähedane programmeerimine

  22. Test test A, B A & B -> FR Lipud: Cf -> 0 Of -> 0 Zf -> vastavalt tulemusele Sf -> vastavalt tulemusele Pf -> vastavalt tulemusele Af -> vastavalt tulemusele ID218 Riistvaralähedane programmeerimine

  23. BT, BTS, BTR, BTC Bt ax, 6 ; bit6 -> Cf Bx = 33 Bt A, bx ; bit 1 of A+4 -> Cf ; effective address + index/8 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 index Kui ei leitud_ Zf = 1, B - määramata ID218 Riistvaralähedane programmeerimine

  25. BSF, BSR II Kuidas leida “0”: • Kopeerida operand - mov • Inverteerida operand - not • Otsida “1” - bsf, bsr ID218 Riistvaralähedane programmeerimine

  26. Set – käsud I set**reg8 set**mem8 Set** A kui ** = true, A = 1 kui ** = false, A = 0 ID218 Riistvaralähedane programmeerimine

  27. Set – käsud II SET** Instructions That Test Flags ID218 Riistvaralähedane programmeerimine

  28. Set – käsud III SET** Instructions for Unsigned Comparisons ID218 Riistvaralähedane programmeerimine

  29. Set – käsud IV SET** Instructions for Signed Comparisons 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 ID218 Riistvaralähedane programmeerimine

  31. Set – käsud VI Bool := ((A <= B) and (D = E)) or (F <> G) mov ax, A cmp ax, B setle bl ; A <= B mov ax, D cmp ax, E sete bh ; D = E and bl, bh ; (A <= B) and (D = E) mov ax, F cmp ax, G setne bh ; F <> G or bl, bh ; * or * mov Bool, bh 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 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) 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; 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; 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; 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; 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; 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; 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; ID218 Riistvaralähedane programmeerimine

  41. Sisend/väljundkäsud I in ax/al, port ; input in ax/al, dx out port, ax/al ; output out dx, ax/al 0 < port < 255 Ei mõjuta lipud ID218 Riistvaralähedane programmeerimine

  42. Sisend/väljundkäsud II Read 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 ID218 Riistvaralähedane programmeerimine

  43. Siirdekäsud • Tingimatu siire • Tingimussiire • Protseduurid ID218 Riistvaralähedane programmeerimine

  44. Tingimatu siire I jmp A jmp disp8 ;direct intrasegment, 8 bit displacement. jmp disp16 ;direct intrasegment, 16 bit displacement. jmpmem16 ;indirect intrasegment, 16 bit memory operand. jmp reg16 ;register indirect intrasegment. ID218 Riistvaralähedane programmeerimine

  45. Tingimatu siire II mov 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 ID218 Riistvaralähedane programmeerimine

  46. Tingimatu siire III WordVar word TargetAddress . . . jmp WordVar mov ip, WordVar ID218 Riistvaralähedane programmeerimine

  47. Tingimatu siire IV jmp ax mov ip, ax ID218 Riistvaralähedane programmeerimine

  48. Tingimussiire I JmpTbl wordiffalse, iftrue . . . mov ax, X cmp ax, Y sete bl jmp JmpTbl[bl*2] ID218 Riistvaralähedane programmeerimine

  49. Tingimussiire II J** A j** disp8 ID218 Riistvaralähedane programmeerimine

  50. Tingimussiire III ID218 Riistvaralähedane programmeerimine

More Related