|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Feb 2010
Messaggi: 15
|
[Assembler] sostituire le occorrenze in una stringa
avevo questo esercizio da svolgere: stampare un vettore di stringhe, definito nei dati. sempre nei dati definire la variabile "ricercato", come una delle lettere che ci sono nella stringa. L'esercizio richiedeva poi di inserire un carattere da tastiera, e sostituire questo carattere in tutte le occorrenze di "ricercato"
ho provato a farlo varie volte, ma non riesco a scambiarlo, avrò sbagliato qualcosa nel ciclo sostituisci ma non riesco a capire cosa..questo è il codice: Codice:
codice:data segment
vetst db 'p','o','s','t','o'
ricercato db 'o'
newc db ?
msg1 db "Inserisci carattere: $"
; add your data here!
pkey db "press any key...$"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov ax, 0
mov cx, 5
mov si, 0
ciclo_stampa: mov dl, vetst[si]
mov ah, 2
int 21h
inc si
loop ciclo_stampa
mov dl,13
mov ah, 2
int 21h
mov dl,10
mov ah, 2
int 21h
lea dx, msg1
mov ah, 9
int 21h
mov ah, 1
int 21h
mov newc, al
mov dl, ricercato
mov bl, newc
mov cx, 5
mov ax, 0
mov si, 0
mov dx, 0
mov bx, 0
ciclo_sost: cmp dl, vetst[si]
je sost2
inc si
loop ciclo_sost
sost2: mov vetst[si], bl
mov ax, 0
mov cx, 5
mov si, 0
mov dx, 0
ciclo_stampa2: mov dl, vetst[si]
mov ah, 2
int 21h
inc si
loop ciclo_stampa2
; add your code here
lea dx, pkey
mov ah, 9
int 21h ; output string at ds:dx
; wait for any key....
mov ah, 1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
|
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Feb 2010
Messaggi: 15
|
se qualcuno sa come aiutarmi, è urgente =(
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Così fai una sola sostituzione.
ciclo_sost: cmp dl, vetst[si] je sost2 inc si loop ciclo_sost sost2: mov vetst[si], bl La sostituzione deve avvenire all'interno del loop. |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Feb 2010
Messaggi: 15
|
ho provato..ho messo sost2 sotto a je sost2 e non mi fa il ciclo stampa2
poi l'ho messo sotto ad inc si e mi stampa "p sto".. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Certo, hai azzerato bl:
mov bl, newc mov cx, 5 mov ax, 0 mov si, 0 mov dx, 0 mov bx, 0 Inoltre non basta spostare quella linea devi anche ragionare su quando devi fare la sostituzione e quando non devi. |
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Feb 2010
Messaggi: 15
|
io ho pensato che dovesse far ela sostituzione una volta verificato che i due elementi sono uguali..però poi dovrebbe esserci qualcosa che riporta al ciclo
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Feb 2010
Messaggi: 15
|
ho provato a sostituirew con questo..
ciclo_sost: cmp dl, vetst[si] jne non_sost2 mov vetst[si], bl non_sost2: inc si loop ciclo_sost ma non và comunque.. |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Mi fai vedere com'è ora il codice completo ?
|
|
|
|
|
|
#10 |
|
Junior Member
Iscritto dal: Feb 2010
Messaggi: 15
|
Ho risolto!
Codice:
; multi-segment executable file template.
data segment
vetst db 'p','o','s','t','o'
ricercato db 'o'
newc db ?
msg1 db "Inserisci carattere: $"
; add your data here!
pkey db "press any key...$"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov ax, 0
mov cx, 5
mov si, 0
ciclo_stampa: mov dl, vetst[si]
mov ah, 2
int 21h
inc si
loop ciclo_stampa
mov dl,13
mov ah, 2
int 21h
mov dl,10
mov ah, 2
int 21h
lea dx, msg1
mov ah, 9
int 21h
mov ah, 1
int 21h
mov newc, al
mov dl, ricercato
mov bl, newc
mov cx, 5
mov si, 0
mov ax, 0
ciclo_sost: cmp dl, vetst[si]
jne non_sost2
mov vetst[si], bl
non_sost2:inc si
loop ciclo_sost
mov dl,13
mov ah, 2
int 21h
mov dl,10
mov ah, 2
int 21h
mov ax, 0
mov cx, 5
mov si, 0
mov dx, 0
ciclo_stampa2: mov dl, vetst[si]
mov ah, 2
int 21h
inc si
loop ciclo_stampa2
; add your code here
lea dx, pkey
mov ah, 9
int 21h ; output string at ds:dx
; wait for any key....
mov ah, 1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:17.




















