مشاهده نسخه کامل
: سوال درباره زبان اسمبلی
madadnoki
11-03-2011, 10:56
سلام ! سایت انگار تاپیکی درباره زبان اسمبلی نداره .برای همین ناچار سوالم رو اینجا مطرح میکنم
از مدیر سایت خواهش میکنم اگه جای این پست اشتباه اون رو به محل مناسب انتقال بده
حالا سوال:
برنامه زیر رو در محیط keil که یک کامپایلر برای 8051 است و به زبان اسمبلی باید برنامه رو توش نوشت syntax error میده ......به نظر دستورها درسته ولی نمیدونم اشکال از کجاست !!!!!!!!!! لطفا راهنمایی کنید
org 00h
;
start : mov a,p1
mov p2,a
mov b,p2
anl b,#0F0H
SHR b
mov p2,b
sjmp start
;
end
MosaferJade
11-03-2011, 11:11
سلام
به حروف بزرگ و کوچک حساس نیست؟
بخاطر حلقه بینهایت برنامه نیست ؟
شایدم بخاطر این end آخری باشه . یه ":" آخرش بزار
راستی اگه برنامه کامپایلرش رو داری اگه میشه برام آپ کن لازمش دارم
مرسی
madadnoki
11-03-2011, 12:01
* به حروف کوچک و بزرگ حساس نیست
* نه اون حلقه همیشه باید باشه
* end هم مشکلی نداره
از خط SHR b ارور میگیره!!!!!!!!!!!!!
درست متوجه نشدم !!!!!!!!!برنامه keil رو لازم دارید؟؟
در ضمن من بلد نیستم upload کنم ........mail تو بده برات میل کنم.(اگه منظورت نرم افزار keil است)
در ضمن حجم فایل : 18MB
ميشه بگي SHR b يعني چي ؟
اگه منظورش شيفت به راست است از RR استفاده كن
madadnoki
11-03-2011, 12:41
همون کار RR رو انجام میده,,,,,,, RR هم نوشتم ولی eror زیر رو میده:
REGISTRATION OPERAND EXPECTED
برنامه:
org 00h
;
start : mov a,p1
mov p2,a
mov b,p2
anl b,#0F0H
RR b
mov p2,b
sjmp start
;
end
الان حداقل چهار سالي ميشه اسمبلي ننوشتم پس اگر راهنما ييم بدردت نخورد ببخش ولي خطوط زير را امتحان كن ضرر نداره.
mov a,b
rr a
madadnoki
11-03-2011, 14:40
برنامه دیگی error نمیده ولی تو پروتوس اجرا نمیشه..........
سوال اینه که : <<برنامه ای بنویسید که نیم بایت با ارزش پورت 2 را روی سون سگمنت نمایش دهد.فرض اینکه سون سگمنت به بخش کم ارزش متصل باشد.>>
من اومدم یه مقدار از پورت 1 گرفتم ریختم تو پورت 2 ..........بعد با F0 هگز and کردم ...حالا باید 4 بار شیفت به راست بدیم که بیت پر ارزش روی 4 بیت کم ارزش انتقال پیدا کنه........ولی تو پروتوس اجرا نمیشه ....چرا؟
مدار پروتوس :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برنامه :
org 00h
;
start : mov a,p1
mov p2,a
mov b,p2
mov a,b
rr a
rr a
rr a
rr a
anl a,#0F0H
mov p2,a
sjmp start
;
end
برنامه رو اينطور بنويس.
org 00h
;
start : mov a,p1
anl a,#0F0H
rr a
rr a
rr a
rr a
mov p2,a
sjmp start
;
end
madadnoki
11-03-2011, 15:30
درست شد ممنون.
خطای REGISTRATION OPERAND EXPECTED یعنی چی؟
چرا b رو حذف کردید؟
قابلي نداشت . من هم ممنونم چون برام يك يادآوري شد.
اين ارور REGISTRATION OPERAND EXPECTED يعني عملوند اشتباه است . عملوند دستور rr بايد a باشد.
شما در خط اول mov a,p1 عدد مورد نظر را به a انتقال داده ايد و ديگر نيازي به انباره كمكي b نداريد انباره b براي دستوراتي مثل تقسيم كه نياز به دو عملوند هست اسنفاده مي شود.
با اين حال برنامه شما هم درست بود اگر در خط دوم mov p2,a را نداشت. چون عدد صحيح در آخرين خط برنامه در p2 قرار ميگيرد ولي چون عددي كه در اين خط در p2 قرار ميگيرد اشتباه است و برنامه مدام در حال اجرا است p2 بين عدد صحيح و اشتباه در حال تغيير است.
لطفا براي تشكر از دكمه تشكر استفاده كنيد.:20:
يك چيزي يادم رفت اين خط anl a,#0F0H حتما بايد قبل از rr a قرار بگيرد.:46:
madadnoki
11-03-2011, 19:02
مرسی گلم :11:........دکمه تشکر رو هم زدم:5::10::40:
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.