Newline. L1: jl L2; Вниз по второй ветви вычисления X

Finish

L1: jl L2; Вниз по второй ветви вычисления X

movax,4

jmp L; На вывод результата

L2: movbx,7; Третья ветвь вычисления X

cwd; (dx,ax):= длинное (A+1) – иначе нельзя!

idiv bx; dx:=(A+1) mod 7, ax:=(A+1) div 7

mov ax,dx

jmp L; На вывод результата

Error:mov dx,offset Diagn

Outstr

Newline

Finish

code ends

end start

 

В нашей программе мы сначала закодировали вычисление по первой ветви нашего алгоритма, затем по второй и, наконец, по третьей. Программист, однако, может выбрать и другую последовательность кодирования ветвей, это не влияет на суть дела. В нашей программе предусмотрена выдача аварийной диагностики, если результаты операций сложения (A+1), вычитания (A-1) или произведения (A+1)*(A-1) слишком велики и не помещается в одно слово.

Для увеличения и уменьшения операнда на единицу мы использовали команды

incop1 и dec op1

Здесь op1 может иметь формат r8, r16, m8 и m16. Например, команда inc ax эквивалентна команде add ax,1 , но не меняет флага CF. Таким образом, после этих команд нельзя проверить флаг переполнения, чтобы определить, правильно ли выполнились такие операции над беззнаковыми числами.

Обратите также внимание, что мы использовали команду длинного деления, попытка использовать здесь короткое деление, например

L2: movbh,7; Третья ветвь вычисления X

idiv bh; ah:=(A+1) mod 7, al:=(A+1) div 7

может привести к ошибке. Здесь остаток от деления (A+1) на число 7 всегда поместится в регистр ah, однако частное (A+1) div7 может не поместиться в регистр al (пусть A=27999, тогда (A+1) div 7 = 4000 – не поместится в регистр al).

При использовании команд условного перехода мы предполагали, что расстояние от точки перехода да нужной метки небольшое (формата i8), если это не так, то программа Ассемблера выдаст нам соответствующую диагностику об ошибке и нам придётся использовать "плохой стиль программирования", как объяснялось выше. В нашей программе это может случиться только тогда, когда суммарный размер кода, подставляемого вместо макрокоманд outint и finish, будет больше 128 байт (обязательно понять это!).








Дата добавления: 2015-10-05; просмотров: 622;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.