2013-11-20 3 views
-1

я создал переменные:ассемблер - Умножение

Y sword 8 
Z sword 20 
T sword 68 
B sword ? 

И я должен оценить следующее, B = 4T - (8 + Z) + Y

Я действительно не знаком с тем, как сделай это. Может кто-то, пожалуйста, помогите мне понять?

+6

Какой процессор вы пишете код? –

+0

Я не уверен, что вы имеете в виду. Я просто пытаюсь сделать это на 32-битном компьютере с помощью Visual Studio. –

+2

Тогда вы ориентируетесь на x86, скорее всего. –

ответ

1

Предполагая, что мечи подписаны 16-разрядные числа:

movsx eax,sword ptr T 
movsx ebx,sword ptr Y 
shl eax,2   ; faster than imul 
movsx edx,sword Z 
add eax,ebx 
add edx,8 
sub eax,edx 
mov sword ptr B,ax 

Затем оптимизировать немного:

movsx eax,sword ptr T 
movsx ebx,sword ptr Y 
movsx edx,sword Z 
lea eax,[ebx+eax*4] ; less code than shr 
add edx,8 
sub eax,edx 
mov sword ptr B,ax  
+0

Я действительно не понимаю, что вы сделали. Я новичок в языке Ассамблеи и только начинаю ее изучать. Мне дали задание выполнить эти расчеты: A = Z - Y + T B = 4T - (8 + Z) + Y C1 = 4 (T-8) + Z + Y D = mod (T , 8) E = Y^2 + Z –

+3

@SameerAnand: Переполнение стека не является хорошим местом для начала обучения. – Artur

+0

Я перевел выражение, которое вы указали в своем вопросе, в инструкции по сборке x86, которые скомпилированный (компилятор) сгенерировал при компиляции. Visual C++ может генерировать ассемблер для вас, но сначала вы должны сначала прочитать на ассемблере, если это ваш первый набег. –

-1

Простой способ для достижения этой цели в то время как еще изучения важных понятий сборки для написания программы на C/C++, и ваш компилятор выводит сборку. Оттуда изучите синтаксис и посмотрите, начинает ли он возникать смысл. Это на самом деле способ, которым я научился сборке x86 ...

Смежные вопросы