String Kiíratás Fordítva

 avatar
unknown
assembly_x86
3 years ago
1.9 kB
41
Indexable
```
Code	Segment
	assume CS:Code, DS:Data, SS:Stack

Start:
	mov	ax, Code
	mov	DS, AX
	
	; Képernyő törlés
	mov ax, 03h
	int 10h
	
	; Eredeti uzenet kiiratása
	mov ah, 09h
	mov dx, offset uzenet
	int 21h
	
	; Ütünk egy  "Enter" -t
	mov ah, 02h
	mov bh, 0
	mov dh, 2
	mov dl, 0
	int 10h

	xor dx,dx	; Nullázzuk a regisztert

	mov cx, 0 ; Ezzel fogjuk számolni hányadik karakternél vagyunk
	mov di, offset uzenet	; DI regiszterbe beállítjuk a uzenet első karakterére mutató címet
	
Szamolo:	; Szamolo cimke letrehozasa
	mov dx, [di]
	cmp dl, 36	; Amennyiben a Dl-ben mutatott helyen $ karakter van akkor az uzenet vegere ertuk tehat kezdodhet az uzenet megforditasa (majdnem)
	jz uzenetFordit	; Ugrunk a uzenetFordit cimkere
	; Amennyiben nem $ karakter akkor az alábbi sorok futnak le:
	inc cx	;	Növeljük a karakter számlálót mivel az első helyen nem $ volt, így megyünk tovább
	inc di	; Növeljük a karakterre mutató regiszter erteket is igy pl: nem az elso karakterre fog mutatni a di, hanem a masoikra es igy tovabb..
	jmp Szamolo	; Egeszen addig Szamolo-nk amíg nem érünk a $ karakterhez és ugrunk a uzenetForditra
	;DX-be bemásoljuk a DI címen található értéket (ez a [] jel)
	
uzenetFordit:
	mov di, offset uzenet	;  DI regiszterbe beállítjuk a uzenet első karakterére mutató címet ( ilyenkor az első karakterre mutat)
	dec di	; Csökkentjük a di értékét így nullát kapunk ==> Mivel az előző sorban 1 volt így 1-1 = 0
	add di, cx	; DI-hez hozzáadjuk a CX értéket ( ez a uzenet hosszát tárolja egészen a $ karakterig) - Esetünkben ez 29 karakter, 30. a $
	mov dl, [di]	; Átmásoljuk DL-be és kiiratjuk
	; Karakter kiiratása
	mov ah, 02h
    int 21h
    loop uzenetFordit
Program_Vege:
	mov	ax, 4c00h
	int	21h

uzenet db "Ezt ird ki visszafele bazdmeg$"

Code	Ends

Data	Segment

Data	Ends

Stack	Segment

Stack	Ends
	End	Start
Editor is loading...