Új hozzászólás Aktív témák
-
vanek
tag
válasz
Jester01
#355
üzenetére
Köszönök minden segítséget, volt rá időm és összedobtam egy kódot..
Mivel sajnos még nem nagyon tiszta a regiszterek használata, így szeretném azt kérni, hogy lehetne ellenőrizni..
;Kosntans
LF equ 10
CR equ 13
Space equ 32
KOD SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:KOD, DS:DATA, SS:VEREM, ES:DATA
ANAGRAMMA PROC FAR
mov ax, DATA
mov ds, ax
mov es, ax
; főprogram
mov ax, offset szoveg
mov si, ax
call kiir
mov si, offset szo1
call olvasbill
mov si, offset szo2
call olvasbill
mov bx, offset szo1
call rendez
mov bx, offset szo2
call rendez
call hasonlit
; főprogram vége
mov ah, 4ch
mov al,00h
int 21h
;--------------------------------------------------------
olvasbill proc
push si ;si mentése
olv:
mov ah, 1h ;bios eljárás sorszáma
int 21h ;bios interrupt
cmp al, SPACE ;Space kódja
je olvasvege
cmp al, CR
je olvasvege
mov [si], al ;betű tárolása a memóriában
inc si ;a következő betű egyel magasabb mem. címre kerüljön
jmp olv ;vissza az olvasás elejére
olvasvege:
mov byte ptr [si], SPACE ;a string veget space-val lezárjuk
int 10h
pop si
ret
olvasbill endp
;--------------------------------------------------------
min proc
mov dl, [bx] ;dl-ben az elso betű
mov si, bx ;si mutasson az elejére
c1: mov al, [si] ;akt betú betöltése
cmp al, SPACE ;space, vagyis szó vége
je vege1 ;ha igen: vége
cmp al, dl ;akt. betű és az eddigi legkisebb
jae c2 ;ha az akt. nagyobb ugorjunk
mov dl, al ;jegyezzük meg mert kisebb
xchg al, [bx] ;csere
mov [si], al ;csere
c2: inc si ;köv betű
jmp c1 ;
vege1: ret ;visszatérés
min endp
rendez proc
c3: mov al, [bx] ;akt betű betölt
cmp al, SPACE ;szó vége?
je vege2 ;ha igen: vége
call min ;tegyük az elejére a legkisebbet
inc bx ;köv betű
jmp c3
vege2: ret ;eljárás vége
rendez endp
;-----------------------------------------------------------
hasonlit proc
mov si, offset szo1
mov di, offset szo2
;PUSH DS
;POP ES
cld
mov cx, 40 ;string hossza
repe cmpsb ;összehasonlít
je igen
jne nem
nem:
mov si, offset szovegnemjo ; Nem Anagramma
call kiir
ret ; Visszatérés az op. rendszerhez
igen:
mov si, offset szovegjo ; Anagramma
call kiir
ret ; Visszatérés az op. rendszerhez
hasonlit endp
;--------------------------------------------------------
betukiir proc ;al ben a kiirandó betű
mov ah, 14 ;BIOS rutin paramétere
int 10h ;10h megszakítás hívása
ret ;visszatérés
betukiir endp
;--------------------------------------------------------
kiir proc
push si
kov: mov al, [si] ;következő betű
cmp al, 0 ;0 jelzi a str végét
je strvege ;ha elértünk a végére ugrunk
call betukiir ;egy betű kiirása
inc si ;mutató a következő betűre
jmp kov ;ugrás
strvege:
pop si
ret ;eljárás vége
kiir endp
KOD ENDS
;========================================================
DATA SEGMENT PARA PUBLIC 'DATA'
szoveg db "Kerem a ket szot szokozzel elvalasztva: ",0
szovegjo db "A ket szo anagramma!",0
szovegnemjo db " A ket szo nem anagramma!",0
szo1 db 40 dup (0)
szo2 db 40 dup (0)
DATA ENDS
;========================================================
VEREM SEGMENT PARA STACK
dw 1024 dup (0)
VEREM ENDS
END ANAGRAMMAigazából a hibákra vagyok kíváncsi.. működni jól működik, szóval azzal nincs gond.
Előre is köszönöm!
-
vanek
tag
Üdv!
Azzal kezdenék, hogy totális kezdő vagyok...de nagyon próbálkozom!

két szót szeretnék beolvasni egy sorból és a végüket pedig szóköz jelzi..
kod segment para public 'code'
assume cs:kod, ds:adat, ss:verem, es:nothing
main proc far
push ds
xor ax, ax
push ax
mov ax, adat
mov ds, ax
;főprogram
mov dx, offset text1
mov ah, 09h
int 21h
mov di, offset szo1
call beolvas
mov di, offset szo2
call beolvas
;=====karakter beolvasása======
olvas proc
xor ah, ah
int 16h
ret
olvas endp
;=====beolvasás================
beolvas proc
be:
call olvas
cmp al, 10
je over
cmp al, 13
je over
cmp al, 32
je over
stosb
jmp be
over: ret
beolvas endp
vege: retf
main endp
kod ends
;-------------------------------
adat segment para public 'adat'
text1 db 'kerem a ket szot szokozzel elvalasztva : $'
szo1 db 40 dup (0)
szo2 db 40 dup (0)
adat ends
;-------------------------------
verem segment para stack
db 1024 dup (0)
verem ends
end mainAz eredmény az, hogy kiírja, TEXT1 -et, majd kifagy..vagy ha nem, akkor akármit nyomok megint kiírja, TEXT1-et..:\
előre is köszi!

Új hozzászólás Aktív témák
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Gyúrósok ide!
- Kész rémálom lesz Linuxot használni jövőre az USA egyes államaiban
- Telekom mobilszolgáltatások
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Milyen billentyűzetet vegyek?
- Kertészet, mezőgazdaság topik
- Honor 200 Pro - mobilportré
- PlayStation 5
- exHWSW - Értünk mindenhez IS
- További aktív témák...
- MSI Gaming Thin 15 - 15.6"FHD 144Hz - Ryzen 7 7735HS - 16GB - 1TB - Win11 - RTX 4060 - 2,5 év gari
- Akció! Acer Nitro 5 AN515-55! I7 10750H / RTX 3050Ti / 16GB DDR4 / 512GB Nvme SSD!
- Ryzen7 5700G/ 32GB DDR4/ 1TB m.2 alapú mini PC/ garancia
- AKCIÓ! iMac Pro Intel Xeon W2150B 64GB 1TB VEGA 64 16GB!!! 1 év garancia!
- Dell Latitude 5591 i7/500GB M2 SSD/ 32GB DDR4
- AKCIÓ! LENOVO ThinkPad P15s Gen2 munkaállomás - i7 1165G7 16GB DDR4 512GB SSD Quadro T500 4GB W
- HIBÁTLAN iPhone 12 Pro Max 256GB Pacific Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS4533
- Microsoft Surface Laptop 5 i5-1245U 16 GB RAM 2256X1504 érintőkijelző Garancia
- 134 - Lenovo Legion Pro 7 (16IRX8H) - Intel Core i9-13900HX, RTX 4090
- ÁRGARANCIA!Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


