String Kiíratás Fordítva
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...