Pomoc intel i8086

Pomoc intel i8086

offline
  • daks98 
  • Novi MyCity građanin
  • Pridružio: 03 Sep 2016
  • Poruke: 5

Pocetnik sam veliki u asembleru

i nisam razumeo zasto u ovom mom programu deljenje ne radi dobro,tj ne pokazuje dobar rezultat

    org 100h .data str1 DB "Unesite prvi dvocifren broj: $" str2 DB "Unesite drugi dvocifren broj: $" str3 DB "Odaberite operaciju +;-;*;%;$" str4 DB "Zbir je: $" str5 DB "Razlika je: $" str6 DB "Proizvod je: $" str7 DB "Kolicnik je: $" prvibroj DB ? drugibroj DB ? str8 DB 10,13, "$" .code mov ah,9 lea dx,str1 int 21h mov ah,1 int 21h sub al,48 mov bl,10 mul bl mov prvibroj,al mov ah,1 int 21h sub al,48 add prvibroj,al  mov ah,9 lea dx,str8 int 21h mov ah,9 lea dx,str2 int 21h mov ah,1 int 21h sub al,48 mov bl,10 mul bl mov drugibroj,al mov ah,1 int 21h sub al,48 add drugibroj,al mov ah,9 lea dx,str8 int 21h operacije: mov ah,9 lea dx,str3 int 21h mov ah,1 int 21h mov bl,al sabiranje:cmp bl,'+' jne oduzimanje    mov al,prvibroj add drugibroj,al  mov al,drugibroj mov str4+8,al mov ah,9 lea dx,str4 int 21h jmp kraj oduzimanje:cmp bl,'-' jne mnozenje  mov al,prvibroj sub al,drugibroj mov str5+11,al mov ah,9 lea dx,str5 int 21h      jmp kraj mnozenje:cmp bl,'*' jne deljenje mov al,prvibroj mov bl,drugibroj mul bl mov str6+12,al      mov ah,9 lea dx,str6 int 21h    jmp kraj deljenje:cmp bl,'/' jne operacije mov ah,prvibroj mov bh,drugibroj                  div bh                                                          mov str7,ah mov ah,9 lea dx,str7 int 21h jmp kraj kraj: mov ah,0 int 16h ret 0



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Napisano: 14 Okt 2016 7:41

Ako se dobro sećam, deljenje kao deljenik uvek koristi ceo AX registar. Znači možeš da imaš deljenje 16bit/16bit i 16bit/8bit, ali ne i 8bit/8bit. Koliko vidim, ti pre deljenja ne čistiš nigde registar AH, pa u njemu zaostaje neka vrednost koja kompromituje deljenje. I što je još bitnije, kod deljenja 16bit/8bit količnik ide u AL, a ostatak u AH. Koliko vidim, ti štampaš AH, a to nije ispravno.

Takođe, množenje dva 8 bitna podatka uvek daje 16 bitni podatak. Dakle, rezultat množenja dva 8 bitna podatka se uvek smešta u 16 bitni registar, tj. u registar AX.

Dopuna: 14 Okt 2016 9:19

Što se tiče deljenja, možda bi tačnije bilo to da deljenje kao delilac koristi ceo AX registar kada je delilac 8bitni podatak. Međutim, kada je delilac 16bitni podatak, uzima se par AX-DX. Nisam siguran u to, ali mi se čini da je tako nekako.

To nije važno za tvoj zadatak, ali čisto da budem korektan. Smile



Ko je trenutno na forumu
 

Ukupno su 863 korisnika na forumu :: 11 registrovanih, 3 sakrivenih i 849 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: draggan, KOV, Kristian_KG, mikki jons, nenooo, Neutral-M, robytz, scimitar19, slonic_tonic, sovanova95, Vitomir