assembly gyakorlatok

Előző téma megtekintése Következő téma megtekintése Go down

assembly gyakorlatok

Témanyitás  Füfü on 2009-04-22, 22:35

Sztok!

Példaprogram Turbo Pascal 7.0-ba íródott, ezért a változó felvétele Pasal formában történt meg mivel a hagyományos assembly formátum miatt a TP kiakadt.

Tehát a vizsgán majd a következő formában kell megadni:

szoveg db 'Hello World$'

A többi az az asm és az end közötti rész.


Kód:

var
  szoveg : string;

begin
  szoveg  := 'Hello World!!$';

  asm

{Szöveg kiírása karakterenként}
    mov di,offset szoveg
 
  @kar_kiiras:
    inc di
    mov ah,02
    mov dl,[di]
    cmp dl,'$'
    jz @kovetkezo_feladat
    int 21h
    jmp @kar_kiiras



  @kovetkezo_feladat:
{Karakterek megszámlálása, eredmény a bx-be}
    mov di,offset szoveg
    mov bx,0
  @kov_kar:
    inc di
    mov dl,[di]
    cmp dl,'$'
    jz @kovetkezo_feladat2
    inc bx
    jmp @kov_kar
  @kovetkezo_feladat2:



{Hanyadik karakter a 'W', eredmény a dx-be, ha nincs
 akkor FFFFh legyen az eredmény}
    mov di,offset szoveg
    mov cx,0
    mov dx,$ffff

  @kov_kar2:
    inc di
    mov bl,[di]
    cmp bl,'$'
    jz @vege
    inc cx
    cmp bl,'W'
    jnz @kov_kar2
    mov dx,cx
  @vege:

  end;
end.


Remélem segítettem.
avatar
Füfü
Admin

Hozzászólások száma : 158
Registration date : 2007. Dec. 07.

Felhasználó profiljának megtekintése http://gdfszkk.nice-forum.net

Vissza az elejére Go down

Re: assembly gyakorlatok

Témanyitás  gab on 2009-04-22, 23:02

Igen, köszi. Most már van fogalmam róla hogy hogyan kell egy karaktert kiíratni.
Én c-be ágyaztam az assembly kódot és egy c funkciót használtam megjelenítésre. A te megoldásodból többet tanultam Smile
avatar
gab
Admin

Hozzászólások száma : 199
Registration date : 2007. Dec. 07.

Felhasználó profiljának megtekintése http://gabs.no-ip.org/

Vissza az elejére Go down

Re: assembly gyakorlatok

Témanyitás  gab on 2009-04-22, 23:14

És most jövök rá hogy az int 21h-t csak a DOS értelmezi úgy ahogy használtad:

first.asm:102: error: invalid combination of opcode and operands (int 21h linuxon)
avatar
gab
Admin

Hozzászólások száma : 199
Registration date : 2007. Dec. 07.

Felhasználó profiljának megtekintése http://gabs.no-ip.org/

Vissza az elejére Go down

Re: assembly gyakorlatok

Témanyitás  Füfü on 2009-04-22, 23:16

gab írta:És most jövök rá hogy az int 21h-t csak a DOS értelmezi úgy ahogy használtad:

first.asm:102: error: invalid combination of opcode and operands (int 21h linuxon)
A vizsgán nem kell használni, mivel nem lesz kimeneti port. Ez csak azért van, hogy ebből megérthető a többi feladat.
avatar
Füfü
Admin

Hozzászólások száma : 158
Registration date : 2007. Dec. 07.

Felhasználó profiljának megtekintése http://gdfszkk.nice-forum.net

Vissza az elejére Go down

Re: assembly gyakorlatok

Témanyitás  Füfü on 2009-04-22, 23:25

Ja! És még annyi, ha valakinek van ötlete, hogy milyen feladatok lehetnek még, írja le, megpróbálom megoldani.
avatar
Füfü
Admin

Hozzászólások száma : 158
Registration date : 2007. Dec. 07.

Felhasználó profiljának megtekintése http://gdfszkk.nice-forum.net

Vissza az elejére Go down

Re: assembly gyakorlatok

Témanyitás  gab on 2009-04-22, 23:31

Amit órán is felhozott a tanár. Karakter - szám konvertálás.
Pl: van 20 db karaktered a memóriában a BX-ben tárolt címen. Keresd meg azt a karaktert, amelynek ASCII kódjához 3-at adva a 'D' karaktert kapod.
avatar
gab
Admin

Hozzászólások száma : 199
Registration date : 2007. Dec. 07.

Felhasználó profiljának megtekintése http://gabs.no-ip.org/

Vissza az elejére Go down

Re: assembly gyakorlatok

Témanyitás  Füfü on 2009-04-22, 23:42

gab írta:Amit órán is felhozott a tanár. Karakter - szám konvertálás.
Pl: van 20 db karaktered a memóriában a BX-ben tárolt címen. Keresd meg azt a karaktert, amelynek ASCII kódjához 3-at adva a 'D' karaktert kapod.
Ha ilyen lesz, szerintem megadja a tanár, hogy a "D" betű kódja a 44h. Ebből következik, hogy a keresett karakter a 41h vagyis az "A". Másképpen fogalmazva a "D" betű előtt 3-al az "A" betű van. A példámban van egy amiben a "W" keressük. Ugyanez.
A különbség, hogy míg én a szöveg offszetjét rakom be, ennél a példánál a [BX]-et kell.

Remélem érthető voltam.
avatar
Füfü
Admin

Hozzászólások száma : 158
Registration date : 2007. Dec. 07.

Felhasználó profiljának megtekintése http://gdfszkk.nice-forum.net

Vissza az elejére Go down

Re: assembly gyakorlatok

Témanyitás  gab on 2009-04-23, 16:57

Én viszont hülyeséget mondtam. A tanár az órán nem betűket ábrázoló karakterekkel foglalkozott, hanem számokat ábrázolóakkal.
Tehát a kérdés helyesen (számunkra megoldhatóan):

van 20 db karaktered a memóriában a BX-ben tárolt címen. A karakterek számokat tárolnak, pl '4', '5' stb. Keresd meg azt a karaktert, amelynek ASCII kódjához 3-at adva a '9' karaktert kapod.

Kicsit később egy megoldást is írok.
avatar
gab
Admin

Hozzászólások száma : 199
Registration date : 2007. Dec. 07.

Felhasználó profiljának megtekintése http://gabs.no-ip.org/

Vissza az elejére Go down

Re: assembly gyakorlatok

Témanyitás  Füfü on 2009-04-23, 18:19

gab írta:Én viszont hülyeséget mondtam. A tanár az órán nem betűket ábrázoló karakterekkel foglalkozott, hanem számokat ábrázolóakkal.
Tehát a kérdés helyesen (számunkra megoldhatóan):

van 20 db karaktered a memóriában a BX-ben tárolt címen. A karakterek számokat tárolnak, pl '4', '5' stb. Keresd meg azt a karaktert, amelynek ASCII kódjához 3-at adva a '9' karaktert kapod.

Kicsit később egy megoldást is írok.
Lehet, hogy én vagyok a hülye, de ezt most is úgy értelmezem, hogy a "6"-os számot, azaza a 36h-s karaktert keressük. Mivel tök mindegy, hogy az ASCII-hez vagy a hexa számhoz adunk hozzá 3-at. A számok 30h-tól kezdődnek.
avatar
Füfü
Admin

Hozzászólások száma : 158
Registration date : 2007. Dec. 07.

Felhasználó profiljának megtekintése http://gdfszkk.nice-forum.net

Vissza az elejére Go down

Re: assembly gyakorlatok

Témanyitás  gab on 2009-04-23, 19:31

Igazad van.
Arra akarok kilyukadni hogy egy karakterként tárolt egész számot úgy tudunk szám típusúvá konvertálni, hogy a karakterből kivonjuk a '0' (nulla) karaktert.

Azaz pl a '9' karakter által ábrázolt számot a '9' - '0' művelettel kaphatjuk meg.
avatar
gab
Admin

Hozzászólások száma : 199
Registration date : 2007. Dec. 07.

Felhasználó profiljának megtekintése http://gabs.no-ip.org/

Vissza az elejére Go down

Re: assembly gyakorlatok

Témanyitás  Füfü on 2009-04-23, 19:58

gab írta:Igazad van.
Arra akarok kilyukadni hogy egy karakterként tárolt egész számot úgy tudunk szám típusúvá konvertálni, hogy a karakterből kivonjuk a '0' (nulla) karaktert.

Azaz pl a '9' karakter által ábrázolt számot a '9' - '0' művelettel kaphatjuk meg.
Most már értem:
Kód:

mov al,'9'  ;39h
mov ah,'0'  ;30h
sub al,ah
És ekkor fogok az al-be 09h-t kapni azaz 9-et.
avatar
Füfü
Admin

Hozzászólások száma : 158
Registration date : 2007. Dec. 07.

Felhasználó profiljának megtekintése http://gdfszkk.nice-forum.net

Vissza az elejére Go down

Re: assembly gyakorlatok

Témanyitás  Sponsored content


Sponsored content


Vissza az elejére Go down

Előző téma megtekintése Következő téma megtekintése Vissza az elejére


 
Permissions in this forum:
Nem válaszolhatsz egy témára ebben a fórumban.