logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Assembler] Jak zmodyfikować kod Assemblera do dzielenia dużych liczb 32-bitowych?

bendar 10 Gru 2011 19:17 2210 3
  • #1 10242977
    bendar
    Poziom 14  
    Posty: 140
    Pomógł: 8
    Ocena: 20
    Witam wszystkich jestem studentem drugiego roku informatyki i Pan prof. zadał mi pytanie przewyższający moją zdolność rozumowania :D .

    Oto kod programu:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    I tak wygląda pytanie :

    1. Zmodyfikuj podany program tak, aby możliwe było wykonanie dzielenia dla liczb 2 000 000 000 001 i 2 000 000. Podaj dziesiętną i szesnastkową wartość wyniku i reszty z dzielenia.

    oraz

    2. Wykonaj ten sam program dla liczb -2 000 001 i 2000, 2 000 001 i -2000 oraz -2 000 001 i 2000. Użyj dzielenia bez znaku (DIV) i ze znakiem (IDIV). Za każdym razem podaj dziesiętną i szesnastkową wartość wyniku i reszty z dzielenia.

    I już nie ogarniam jak mam wykonać dzielenie na dwóch rejestrach jednej liczby :?:
  • #2 10243107
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    operacja DIV dzieli liczbę bez znaku znajdujące się w AX (wersja 8-bitowa), DX:AX(wersja 16-bitowa) EDX:EAX (wersja 32-bitowa) przez operand.
    IDIV dzieli liczbę ze znakiem znajdującą się w AX, DX:AX, EDX:EAX przez operand i umieszcza wynik dzielenia w AL/AX/EAX a resztę w AH/DX/EDX

    Odpowiadając wprost na pytanie - dzielenie przez 32-bitowy operand dzieli własnie liczbę umieszczoną w dwóch rejestrach.

    BTW - ćwiczenia/laboratoria z profesorem? Ciekawie... :)
  • #3 10248871
    bendar
    Poziom 14  
    Posty: 140
    Pomógł: 8
    Ocena: 20
    Dzięki Dżyszla działa lecz nasz profesor wymyślił jeszcze takie zadanie do powyższego kodu:

    3. Wykonaj ten program dla liczb 2 000 000 000 001 i 20. Jakie wyniki otrzymujesz?

    Podstawiłem te dane modyfikując tak jak podpowiedziałeś ale z tymi danymi kompiluje się lecz przy wykonywaniu programu wywala błąd. Myślę że wynik dzielenia jest zbyt duży a z kolei prof. powiedział że mamy to policzyć używając odejmowania i zbaraniałem. :|
  • Pomocny post
    #4 10249574
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
REKLAMA