PDA

View Full Version : سوال: مشکل در نمایش حاصل ضرب دو عدد 4 بایتی (حاصل 8 بایتی)



salarjan
شنبه 17 تیر 1391, 00:59 صبح
دوستان لطفا این قسمت حیاتی رو به من آموزش بدین

نمایش جواب درست برای ضرب کلمه به کلمه که حاصل در DX:AX ذخیره میشه

اعمال + - / بدون مشکل انجام میشه ولی در قسمت ضرب مشکل پیدا کردم

تو تاپیک های قبلی مورد شبیه به این نبود (همه تاپیک ها رو نگاه کردم )

خیلی ها این مشکل(یا شبیه ش) رو داشتن و خواهن داشت

پس لطفا در حل این مشکل به من و خیلیای دیگه کمک کنید
تاپیک هایی مانند ماکرو های آماده و سورس های آماده اسمبلی و .... رو نگاه کردم ، نبودش ، شاید هم من اشتباه می کنم.
-------------
مشکل من در قسمت خروجی ضرب دو عدد 4 بایتی هست

چون عمل ضرب با موفقیت انجام میشه ولی احتمالا در هنگام تبدیل به رشته (برای چاپ) یه اشکالی وجود داره

maxlenA db 5
actlenA db ?
numA db 5 dup(?)


messagef db 0DH,0AH,'numberA * numberB = ','$'

numf db 6 dup(' '),'$'

lea dx,messagea
call print_string ;please enter numberA:

lea dx,maxlena
call read_string ;read strA

lea dx,messageb
call print_string ;please enter numberB:

lea dx,maxlenb
call read_string ;read strB
;////////////////////////////////////////////////////////
lea si,numA ;numA

call asctobin ;convert asc to bin
mov bx,ax ;bin num in bx

lea si,numB ;numB
call asctobin


بخش تبدیل به اسکی

[LTR] bintoasc proc
add si, 5
mov bx,10
mov dh,0
mov dl,cary
counti:
div bx
add dl,'0'
mov [si],dl
cmp ax,0
je fin
mov dx,0
dec si
jmp counti
fin:
ret
bintoasc endp
این بخش ضربه


mov ax,axx
mov bx,bxx
mov dx,0
mul bxx
mov dxx,ax
mov ax,dx
; numA * numB
a4:mov si,offset numf
call bintoasc ;convert bin to asc
;///////////////////////////////////// print
lea dx,messagef
call print_string
DDXX:
cmp DD,1
jne G
mov si,offset numf
call bintoasc
G:
lea dx,numf
call print_string
cmp cx,0
je endProgram
mov cx,0
inc DD
mov ax,dxx
mov dx,0
cmp DD,2



و این بخش تبدیل باینری به اسکی


bintoasc proc
add si, 5
mov bx,10
mov dh,0
mov dl,cary
counti:
div bx
add dl,'0'
mov [si],dl
cmp ax,0
je fin
mov dx,0
dec si
jmp counti
fin:
ret
bintoasc endp


حالا مشکل من تو این گونه موارد

http://cend.site11.com/photos/c947bc2f7ff0.jpg
به جای حاصل 88871112

اول قسمت dx (با ارزش) رو یعنی 8887 به صورت جدا تبدیل و چاپ و بعد
1112 رو تبدیل و چاپ میکنه

یعنی به جای جواب درسته 88871112

جواب نادرست چاپ می کنه 13564296

لطفا راه حلشو آمـــــــــوزش بدین

چون تافردا وقت دارم


احتمال میدم به خاطر Overflow یا cary باشه اما نمیدونم چه جوری میشه حلش کرد

salarjan
شنبه 17 تیر 1391, 15:23 عصر
http://snd.site90.com/photos/a0e1141fd37f.jpg

همینطور برای قسمت دوم عدد یعنی 10c8