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 باشه اما نمیدونم چه جوری میشه حلش کرد
نمایش جواب درست برای ضرب کلمه به کلمه که حاصل در 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
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 باشه اما نمیدونم چه جوری میشه حلش کرد