420 likes | 551 Views
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:
E N D
Riistvarapõhine programmeerimine Loeng 7 Protseduurid Katkestused Tsüklid
Protseduurid • Call • Ret ID218 Riistvaralähedane programmeerimine
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
Call II Far Call • CS -> stack • IP -> stack • Uus segment -> CS • Uus IP -> IP ID218 Riistvaralähedane programmeerimine
Call III Near Call • IP -> stack • Uus IP -> IP ID218 Riistvaralähedane programmeerimine
Call IV call disp16 Sub1 proc near ret Sub1 endp . . . . . . call Sub1 ID218 Riistvaralähedane programmeerimine
Call V call mem16 SubPtr1 word Sub1 . . . . . . Sub1 proc near ret Sub1 endp . . . . . . call SubPtr1 ID218 Riistvaralähedane programmeerimine
Call VI call reg16 Sub1 proc near ret Sub1 endp . . . . . . lea cx, Sub1 call cx ID218 Riistvaralähedane programmeerimine
Call VII call disp32 Sub2proc far ret Sub2endp . . . . . . call Sub2 ID218 Riistvaralähedane programmeerimine
Call VIII call mem32 SubPtr1 dword Sub2 . . . . . . Sub2proc far ret Sub2endp . . . . . . call SubPtr2 ID218 Riistvaralähedane programmeerimine
Call IX call 2[bx] call Variable [bx] call [bx][si] call Variable[bx][si] Erinevad adresseerimisviisid lubatud ID218 Riistvaralähedane programmeerimine
Ret I pop ax jmp ax ID218 Riistvaralähedane programmeerimine
Ret II Near: Ret (Retn) pop IP Far Retf pop CS pop IP ID218 Riistvaralähedane programmeerimine
Ret III Sub: push ax push bx . . pop bx ret . . . call Sub ID218 Riistvaralähedane programmeerimine
Ret IV Stack (pinu): Call Sub Ret IP Bx Ax Ax IP Ax IP IP IP ID218 Riistvaralähedane programmeerimine
Ret V Ret const Sub: proc . . . ret 2 endp . . . push param1 push param2 call Sub ID218 Riistvaralähedane programmeerimine
Ret VI Ret 2 Call Sub Ret 2 IP IP Value1 Param2 Param2 Param1 Param1 Value1 Value1 ID218 Riistvaralähedane programmeerimine
Katkestused I Int Iret ID218 Riistvaralähedane programmeerimine
Katkestused II int nn 0 < nn < 255 nn Interrupt vector Interrupt Vector Table ID218 Riistvaralähedane programmeerimine
Katkestused III MS-DOS interrupt 21h ah - function code mov ah, 4Ch ;DOS terminate code int 21h ;DOS call ID218 Riistvaralähedane programmeerimine
Katkestused V ID218 Riistvaralähedane programmeerimine
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
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
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
Katkestused IX INT Call 2 bytes 2-6 bytes Push far return Push return Push flags Iret ret popf ID218 Riistvaralähedane programmeerimine
Tsüklid I Loop Loope Loopne Loopz Loopnz ID218 Riistvaralähedane programmeerimine
Tsüklid II Loop: Dec cx Jnz lbl Cx - 65 536 korda Ei mõjuta lipud ID218 Riistvaralähedane programmeerimine
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
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
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
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
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
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
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
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
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
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
Tsüklid XV mov cx, 8 Loop1: mov cx, 4 Loop2: stmts loop Loop2 . . . . . loop Loop1 Vale!!! ID218 Riistvaralähedane programmeerimine
Tsüklid XVI mov cx, 8 Loop1: push cx mov cx, 4 Loop2: . . . . . loop Loop2 pop cx . . . . . loop Loop1 Õige !!! ID218 Riistvaralähedane programmeerimine
Kokkuvõte I Protseduurid: Call Proc ret endp ID218 Riistvaralähedane programmeerimine
Kokkuvõte II Katkestused: Int nn iret ID218 Riistvaralähedane programmeerimine
Kokkuvõte III Tsükklid: Loop Loope Loopz Loopne Loopnz ID218 Riistvaralähedane programmeerimine