ЛАБОРАТОРНАЯ РАБОТА N4 ИССЛЕДОВАНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ 1. ЦЕЛЬ РАБОТЫ Получение практических навыков использования операций сложения, вычитания и умножения; освоение использования окон Module и Inspect программы TURBO DEBUGGER. 2. ПОДГОТОВКА К РАБОТЕ 2.1. Изучить методические указания. 2.2. Подготовить ответы на контрольные вопросы. 2.3. Проанализировать приведенную ниже программу PROG4, написать комментарии ко всем командам сегмента кода, указав при этом тип используемых операндов и способ адресации. 2.4. Используя в качестве операндов переменные, определенные в сегменте данных, в соответствии с вариантом задания ( Таб 4.1.) написать команды для выполнения указанных в таблице операций, вставить их в соответствующий фрагмент программы PROG4. Таблица 4.1. № вар. 7 операция вычитание 1-ый операнд регистр 2-ой операнд константа слово 3. ПРОГРАММНЫЙ КОД TITLE PROG4 АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ ; ------------------------------------------------------------------------------DATASG SEGMENT PARA X1 DW 4000H X2 DW 2000H DATASG ENDS STACKSG SEGMENT DB 12 DUP(?) STACKSG ENDS 'Stack' CODESG SEGMENT PARA 'Code' BEGIN PROC FAR ASSUME SS:STACKSG,CS:CODESG,DS:DATASG PUSH DS ; корректное SUB AX,AX ; завершение PUSH AX ; программы. MOV AX,DATASG ; инициализация MOV DS,AX ; сегментного регистра DS. MOV AX,X1 ;Присваивание константы Х1, регистру АХ SUB AX,X2 ;Вычитание константы Х2 из регистра АХ. RET BEGIN ENDP ;КОНЕЦ ПРОЦЕДУРЫ CODESG ENDS ;КОНЕЦ СЕГМЕНТА END BEGIN ;КОНЕЦ ПРОГРАММЫ 4. КОНТРОЛЬНЫЕ ВОПРОСЫ 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 используется для сложения двух целочисленных операндов. Результат сложения помещается по адресу первого операнда. Если результат сложения выходит за границы операнда приемник (возникает переполнение), то учесть эту ситуацию следует путем анализа флага cf и последующего возможного применения команды adc. Команда adc осуществляет сложение первого и второго операндов, прибаатяя к результату значение флага переноса CF. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве первого операнда команды adc можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. 4.3. Где сохраняется перенос, возникающий при выполнении операции сложения? Результат сложения помещается по адресу первого операнда. 4.4. Какие типы операндов могут использоваться в качестве dst и в качестве src в операциях сложения и вычитания? В качестве первого операнда команды adc можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. 4.5. Какую операцию выполняет команда SBB? Команда sbb используется для выполнения вычитания старших частей значений многобайтных операндов с учетом возможного предыдущего заема при вычитании младших частей значений этих операндов. 4.6. Какие операнды могут иметь команды INC и DEC? Операнды могут быть байтами или словами. Оба операнда могут быть знаковыми или беззнаковыми числами. 4.7. Можно ли использовать в команде сложения или вычитания операнды разной длины? Команды SBB и ADC учитывают значение разряда переноса от предыдущей операции, это может быть использовано для организации суммирования и вычитания чисел произвольной разрядности. 4.8. Какую операцию выполняет команда CMP? Команда CMP выполняет сравнение чисел. 4.9. Каким двум командам эквивалентна команда NEG? Команда NEG равносильна последовательному выполнению команды NOT , затем INC 4.10. Где могут располагаться операнды для выполнения умножения? r- регистр общего назначения 8 или 16 – разрядность регистра m- переменная в памяти Множимое AL AX Множитель r/m8 r/m16 Произведение AX DX:AX 4.11. Чем определяется длина произведения при умножении? Длина произведения при умножении определяется множителем. Если он восьмиразрядный, то произведение будет находиться в регистре AX, шестнадцатиразрядный поместит произведение в DX:AX. 4.12. Чем определяются знаки частного и остатка при выполнении деления? Остаток всегда имеет знак делимого. Знак частного зависит от состояния знаковых битов (старших разрядов) делимого и делителя. 4.13. Как умножить и разделить на константу? Пример: mov ax,0A000h ; ax= A000 Mov cx,20h ; cx=9c - константа ;Умножение: MUL cx ; умножили на константу ; AX=A000*20=0 ; DX=14 ; Деление: DIV cx ; ax= A000