Разделы:
Best links:
Программирование на языке ассемблера
ds: data ; data – имя сегмента данных
6 port1 EQU 110h ; port1 – константа 110h
7 Go: mov ax,data
8 mov ds,ax
9 mov sum,0
10 Comp: cmp sum,100
11 jl Next
12 mov al,sum
13 out port1,al
14 hlt
15 Next: in al,port1
16 add sum,al
17 jmp Comp
18 code ENDS ; конецпрограммного сегмента
19 END Go ; конец ассемблирования
Программа состоит из двух сегментов: сегмента данных (строки 1-3) и программного сегмента (строки 4-18). Для определения начала каждого из этих сегментов служит директива SEGMENT, перед которой указано имя сегмента. В строке 1 определяется начало сегмента данных с именем data, а в строке 4 - начало программного сегмента с именем code. Конец каждого сегмента указывается с помощью директивы ENDS (строки 3 и 18), перед которой записывается имя соответствующего сегмента. Сегмент данных состоит из одной строки (строка 2), содержащей директиву DB - определение байта памяти. По этой директиве программа ассемблера резервирует под переменную с именем sum - 1 байт памяти. Директива ASSUME (строка 5) определяет соответствие сегментов и их имен. В строке 6 записана директива EDU, которая порту ввода-вывода port1 ставит в соответствие его номер. В дальнейшем, когда в тексте программы встретится имя port1, программа-ассемблер заменит его на номер 110h.
|
|
Рис. 6.1. Блок-схема программы
Строка 7 - это первая строка программы, которая содержит мнемокод команды, т. е. первая команда результирующей программы будет получена при ассемблировании данной строки. Одно из требований к программам, написанным на языке АSМ-86, состоит в том, что первая строка программы, содержащая мнемокод команды, должна иметь метку. В данной программе имя метки Gо. Строки 7 и 8 служат для занесения начального адреса сегмента данных в регистр сегмента данных DS. Поскольку система команд ЦП не содержит команды загрузки константы в сегментный регистр, для этой цели используются две команды. В строке 9 переменной sum присваивается нулевое начальное значение и далее, в строке 10 производится сравнение значения sum со значением 100. В зависимости от результатов сравнения в строке 11 осуществляется переход по условию «меньше» на метку Next. В строках 12 - 14 полученное значение sum выводится в порт ввода-вывода, а в строках 15 - 17 осуществляется суммирование очередного введенного числа и переход на метку Comp в соответствии со схемой программы (рис. 6.1). Строка 18 завершает программный сегмент, а строка 19 содержит директиву END, которая указывает программе-ассемблеру на окончание ассемблирования и снабжается меткой, соответствующей началу программы.
предыдущаяследующая© Copyright, 2009.
Для связи: info@dgs-srl.com.