Меню сайта

Урок 63. Арифметический пример

Чтобы проиллюстрировать функции, которыемы рассмотрели в
— — -предыдущих разделах, давайте решим арифиетическую задачу на языке
— — — ассемблера. — Пример прост, но использует многие команды. — Задача
— — — заключается в вычислении частного двухарифметических выражений, в
— — — которых некоторые числа постоянны, адругие переменны. — Все числа
— — — являются 16=битовыми целыми числами сознаком.

— — — — — Формула вычислений:
— — — — — — — — — — — — — — — — — — — — — — A * 2 + B * C
— — — — — — — — — — — — — — — — — X = ——————
— — — — — — — — — — — — — — — — — — — — — — — — D — 3

— — — — — Эта задача решается подпрограммой на языкеассемблера,
— — — изображенной на Фиг. 4.16. Подпрограммасначала выполняет два
— — — умножения. Так как микропроцессор 8088всегда помещает результат
— — — 16=битового умножения в пару регистровDX:AX, в примере результат
— — — первого умножения переносится в парурегистров BX:CX перед
— — — выполнением второго умножения. Когда обаумножения завершены,
— — — программа выполняет сложение числителя.Поскольку умножение дает
— — — 32=битовые результаты, в программетребуется сложение повышенной
— — — точности. Это сложение оставляет результатв DX:AX. В примере
— — — знаменатель вычисляется в регистре CX, азатем на него делится
— — — числитель. Программа записывает частное изрегистра AX в переменную
— — — результата X. Остаток в этой задачеигнорируется.

— — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — -1/1/80 04:01:10
— — — — — — — — -Фиг. 4.16 Пример арифметических вычислений — — — — — — — — — — — -Page — 1-1


— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — PAGE — — -,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — TITLE — -Фиг. 4.16 Пример арифметических вычислений

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —————————————————————
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — Производятся вычисления по формуле
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — A * 2 — -+ — — B * C
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — X — = — — — — — ——————-
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — D — — 3

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — Все переменные — 16-разрядные целыечисла со знаком
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —————————————————————

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — Фиг. 4.16Арифметический пример (начало)
— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — CODE — — -SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ASSUME -CS:CODE,DS:CODE

— — — — — — — — — -0000 — ???? — — — — — — — — — — — X — — — — — — — — -DW — — — — -? — — — — — — — — — — — — — — Память для переменных
— — — — — — — — — -0002 — ???? — — — — — — — — — — — A — — — — — — — — -DW — — — — — ?
— — — — — — — — — -0004 — ???? — — — — — — — — — — — B — — — — — — — — -DW — — — — — ?
— — — — — — — — — -0006 — ???? — — — — — — — — — — — C — — — — — — — — -DW — — — — — ?
— — — — — — — — — -0008 — ???? — — —
— — — — — — — — D — — — — — — — — -DW — — — — — ?

— — — — — — — — — -000A — — — — — — — — — — — — — — — — — FIG4_16 PROC — — — NEAR

— — — — — — — — — -000A — B8 0002 — — — — — — — — — — — — — — — — — — — — MOV — — — — AX, 2 — — — — — — — — — Загрузка константы
— — — — — — — — — -000D — F7 2E 0002 R — — — — — — — — — — — — — — -IMUL — — — A — — — — — — — — — — — — — — DX:AX = A * 2
— — — — — — — — — -0011 — 8B DA — — — — — — — — — — — — — — — — MOV — — — — BX, DX
— — — — — — — — — -0013 — 8B C8 — — — — — — — — — — — — — — — — MOV — — — — CX, AX — — — — — — — — BX:CX = A * 2
— — — — — — — — — -0015 — A1 0004 R — — — — — — — — — — — — — — — — — -MOV — — — — AX, B
— — — — — — — — — -0018 — F7 2E 0006 R — — — — — — — — — — — — — — -IMUL — — — C — — — — — — — — — — — — — — DX:AX = B * C
— — — — — — — — — -001C — 03 C1 — — — — — — — — — — — — — — — — ADD — — — — AX, CX
— — — — — — — — — -001E — 13 D3 — — — — — — — — — — — — — — — — ADC — — — — DX, BX — — — — — — — — DX:AX = A * 2 — + — B * C
— — — — — — — — — -0020 — 8B 0E 0008 R — — — — — — — — — — — — — — -MOV — — — — CX, D
— — — — — — — — — -0024 — 83 E9 03 — — — — — — — — — — — — — — — — — — — SUB — — — — CX, 3 — — — — — — — — — CX = D — 3
— — — — — — — — — -0027 — F7 F9 — — — — — — — — — — — — — — — — IDIV — — — CX — — — — — —AX = (A*2 + B*C) / (D-3)
— — — — — — — — — -0029 — A3 0000 R — — — — — — — — — — — — — — — — — — MOV — — — — X, AX — — — — — — — — — Сохранение результата
— — — — — — — — — -002C — C3 — — — — — — — — — — — — — — — — — — — — — — — — — RET

— — — — — — — — — -002D — — — — — — — — — — — — — — — — — FIG4_16 ENDP
— — — — — — — — — -002D — — — — — — — — — — — — — — — — — CODE — — -ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — END

— — — — — — — — — — — Фиг. 4.16 Арифметический пример(продолжение)

Категория: Программирование на Ассемблере | Дата: 07.02.13

Меню раздела
Блок