Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Теоретические вопросы про Ассемблер


Автор: BCworm 1.2.2008, 09:23
Знающие и отзывчиве люди помогие пожалуйста с ответми на вопросы. Никак не могу найти оответ на них ни в гугле ни в книгах. Может кто знает? 

1.    Сколько операндов могут иметь команды арифметических операций для процессора    `````К1810ВМ86 (I8086)?
2.    Где сохраняется перенос, возникающий при выполнении операции сло-жения?
3.    Какие типы операндов могут использоваться в качестве dst и в качестве src в операциях сложения и вычитания?
4.    Можно ли использовать в команде сложения или вычитания операнды раз-ной длины?
5.    Где могут располагаться операнды для выполнения умножения?
6.    Чем определяется длина произведения при умножении?
7.    Чем определяются знаки частного и остатка при выполнении деления?
8.    Какой может быть длина перехода в разных типах команды JMP?
9.    Какова максимальная длина условного перехода?
10.    Каким образом может быть указан адрес перехода?
11.    Какие флаги могут быть использованы в командах условного перехода после выполнениякоманды сложения?
12.    Какова максимальная длина переходов при организации циклов?
13.    Какие признаки , кроме СХ=0, могут быть использованы при организации циклов?
14.    Как осуществляется переход к процедурам разных типов?



Автор: MAKCim 1.2.2008, 10:14
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Сколько операндов могут иметь команды арифметических операций для процессора    `````К1810ВМ86 (I8086)?

именно 8086?
тогда 2
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Где сохраняется перенос, возникающий при выполнении операции сло-жения?

устанавливается флаг CF
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Какие типы операндов могут использоваться в качестве dst и в качестве src в операциях сложения и вычитания?

dst: регистровые, адресные
src: регистровые, адресные, непосредственные
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Можно ли использовать в команде сложения или вычитания операнды раз-ной длины?

есть инструкции, в которых можно
к примеру
Код

movzx    eax, al

Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Где могут располагаться операнды для выполнения умножения?

регистры, память, в инструкции (к примеру imul)
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Чем определяется длина произведения при умножении?

длина (количество изменяемых разрядов результата) в два раза больше размера операндов

остальное позже

Автор: BCworm 1.2.2008, 10:20
Ну наконецто сдвинулось .Спасибо большое! буду ждать.

Автор: MAKCim 1.2.2008, 10:52
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Чем определяются знаки частного и остатка при выполнении деления?

знак остатка совпадает со знаком делимого
знак определяется старшим бытом результата
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Какой может быть длина перехода в разных типах команды JMP?

от -128 до 127 короткий переход
от -32768 до 32767 ближний переход (16-ти битный режим)
от -2147483648 до 2147483647 ближний переход (32-ух битный и 64-х битные режимы)
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Какова максимальная длина условного перехода?

0x7FFF = 32767 (16-ти битный режим)
0x7FFFFFFF = 2147483647 (32-ух битные и 64-х битные режимы)
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Каким образом может быть указан адрес перехода?

через регистр (в рамках текущего сегмента), через память (как длинные, так и ближние переходы), в виде непосредственного операнда: относительно [RE]IP и абсолютно (сегмент (селектор) + смещение)
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Какие флаги могут быть использованы в командах условного перехода после выполнениякоманды сложения?

CF, ZF, SF, OF, PF
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Какова максимальная длина переходов при организации циклов?

аналогично максимальной длине условного перехода
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Какие признаки , кроме СХ=0, могут быть использованы при организации циклов?

флаги
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
Как осуществляется переход к процедурам разных типов?

с изменением сегмента или без изменения

Автор: BCworm 1.2.2008, 18:32
MAKCim выражаю Вам свой большой респект и благодарность. В общем большое человеческое спасибо!

PS. Можно еще один вопрос?;)

Как уножить и разделить на константу


SUB AX, 123h
MUL AX, 123h

или не так?

Автор: Mikl_ 4.2.2008, 13:02
Цитата

Как умножить и разделить на константу?

Если константа является степенью 2 (4, 16, 1024) тогда умножение/деление заменяется на сдвиги
т.е  AX * 128 = SHL AX,7              AX / 64=SHR AX,6      для 32-разрядных процессоров есть специальные команды    
imul reg,imm   imul reg,reg,imm     imul reg,mem,imm  
где reg - какой-нибудь регистр, mem - содержимое ячейки памяти и imm - непосредственное число
кроме того команда lea может использоваться для умножения на константу
Для умножения на 2    -- lea eax,[eax+eax] или lea eax,[eax*2]
Для умножения на 3   -- lea eax,[eax+eax*2]
Для умножения на 4  -- lea eax,[eax*4]
Для умножения на 5 -- lea eax,[eax+eax*4]
Для умножения на 6 -- lea ecx,[eax*2] затем  lea eax,[ecx+ecx*2]
Для умножения на 7 -- lea ecx,[eax+eax*2] затем   lea eax,[ecx+eax*4]
Для умножения на 8 -- lea eax,[eax*8]
Для умножения на 9 -- lea eax,[eax+eax*8] и так далее
Для деления на константу специальных команд нет smile 

Автор: asd 4.2.2008, 13:25
Что-то вопросы очень похожи на какой-то тестsmile

А теперь немного поиграем в телепатиюsmile
Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
 Какова максимальная длина переходов при организации циклов?

Я так думаю, имелась ввиду команда loop - тогда -128 - +127

Цитата(BCworm @  1.2.2008,  09:23 Найти цитируемый пост)
  Как осуществляется переход к процедурам разных типов?

Опять же есть подозрение, что вопрос про stdcall, fastcall и т.п.




Автор: BCworm 4.2.2008, 19:04
Ребята а можно конкретный пример в виде фрагмента кода

Взяли чтото уножиди на константу
Взяли еще чтото и поделили на константу.

Автор: Mikl_ 5.2.2008, 07:09
BCworm
Цитата

Взяли чтото уножиди на константу
Взяли еще чтото и поделили на константу.

Для начала, не скупись - купи учебник!
Код

.data
mem dw ?; место под переменную в памяти
result dd ?; место для результата
.code
; умножение числа в памяти на константу 6789
mov mem,12345
mov ax,6789
mul mem
mov word ptr result,ax
mov word ptr result+2,dx
; деление числа в памяти на константу 12345
mov dx,word ptr result+2
mov ax,word ptr result
div mem
; в результате деления в ax - частное, в dx - остаток

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)