الفريق العربي للهندسة العكسية

نسخة كاملة : فهم ما الذي يجعل ال instruction mov صحيحة أو خاطئة
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .

R333T

Salam


أولا ذلك يعتمد على بنية الكمبيوتر.

32bit


bit = 1 bit

nibble = 4 bits = 1/2 byte

byte = 8 bits = 2 nibbles

WORD = 2 bytes = 4 nibbles= 16 bits

DWORD = 2 WORDs = 4 bytes = 8 nibbles = 32 bits

QWORD = 2 DWORDs = 4 WORDs = 64 bits

في نظام 64 bits ، سيكون مزدوجًا.


حرف S يقصد به Signed

تعني Signed binary numbers بأنه يمكن تمثيل كل من الأرقام الموجبة والسالبة. يمثل bit الأخير دلالة العلامة

مثل BYTE فإذا أردنا أن نستعمل الموجب و السالب أصبحت SBYTE



 
[صورة مرفقة: ssss.png]

لو فرضنا أنه عندنا 


 
arrayA SBYTE -5, -4, 3, 2
arrayB WORD 3000h, 4000h, 6000h, 9000h
arrayC SWORD -17, -36


MOV AX, arrayA

غير صحيحة لأن AX تتكون من 16 bits و arrayA من نوع SBYTE أي 8 bits





MOV AX, arrayB

صحيحة لأن AX و arrayB من نوع 16 bits أو WORD






MOV EAX, arrayC

غير صحيحة لأن EAX من نوع DWORD أي 32 bits و arrayC من نوع SWORD






MOV arrayD, arrayA

لا توجد تعليمات "MOV memory/memory"

يُسمح memory operand واحد فقط لكل instruction ولماذا الجواب لأنه هذه هي الطريقة التي يتم بها encode





MOVZX AX, arrayB

غير صحيحة لنه ليس هناك مكان ل zero-extended ولو كانت هنا AX و arrayB من نفس النوع أي 16 bits أي WORD.






MOVZX arrayB, AL

غير صحيحية لنه لا يوجد MOVZX memory, register ولكن يوجد فقط MOVZX register, memory أو MOVZX register, register






MOV DS, AX

صحيحة لأنه كلا DS و AX من نوع 16 bits






MOV DS5000h

غير صحيحة مع العلم أن قيمة DS هي 16 bits و 5000h تناسب 16 bits ولكن لا يوجد تعليمة هكذا

MOV segment register, immediate

لأن encoding يكون فقط هكذا

MOV segment register, memory

مثال
MOV DS[5000h]



أو

MOV segment register, register

مثال
MOV DS, AX


 
flower
تسلم ايدك على الشرح