Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [Assembly 8086] Moltiplicazione senza usare MUL

    Ciao raga, ho un esercizio da fare. Dovrei eseguire la moltiplicazione su un byte tra due numeri, pero' senza usare l'istruzione MUL (anche IMUL). Mi potreste dare un cosiglio.
    Leggendo il mio libro, ho capito che per eseguire le moltiplicazioni, potrei usare anche l'istruzione SHL. Ma non so come iniziare.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Per eseguire una moltiplicazione, come faresti alle elementari, puoi fare tante addizioni in un ciclo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Si lo so, infatti in quel modo gia' l'ho fatto.
    Adesso mi e' stato chiesto di eseguire sempre la moltiplicazione ma in un altro modo, senza usare MUL (e IMUL).

  4. #4
    codice:
    5*8 = 5 * 2^3 = 5 << 3
    
    5*7 = 5 * 2^2 + 5* 2^1 + 5 * 2^0 = 5 << 2 + 5 << 1 + 5 << 0
    Tradotto in assembly:
    codice:
    mov ax, 5
    mov bx, 7
    
    xor dx, dx
    
    mov cx, ax ;; cx = ax
    shl ax, 2 ;;ax <<= 2;
    add dx, ax ;; dx += ax
    
    mov ax, cx;; ax = cx
    shl ax, 1 ;; ax <<= 1
    add dx, ax;; dx += ax
    
    mov ax, cx;; ax = cx
    shl ax, 0;; ax <<= 0
    add dx, ax;; dx += ax

  5. #5
    Comunque la formula è:
    codice:
    5 * 7 = 5 * 2^(7 & 1 << 0) + 5 * 2^(7 & 1 << 1) + 5 * 2^(7 & 1 << 2)
    Generalizzata:
    codice:
    0 <= i < round(log(b, 2))
    a * b = Sommatoria(a * 2^(b & 1 << i))

  6. #6
    Ciao, mi sapreste dire perche' menphisx nel suo esempio ha scritto:
    codice:
    xor dx, dx

  7. #7
    Originariamente inviato da Salvatore_91
    Ciao, mi sapreste dire perche' menphisx nel suo esempio ha scritto:
    codice:
    xor dx, dx
    Era solo per azzerare dx.

    A XOR B = Y
    0 0 0
    0 1 1
    1 0 1
    1 1 0

    Come vedi se sono uguali il risultato è zero.

  8. #8
    Hai ragione, ma sempre facendo riferimento a quell'esempio, se io facessi.
    AX= 1101
    BX= 101.

    non mi trovo con il risultato

    potresti farmi un esempio con i valori che ho scritto io in assembly sopra?

  9. #9
    Non capisco.
    AX = 1101

    AX XOR AX =
    1101 XOR
    1101 =
    -------------
    0000.

    AX XOR BX =
    1101 XOR
    0101 =
    -------------
    1000

  10. #10
    Nono, hai capito male. Sull'istruzione XOR sono daccordo, e l'ho anche capita come funziona.
    Io intendevo dire che non mi trovo, usando il tuo programma, utilizzando però:
    AX=1101
    BX=101.

    Potresti farmi un esempio in Assembly con queste dati ke ho scritto io sopra?

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.