1 / 42

Riistvarapõhine programmeerimine

Riistvarapõhine programmeerimine. Loeng 7 Protseduurid Katkestused Tsüklid. Protseduurid. Call Ret. Call I. Near: call disp16 ;direct, 16 bit relative call mem16 ;indirect, 16 bit memory pointer call reg16 ;indirect, 16 bit register pointer Far:

goldy
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 7 Protseduurid Katkestused Tsüklid

  2. Protseduurid • Call • Ret ID218 Riistvaralähedane programmeerimine

  3. Call I Near: call disp16 ;direct, 16 bit relative call mem16 ;indirect, 16 bitmemorypointer call reg16 ;indirect, 16 bit register pointer Far: call adrs32 ;direct, 32 bit segmented address call mem32 ;indirect, 32 bit memory pointer ID218 Riistvaralähedane programmeerimine

  4. Call II Far Call • CS -> stack • IP -> stack • Uus segment -> CS • Uus IP -> IP ID218 Riistvaralähedane programmeerimine

  5. Call III Near Call • IP -> stack • Uus IP -> IP ID218 Riistvaralähedane programmeerimine

  6. Call IV call disp16 Sub1 proc near ret Sub1 endp . . . . . . call Sub1 ID218 Riistvaralähedane programmeerimine

  7. Call V call mem16 SubPtr1 word Sub1 . . . . . . Sub1 proc near ret Sub1 endp . . . . . . call SubPtr1 ID218 Riistvaralähedane programmeerimine

  8. Call VI call reg16 Sub1 proc near ret Sub1 endp . . . . . . lea cx, Sub1 call cx ID218 Riistvaralähedane programmeerimine

  9. Call VII call disp32 Sub2proc far ret Sub2endp . . . . . . call Sub2 ID218 Riistvaralähedane programmeerimine

  10. Call VIII call mem32 SubPtr1 dword Sub2 . . . . . . Sub2proc far ret Sub2endp . . . . . . call SubPtr2 ID218 Riistvaralähedane programmeerimine

  11. Call IX call 2[bx] call Variable [bx] call [bx][si] call Variable[bx][si] Erinevad adresseerimisviisid lubatud ID218 Riistvaralähedane programmeerimine

  12. Ret I pop ax jmp ax ID218 Riistvaralähedane programmeerimine

  13. Ret II Near: Ret (Retn) pop IP Far Retf pop CS pop IP ID218 Riistvaralähedane programmeerimine

  14. Ret III Sub: push ax push bx . . pop bx ret . . . call Sub ID218 Riistvaralähedane programmeerimine

  15. Ret IV Stack (pinu): Call Sub Ret IP Bx Ax Ax IP Ax IP IP IP ID218 Riistvaralähedane programmeerimine

  16. Ret V Ret const Sub: proc . . . ret 2 endp . . . push param1 push param2 call Sub ID218 Riistvaralähedane programmeerimine

  17. Ret VI Ret 2 Call Sub Ret 2 IP IP Value1 Param2 Param2 Param1 Param1 Value1 Value1 ID218 Riistvaralähedane programmeerimine

  18. Katkestused I Int Iret ID218 Riistvaralähedane programmeerimine

  19. Katkestused II int nn 0 < nn < 255 nn Interrupt vector Interrupt Vector Table ID218 Riistvaralähedane programmeerimine

  20. Katkestused III MS-DOS interrupt 21h ah - function code mov ah, 4Ch ;DOS terminate code int 21h ;DOS call ID218 Riistvaralähedane programmeerimine

  21. Katkestused V ID218 Riistvaralähedane programmeerimine

  22. Katkestused VI BIOS: Int 5 Print Screen operation. Int 10h Video display services. Int 11h Equipment determination. Int 12h Memory size determination. Int 13h Diskette and hard disk services. Int 14h Serial I/O services. Int 15h Miscellaneous services. Int 16h Keyboard services. Int 17h Printer services. Int 18h BASIC. Int 19h Reboot. Int 1Ah Real time clock services. ID218 Riistvaralähedane programmeerimine

  23. Katkestused VII PutChar prints the character in the AL register to the display. PutChar proc push ax ;Preserve value in AH mov ah, 0eh ;BIOS call to print a ;character. int 10h pop ax ;Restore AH's value. ret PutChar endp ID218 Riistvaralähedane programmeerimine

  24. Katkestused VIII GetChar reads a single key from the keyboard and puts it in the AL register. GetChar proc mov ah, 0 ;BIOS call to read a ;key. int 16h ret GetChar endp ID218 Riistvaralähedane programmeerimine

  25. Katkestused IX INT Call 2 bytes 2-6 bytes Push far return Push return Push flags Iret ret popf ID218 Riistvaralähedane programmeerimine

  26. Tsüklid I Loop Loope Loopne Loopz Loopnz ID218 Riistvaralähedane programmeerimine

  27. Tsüklid II Loop: Dec cx Jnz lbl Cx - 65 536 korda Ei mõjuta lipud ID218 Riistvaralähedane programmeerimine

  28. Tsüklid III mov cx, 255 ArrayLp: mov Array[cx], cl loop ArrayLp mov Array[0], 0 Array = 0, 1, 2, 3, . . . ID218 Riistvaralähedane programmeerimine

  29. Tsüklid VI LOOPE/LOOPZ cx := cx - 1 if ZeroFlag = 1 and cx != 0, goto target Ei mõjuta lipud Aeglane ID218 Riistvaralähedane programmeerimine

  30. Tsüklid VII Otsime massiivist nullist erineva elemendi: mov cx, 16 ;Max 16 array elements. mov bx, -1 ;Index into the array (note ;next inc). SearchLp: inc bx ;Move on to next array ;element. cmp Array[bx], 0 ;See if this element ;is zero. loope SearchLp ;Repeat if it is. je AllZero ;Jump if all elements ;were zero. AllZero: . . . ID218 Riistvaralähedane programmeerimine

  31. Tsüklid VIII LOOPNE/LOOPNZ cx := cx - 1 if ZeroFlag = 0 and cx ¹ 0, goto target Ei mõjuta lipud Aeglane ID218 Riistvaralähedane programmeerimine

  32. Tsüklid IX Otsime massiivist null-elemendi: mov cx, 16 ;Maximum # of array ;elements. mov bx, -1 ;Index into array. LN0: inc bx ;Move on to next array ;element. cmp Array[bx],0 ;Does this element ;contain zero? loopne LN0 ;Quit if it does, or ;more than 16 bytes. ID218 Riistvaralähedane programmeerimine

  33. Tsüklid X Ootame, millal välisoperatsioon lõpeb, seda näitab pordi 379h bit 7. mov dx, 379h WaitNBusy: in al, dx ;Get port test al, 80h ;See if bit #7 is one jne WaitNBusy ;Wait for “not busy” ID218 Riistvaralähedane programmeerimine

  34. Tsüklid XI Ootame, millal välisoperatsioon lõpeb, seda näitab pordi 379h bit 7. mov dx, 379h ;Input port address mov cx, 0 ;Loop 65,536 times and ;then quit. WaitNBusy: in al, dx ;Get data at port. test al, 80h ;See if busy loopne WaitNBusy ;Repeat if busy and no ;time out. jne TimedOut ;Branch if CX=0 because ;we timed out. ID218 Riistvaralähedane programmeerimine

  35. Tsüklid XII WHILE boolean expression DO statement; I := 0; WHILE (I<100) do I := I + 1; mov I, 0 WhileLp: cmp I, 100 jge WhileDone inc I jmp WhileLp WhileDone: ID218 Riistvaralähedane programmeerimine

  36. Tsüklid XIII LOOP Loop. ... EndLoop READ(ch) IF ch = ‘.’ THEN BREAK; WRITE(ch); ENDLOOP; LOOP1: call getchar cmp al, ‘.’ je EndLoop call putchar jmp LOOP1 EndLoop: ID218 Riistvaralähedane programmeerimine

  37. Tsüklid XIV FOR var := start TO stop DO stmt; FOR I := 0 to 7 do write(ch); mov cx, 7 LP: mov al, ch call putcchar loop LP ID218 Riistvaralähedane programmeerimine

  38. Tsüklid XV mov cx, 8 Loop1: mov cx, 4 Loop2: stmts loop Loop2 . . . . . loop Loop1 Vale!!! ID218 Riistvaralähedane programmeerimine

  39. Tsüklid XVI mov cx, 8 Loop1: push cx mov cx, 4 Loop2: . . . . . loop Loop2 pop cx . . . . . loop Loop1 Õige !!! ID218 Riistvaralähedane programmeerimine

  40. Kokkuvõte I Protseduurid: Call Proc ret endp ID218 Riistvaralähedane programmeerimine

  41. Kokkuvõte II Katkestused: Int nn iret ID218 Riistvaralähedane programmeerimine

  42. Kokkuvõte III Tsükklid: Loop Loope Loopz Loopne Loopnz ID218 Riistvaralähedane programmeerimine

More Related