vistacali
سه شنبه 16 اسفند 1390, 09:43 صبح
سلم دوستان من یک برنامه نوشن به زبان اسمبلی که نمیدونم چرا با دست حساب میکنم یک پ چیزی میشه ولی وقتی با اسمبل حساب میکنم یک چیز دیگه میشه
تکه کد من اینه بخونید میگم کجاش مشکل هست
mov ax,-20000
mov bx,32000
add ax,bx
sub ax,bx
همه اعداد در مبنای 10 هستن حالا اول باید عددها تبدیل به مبنای 16 بشن که این میشه جواب هر کدومشون
ax=B1E0
BX=7D00
حالا میدونم که عدد اولی منفی بوده برای همین اول مثبت عدد رو در مبنای 16 حساب کردم بعد از اون مکمل 2 گرفتم .
حالا وقتی جمع میکنیم که باید بشه
add ax,bx=2EE0
تا اینجا رو کامپیوتر درست میگه حالا اینجا مقدار جدید داده به ax وباید 2EE0رو از 7D00کم کنه حالا مشکل همینجاست من میام از عدد دومی مکمل میگیرم چون قائده کامپیوتر اینه که تفریق رو به کمک جمع انجام میده یعنی عدد دوم باید بشه 9000 و با 2EE0جمع بشه و جواب بشه BEE0 ولی وقتی با امولاتور محاسبه میکنم جواب رو میده B1E0 کجای حساب دستی من اشتباه است ؟ در ضمن من دیدم که sing flage رو 1 میکنه یعنی نتیجه عددی منفی هست ولی من نمیفهمم چرا اینطور شده ممنون میشم راهنمایی کنید :ناراحت:
تکه کد من اینه بخونید میگم کجاش مشکل هست
mov ax,-20000
mov bx,32000
add ax,bx
sub ax,bx
همه اعداد در مبنای 10 هستن حالا اول باید عددها تبدیل به مبنای 16 بشن که این میشه جواب هر کدومشون
ax=B1E0
BX=7D00
حالا میدونم که عدد اولی منفی بوده برای همین اول مثبت عدد رو در مبنای 16 حساب کردم بعد از اون مکمل 2 گرفتم .
حالا وقتی جمع میکنیم که باید بشه
add ax,bx=2EE0
تا اینجا رو کامپیوتر درست میگه حالا اینجا مقدار جدید داده به ax وباید 2EE0رو از 7D00کم کنه حالا مشکل همینجاست من میام از عدد دومی مکمل میگیرم چون قائده کامپیوتر اینه که تفریق رو به کمک جمع انجام میده یعنی عدد دوم باید بشه 9000 و با 2EE0جمع بشه و جواب بشه BEE0 ولی وقتی با امولاتور محاسبه میکنم جواب رو میده B1E0 کجای حساب دستی من اشتباه است ؟ در ضمن من دیدم که sing flage رو 1 میکنه یعنی نتیجه عددی منفی هست ولی من نمیفهمم چرا اینطور شده ممنون میشم راهنمایی کنید :ناراحت: