burada fiziksel bellek atıfta - onlar iki işlenen sahip bunlardan biri bir kayıt olmalı, diğeri bir kayıt olabilir veya adresi, kodlama komutunun modrm baytı ile ve muhtemelen talimatın müteakip baytları tarafından belirlenir, örneğin sib (ölçeklenmiş dizin baytı) ve anlık sabit/bellek kayması. Ve ayrıca olası bir segment önek bayt.
Genellikle bu reg, reg ve reg, bu talimatların Mem formları için ayrı opcodes/talimat anımsatıcılarını yok formda
rsrcdst += rsrc
or
rsrcdst += Memory[ ... addressessing mode ...]
Ama 86 derleme kod, reg, reg/mem talimatlar. Bir işlenenin bir kayıt veya bir hafıza yeri olup olmadığı, montajcısında, montaj sözdizimi ile belirtilir. Bu durumda
, derleme kod
MOVSX ECX, BYTE PTR DS geçerli: [EDX]
talimat işlemkodu MOVSX olduğunu.
Hedef işlenen ECX kaydıdır. Kaynak işleneni "BYTE PTR DS: [EDX]" şeklindedir. Bu bir bellek referansı birkaç şeyle belirtilmiştir: (1) "[EDX]" etrafında köşeli parantezler - köşeli parantezler Bellek için bir kısa fardır [...adres...]. (2) veri bölümünde olduğunu belirten "DS:" öneki. Kayıt işlenenlerin böyle bir segment öneki yoktur. (3) "BYTE PTR" - "DS: [EDX] 'ile belirtilen bellek adresini al ve bunu bellekte 8 bitlik bir bayt referans olarak yorumla" yazıyor.
Ben gerçekten bulmak istediğiniz
MOVSX ECX,DL
"DL" 32 bit düşük 8 bit EDX kayıt için bir isimdir olduğunu sanıyorum. Yani DL = EDX.bits [7: 0]. Ne yazık ki, x86 montajcılar genellikle don; t gibi sözdizimi kabul "EDX.bits [7: 0]" (Onları ben yazdım sürece), sen alt kayıtları tarihsel isimlerini bilmek zorunda:
AL = EAX.bits[7:0]
AH = EAX.bits[15:8]
AX = EAX.bits[15:0]
EAX = 32 bit register that "covers" all of the above
ve böylece üzerinde: BL, CL, DL, DI, ...