String Kiíratás Fordítva
unknown
assembly_x86
4 years ago
1.9 kB
43
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...