PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : کمک برای تبدیل کد assembly به c



mohammad_sth
07-03-2011, 16:27
سلام و خسته نباشید به همه مهندسان عزیز پیشاپیش هم عید بر همه شما مبارک باشد دوستان، من به یک مشکل بر خودم و می خواستم از لایبرری های codevision استفاده کنم.
این لایبرری که من بهش نیاز دارم به زبون اسمبلی نوشته شده و کمک می خواستم اینو یک نفر برای من به c تبدیل کند چون من هیچی از اسمبلی سر در نمیارم کد رو در این زیر می نویسم اما اصل فایل تو لایبرری codevision هستش به نام bcd

unsigned char bcd2bin(unsigned char n)
{
#asm
ld r30,y
swap r30
andi r30,0xf
mov r26,r30
lsl r26
lsl r26
add r30,r26
lsl r30
ld r26,y+
andi r26,0xf
add r30,r26
ret
#endasm
}

unsigned char bin2bcd(unsigned char n)
{
#asm
ld r26,y+
clr r30
bin2bcd0:
subi r26,10
brmi bin2bcd1
subi r30,-16
rjmp bin2bcd0
bin2bcd1:
subi r26,-10
add r30,r26
ret
#endasm
}

بازم تشکر

1nafar
07-03-2011, 18:58
سلام
مطالب موجود در آدرس زیر رو بخونید :
You can see links before reply
گه بخواییم خودمون برنامه ی تبدیلش رو بنویسیم ، براش روش های مختلفی وجود داره ، مثلا :

int bcd2bin(int n){
int a,b;
a=n&0xf;
b=n&0xf0;

در بخش بالا من یه دونه تابع دارم که عدد bcd رو از برنامه ی اصلی میگیره و اون رو توی n قرار میده ، با فرض اینکه بیشترین رقم bcd ما دو باشه

b=(b >>4);[/LEFT]
در بخش اول ما n رو با f و f0 در مبنای هگز که برابر یا 1111 و 11110000 در مبنای باینری هست اند کردیم ، در این حالت 4 بیت اول و دوم عدد bcd ما جدا میشه .
در مرحله ی دوم من بیت های با ارزش رو 4 خونه به سمت چپ شیفت میدم تا ارزش اونا به رقم 10 گان برسه و در آخر :

b=(b*10)+a;
return (b);
}
عدد باینری ما آماده هست ، که به فرم دسیمال در متغیر b ذخیره شده .

حالا شما خودتون میتونیدحالت دوم رو بنوسید .