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

[ تمت الإجابة ]سؤال عن Instruction Pointer

بدأه simpatico في 23 أكتوبر 2009 · 3 رد · 1,054 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
here is a short program that demonstrates the use of MOV instruction: 



ORG 100h		  ; this directive required for a simple 1 segment .com program. 

MOV AX, 0B800h	; set AX to hexadecimal value of B800h. 

MOV DS, AX		; copy value of AX to DS. 

MOV CL, 'A'	   ; set CL to ASCII code of 'A', it is 41h. 

MOV CH, 1101_1111b; set CH to binary value. 

MOV BX, 15Eh	  ; set BX to 15Eh. 

MOV [BX], CX	  ; copy contents of CX to memory at B800:015E 

RET			   ; returns to operating system.

i use emu 8086

سؤالي هو لماذا

(the instrucion pointer ) IP ..

احيانا يزيد 2 على قيمته

واحيانا يزيد 3

كيف لي ان اعرف

MOV [BX], CX	  ; copy contents of CX to memory at B800:015E

وهنا لماذا استعملنا

DS

#2

IP تشير إلى عنوان التعليمة التالية كما تعلم.. والتعليمة التالية ستكون على إزاحة تساوي (طول التعليمة الحالية + طول المعاملات)

opcode		  operand
.------.	.--------------.
  mov		  AX, 0B800h

وكل تعليمة تختلف عن الأخرى بالطول فما بالك بالمعاملات.. لذلك تجد IP مرة يزيد 1 أو 2 أو 5 أو 6 أحياناً..

اقتباس
وهنا لماذا استعملنا

DS

لأن DS تشير إلى عنوان مقطع البيانات

وفي ASM16 يجب تحديدها بشكل يدوي، لذلك تقوم بتحميل عنوان المقطع إلى AX أولاً ومن ثم تنقله من AX إلى DS، بعدها أي تعليمة تريد التعامل مع الذاكرة ستتعامل مع العنوان DS:XX بحيث DS هو base address لمقطع البيانات و XX هو قيمة مسجل يعبّر عن الإزاحة من بداية هذا المقطع.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3
Xacker كتب:

IP تشير إلى عنوان التعليمة التالية كما تعلم.. والتعليمة التالية ستكون على إزاحة تساوي (طول التعليمة الحالية + طول المعاملات)

opcode		  operand
.------.	.--------------.
  mov		  AX, 0B800h

وكل تعليمة تختلف عن الأخرى بالطول فما بالك بالمعاملات.. لذلك تجد IP مرة يزيد 1 أو 2 أو 5 أو 6 أحياناً..

يعني اخي هدا الشي بقدر احسبه انا يدويا ولللا بس من خلال ال

emulator

يعني كيف ممكن اعرف طول ال

instruction

وحتى المعاملات

operands

كيف ممكن اعرف طولها

وشكراً جزيلا لك اخي الكريم

#4

حمّل Intel Architecture Software Developer’s Manual Volume 2: Instruction Set Reference

http://developer.intel.com/design/pentiumi...uals/243191.htm

والمرفق قد يكون شئ سريع وخفيف.

يمكنك معرفة "الطول" بشكل برمجي من خلال استخدام اللافتات Labels

st:
xor   eax, eax
mov ebx,$-st

$ هنا تمثل الإزاحة الحالية للتعليمة mov وهذا سيجلب لك الطول ما بين بداية xor ونهاية معاملاتها ويحفظه في EBX. جرّبه.

opcodhlp.zip

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

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