nem jön ha jól tudom idén zh-k vannak és nem beadandó (.. régi szép idők... mennyi finom söröcskét gyűjtöttem be tavaly a határidő előtti napokban... )
Nem szeretem ezeket a metanyelvi izéket! Ha magasszintű vezérlőszerkezeteket akarok használni, akkor minek az asm?
Amúgy apró trükköket nem tudsz velük jól kezelni:
- 16 bites kód volt (a jelekből következtetve ez DOS-os feladat)
- si>di is lehet!
- ha szóközzel indul vagy zárul, azt is kezelni kell (ezért csak utána van az si>di vizsgálat)
- ezért előbb inc si / dec di nálam, és pali_text-1 (a pali_text_veg eleve túlmutat)
Az viszont igaz, hogy ha nem stimmelt az összehasonlítás, kár folytatni a ciklust; úgyis a végén vagyunk, nem kell a "jmp cikl"
Na jó, így könnyű! Akkor írok kódot is, mert a kiadott feladat szerint a szóközöket nem szabad figyelni!!!
org 100h
;itt kezdünk, kiírjuk a feladat nevét
mov ah,9
mov dx,offset Logo
int 21h
;a vizsgált szöveget is kiírjuk
mov ah,9
mov dx,offset PaliTxt
int 21h
;a szöveg két végére megyünk
mov si,offset PaliTxt - 1
mov di,offset PaliTxtEnd
;kezdődik a vizsgálat, dx az eredmény-szöveg
mov dx,offset IgenTxt
cikl:
;szóközöket átlépjük (egyben következő karakterre lépés)
c1:
inc si
cmp byte ptr [si],20h
je c1
c2:
dec di
cmp byte ptr [di],20h
je c2
;összeértünk?
cmp si,di
jae ciklvege
;összehasonlítás
mov al,[si]
cmp al,[di]
jz cikl
;nem palindroma
mov dx,offset NemTxt
jmp cikl
;eredmény kiírása
ciklvege:
mov ah, 9
mov dx, offset msg1
int 21h
;program vége
ret
Logo db "Palindroma vizsgáló - 2008 v1.0",13,13,10
db "A vizsgált szöveg: $"
PaliTxt db "indul a görög aludni"
PaliTxtEnd db "$"
IgenTxt db " - IGEN, palindroma!",13,10,"$"
NemTxt db " - NEM, ez nem palindroma.",13,10,"$"
Nem bizony, de ma ahogy nézem ismét az lesz belőle
Mádi Gábor:
Tudd meg a szöveg hosszát.
Vegyél fel egy ofszetértéket (0)
A szöveg kezdete+ofszetérték által megcímzett karakterkódja (vagy memória hely tartalma)= kezdet+hossz-ofszetérték?
Ha nem, akkor nem az.
Ha igen, akkor offsetérték növelés 1-el.
Ha ofszetérték<=hossz/2 akkor ismét vizsgál.
Készíts programot, ami az adatszegmensébe írt mondatról eldönti, hogy palindrom-e!(visszafelé olvasva is megegyező mondat, pl: "indul a görög aludni") A szóközök esetleges különböző helyét hagyja figyelmen kívül! Az eredményt (igen/nem) írja ki a képernyőre! Semmit nem tudok az assemblyről és jó lenne, ha valaki konkrétan meg tudná adni, hogy mit írjak ennek a programnak az elkészítéséhez. A Nasm nevezetű programmal kell elkészíteni. Előre is köszönöm.