2010-04-13 19 views
7

İlk defa montaj yapmaya çalışan acemi bir programcıyım. Eğer bu inanılmaz bir sorunsa, özür dilerim.x86 Meclisindeki işlenen boyut çakışması?

EAX kaydında kayıtlı bir karakter var, ancak DL kayıt defterine taşımam gerekiyor. Denediğimde: mov dl, eax C2443 hatası alıyorum: işlenen boyut çakışması. Ben dl 8 bit ise eax kaydı 32 bit olduğunu biliyorum ... bir şey üzerinde miyim? Bunu çözmek için nasıl giderim.

cevap

6

belki

xor edx,edx 
mov dl, al 

deneyin? Edx'in “gereksiz” yüksek dereceli bitlerini sıfırlamak için ilk talimat (isteğe bağlı), daha sonra düşük 8'i eax'ten edx'e taşıyın.

Diğerlerinin de belirttiği gibi, movzx bunu bir adımda yapar. Aynı satırlar boyunca, im'de değeri varsa, edx'in yüksek sipariş bitlerini bir msb kopyasının kopyasıyla doldurmak için "movsx edx, al" komutunu kullanabilirsiniz. Edx'e alfa'nın 32 bit gösterimi. Sadece eax alt 8 bit erişmek istiyorsanız

+0

Doğru. EAX kaydı 32 bit genişliğinde iken, DL sadece 8 bittir. AL'yi, bir EAX alt kümesi olan DL - AL'ye taşımanız gerekir. – MPelletier

+0

Ve xoring edx sadece iyi bir fikir :) Güzel ve temiz. – MPelletier

+0

İlk talimatı anlamıyorum. Xor edx, edx' bit diski * bit *% edx’te sıfırlandı mı? –

3

ardından al kullanın:

mov dl, al 

Sen değiştirerek her genel amaçlı kayıt 8 bit, 16 bit veya 32 bit alt erişebilir başlangıç ​​veya bitişte harfler. Kayıt eax için, eax kullanarak tüm 32 bit kullanın, balta 16 bit daha düşüktür ve al 8 bit daha düşüktür. Ebx için eşdeğeri sırasıyla ebx, bx ve bl ve benzerleridir.

Bir yazmacın 16 veya 8 bitini değiştirirseniz, üst bitlerin değişmediğini unutmayın. Örneğin, eğer hepsini eax'a yüklerseniz, o zaman al'e sıfıra yükleyin, daha sonra eax alt bitleri sıfır olacak ve 24 bit daha yüksek olacaktır.

mov eax, -1 ; eax is all ones 
mov al, 0 ; higher 24 bits are ones, lower 8 bits are zeros 
+0

dl'ye geçiş, temel durumdur. Sıfır doldurma ya da işaret uzatma gerekli olabilir ya da olmayabilir. Çünkü el-kodlu montajı seçerken minimum ya da en azından çıplak kemikleri olan bir çözümünüz var: “Olması güzel” pahalı bir lüks ve doğal olarak dışarıda kalıyor. –

11

İstediğiniz şey muhtemelen:

movzx edx, al 

Bu arkadaşları dl için kopyalar ve edx sıfır dolgu kalanı. Bu tek yönerge, bu iki yönerge eşdeğerdir:

xor edx, edx 
mov dl, al 
+3

Bunu tercih ederim. movzx sondaki tüm bitleri halleder. Biraz soyutlama için yayın! (Benim coşku benim montaj deneyimim eksikliğine ihanet etmeli). – MPelletier