Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

IDIV Z  ; AL := AX div Z. Пример простейшей программы на ассемблере




IDIV Z                              ; AL: = AX div Z

    Команда INC увеличивает значение регистра или ячейки памяти на 1 (операция инкремента). Синтаксис команды:

INC < операнд>

Операндом может быть 16-битный или 8-битный регистр (не сегментный), а также 16-битная или 8-битная ячейка памяти. Использование непосредственного значения исключается. Команда INC устанавливает флаги OF, ZF, SF, PF и AF.

    Команда DEC уменьшает значение регистра или ячейки памяти на 1 (операция декремента). Синтаксис команды DEC такой же, как и у команды INC. Команда DEC воздействует на флаги OF, ZF, SF, PF и AF.

    Команда NEG изменяет знак операнда на противоположный. Фактически, команда вычисляет двоичное дополнение операнда –инвертирует все биты операнда и прибавляет единицу. Требования к операнду и синтаксис команды NEG – такие же, как для команды INC. Команда NEG воздействует на флаги AF, CF, OF, PF, SF и ZF.

    Команда CBW расширяет байт до слова с учетом знака. Команда не имеет операндов. Расширяемый байт находится в регистре AL, а слово команда CBW помещает в регистр AX. При этом для учета знака команда копирует старший бит регистра AL во все биты регистра AH.

Команда CWD расширяет слово до двойного слова с учетом знака. Команда не имеет операндов. Расширяемое слово находится в регистре AX, а двойное слово команда CWD помещает в регистровую пару DX: AX – в регистре DX находятся старшие 16 бит результата. При этом для учета знака команда копирует старший бит регистра AX во все биты регистра DX.

        

Пример простейшей программы на ассемблере

    Ниже приведен исходный текст полностью законченной программы на ассемблере, выполняющей некоторые арифметические операции.

CODE SEGMENT           ; (1) определение программного сегмента

    ASSUME DS: CODE; (2)

Start:                            ; (4) точка входа в программу

MOV AX, a                     ; (3) запись в AX значения переменной a

    MOV BX, b                      ; (4) запись в BX значения переменной b

    IMUL BX                ; (5) умножение AX на BX

ADD AX, c                      ; (6) добавление к переменной c значения

                               ; (7) из AX

MOV d, AX            ; (8) запись значения AX в переменную d

    MOV AX, 4C00h             ; (9) запись в AH номера функции DOS

    INT 21h                  ; (10) вызов функции DOS завершения

; (11) программы

a   DW 5                    ; (12) определение переменной a

b  DW -7                   ; (13) определение переменной b

c   DW 120                ; (14) определение переменной c

d  DW?                     ; (15) определение переменной d

CODE ENDS                   ; (16) конец программного сегмента

    END Start               ; (17) определение точки входа в программу

    Программа выполняет вычисление значения выражения a * b + c и записывает результат в переменную d. После этого происходит завершение программы и передача управления операционной системе.

    В строке 1 определяется программный сегмент с именем “CODE”, в котором находятся команды программы и данные (переменные a, b, c, d ).

    В строке 2 с помощью директивы ASSUME определяется, что при обращении к переменным программы будет использоваться сегментный регистр DS.

    В строке 3 в регистр AX записывается значение из переменной a, т. е. в регистр AX записывается число 5.

    В строке 4 в регистр BX записывается значение из переменной b, т. е. в регистр BX записывается число -7.

    В строке 5 значение регистра AX умножается на значение регистра BX и результат записывается в так называемую регистровую пару DX: AX, т. е. в регистр DX записывается старшая часть произведения двух 16-битных регистров (биты 16 – 31), а в регистр AX записывается младшая часть произведения (биты 0 – 15). При умножении операнды рассматриваются как числа со знаком.

    В строке 6 к младшей части произведения добавляется значение переменной c, т. е. значение регистра AX увеличивается на 120.

    В строке 8 значение регистра AX записывается в переменную d, т. е. в переменную d записывается значение выражения 5 * (-7) + 120.

    В строке 9 в регистр AH записывается номер функции DOS завершения программы 4Ch, а в регистр AL записывается код возврата 00h.

    В строке 10 вызывается функция DOS, номер которой был записан в регистре AH – это функция завершения программы и передачи управления операционной системе. После выполнения этой команды работа программы завершается.

    В строках 12 – 15 определяются переменные a, b, c, d и их начальные значения. Переменная d не инициализируется, так как в нее записывается результат.

    В строке 16 директивой ENDS закрывается программный сегмент с именем “CODE”.

    В строке 17 директивой END транслятору указывается точка входа в программу, на чем текст программы завершается.

    В правой части программы к каждой строке подписаны комментарии. Комментарий в языке ассемблера начинается с символа ‘; ’ и продолжается до конца текущей строки.

 

Для выполнения лабораторной работы необходимо:

· открыть любой текстовый редактор (например, встроенный в программу-оболочку Norton Commander) и набрать текст программы на ассемблере. При наборе текста программы можно использовать следующий шаблон:

CODE SEGMENT

    ASSUME CS: CODE

    ORG 100H

Start:

< команда1>

    < команда2>

   . . .

CODE ENDS

    END Start

После метки Start и до конца сегмента команд размещаются арифметические команды, необходимые для вычисления значения выражения.

· Значения четырех переменных (a, b, c и d), участвующих в выражении, необходимо занести в четыре регистра общего назначения, например, AX, BX, CX и DX с использованием команды MOV. Значения переменных могут быть любыми, но среди них должны быть как положительные, так и отрицательные числа.

· Оттранслировать программу с использованием транслятора Turbo Assembler. Для этого необходимо ввести в командной строке DOS следующую команду: TASM. EXE < имя_программы>, где имя_программы – имя файла программы с расширением. ASM, например «MyProg. asm».

· Если в процессе трансляции транслятором были выданы ошибки, необходимо исправить текст программы и провести повторную трансляцию. В случае успешной трансляции в текущей директории должен появиться объектный файл с именем программы и расширением. OBJ, например «MyProg. obj».

· Скомпоновать программу как COM, используя компоновщик Turbo Linker. Для этого необходимо ввести в командной строке DOS следующую команду:
TLINK. EXE /t < имя_объектного_файла>,
где имя_ объектного_файла – имя объектного файла программы с расширением. OBJ, например «MyProg. obj».

· Если в процессе компоновки компоновщиком были выданы ошибки, необходимо исправить текст программы и провести повторную трансляцию и компоновку. В случае успешной компоновки в текущей директории должен появиться исполнительный файл с именем программы и расширением. COM, например «MyProg. com».

· Загрузить программу в отладчик. Для этого необходимо ввести в командной строке DOS следующую команду:
TD. EXE < имя_исполнительного_файла>,
где имя_исполнительного_файла – имя исполнительного файла программы с расширением. COM, например «MyProg. com».

· Проверить работу программы в пошаговом режиме. Для выполнения программы в пошаговом режиме используется клавиша F7. При этом при каждом нажатии клавиши F7 выполняется очередная команда программы. Для возвращения программы в исходное состояние нужно нажать комбинацию клавиш Ctrl+F12.

· При контроле правильности работы программы после выполнения каждой команды требуется сверять результаты выполнения арифметических операций с тем, что должно получиться в результате выполнения конкретной арифметической операции.

Правильность работы программы необходимо проверить для нескольких значений переменных a, b, c и d. При этом каждый раз при изменении значений переменных в программе необходимо выполнять трансляцию и компоновку программы.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...