Архитектура ЭВМ 4 лабораторная. Вопрос Сколько операндов могут иметь команды арифметических операций для процессора К1810ВМ86 (I8086)
Скачать 25.68 Kb.
|
4.1. Вопрос: Сколько операндов могут иметь команды арифметических операций для процессора К1810ВМ86 (I8086)? Ответ: Команды ADD, ADC, SUB, SBB и CMP содержат два операнда приемник (регистр общего назначения, сегментный регистр или переменная), источник (непосредственный операнд, регистр общего назначения, сегментный регистр или переменная), причем разрядность операндов должна совпадать Команды IMUL, MUL, IDIV и DIV - имеют один операнд - источник (регистр общего назначения или переменная). Считается, что приемником будут регистры: AH:AL, DX:AX(до выполнения команд в них должен быть размещен второй операд- делимое или умножаемое)- используемый вариант зависит от разрядности источника (8 или 16). Команды INC, DEC, NEG - имеет один операнд - приемник (регистр общего назначения или переменная), т.к. считается это должны быть данные фиксированного размера(байт или слово). 4.2. Чем отличаются команды ADD и ADC? Команда ADD производит простое суммирование операндов. Команда ADC производит суммирование операндов и значения флага CF, что позволяет производить суммирование больших чисел, которые не помещающихся в указанные размеры операндов. 4.3. Где сохраняется перенос, возникающий при выполнении операции сложения? Устанавливается флаг CF. 4.4. Какие типы операндов могут использоваться в качестве dst и в качестве src в операциях сложения и вычитания? dst: регистровые, адресные src: регистровые, адресные, непосредственные 4.5. Какую операцию выполняет команда SBB? Вычитание с учётом переноса. 4.6. Какие операнды могут иметь команды INC и DEC? Операнды в виде значений регистра. 4.7. Можно ли использовать в команде сложения или вычитания операнды разной длины? Есть инструкции, в которых можно. К примеру: movzx eax, al 4.8. Какую операцию выполняет команда CMP? Команда CMP вычитает второй операнд из первого, но, в отличие от команды SUB, не сохраняет результат — изменяются только флаги. 4.9. Каким двум командам эквивалентна команда NEG? NOT и SUB. 4.10. Где могут располагаться операнды для выполнения умножения? Регистры, память, в инструкции (к примеру imul). 4.11. Чем определяется длина произведения при умножении? Длина (количество изменяемых разрядов результата) в два раза больше размера операндов. 4.12. Чем определяются знаки частного и остатка при выполнении деления? Знак частного при делении в прямом коде определяется как сумма по модулю 2 знаковых цифр делимого и делителя и присваивается частному в конце операции деления. 4.13. Как умножить и разделить на константу? CONST EQU 123 MOV A,#0 ; Сброс аккумулятора L: ADD A,@R0 ; Загрузка множимого MOV B,#CONST ; Загрузка множителя MUL AB ; Умножение MOV @R0,A ; Запись младшего байта частичного произведения INC R0 ; Приращение адреса MOV A,B ; Пересылка старшего байта частичного произведения в аккумулятор XCH A,@R0 ; Предварительное формирование очередного байта произведения DJNZ R1,L ; Цикл, если не все байты исходного числа умножены на константу ----- ;процедура деления числа из DX:AX на SI ;результат деления в DX:AX, остаток в CX div_si: push bx push bp push di xor bx,bx xor cx,cx xor di,di mov bp,33 M5A4: rcl cx,1 rcl bx,1 sub cx,si sbb bx,di jnb M5B2 add cx,si adc bx,di M5B2: cmc rcl ax,1 rcl dx,1 dec bp jnz M5A4 pop di pop bp pop bx |