Új hozzászólás Aktív témák
-
AlapVaj
csendes tag
válasz
Jester01
#303
üzenetére
Na jó, kezdek szomorú lenni, hogy nem értek hozzá. Átírtam, viszont valamiért nem ad helyes eredményt, olyat is nem anagrammának ír, ami nem az
pl alma lama, holott ez anagramma kéne legyen. Nem látom hol a hiba 
A lényege, hogy a 2szóban lévő megegyezőket kinullázza, és utána megnézi, hogy egyezik e (tehát mind 0, az 1es azért van ott a szavak végén, hogy jelezze, hogy ne végtelen legye,
szo1 db 0,0,0,0...0,0,0,1
; 1. vizsgálat:XOR AX,AX ; Kinullázzuk
XOR BX,BX ; Kinullázzuk
XOR SI,SI ; KinullázzukCIKLUS:
MOV AH, [szo1 + BX] ;Betöltjök AH-be a szo1 0,1,2,3....39ik bytját
MOV AL, [szo2 + SI] ;Betöltjök AL-be a szo2 0,1,2,3....39ik bytjátCMP AH, 1 ; Mindig megnézzük utolsó lépés e ez. Utolsó betű e?
JE CIKLUS2 ; Elugrunk a másik CIKLUSBA, végeztünk az első lépéssel.CMP AH,AL ; Összehasonlítjuk a tartalmat
JE NULL ; Ha 0, tehát egyenlők
JNE ROSSZ ; Ha különböznekROSSZ: ; Ha nem egyezik a két betű
CMP AL, 1
JE HELYESBIT
INC SI ; Növeljük a regisztert
JMP CIKLUS ; Ugrunk a következő karakterreHELYESBIT:
XOR SI,SI ; 0-ra álítjuk, hogy előröl induljon
INC BX ; Az első szó második lépésére
JMP CIKLUSNULL:
MOV szo1[BX], '0' ; Betesszük a szo1 BX-ben tárolt helyére a '0' értéket
MOV szo2[SI], '0' ; Betesszük a szo2 CX-ben tárolt helyére a '0' értéket
INC BX ; Novelunk
INC SI ; Novelunk
JMP CIKLUS;2. vizsgálat:
XOR AX,AX ; Kinullázzuk
XOR BX,BX ; Kinullázzuk
XOR SI,SI ; KinullázzukCIKLUS2:
MOV AH, [szo2 + BX] ;Betöltjök AH-be a szo1 0,1,2,3....39ik bytját
MOV AL, [szo1 + SI] ;Betöltjök AL-be a szo2 0,1,2,3....39ik bytjátCMP AH, 1 ; Mindig megnézzük utolsó lépés e ez.
JE DONTES ; Elugrunk a másik CIKLUSBACMP AH,AL ; Összehasonlítjuk a tartalmat
JE NULL2 ; Ha 0, tehát egyenlők
JNE ROSSZ2 ; Ha különböznekROSSZ2: ; Ha nem egyezik a két betű
CMP AL, 1
JE HELYESBIT2
INC SI ; Növeljük a regisztert
JMP CIKLUS2 ; Ugrunk a következő karakterreHELYESBIT2:
XOR SI,SI ; 0-ra álítjuk, hogy előröl induljon
INC BX ; Az első szó második lépésére
JMP CIKLUS2NULL2:
MOV szo2[BX], '0' ; Betesszük a szo1 BX-ben tárolt helyére a '0' értéket
MOV szo1[SI], '0' ; Betesszük a szo2 CX-ben tárolt helyére a '0' értéket
INC BX ; Novelunk
INC SI ; Novelunk
JMP CIKLUS2;3. Lépés:
DONTES:
MOV SI, OFFSET szo1 ; Kialakított szó
MOV DI, OFFSET szo2 ; Másik kialakított szó
CMPSB
JE ANAGRAIGEN
JNE ANAGRANEM;------------------------------------------------------
; Végső kiírások (eredmény):ANAGRANEM:
CALL ujsor
MOV SI, offset szoveg6 ; Nem Anagramma
CALL kiiroRET ; Visszatérés az op. rendszerhez
ANAGRAIGEN:
CALL ujsor
MOV SI, offset szoveg5 ; Anagramma
CALL kiiroRET ; Visszatérés az op. rendszerhez
-
AlapVaj
csendes tag
Végre megvan a tökéletes algoritmus! Nem 5 perc volt kitalálni (nem ismétléses permutációra). Viszont még mindig nagy a gond, mivel kéne helyesbítenem az "XX"-t

Valakinek nincs ötlete? Most így látva a teljes lényegi, kódot könnyebb, gondolom.XOR CX,CX ; Kinullázzuk
XOR AX,AX ; Kinullázzuk
XOR BX,BX ; Kinullázzuk; 1. vizsgálat:
CIKLUS:
MOV AH, [szo1 + BX] ;Betöltjök AH-be a szo1 0,1,2,3....39ik bytját
MOV AL, [szo2 + XX] ;Betöltjök AL-be a szo2 0,1,2,3....39ik bytját
CMP AH, 1 ; Mindig megnézzük utolsó lépés e ez.
JE CIKLUS2 ; Elugrunk a másik CIKLUSBACMP AH,AL ; Összehasonlítjuk a tartalmat
JE NULL ; Ha 0, tehát egyenlők
JNE ROSSZ ; Ha különböznekROSSZ: ; Ha nem egyezik a két betű
CMP AL, 1
JE HELYESBIT
INC XX ; Növeljük a regisztert
JMP CIKLUS ; Ugrunk a következő karakterreHELYESBIT:
XOR XX,XX ; 0-ra álítjuk, hogy előröl induljon
INC BX ; Az első szó második lépésére
JMP CIKLUSNULL:
MOV szo1[BX], '0' ; Betesszük a szo1 BX-ben tárolt helyére a '0' értéket
MOV szo2[DX], '0' ; Betesszük a szo2 CX-ben tárolt helyére a '0' értéket
INC BX ; Novelunk
INC XX ; Novelunk
JMP CIKLUS;2. vizsgálat:
XOR CX, CX ; Kinullázzuk
XOR AX,AX ; Kinullázzuk
XOR BX,BX ; KinullázzukCIKLUS2:
MOV AH, [szo2 + BX] ;Betöltjök AH-be a szo1 0,1,2,3....39ik bytját
MOV AL, [szo1 + XX] ;Betöltjök AL-be a szo2 0,1,2,3....39ik bytjátCMP AH, 1 ; Mindig megnézzük utolsó lépés e ez.
JE DONTES: ; Elugrunk a másik CIKLUSBACMP AH,AL ; Összehasonlítjuk a tartalmat
JE NULL2 ; Ha 0, tehát egyenlők
JNE ROSSZ2 ; Ha különböznekROSSZ2: ; Ha nem egyezik a két betű
CMP AL, 1
JE HELYESBIT2
INC XX ; Növeljük a regisztert
JMP CIKLUS2 ; Ugrunk a következő karakterreHELYESBIT2:
XOR XX,XX ; 0-ra álítjuk, hogy előröl induljon
INC BX ; Az első szó második lépésére
JMP CIKLUS2NULL2:
MOV szo2[BX], '0' ; Betesszük a szo1 BX-ben tárolt helyére a '0' értéket
MOV szo1[DX], '0' ; Betesszük a szo2 CX-ben tárolt helyére a '0' értéket
INC BX ; Novelunk
INC XX ; Novelunk
JMP CIKLUS2 -
AlapVaj
csendes tag
válasz
Jester01
#298
üzenetére
Végre megtaláltam a megoldást: MOV szo1[BX], '0'
viszont nekem kéne még egy regiszter, a bx mellé amit használhatnék, van ilyen?
XX helyére, vagy mégis ebben a ciklusban, úgy hogy az XXmásképp növekedjen mert ezt szeretném tipp, hogy hogy lehetne megoldani?
CIKLUS:
MOV AH, [szo1 + BX]
MOV AL, [szo2 + XX]
CMP AH,AL
JE NULL
JNE ROSSZ
ROSSZ:
INC XX
JMP CIKLUS
NULL:
MOV szo1[BX], '0'
MOV szo2[XX], '0'
INC BX
INC XX
JMP CIKLUS -
AlapVaj
csendes tag
válasz
Jester01
#296
üzenetére
Hát kb most itt tartok, és kezdek teljesen elveszni benne: Forráskód
A lényeget pontosan megfogalmaztam, ezt kb java, vagy Cben semeddig nem tart. A cimkézéssel még biztos gondok vannak, mert 40szer szeretném ismételni. Az összehasonlítást, és a cserét, ha kell, aztán pedig az egész blokkot, fordítva.
ADAT segement, nincs hozzá, nem is annyira fontos. Inkább, hogy hogy lehet ciklust ismételni siklussal, mert azért is akadtam el, mert kevés az ált.regiszterem, verem használaton is gondolkodtam. De akkor már rettentően bonyolultá válna. hisz mindig ki be kéne pakolni. -
AlapVaj
csendes tag
válasz
Jester01
#289
üzenetére
Akkor maradok a DB-nél és hagyjuk a szavakat.
Most már csak annyi kérdésem lenne, hogy feltöltöm ezeket a szavakat így:
SZO1 DB A,s,z,t,a,l,0,0,0,0,0,...
SZO2 DB A,l,m,a,0,0,0,0,0,0...
Vagyis, gondolom így kéne kinéznie (persze, binárisan vannak bent a betűk is, csak a jobb érthetőség miatt)
szeretnék a programban hivatkozni, mondjuk a SZO1 5-ik helyére, erre van valami eltolás gondolom, és mondjuk én ezt szeretném kihasználni.
Vagy olyanra hogy tudok hivatkozni, hogy A SZO1 első adatjától mondjuk a 14-ikig, mert szeretnék pár cmp műveletet megcsinálni vele. pl a SZO2 5ik elemével. -
AlapVaj
csendes tag
válasz
Jester01
#286
üzenetére
Látom, hogy bájtokként kezeled, de jobb úgy kezelni a karaktereket, mint DW-ben?
tehát ha mondjuk
SZO1 DW 0,0,0,0,0,...,0
SZO2 DW 0,0,0,0,0,...,0
És akkor ugye STOSW kell.
Kipróbáltam, és hozzá vettem még a 8-as kódot (backspace, elég furcsa dolgokat művel), szerencsére elég halványan van megfogalmazva a feladat, így bizony nem engedünk a felhasználónak rontani
Viszont a DB, miatt azért is aggódok, mert itt ugye 40 helyre lenne szükség és 32 fölött "too complex", vagy lehet teljesen rosszul gondolom
De most egy betűt akkor egy 1 bájt hosszú területen tárolunk -
AlapVaj
csendes tag
Üdv
Egy nagyon egyszerű dolgot szeretnék megírni, a program többi része kész van már. De ilyet sajnos nem találtam:
Két Stringet kéne beolvasni, amik szóközzel vannak elválasztva, maximum 30 hosszúak lehetnek. De úgy szeretném, hogy minden karaktert külön helyre mentsen le (majd később a cmp utasítás miatt fontos):
1szokar1 DW ""
1szokar2 DW ""
...
2szokar30 DW ""
pl: "alma kanaltarto"
Nem tudom, van e valakinek ehhez valami jó anyaga, vagy pársorban a lényegi részt le tudná e írni?
Előre is köszönöm. Itt igazából az a gondom, hogy kezelem a DOS ablakban felhasználó által beírt inputot, és várom enterig.
Új hozzászólás Aktív témák
- Kamionok, fuvarozás, logisztika topik
- Autóápolás, karbantartás, fényezés
- Crimson Desert
- Apple MacBook
- Építő/felújító topik
- Overwatch 2
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- One otthoni szolgáltatások (TV, internet, telefon)
- AMD vs. INTEL vs. NVIDIA
- Micro Four Thirds
- További aktív témák...
- Eladó dobozos, fóliás THERMALTAKE The Tower 600 fehér ház
- Dell Alienware Nvidia Geforce RTX 2080 Super 8GB
- Aztech Szerviz I RETRO Számítógép Szerviz I Szervizelés, Telepítés, Adatmentés, Szoftveres Javítás
- Használt MSI mag321cup (VA panel, 31.5" (80 cm) 4k, 160Hz ,1ms) eladó.
- Apple iPhone XS Max 256GB, Kártyafüggetlen, 1 Év Garanciával
- Apple iPad mini 4 (A1538) 128GB Wi-Fi Asztroszürke
- Bomba ár! Lenovo ThinkPad T460s - i5-6GEN I 12GB I 256GB SSD I 14" FHD I Cam I W11 I Garancia!
- 16gb (2x8gb) Micron DDR5 SODIMM 4800 Mhz RAM
- ÁRGARANCIA!Épített KomPhone i5 14400F 32/64GB RAM RX 9060 XT 16GB GAMER PC termékbeszámítással
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
pl alma lama, holott ez anagramma kéne legyen. Nem látom hol a hiba


