ورود

View Full Version : سوال: مشکل در ضرب کردن در متغییر



hessam2003
پنج شنبه 06 تیر 1392, 18:18 عصر
سلام.
در emu8086 می خوام دو متغییر را با همدیگه ضرب کنم و از دستور mul استفاده می کنم اما جوابی که در al قرار میگیره درست نمیباشد.
مشکل از کجاست؟

darknes666
پنج شنبه 06 تیر 1392, 21:05 عصر
اولا ضرب چند حالت داره:
1-یک بایت در یک بایت
2-یک کلمه در یک کلمه
3-ضرب یک بایت در یک کلمه

من الان از کجا بدونم کدومو دارین انجام میدین.احتمالا آخری نیست.

لطفا کدتونم قرار بدین اینجوری نمیشه.

ثانیا تو حالت اول نتیجه میره تو ثبات AX نه AL
تو حالت دوم هم 16بیت کم ارزشتر میره تو AX و 16 بیت با ارزش تر میره تو DX

مثال برای یک بایت در یک بایت(نکته:یکی از مقادی باید تو AL قرار بگیره)
STACKSG SEGMENT STACK 'STACK'

DB 64H DUP(0)

STACKSG ENDS

DATASG SEGMENT 'DATA'

DATASG ENDS

CODESG SEGMENT 'CODE'
ASSUME SS:STACKSG,DS:DATASG,CS:CODESG
MAIN PROC NEAR
MOV AX,DATASG
MOV DS,AX
;////////////////
MOV AL,15H
MOV BL,13H
MUL BL

;////////////////
MOV AX,4C00H
INT 21H
MAIN ENDP
CODESG ENDS
END MAIN


برای یک کلمه در یک کلمه(نکته:یکی از مقادی باید تو AX قرار بگیره)
STACKSG SEGMENT STACK 'STACK'

DB 64H DUP(0)

STACKSG ENDS

DATASG SEGMENT 'DATA'

DATA1 DW 6666H
DATA2 DW 1111H

DATASG ENDS

CODESG SEGMENT 'CODE'
ASSUME SS:STACKSG,DS:DATASG,CS:CODESG
MAIN PROC NEAR
MOV AX,DATASG
MOV DS,AX
;////////////////
MOV AX,DATA1
MUL DATA2

;////////////////
MOV AX,4C00H
INT 21H
MAIN ENDP
CODESG ENDS
END MAIN
آخریم بماند :چشمک:

hessam2003
جمعه 07 تیر 1392, 11:49 صبح
سلام.
کد من به این صورت است.
http://upload7.ir/images/82691299732405309680.jpg
عددی که بر میگردونه اونی نیست که من میخوام.

darknes666
جمعه 07 تیر 1392, 12:21 عصر
دوست عزیز برنامه رو کامل بزار.
از خط اول تا خط آخر.

hessam2003
جمعه 07 تیر 1392, 12:54 عصر
قسمت اول برنامه
http://upload7.ir/images/16358683650430947794.jpg
http://upload7.ir/images/49615848462799769275.jpg

darknes666
جمعه 07 تیر 1392, 13:04 عصر
تو قسمت multiply اومدی با CBW دوبار تبدیل انجام دادی.

برای مثال اگر بخواییم یه بایت رو تو یه کلمه ضرب کنیم. و یه بایت با افست آدرس DATA1 داشته باشیم و یک کلمه به افست آدرس DATA2 اینجوری میشه

MOV AL,DATA1
CBW
MUL DATA2

در واقع این دستور محتوای بیت هفتم ثبات AL رو تو AX بسط میده.
شما دوبار استفاده کردی احتمال میدم به خاطر همینه نتیجه ی مورد نظر رو نمیگیری.
منظورم این نیست که CBW اشکال ایجاد میکنه.
شما الان دومین CBW رو حذف کنی مشکلی ایجاد نمیشه.
کدتون اشکال داره.از دستورات باید درست استفاده کنین.
احتمالا از دستورات دید دیگه ای دارین و نکاتش رو اشتباه یاد گرفتین و مشکل از اینجاست.
(البته برداشت من اینه)
یک بار دیگه ضرب رو به صورت یه برنامه ی جداگانه تمرین کنین بلکه شاید اونجا به مشکلتون پی ببرین.

hessam2003
جمعه 07 تیر 1392, 17:13 عصر
چجوری باید مقدار داخل temp را نمایش بدم؟
temp db "a$" ; be in shekl tarif shoode
http://upload7.ir/images/92401733264018542066.jpg