Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[assembler] Dodawanie dwóch liczb

Enzyme 26 Paź 2010 17:22 7302 6
  • #1 26 Paź 2010 17:22
    Enzyme
    Poziom 8  

    Code:
    prog  SEGMENT
    
       ORG 100h   
        
    start:

            ;DODAWANIE
        
            mov al, 5     
            add al, 03H    
            add al, 30H   
            mov dl, al     
            mov ah, 2       
            int 10H       
        
            mov al,0Dh   
            int 10h
            mov al,0Ah    
            int 10h

            mov ah,4Ch     
            int 21h
    prog  ENDS
            END start




    _____________________________________________

    Jestem początkowy w assemblerze, czy mógłby mi ktoś poprawić ten kod i wytłumaczyć co było źle?

    0 6
  • #3 26 Paź 2010 18:01
    Enzyme
    Poziom 8  

    Dżyszla napisał:
    A możesz opisać, jaki był zamysł tego programu?


    Tak jak w temacie: dodawanie dwóch liczb :)

    Oto całkowita treść: Opisz i podaj przykłady jak w assemblerze dodawać, odejmować, mnożyć i dzielić dwie liczby.
    Gdzie są zapisywane wyniki tych operacji? (W jakich przypadkach i w jakich rejestrach?) Jak sprawdzić, czy podczas działania na liczbach nie przekroczyliśmy "zakresu".


    Tyle, że się już zatrzymałem na tym pierwszym zagadnieniu :p

    0
  • #4 26 Paź 2010 18:30
    Dżyszla
    Poziom 42  

    Zgodnie z opisem:
    Dodawanie dwóch liczb wykonuje się instrukcją ADD (bez uwzględnienia przeniesienia), która dodaje drugi operand do pierwszego, a wynik umieszcza w tym pierwszym. Możliwe wariancje (r-rejestr, m-adres, s-stała liczba określa rozmiar):
    r/m8,r8
    r/m16,r16
    r/m32,r32
    r8,r/m8
    r16,r/m16
    r32,r/m32
    AL,s8
    AX,s16
    EAX,s32
    r/m8,s8
    r/m16,s16
    r/m32,s32

    Przykład dodawania liczby 2 do 3 na rejestrach 8-bitowych:

    Code:

       MOV AL,2
       MOV AH,3
       ADD AH,AL
       #AH=5


    Przekroczenie zakresu zapisywane jest poprzez ustawienie rejestru flagowego C (CF = CarryFlag).

    Analogicznie działa funkcja ADC, z tym, że dodatkowo uwzględnia rejestr przeniesienia (dodaje 1, jeśli CF = 1).

    Tyle w kwestii opisu, jaki przedstawiłeś (dla dodawania).

    0
  • #5 26 Paź 2010 18:48
    wojtekk1990
    Poziom 8  

    Dzieki.

    Jeszcze jedno pytanko ... jak wygląda kwestia wyświetlenia wyniku w ASCII ?

    Code:

    add al, 30H


    Nie daj porządanego odzewu - zamiast cyfry wyswietlany jest "zmutowany" znak U :D

    Pzdr.

    0
  • #7 26 Paź 2010 19:23
    wojtekk1990
    Poziom 8  

    PRoblem rozwiązany, niewazne. Pzdr.

    0