Kezdőoldal » Számítástechnika » Programozás » Assemblerben hogyan tudom...

Assemblerben hogyan tudom kiíratni a stringből a legmagasabb ASCII kóddal rendelkező betűt?

Figyelt kérdés

Sziasztok! Most kezdem tanulni az Assemblert, de nagyon kezdő vagyok, és még nem igazán értem a logikáját. A feladatot el kezdtem oldani, de elakadtam az összehasonlítós résznél, meg magánál a végeredmény kiiratásánál is. A nyelv pontosabban Altair8080, és eddig erre jutottam:


org 1000


dcx sp


lxi h,text1

call putstr ; vypis text1



char_loop:

call getchar ;az akumulátorba menti az értéket

cpi 10 ; sortörés karakter

jz char_end

cpi 13 ;CR karakter

jz char_end

cpi 'a'

jc char_loop ; ha kisebb értéku a karakter,mint 'a', akkor getchar

cpi 'z'+1

jnc char_loop ; ha nagyobb értéku a karakter, mint 'z'+1, akkor getchar

jmp char_loop

char_end:


lxi h,text2

call putstr


hlt


include 'examples\8080\include\getline.inc'

include 'examples\8080\include\putstr.inc'

include 'examples\8080\include\putchar.inc'

include 'examples\8080\include\getchar.inc'

include 'examples\8080\include\newline.inc'


text1: db 'A legnagyobb koddal rendelkezo karakter',10,13,'Szoveg: ',0

text2: db 10,13,'Legnagyobb karakter: ',0

vlozeny: ds 30


Hogyan lehetséges összehasonlítani az egyes megadott karaktereket, és a legnagyobbat kiíratni?



#i8080 #assmebler
2018. febr. 17. 19:21
 1/6 anonim ***** válasza:

ASCII karakterek mndegyike egy byte-os szám.

Compare meg az összehasonlítást szolgálja.

2018. febr. 17. 20:47
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:

Nem tudom, hogy jutott eszedbe éppen a 8080-as proci, de szerintem inkább felejtsd el.


Ha assembly-t akarsz tanulni, akkor inkább x86-ot tanulj, vagy ha vonzódsz a régi, 8 bites korszak gépeihez, akkor a legjobb választás a 6502 (ez volt a legendás commodore 64-esekben is, illetve ennek egy módosulata (6510)).

Ez a proci risc jellegű, egyszerű a felépítése és a programozása is könnyebben megérthető, mint az intel borzalmaival vergődni.

2018. febr. 17. 20:59
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:
0%
Esetleg próbáld meg ezt: [link]
2018. febr. 17. 21:15
Hasznos számodra ez a válasz?
 4/6 coopper ***** válasza:

Szia.


Nem ismerem a nyelvet csak felületesen, igy csak az elvet tudom leirni.


Amikor beolvastad a karaktert ( call getchar ) akkor a beolvasott karaktert (ami az akumlátorban van, át kell rakni egy másik regiszterbe vagy egy memória pozicióra is, előtte azonban ennek a regiszternek/memóriapoziciónak be kell állitani egy értéket modjuk 0-t.


Aztán szerintem valahová ide a két ugrási utasitás közé :


jnc char_loop ; ha nagyobb értéku a karakter, mint 'z'+1, akkor getchar

jmp char_loop


Be kell szúrni egy összehasonlitást, a kiválasztott regiszterrel/memóriapozicióval, és ha az akumlátorban lévő érték kissebb mint a kiválasztotzt regiszter akkor lehet a következő karaktert olvasni, ha nem akkor az aktuális értéket kell a kiválasztott regiszterbe/memóriabozicióba rakni valahogy igy (Modjuk legyen a kiválasztott regiszter a B regiszter) :


jnc char_loop ; ha nagyobb értéku a karakter, mint 'z'+1, akkor getchar

cpi B ; összehasonlitjuk az akumlátorban lévő érétket a kiválasztot regiszterrel/memóriacimmel

jc char_loop ; ha az akumlátorban lévő érték kisseb mint a regiszterünkben lévő érték akkor a ugrás a gettchar-ra

mov B,A ; akumllátor tartalmát átrakjuk a kiválasztott regiszterbe/memóriacimre

jmp char_loop


A kiirás pediglen emlékeim szerint az int 21-es dos megszakitással müködtek, az hogy ebben a változatban hogyan müködik nem tudom, de valószinűleg erre is van valmiféle macró mint a programodban használt getchar (ami beolvas egy karaktert)


Sok sikert.

üdv.

2018. febr. 18. 07:31
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:
#3: Ezt inkább ne próbálja ki.
2018. febr. 18. 07:41
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Köszönök minden választ, főleg a 4. válaszolónak. Működik. :)
2018. febr. 19. 16:37

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!