Oppure

Loading
26/02/12 23:18
xMauri
Grazie, quindi equivale a scrivere:

cmp CX, 00
jne loop
aaa
26/02/12 23:23
Sì.

Ma in questo caso la cmp è assolutamente superflua (il flag Z esiste da sempre nelle CPU proprio per facilitare queste operazioni).

La CMP è necessaria per confronti con valori diversi da zero.

Non è un errore usarla come hai scritto (e forse il tuo professore lo preferirebbe) ma personalmente lo riterrei un errore (proprio perché dimostri di non avere compreso bene il funzionamento dei flag).
26/02/12 23:28
xMauri
Ho effettuato un tracing però non capisco come alla fine di tutto la stringa3 riesca a contenere le prime due.
aaa
26/02/12 23:29
Guarda che il codice che ti ho suggerito copia la prima stringa ... devi fare tu il resto. Per la seconda stringa, devi operare in maniera simile.

Fra l'altro, anche la prima parte del codice, quella che hai mostrato, deve essere modificata.

Prima di tutto, non serve che tu inserisca il $ alla fine delle stringhe in input, ma soltanto alla fine della stringa di output.

In secondo luogo, sarebbe meglio che scrivessi una sola funzione di print e una sola funzione di input a cui passare i parametri richiesti.
Ultima modifica effettuata da 26/02/12 23:33
27/02/12 0:08
In poche parole, lo farei così

begin: 	
		jmp main

		stringa1 db 40, 0, 40 dup (?)
		stringa2 db 40, 0, 40 dup (?)
		stringa3 db 81 dup (?)
		frase1 db 13, 10, 'Inserisci la prima stringa: $'
		frase2 db 13, 10, 'Inserisci la seconda stringa: $'
		ris    db 13, 10, 'Risultato: $'
		crlf   db 13, 10, '$'

		PRINT proc near
		mov AH, 09h
		int 21h
		ret
		PRINT endp
		
		INPUT proc near
		mov AH, 0Ah
		int 21h
		ret
		INPUT endp

		MOVE proc near
loop0:
		mov al,[si]
		mov [di],al
		inc si
		inc di
		dec cx
		jnz loop0
		ret
		MOVE endp
		
main:   
		mov ax,cs
		mov ds,ax
		mov es,ax
		lea DX, frase1
		call PRINT
		lea DX, stringa1
		call INPUT
		lea DX, frase2
		call PRINT
		lea DX, stringa2
		call INPUT

		lea di,stringa3

		lea si,stringa1+2
		xor ch,ch
		mov cl,stringa1+1
		cmp cx,0
		jz s2
		call MOVE

s2:
		lea si,stringa2+2
		xor ch,ch
		mov cl,stringa2+1
		cmp cx,0
		jz s3
		call MOVE

s3:		
		mov al,'$'
		mov [di],al

		lea DX, ris
		call PRINT
		lea DX, stringa3
		call PRINT
		lea DX, crlf
		call PRINT

		mov AH, 4ch
		int 21h
		end begin
Ultima modifica effettuata da 27/02/12 0:16