by Thief on Mon Aug 28, 2006 1:56 pm
Eccovi il sorgente di un programma in ASM in cui dopo aver inserito una stringa esso ve la visualizza ribaltata.
- Code: Select all
; - by Thief
SEG_A SEGMENT
ASSUME CS:SEG_A, DS:SEG_A
ORG 100H
Ribalta PROC FAR
inizio: jmp START ;salta a START
max_len EQU 1000 ;massima lunghezza
sorgente db max_len+1 dup(?) ;stringa da ribaltare
destinaz db max_len dup(?) ;stringa ribaltata
START:
mov si,0 ;punta al primo elemento dell'array
prossimo_car: mov ah,01h ;legge un car dalla tastiera
int 21h
cmp al,0Dh ;è = a return ?
je fine_lettura ;se si smetti di leggere
mov sorgente[si],al ;sposta il carattere in sorgente
inc si ;incrementa si
jmp prossimo_car ;leggi il prossimo car
fine_lettura:
mov cx,si
push cx ;memorizza la lunghezza nello stack
mov bx,OFFSET sorgente
mov si,OFFSET destinaz
add si,cx ;aggiunge a si la lunghezza della stringa
dec si ;decrementa si
Ribaltamento:
mov al,[bx] ;routine di ribaltamento
mov [si],al ; parto dal fondo e la copio
inc bx ; in destinaz
dec si
loop Ribaltamento ; salto a Ribaltamento
pop si ;prelevo la lunghezza
mov destinaz[si+1],'$' ;aggiungo il terminatore
mov ah,09h
mov dx,OFFSET destinaz
int 21h ;stampo la stringa ribaltata
RETN
Ribalta ENDP
SEG_A ENDS
END inizio
Non sempre il passare del tempo ti fornisce l?esperienza. Molte volte, se non t?inventi l?esperienza, non riesci a far passare il tempo.
-->
http://worldlink.altervista.org/