Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - [Assembler x86] Copiare in una stringa il contenuto di un'altra stringa
Forum - Altri Linguaggi - [Assembler x86] Copiare in una stringa il contenuto di un'altra stringa

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
xMauri (Normal User)
Newbie


Messaggi: 9
Iscritto: 06/12/2011

Segnala al moderatore
Postato alle 23:16
Domenica, 26/02/2012
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?

Codice sorgente - presumibilmente Plain Text

  1. dosseg
  2.                .model tiny
  3.                .code
  4.                org 0100h
  5.        
  6.      begin: jmp main
  7.      
  8.                stringa1 db 40, 0, 38 dup (0EDh)
  9.                stringa2 db 40, 0, 38 dup (0EEh)
  10.                stringa3 db 80, 0, 78 dup (0EFh)
  11.                frase1 db 'Inserisci la prima stringa:',10,13,'$'
  12.                frase2 db 'Inserisci la seconda stringa:',10,13,'$'
  13.                
  14.   INPUT1  proc near
  15.                mov AH, 09h
  16.                lea DX, frase1
  17.                int 21h
  18.                mov AH, 01h
  19.                lea DX, stringa1
  20.                int 21h
  21.                lea BX, stringa1
  22.                xor AX, AX
  23.                mov AL, [BX+1]
  24.                mov DI, AX
  25.                mov byte ptr [BX+DI+2], '$'
  26.                ret
  27.   INPUT1  endp
  28.  
  29.   INPUT2  proc near
  30.                mov AH, 09h
  31.                lea DX, frase2
  32.                int 21h
  33.                mov AH, 01h
  34.                lea DX, stringa2
  35.                int 21h
  36.                lea DX, stringa2
  37.                xor AX, AX
  38.                mov AL, [BX+1]
  39.                mov DI, AX
  40.                mov byte ptr [BX+DI+2], '$'
  41.                ret
  42.   INPUT2  endp
  43.  
  44.      main:  call INPUT1
  45.                call INPUT2
  46.                mov AH, 4ch
  47.                int 21h
  48.                end begin


Ultima modifica effettuata da xMauri il 26/02/2012 alle 23:47
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6206
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:31
Domenica, 26/02/2012
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à.
PM Quote
Avatar
xMauri (Normal User)
Newbie


Messaggi: 9
Iscritto: 06/12/2011

Segnala al moderatore
Postato alle 23:37
Domenica, 26/02/2012
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 il 26/02/2012 alle 23:47
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6206
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:53
Domenica, 26/02/2012
Testo quotato

Postato originariamente da xMauri:

E' scritto nel titolo, Intel x8086.



Questo è l'assembly.

L'assembler è il TASM.

Testo quotato

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

Codice sorgente - presumibilmente Altri Linguaggi

  1. cld
  2. lea si,stringa1+2
  3. lea di,stringa3
  4. xor ch,ch
  5. mov cl,stringa1+1
  6. repz movsb
  7. lea si,stringa2+2
  8. mov cl,stringa2+1
  9. repz movsb
  10. mov al,'$'
  11. 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à.
PM Quote
Avatar
xMauri (Normal User)
Newbie


Messaggi: 9
Iscritto: 06/12/2011

Segnala al moderatore
Postato alle 23:56
Domenica, 26/02/2012
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.

*
Codice sorgente - presumibilmente Plain Text

  1. 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 il 26/02/2012 alle 23:59
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6206
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 0:08
Lunedì, 27/02/2012
Sono istruzioni di uso comune, proprio per la gestione delle stringhe.

In pratica, per il tuo caso, equivale a

Codice sorgente - presumibilmente Altri Linguaggi

  1. loop: mov al,[si]
  2. mov [di],al
  3. inc si
  4. inc di
  5. dec cx
  6. 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à.
PM Quote
Avatar
xMauri (Normal User)
Newbie


Messaggi: 9
Iscritto: 06/12/2011

Segnala al moderatore
Postato alle 0:10
Lunedì, 27/02/2012
Ti ringrazio, ora è molto chiaro.

* Ma il JNZ loop quando si effettua? Non c'è una condizione ? (cmp)

Ultima modifica effettuata da xMauri il 27/02/2012 alle 0:13
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6206
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 0:16
Lunedì, 27/02/2012
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à.
PM Quote
Avatar
xMauri (Normal User)
Newbie


Messaggi: 9
Iscritto: 06/12/2011

Segnala al moderatore
Postato alle 0:18
Lunedì, 27/02/2012
Grazie, quindi equivale a scrivere:

Codice sorgente - presumibilmente Altri Linguaggi

  1. cmp CX, 00
  2. jne loop


PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo