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
nessuno
Quale assembler usi?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
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
nessuno
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)


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
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
nessuno
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

Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
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
nessuno
Il

jnz

controlla il flag Z che viene modificato dall'istruzione precedente

dec cx

Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.