Scambio tra due variabili

di il
2 risposte

Scambio tra due variabili

Ragazzi stavo dando un'occhiata all'assemby e mi sto cimentando a fare le cose più semplici mi potreste aiutare a capire come faccio a scambiare due valori tra due variabili? So che non si può effettuare direttamente quindi come faccio?

#Make_com
org 100h
jmp start
a db 08h
b db 03h

start:

mov ah,4ch
int 21h

2 Risposte

  • Re: Scambio tra due variabili

    Ciao, da quel che ho capito vuoi scambiare il contenuto della variabile A con il contenuto della variabile B? Cioè vuoi efettuare la seguente operazione:
    A <- B
    Nel caso in cui sia giusto ciò che ho scritto puoi procedere in questo modo, il sorgente che riporterò in basso sarà scritto in Assembly INTEL x8086:
                   
                            .DOSSEG                
                            .MODEL TINY          
                            .CODE   
                            ORG 0100H               
                  BEGIN:    A DB 08H           
                            B DB 03H             
                            JMP MAIN  
    
                   MAIN:    MOV AX, A
                            MOV BX, B
                            MOV AX, BX
                            MOV AH, 4CH
                            INT 21H
                            NOP
                            END BEGIN
                           
    
    Mi sono servito di due registri dove ho appoggiato i miei dati (Accumulatore e base). Perchè devo fare questo? Perchè l'istruzione MOV non mi permette di usare come destinazione un dato immediato. Posso chiarirti le idee su questa istruzione con questo schema:
    MOV <destinazione>,<sorgente>
    • - Destinazione può essere un registro (16 o 8 bit);
      - Destinazione può essere una locazione di memoria;
      - Destinazione NON può essere un dato immediato;
    Sorgente può essere:
    • - Dato immediato;
      - Registro (8 o 16 bit);
      - Locazione di memoria;
    In effetti, se ci pensi, è ovvia come cosa. La destinazione la possiamo vedere come una 'cartella', mentre la sorgente come un 'quaderno': Sarebbe impossibile mettere una cartella dentro un quaderno, ti pare?

    Saluti, spero di esserti stato utile.
  • Re: Scambio tra due variabili

    Pultroppo devo correggere il codice in quanto cosi come e scritto non si ottiene uno scambio di variabili ma una semplice copia della variabile.
    le modifiche saranno scritte in minuscolo
    .DOSSEG
    .MODEL TINY
    .CODE
    ORG 0100H
    BEGIN: A DB 08H
    B DB 03H
    JMP MAIN

    MAIN:
    xor ax,ax ; azzero un registo per poter manipolare i dati
    mov al,a ; siccome un registro e composto da 2 byte carico la parte bassa al con a
    mov ah,b ; la parte alta con b
    xchg ah,al ; effettuo lo scambio dei dati
    mov byte ptr b,ah ; metto i dati nelle variabili
    mov byte ptr a,al
    MOV AH, 4CH
    INT 21H
    NOP
    END BEGIN
    P.S. uso mov byte ptr perchè ho a che fare con dei byte che da un registro vanno in memoria
    se invece avessi avuto a che fare con delle word = 2 byte avrei dovuto usare word ptr.
    in quest ultimo caso la procedura era la seguente :
    xor bx,bx
    mov ax,a
    mov bx,bx
    xchg ax,bx
    mov word ptr a,ax
    mov word ptr b,bx
Devi accedere o registrarti per scrivere nel forum
2 risposte