Skip navigation

Hasznos Irvine eljárások

Áttekintés

Ahogy azt már év elején is említettük, a 32 bites környezet lehetővé tette számunkra, hogy több, már előre létrehozott eljárást használhassunk. Ehhez csupán telepítenünk kellett az Irvine függvénycsomagot (lásd a 3. gyakorlat anyaga), majd a programkódunk elején importálni a megfelelő könyvtárat. Ez jelen esetünkben az Irvine32.inc. Tehát az alábbi sort kell elhelyeznünk a program elején:

    INCLUDE Irvine32.inc

Az adott függvény meghívásához a CALL parancsot kell használni. Röviden bemutatnánk néhány főbb eljárást és azok használatát, egy-egy példával, a teljesség igénye nélkül.

A további eljárásokról részletes leírás található az alábbi címen, az Irvine Library fül alatt:

http://programming.msjc.edu/asm/help/index.html?page=source%2Fabout.htm

ClrScr

Törli a képernyő tartalmát és a kurzort a képernyő bal felső sarkába helyezi (Clear Screen).


    call ClrScr

CrLf

A következő sor elejére helyezi a kurzort (kocsi vissza + új sor, Carriage return + Linefeed).


    call CrLf

ReadChar

Beolvas egy karaktert a standard bemenetről az AL regiszterbe. A karakter nem kerül kiírásra a képernyőre.


.data

    char BYTE      ?

.code
    
    call ReadChar
    mov  char, al

ReadInt

Beolvas egy 32 bites integer értéket a standard bemenetről az EAX regiszterbe. Az opcionális jel után csak számjegyek szerepelhetek.


.data
    intVal    DWORD     ?

.code

    call ReadInt
    mov  intVal, eax

ReadString

Beolvas egy karaktersorozatot a standard bemenetről, az Enter billentyű leütéséig. A beolvasott karakterek számát az EAX regiszterbe tárolja le, magát a sztringnek az eltolását (offset) pedig mindig az EDX regiszternek kell tartalmaznia. Az ECX regiszterben kell megadni a maximálisan beolvasható karakterek számát.


.data
    buffer         BYTE      50 DUP(?)
    byteCount      DWORD     ?

.code

    mov  edx, OFFSET buffer       ; a sztring pointere
    mov  ecx, (SIZEOF buffer)-1   ; Max hossz
    call ReadString               ; beolvasás
    mov  byteCount, eax           ; karakterek számának lementése

WriteDec

Kiír egy 32 bites, előjelnélküli egész értéket az standard kimenetre az EAX regiszterből.


    mov  eax, 2957FFFFh
    call WriteDec       ; "295" fog megjelenni a képernyőn

WriteInt

Kiír egy 32 bites, előjeles egész értéket a standard kimenetre az EAX regiszterből.


    mov  eax, 216543
    call WriteInt       ; "+216543" fog megjelenni a képernyőn

WriteString

Kiír egy sztringet a standard kimenetre. A sztring eltolás értékének az EDX regiszterben kell lennie.


.data

    prompt    BYTE      "Add meg a neved: ", 0
    
.code

    mov     edx, OFFSET prompt
    call    WriteString

GoToXY

A kurzort a megadott oszlop és sor pozícióra mozgatja. Az oszlop szám (X koordináta) a DL regiszter tartalma, a sor szám (Y koordináta) pedig a DH regiszter tartalma lesz.


    mov dh, 10         ; 10. sor
    mov     dl, 20     ; 20. oszlop
    
    call    GoToXY     ; A kurzos átmozgatása