Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Assembly] Input: Word Output: DWord

    Salve a tutti, sto' preparando l'esame di architetture dei calcolatori e da poco mi sono inoltrato nello studiare il linguaggio Assembly.

    Gli esercizi li svolgo su Visual c++ (2008 Express edition).

    Devo fare un programma che moltiplica 2 numeri interi tramite somme ripetute, ecco il codice:

    codice:
     
    include <stdio.h>
    
    void main () {
    
    //Variabili	
    	unsigned short Num1=3;	//short e' un intero con dimensione ridotta 16 bit (2bytes)
    	unsigned short Num2=5; 
    	unsigned int Prodotto;
    
    //Blocco assembler
    	__asm {
    		
    		SUB EAX,EAX		;EAX=0
    		SUB EBX,EBX		;EBX=0
    		SUB ECX,ECX		
    
    		MOV BX,Num1     ; BX 16bit EBX 32 bit
    		MOV AX,Num2
    
    L1:		ADD CX,BX              
    		DEC AX 
    		JNZ L1			;Esce dal ciclo quando AX=0 
    
    		MOV Prodotto,CX      ;PROBLEMA/ERRORE!
    	}
    //Stampa su video
    	printf("Prodotto=%u\n",Prodotto);
    L'input e' una WORD, invece l'output e' una DWORD.
    Come faccio ad inserire un valore WORD dentro un registro DWORD?
    Come faccio invece a fare il contrario?

    Premetto un paio di cose:
    -Devo per forza sviluppare i miei progetti sul Visual c++ (2008).
    -Non posso modificare il codice in c.
    -Posso modificare solo ed esclusivamente la parte di codice contenuta in "__asm".

    Help me, Please

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Dato che ECX è stato azzerato all'inizio, puoi scrivere

    MOV Prodotto,ECX

    Non capisco il problema ...

    Comunque, per evitare qualche problemino, io la scriverei così ...

    codice:
    		SUB EAX,EAX
    		SUB EBX,EBX
    		SUB ECX,ECX
    
    		MOV CX,Num1
    		TEST CX,CX
    		JZ L2
    		MOV BX,Num2
    		TEST BX,BX
    		JZ L2
    L1:		ADD EAX,EBX
    		LOOP L1
    
    L2:		MOV Prodotto,EAX
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Grazie Mille, ho pensato a tutte le soluzioni tranne a quella piu' ovvia

    Gia' che ci sono, ti posso chiedere una cosa?

    Cosa fa' di preciso TEST? So' che fa' l'AND degli operandi, ma cosa ci risolvo in questo caso?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    La TEST serve a controllare che il valore caricato con la MOV precedente sia uguale a zero. In questo caso il risultato è zero e le addizioni non devono essere fatte.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.