
- •Для бакалавров, обучающихся по направлению 230400
- •2. Регистры
- •2.1. Регистр флагов
- •2.2. Регистры общего назначения
- •2.3. Индексные регистры
- •2.4. Регистры - указатели
- •2.5. Указатель инструкций
- •2.6. Сегментные регистры
- •3. Вывод символов на экран
- •Int 21h ; завершить программу
- •4. Метки
- •5. Операнды
- •5.1. Регистровые операнды
- •5.2. Постоянные операнды
- •6. Работа со стеком
- •7. Арифметические операции
- •8. Пример прикладной программы
- •9. Задания
- •10. Контрольные вопросы
3. Вывод символов на экран
Функция DOS с номером 2 обеспечивает наиболее непосредственный путь вывода символа на экран. Для этого нужно просто поместить 2 в регистр AH и выводимый символ в регистр DL, а затем вызвать DOS с помощью INT 21h. Следующий код отображает каждый введенный символ на экране:
mov ah,1
int 21h получить следующую нажатую клавишу
mov ah,2
mov dl,al ; переместить считанный символ из AL в DL
int 21h ; вывести его на экран
Имеется также ряд других функций для считывания и вывода символов и строк символов. Можно привести пример простой программы, которая выполняет эхо-отображения строки набранных на клавиатуре символов на экране.
Для завершения программы имеется несколько функций DOS, но наиболее предпочтительным методом является выполнение функции DOS с номером 4Ch (или 76 для тех, кто предпочитает десятичный вид). Зная это, можно теперь написать полную программу отображения символов:
.MODEL SMALL
.STACK 100h
.DATA
.CODE
EhcoLoop:
mov ah,1 ; функция DOS ввода с клавиатуры
int 21h ; получить следующую клавишу
cmp al,13 ; это клавиша ENTER?
jz EchoDone ; да, выполняем эхоотображение
mov dl,al ; поместить символ в DL
mov ah,2 ; функция DOS вывода на экран
int 21h ; вывести на экран символ
jnz EchoLoop ; отобразить следующий символ
EchoDone:
mov ah,4ch ; функция DOS завершения программы
Int 21h ; завершить программу
END
4. Метки
Метки - имена, использующиеся в программе для ссылки на числа и строки символов или ячейки памяти. Метки позволяют вам присваивать имена переменным в памяти, значениям и адресам, где находятся конкретные инструкции. Например, в следующей программе, которая вычисляет факториал 5, используется несколько меток:
.MODEL SMALL
.STACK 200h
.DATA
FactorialValue DW ?
Factorial DW ?
.CODE
FiveFactorial PROC
mov ax,@Data
mov ds,ax
mov [FactorialValue],1
mov [Factorial],2
mov cx,4
FiveFactorialLoop:
mov ax,[FactorialValue]
mul [Factorial]
mov [FactorialValue],ax
inc [Factorial]
loop FiveFactorialLoop
ret
FiveFactorial ENDP
END
Метки FactorialValue и Factorial эквивалентны адресам двух 16-битовых переменных. Они используются для последующей ссылки в программе на эти две переменные. Метка FiveFactorial - это имя подпрограммы (процедуры или функции), содержащей код. Она позволяет вызывать этот код в других частях программы. Наконец, метка FiveFactorialLoop эквивалентна адресу инструкции:
mov ax,[FactorialValue],
благодаря которой оператор LOOP в конце программы может осуществлять обратный переход на эту инструкцию.