[ amanteo @ 25.01.2009. 08:42 ] @
Drugari molim vas za pomoć,

naime imam zadatak sa prekoračenjem vrednosti neoznačenih brojeva
gde su podaci sledeći:

Code:

 podaci segment
    ; PODACI
    b1        db    -128       ; 8 bitni operand
    b2        db    -2        ; 8 bitni operand
    zbir    dw    ?                  ; 16 bitni zbir
podaci ends


javlja se prekoračenje (Overflow) ukoliko ga rešavamo :

Code:


;PROGRAM
    mov ah,0            ;rezervišem ah za 16bitni rezultat
    mov    al,b1
    add    al,b2        ; problem !!! (-130)
        adc ah,0 
        
    mov    zbir,ax



Moje rešenje ovoga bi bilo:

Code:

 podaci segment
    ; PODACI
    b1        dw    -128       ; 16 bitni operand
    b2        dw    -2        ; 16 bitni operand
    zbir    dw    ?                  ; 16 bitni zbir
podaci ends

;PROGRAM
    
    mov    ax,b1
    add    ax,b2        
         
    mov    zbir,ax



Rezultat je dobar ali mislim da negde pravim logičku grešku
i ubijam se ali ne mogu da skapiram da li je ovo generalno rešenje za
problem ili samo puki koincident.

Unapred zahvalan

[ EArthquake @ 27.01.2009. 08:06 ] @
za kontrolu prekoracenja trebas koristiti EFLAGS registar

tacnije njegov OVERFLOW bit koji biva setovan kada do prekodacenja u aritmetici dodje

ako dodje do prekoracenja , moras koristiti veci registar