2016-04-09 32 views
-3

biz 32 bitlik kod ile örn başlamak 4'ten az hatlarında bu egzersiz yaz). Ben 8 satırda yazmayı başardım, giriş olarak% ebx ve çıkış olarak% ekx. Öğretmen, bunu kayıt olmak için 4 satırdan daha azında yazmanın mümkün olduğunu belirtti. Nasıl kısaltılabileceğini merak ettim.montaj AT & T

mov %R1, %ebx 
mov %bx, %cx 
shl $16, %ecx 
mov %cl, %dl 
mov %bl, %cl 
mov %bh, %dh 
shr %16, %edx 
and %edx, %ecx 
+0

Evet, üç talimatlarla bunu yapmak mümkündür yapabilirsiniz. Ama sadist olmaktan kaçınıyorum. Arkadaşlarını aşağı çekmeni de istemiyorum, ya da erken eğitimden vazgeçmeni istiyorum. ** Montaj eğlencelidir '**. 'X86' montajının talimatlarını inceleyin ve muhtemelen daha iyi bir çözüm bulursunuz. Burada iyi bir [başlangıç ​​noktası] bulacaksınız (http://www.felixcloutier.com/x86). – zx485

+0

Belki bu soruyu yanlış anlıyorum, ancak AA DD CC BB'nin AA BB CC DD'nin büyük endian formu olduğunu göremiyorum. –

+0

@Michael Petch: Görmüyorsun, çünkü orada değil. Bu büyük endian küçük bir endian ** "ROR'ed" bir bayt tarafından ** dönüştürülür. – zx485

cevap

2

ben att sözdizimi emin değilim ama

bswap ebx ; AA BB CC DD -> DD CC BB AA  Swap byte order 
ror ebx, 8 ; DD CC BB AA -> AA DD CC BB  Roll right 8 bits 
+0

Eğlenceyi bundan aldın. Yine de sana bir oy vermeliyim. – zx485

+0

Öğretmenin öğrenme alıştırmasını öldürmenin harika yolu. –

+1

Yardım etmekten mutluluk duyuyorum :) Oh! Bu alaycı değildi. “Tabii ki, bunu gerçek hayatta asla yapmazsınız, çünkü kullanışlı bir 'bswap' talimatı olduğu için, herhangi bir egzersizi engellemekten mutluluk duyuyorum. test edilmiş bir kütüphane kullanmak yerine ... – Mitch