الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ملف asm لا اعرف مالذي يفعله

مغلق
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

ملف الجافا مفهوم طبعا ولكن اريد ان اعرف مالذي يفعله ملف الاسمبلي

هذا هو ملف الجافا الاصلي

public class Mctest{

public static void main(String [] args)
	{
  int num1=11;
	int num2=222;	


	}

}

و هذا هو ملف الاسيمبلي

	list	p=pic16f84a, r=dec

	org	0

	goto	_start

	org	4

	goto	interrupt

_STATUS	equ	3

_C	equ	0

_Z	equ	2

_PCL	equ	2

_PCLATH	equ	10

_TMR0	equ	1

_INTCON	equ	11

_OPTION	equ	129

Mctest_static	equ	18

PIC16F84_static	equ	18

Processor_static	equ	18

PIC16F84__PORTA	equ	18

PIC16F84__PORTB	equ	18

PIC16F84__EEDATA	equ	18

PIC16F84__EEADR	equ	18

PIC16F84__TRISA	equ	18

PIC16F84__TRISB	equ	18

PIC16F84__EECON1	equ	18

PIC16F84__EECON2	equ	18

PIC16F84__C	equ	18

PIC16F84__Z	equ	18

PIC16F84__W	equ	18

PIC16F84__F	equ	18

PIC16F84__TMR0	equ	18

PIC16F84__PCL	equ	18

PIC16F84__STATUS	equ	18

PIC16F84__FSR	equ	18

PIC16F84__PCLATH	equ	18

PIC16F84__INTCON	equ	18

PIC16F84__OPTION	equ	18

Mctest__init___V_loc	equ	18

Mctest__init___V_tmp	equ	19

Mctest_main_Str_loc	equ	18

Mctest_main_Str_tmp	equ	21

PIC16F84__setMemory_II_V_loc	equ	18

PIC16F84__setMemory_II_V_tmp	equ	20

PIC16F84__getMemory_I_I_loc	equ	18

PIC16F84__getMemory_I_I_tmp	equ	19

PIC16F84__setBit_II_V_loc	equ	18

PIC16F84__setBit_II_V_tmp	equ	20

PIC16F84__clearBit_II_V_loc	equ	18

PIC16F84__clearBit_II_V_tmp	equ	20

PIC16F84__asm_Str_loc	equ	18

PIC16F84__asm_Str_tmp	equ	19

PIC16F84__initline_Str_loc	equ	18

PIC16F84__initline_Str_tmp	equ	19

PIC16F84__clock_I_V_loc	equ	18

PIC16F84__clock_I_V_tmp	equ	19

PIC16F84__delay_I_V_loc	equ	18

PIC16F84__delay_I_V_tmp	equ	19

PIC16F84__heap_I_V_loc	equ	18

PIC16F84__heap_I_V_tmp	equ	19

PIC16F84__memory_II_V_loc	equ	18

PIC16F84__memory_II_V_tmp	equ	20

PIC16F84__banksize_I_V_loc	equ	18

PIC16F84__banksize_I_V_tmp	equ	19

PIC16F84__genlabel__V_loc	equ	18

PIC16F84__genlabel__V_tmp	equ	18

PIC16F84__getlabelhigh__I_loc	equ	18

PIC16F84__getlabelhigh__I_tmp	equ	18

PIC16F84__getlabellow__I_loc	equ	18

PIC16F84__getlabellow__I_tmp	equ	18

PIC16F84__printlabel__V_loc	equ	18

PIC16F84__printlabel__V_tmp	equ	18

PIC16F84__init___V_loc	equ	18

PIC16F84__init___V_tmp	equ	19

Processor__init___V_loc	equ	21

Processor__init___V_tmp	equ	22

_FSR_TEMP	equ	12

_ACC	equ	13

_HEAP	equ	14

_ACC_TEMP	equ	15

_STATUS_TEMP	equ	16

_W_TEMP	equ	17

_start

	movlw	79

	movwf	_HEAP

	goto	main

clockspeed	equ	4000000

; tmr0 count = 250

tmr0_for_1ms	equ	6

; prescaler = 4

set_prescaler_for_1ms	macro

	bcf	_OPTION,2

	bcf	_OPTION,1

	bsf	_OPTION,0

	endm



Mctest__init___V

;---- Mctest.java[1]: public class Mctest{

	return



Mctest_main_Str

main

;---- Mctest.java[5]:   int num1=11;

	movlw	11

	movwf	Mctest_main_Str_loc+1

;---- Mctest.java[6]:  int num2=222;	

	movlw	222

	movwf	Mctest_main_Str_loc+2

;---- Mctest.java[9]:  }

	banksel	_ACC

	return



PIC16F84__init___V

;---- PIC16F84.java[69]

;---- PIC16F84.java[70]

;---- PIC16F84.java[72]

;---- PIC16F84.java[73]

;---- PIC16F84.java[74]

;---- PIC16F84.java[75]

;---- PIC16F84.java[77]

;---- PIC16F84.java[78]

;---- PIC16F84.java[79]

;---- PIC16F84.java[80]

;---- PIC16F84.java[81]

;---- PIC16F84.java[83]

;---- PIC16F84.java[84]

;---- PIC16F84.java[85]

;---- PIC16F84.java[87]

;---- PIC16F84.java[88]

;---- PIC16F84.java[89]

;---- PIC16F84.java[90]

	return



Processor__init___V

;---- Processor.java[1]: public class Processor extends PIC16F84 {

	movf	Processor__init___V_loc+0,0

	movwf	PIC16F84__init___V_loc+0

	IF ($ >> 10) != (PIC16F84__init___V >> 10)

	pagesel	PIC16F84__init___V

	ENDIF

	call	PIC16F84__init___V

	return

interrupt

	movwf	_W_TEMP

	swapf	_STATUS,0

	movwf	_STATUS_TEMP

	movf	_ACC,0

	movwf	_ACC_TEMP

	movf	4,0

	movwf	_FSR_TEMP

	banksel	_ACC


	movf	_FSR_TEMP,0

	movwf	4

	movf	_ACC_TEMP,0

	movwf	_ACC

	swapf	_STATUS_TEMP,0

	movwf	_STATUS

	swapf	_W_TEMP,1

	swapf	_W_TEMP,0

	retfie

	end

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#2

حرام عليك يا رامي , ده منظر كود ( الأسمبلي طبعا ) , ده متاكل نصه يا شيخ

بقى عايز تتابع الرموز الغريبه دي , طيب عايز تشوف كود الأسمبلي بتاعه , ولد ملف hex وبعدين رجعه أسمبلي تاني

لكن المترجم الغبي ده سيبك من الأسمبلي بتاعه , دا السحره بيكتبوا طلاسم تتفهم عنه

لعلمك الكود اللي بيشتغل هو ده بس :

_HEAP equ 14
Mctest_main_Str_loc equ 18
_ACC equ 13

  org 0
  goto _start

_start
  movlw 79
  movwf _HEAP
  goto main

main
  movlw 11
  movwf  Mctest_main_Str_loc+1
  movlw 222
  movwf Mctest_main_Str_loc+2
  banksel _ACC
  return

قلبت الكود كله عن ماكرو اسمها banksel مفيش لها أي أثر , ولهذا الكود حيطلع error

الكود شرحه هو شرح الجافا

لو عايز تشوف شكله الطبيعي حيكون كده

  num1 equ 10h
  num2 equ 14h

  org 0
  movlw  d'11'
  movwf  num1
  movlw  d'222'
  movwf  num2
  return

ايه رأيك اصغر من كود الجافا :lol: :lol:

#3

طيب مع انني اتعلم هذه التقنيات من يومين فقط

اريد ان اشرح لك هذا الكود و انت صحح لي او فسر لي

num1 equ 10h

num2 equ 14h

يعني اربط بين هذين الاسمين و ضعهم في هذه السجلات

org 0

لا اعرف ماذا تعني

movlw d'11'

movwf num1

حمل في السجل w القيمة 11

و حمل القيمة التي في w الى num1

شلوني معك :)

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#4
اقتباس
num1 equ 10h

num2 equ 14h

يعني اربط بين هذين الاسمين و ضعهم في هذه السجلات

لأن كلمة اربط - مبهمه الى حد ما - بالنسبه لي

معنى السطرين , أنك تعطي اسم لعنوان في الذاكره - ما يعرف بالاعلان عن المتغيرات في لغات البرمجه , ولكن هنا تحدد ايضا عنوان هذا المتغير

فيما بعد تستخدم اسم المتغير بدل رقم العنوان للتعامل مع الذاكره

اقتباس
org 0

لا اعرف ماذا تعني

تعني مكان بداية الكود

حيث انه يوجد عنوانين فقط يبدا المتحكم من عندهم

العنوان 0 وهي البدايه الطبيعيه , ولهذا نكتب البرنامج بداية من هذا العنوان

العنوان 4 وهو العنوان الذي يتوجه اليه المتحكم عند حدوث مقاطعه و ولهذا ترى في بعض البرامج التي تستخدم المقاطعات org 4 ويكتب عندها برنامج المقاطعه

فكلمة org تعني origin يعني نقطة البدايه , ونستخدمها لتعيين عنوان تحميل الكود في المتحكم

اقتباس
movlw d'11'

movwf num1

حمل في السجل w القيمة 11

و حمل القيمة التي في w الى num1

شلوني معك

يا سلام عليك يا رامي , تمام كده :D

#5

طيب هل يوجد من ضمن هل 35 تعليمة

if

كيف اقارن بين اثنين

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#6

انت مش عارف الـ 35 تعليمه يا رامي :blink:

طبعا مش موجوده فيهم لا if ولا cmp حتى

لكن بتتم بهذه الطريقه , بنطرح الرقم من الثاني , وننظر في الأعلام ,على أساسها بنعرف أيهما أكبر من الأخر أو اذا كانو متسويين

تستخدم فيه

SUBLW

BTFSC او BTFSS

مع السجل STATUS , خاصة البيت C, Z

جرب كدا في الجافا تقارن بين رقمين و ضع الشكل في الجافا والأسمبلي كي اوضح لك العلاقه , و ترى انه لا غنى عن الأسمبلي للتعامل مع الميكروكنترولر :D

#7

هو انا شفتهم كلهم و استغربت عدم وجود if قلت لحالي ربما هاي التعليمة موجودة اصلا و عيب علينا نقول وينها ! :)

للاسف لم افهم عليك ما هذه "الاعلام" يعني التلفزيون و الجرايد!!

ممكن توضيح اكثر لكي استطيع عملها بالجافا

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#8

السلام عليكم

الاعلام هي مجرد مسجل من مسجلات المعالج يقوم بتسجيل حالة المعالج بعد كل عملية, مثلاُ إذا قام المعالج بعملية حسابية واصبحت نتيجة العملية صفر, فى هذه الحالة يصبح قيمة الدالة Z يساوى صفر...

بعض هذه الاعلام هى

Z والتى تعنى ان العملية الحاسبية كان ناتجها صفر

OF والتى تعنى انه بعد العملية الحاسبية السابقة حدث فيض فى احد المتغيرات

N وتعنى ان ناتج العملية الحسابية اصبح سالب

عندما تقوم بعملية if يقوم بالمعالج بالتحقق من قيمة احد هذه الاعلام وعلى حسب قيمتها يقوم بعلية تنفيذ الامر if...

مثالاُ إذا كتبت

if(a+b==0) then
...

يقوم المعالج بجمع العددين ثم ينظر إلى العلم Z إذا كان قيمة العلم تساوى 0 معنى ذلك ان عملية الجمع لم ينتج عنها القيمة 0, اما إذا كان قيمة العلم 1 إذاً ناتج عملية العمج كان صفر وبذلك يتم تنفيذ الشفرة التى تتبع الامر if::

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

هذا الموضوع مغلق.

مواضيع مشابهة