برامج

أسئله عن Assembly Language intel base [الأرشيف] - برامج نت

المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : أسئله عن Assembly Language intel base


hamedmf
11-04-2007, 10:01 AM
11111111111111111111111111111111111111111111111111 111111111111111111111111111

hamedmf
11-04-2007, 12:40 PM
أين أهل الخبره ساعدوني على حلها

hamedmf
11-05-2007, 11:46 AM
يا شباب ساعدوني في حل الاسئله

hamedmf
11-07-2007, 06:11 AM
أرجو منكم المساعده يا اخوان

adam_22
11-07-2007, 08:24 AM
السلام عليكم
مع انني لا احبذ ان تطالب بحل واجبات ما ولكني سأعطيك الحل واتمنى ان تستفيد واذا احببت ان اشرح لك الاجابات فلا تتردد بالسؤال

حل السؤال الأول:


a- al=2
b- al=0
c- al='C'
d- al='C'


حل السؤال الثاني:

cmp al,op1
jle e
cmp al op2
jl e
cmp al op3
jne e
cmp al,op4
jg e
<statements>
e:
.exit



وبالتوفيق

hamedmf
11-11-2007, 11:59 AM
شكرا كتيـــــــــــــــر يا اخ Adam_22 وإذا ما عندك مشكله تشرحلي كيف حليتهم فبكون مشكوووووور كتير و جزاك الله خيرا

وهناك سؤال اخر بعرف اني ثقلت عليك بس اتمنى من الله ان يجعلها في ميزان حسناتك

hamedmf
11-11-2007, 12:02 PM
اقدر ارسلك السؤال عالاميل

hamedmf
11-11-2007, 12:32 PM
ياريت تشرحلي كيف حليتهم لو سمحت

adam_22
11-11-2007, 05:14 PM
السلام عليكم
بالنسبة للسؤال الأول هو مجرد تعامل مع memory and addresses
يعني كل بايت يخزن في عنوان معين والسؤال افترض ان byteval بدأ التخزين في العنوان 0000 وهو يحتوي على 4 bytes يعني في العنوان 0000 مخزن 1 وفي العنوان 0001 مخزن 2 وهكذا واتمنى ان توضح لك الصورة التالية المعنى:
http://abomadi.com/up/uploads/58a907b7f9.jpg

كل ما عليك بعد ذلك هو عملية عد عادية واذا احتجت مساعدة اخرى او توضيح اخر لهذا السؤال لا تتردد في طلب ذلك.

بالنسبة للسؤال الثاني يجب ان تعلم انه لا يوجد في لغة الاسمبلي الجمل الشرطية الموجودة في لغات ال high level مثل السي

يعني لو احببت ان تترجم
if(x>b) { do something; }
في السي الى الاسمبلي عليك ان تقارن قيمة x مع قيمة b فاذا كانت اكبر منها فقد تحقق الشرط اما ان لم تكن كذلك فلم يتحقق الشرط واذا لم يتحقق الشرط عليك ان تخرج من البرنامج فيكون الكود في الاسمبلي كالتالي:

cmp x,b
jle e
do something
e:
.exit

انا افترضت ان لديك معرفة مسبقة في الاسمبلي لو احتجت اي مساعدة اخرى نحن في الخدمه

تستطيع مراسلتي ولكن اتمنى ان تضع اسئلتك هنا حتى تعم الفائدة
وبالتوفيق

hamedmf
11-12-2007, 06:32 AM
مشكور يا أخ على مجهودك

hamedmf
11-12-2007, 06:54 AM
Question III




1
Convert the program given in Listing 1 into a form that can be executed from the command window of a Windows based computer. Briefly describe the steps that were carried out during the conversion of the printed text to an executable file and provide an example of the textual output produced by the program when it is executed. Note that the line numbers at the left margin of Listing 1 are not part of the program and should be ignored when producing the executable file from the printed code


2
Explain, in a few sentences, the overall purpose of the program


3
Draw a flowchart showing the program flow of the code in lines 17 to 39 inclusive and provide a commented listing which indicates your understanding of the code


4
Draw a flowchart showing the program flow of the subroutine in lines 40 to 52 inclusive and provide a commented listing which indicates your understanding of the subroutine


5
List all the assembler directives that appear in the program and explain the purpose of each of them


6
Explain why the string “xxxxx” appears several times in lines 12 and 13 of the program. Modify the program in a manner which makes these strings unnecessary and provide a commented printout of your modifications


7
Modify the program so that it accepts and correctly processes the lower case alphabetic characters a to f as valid input instead of the upper case characters A to F. You should provide a commented printout of your modifications


Listing 1



1. DOSSEG
2. .MODEL SMALL
3. .STACK 100h
4. .DATA
5. lf EQU 0Ah
6. cr EQU 0Dh
7. mess3 DB lf,cr,"Processed output is: $"
8. mess1 DB lf,lf,cr,"Type a single hex digit (0 to 9, A to F)"
9. DB lf,cr,"or any other key to terminate program: $"
10. mess2 DB lf,cr,"Error in input. Program terminating.$"
11. h2b DB "0000$","0001$","0010$","0011$","0100$","0101$","0110$","0111$"
12. DB "1000$","1001$","xxxxx","xxxxx","xxxxx","xxxxx","xxxxx","xxxxx"
13. DB "xxxxx","1010$","1011$","1100$","1101$","1110$","1111$"
14. .CODE
15. start: mov ax,@DATA
16. mov ds,ax

17. next: mov dx,offset mess1
18. call disp
19. call rdkey
20. call check
21. push ax
22. mov dx,offset mess3
23. call disp
24. pop ax
25. and ah,ah
26. jz cont
27. mov dx,offset mess2
28. call disp
29. mov ax,4c00h
30. int 21h
31. cont: mov ah,0
32. mov dx,offset h2b
33. add dx,ax
34. add dx,ax
35. add dx,ax
36. add dx,ax
37. add dx,ax
38. call disp
39. jmp next
40. check: cmp al,'0'
41. jl bad
42. cmp al,'F'
43. jg bad


44. cmp al,'9'
45. jle ok
46. cmp al,'A'
47. jge ok
48. bad: mov ah,1
49. ret
50. ok: mov ah,0
51. sub al,30h
52. ret

53. rdkey: mov ah,1 ;read a key from keyboard to AL register
54. int 21h
55. and al,7fh
56. ret

57. disp: mov ah,9 ;display the string pointed to by DX register on console
58. int 21h
59. ret
60. END start

hamedmf
11-12-2007, 07:12 AM
هذا هو السؤال الاخير والله عارف اني ثقلت عليك ... الله يعطيك العافيه ويزيدك اجر وثواب ..

شكرا لك يا أخي و جزاك الله خيرا...

adam_22
11-12-2007, 08:35 AM
السلام عليكم
الحل كامل ان شاء الله في الرد التالي

adam_22
11-12-2007, 09:13 AM
السلام عليكم

بالنسبة للفرع الأول من السؤال يطلب فيه ان تحول البرنامج لبرنامج تنفيذي بامتداد .exe وهذا يختلف حسب البرنامج الذي تستخدمه لكتابة برامجك
انا استخدم برنامج tasm وهو بدائي جدا ولكنه مريح في الاستخدام وتستطيع تحميله من هنــــــــا (http://abomadi.com/up/download-bfe966d1ff.rar.html)
بعد تحميله فك الضغط عنه وضعه في c
طريقة التحويل فيه كالتالي:
start->run->cmd
ستظهر لك شاشة الدوس اكتب فيها التالي:
cd\
cd tasm
edit
ستظهر لك شاشة محرر النصوص الزرقاء
اكتب فيها البرنامج ثم قم بحفظه عن طريق file->save as بامتداد asm
اختر الاسم ثم exit
ستظهر لك شاشة الدوس مرة اخرى للتحويل اكتب فيها
tasm ur_program_name
tlink ur_program_name
الخطوة الأولى للتحويل لامتداد obj
الخطوة الثانية للتحويل لامتداد exe
وهكذا انتهينا من التحويل

الفرع الثاني من السؤال يطلب شرح مبسط لفائدة البرنامج
وفائدته انه يحول الارقام من HEX الى BINARY

الفرعين الثالث والرابع يطلبان ان ترسم له Flow Chart وانا معلوماتي بسيطة في هذا الشأن ولا اظنني استطيع مساعدتك في هذا الفرع

الفرع الخامس يطلب منك ان تذكر كل علامات التحويل التي ظهرت في البرنامج وفائدة كل منها
1-disp: لعرض mess1 على الشاشة.
2-rdkey: لقراءة الحرف المدخل عن طريق الكيبورد وتخزينه في al
3-check: لمقارنة الحرف المدخل عن طريق الكيبورد فاذا كان اقل من 0 او اكبر من F ينهي البرنامج.
4-cont: لايجاد قيمة المدخل بال binary
5-bad,ok: ما اذا كانت القيمة مخالفة ام لا.

الفرع السادس يسأل لماذا تكررت "xxxx" عدة مرات في السطرين الثاني عشر والثالث عشر؟
تكررت 7 مرات لأن الفرق بين ال Ascii code لل 9 وال A هو 7
ويطلب منك طريقة لمنع هذا التكرار الطريقة هي بعد مسح جميع ال "xxxx" في السطرين الثاني والثالث عشر استبدل هذا الكود:
jge ok
48. bad: mov ah,1
49. ret
50. ok: mov ah,0
51. sub al,30h
52. ret

بهذا الكود:
cmp al,'A'
jge ok2
bad: mov ah,1
ret
ok: mov ah,0
sub al,30h
ret
ok2: mov ah,0
sub al,37h
ret

الفرع السابع والأخير يطلب منك ان تجعل البرنامج يستقبل الحروف الصغيرة والكبيره بدل ان يستقبل الكبيره فقط
لتحقيق ذلك استبدل الكود التالي:
jge ok
48. bad: mov ah,1
49. ret
50. ok: mov ah,0
51. sub al,30h
52. ret

بهذا الكود:
check: cmp al,'0'
jl bad
cmp al,'f'
jg bad


cmp al,'9'
jle ok
cmp al,'A'
jl bad
cmp al,'F'
jle ok2
cmp al,'a'
jge ok3
bad: mov ah,1
ret
ok: mov ah,0
sub al,30h
ret
ok2: mov ah,0
sub al,37h
ret
ok3: mov ah,0
sub al,57h
ret

وبالتوفيق

hamedmf
11-21-2007, 07:45 AM
الفرعين الثالث والرابع يطلبان ان ترسم له Flow Chart وانا معلوماتي بسيطة في هذا الشأن ولا اظنني استطيع مساعدتك في هذا الفرع

ياليت تشوف واحد يساعدي في هذا الموضووووع .... وشكرا

hamedmf
11-21-2007, 08:09 AM
12345633333333333333

hamedmf
11-21-2007, 09:38 AM
5855555555555555555555555