Oppure

Loading
26/02/12 22:16
xMauri
Ciao a tutti ragazzi. Ho da svolgere il seguente esercizio:

- Date due stringhe in input inserirle in una terza stringa e darla in output.

Ciò che ho realizzato è un semplice input con relativa gestione delle stringhe prese. Ma non ho proprio idee sul come poter inserire nella terza stringa le altre due. Ho provato dando gli offset oppure passando lettera per lettera in un ciclo ma mi son reso conto che non è possibile. Mi dareste una mano a capire?


               dosseg
               .model tiny
               .code
               org 0100h
        
     begin: jmp main
      
               stringa1 db 40, 0, 38 dup (0EDh)
               stringa2 db 40, 0, 38 dup (0EEh)
               stringa3 db 80, 0, 78 dup (0EFh)
               frase1 db 'Inserisci la prima stringa:',10,13,'$'
               frase2 db 'Inserisci la seconda stringa:',10,13,'$'
               
  INPUT1  proc near
               mov AH, 09h
               lea DX, frase1
               int 21h
               mov AH, 01h
               lea DX, stringa1
               int 21h
               lea BX, stringa1
               xor AX, AX
               mov AL, [BX+1]
               mov DI, AX
               mov byte ptr [BX+DI+2], '$'
               ret
  INPUT1  endp

  INPUT2  proc near
               mov AH, 09h
               lea DX, frase2
               int 21h
               mov AH, 01h
               lea DX, stringa2
               int 21h
               lea DX, stringa2
               xor AX, AX 
               mov AL, [BX+1]
               mov DI, AX
               mov byte ptr [BX+DI+2], '$'
               ret
  INPUT2  endp

     main:  call INPUT1
               call INPUT2
               mov AH, 4ch
               int 21h
               end begin
Ultima modifica effettuata da xMauri 26/02/12 22:47
aaa
26/02/12 22:31
Quale assembler usi?
26/02/12 22:37
xMauri
E' scritto nel titolo, Intel x8086. Per compilare TASM e linkare TLINK. Mi son dimenticato di precisare che non posso usare istruzioni apposite se esistessero, ma riuscire a farlo con le istruzioni usate per l'input o se vogliamo 'le classiche'.

*Avevo scritto male il sorgente, modificato.
Ultima modifica effettuata da xMauri 26/02/12 22:47
aaa
26/02/12 22:53
Postato originariamente da xMauri:

E' scritto nel titolo, Intel x8086.


Questo è l'assembly.

L'assembler è il TASM.

Mi son dimenticato di precisare che non posso usare istruzioni apposite se esistessero, ma riuscire a farlo con le istruzioni usate per l'input o se vogliamo 'le
classiche'.


Non capisco ... comunque, non ho provato il codice ma dovrebbe essere qualcosa di simile

cld
lea si,stringa1+2
lea di,stringa3
xor ch,ch
mov cl,stringa1+1
repz movsb
lea si,stringa2+2
mov cl,stringa2+1
repz movsb
mov al,'$'
mov [di],al


Considera che la stringa3 non deve essere strutturata come le altre due perché è in output e non in input. Per questo ho inserito l'indirizzo di stringa3 in di direttamente come se fosse

stringa3 db 80 dup (00h)


26/02/12 22:56
xMauri
Chiedo scusa per la confusione, hai perfettamente ragione sulla scrittura del nome. Inoltre cerco di capire un po il sorgente, ti farò sapere al più presto, intanto ti ringrazio per l'aiuto.

*
repz movsb


Cosa fa questa istruzione? Inoltre non posso usarla per risolvere il problema, purtroppo mi è stato chiesto così. Se capisco cosa fà posso provare a sostituirla con altro.
Ultima modifica effettuata da xMauri 26/02/12 22:59
aaa
26/02/12 23:08
Sono istruzioni di uso comune, proprio per la gestione delle stringhe.

In pratica, per il tuo caso, equivale a

loop: mov al,[si]
mov [di],al
inc si
inc di
dec cx
jnz loop

26/02/12 23:10
xMauri
Ti ringrazio, ora è molto chiaro.

* Ma il JNZ loop quando si effettua? Non c'è una condizione ? (cmp)
Ultima modifica effettuata da xMauri 26/02/12 23:13
aaa
26/02/12 23:16
Il

jnz

controlla il flag Z che viene modificato dall'istruzione precedente

dec cx