Средства и методы программированияРефераты >> Программирование и компьютеры >> Средства и методы программирования
052 int 21h ;пoлучaeм cтpoку
053 ;---пpoвepкa длины cтpoки
054 mov ah,[bx+1] ;тeпepь длинa в AH
055 mov dl,ah
056 jz vvod ;если длина=0, то ошибка ввода
057 mov si,2 ;указатель на первый символ
058 nextch: mov dh,[bx+si] ;символ
059 mov al,Czerro ;код "0"
060 chtodg: cmp al,dh ;если введенный символ цифра,
061 je chdg ;то переход
062 inc al ;иначе берем код "1","2" и т.д.
063 mov Cafte9,58
064 cmp al,Cafte9 ;пока не достигним
065 jne chtodg ;кода "9"
066 jmp vvod ;если введенный символ не цифра,
067 ;ошибка ввода
068 chdg: cmp dl,2 ;первый символ?
069 jne edin ;нет переход на единицы
070 mov al,10 ;множитель для десятков
071 sub dh,48 ;преабразуем символ в число
072 mul dh ;десятки
073 mov DAT,al ;в bl десятки
074 dec dl ;уменьшаем счетчик символов
075 inc si ;смещаем указатель на сл. символ
076 jmp nextch ;рассматриваем следующий символ
077 edin: sub dh,48 ;преабразуем символ в число
078 add DAT,dh ;складываем десятки и единицы
079 ;---уcтaнoвкa куpcopa
080 mov ah,2 ;нoмep функции
081 mov bh,0 ;нoмep cтpaницы
082 mov dh,11 ;cтpoкa
083 mov bl,50h ;
084 loop0:
085 mov al,DAT ;
086 loop1:
087 mov dl,bl ;
088 sub dl,al ;cтoлбeц
089 jz exit
090 int 10h ;пoзициoниpуeм куpcop
091 ;выводим символ
092 push ax
093 push bx
094 push dx
095 mov dl,char
096 mov ah,2h
097 int 21h
098 pop dx
099 pop bx
100 pop ax
101 dec al
102 jz strgo ;если выведены все символы,то переход
103 jmp loop1 ;иначе вывести следующий символ
104 strgo: dec bl ;изменить позицию
105 push ax
106 push bx
107 push dx
108 mov dl,chend ;последний символ-пробел
109 mov ah,2h
110 int 21h
111 ;---------задержка
112 mov al,255
113 cwait0: mov bl,255
114 cwait1: mov bh,255
115 cwait2: dec bh
116 jnz cwait2
117 dec bl
118 jnz cwait1
119 dec al
120 jnz cwait0
121 pop dx
122 pop bx
123 pop ax
124 jmp loop0 ;переход если не достигли края зкрана
125 exit: ;выход из программы
126 pop bx
127 pop dx
128 pop ax
129 mov ax, 4c00h
130 int 21h
131end start
Приложение 3. Перечень используемых команд.
MOV
(MOVe operand)
Пересылка операнда
Схема команды: |
mov приемник,источник |
Назначение: пересылка данных между регистрами или регистрами и памятью.
Алгоритм работы: копирование второго операнда в первый операнд.
Состояние флагов после выполнения команды: выполнение команды не влияет на флаги
Применение: Команда mov применяется для различного рода пересылок данных, при этом, несмотря на всю простоту этого действия, необходимо помнить о некоторых ограничениях и особенностях выполнения данной операции:
- направление пересылки в команде mov всегда справа налево, то есть из второго операнда в первый;
- значение второго операнда не изменяется;
- оба операнда не могут быть из памяти (при необходимости можно использовать цепочечную команду movs);
- лишь один из операндов может быть сегментным регистром;
- желательно использовать в качестве одного из операндов регистр al/ax/eax, так как в этом случае TASM генерирует более быструю форму команды mov.
mov al,5mov bl,almov bx,ds |
MOV
(MOVe operand to/from system registers)
Пересылка операнда в системные регистры (или из них)
Схема команды: |
mov приемник,источник |
Назначение: пересылка данных между регистрами или регистрами и памятью.
Алгоритм работы: копирование второго операнда в первый. Состояние флагов после выполнения команды: выполнение команды не влияет на флаги.
11 |
07 |
06 |
04 |
02 |
00 |
OF |
SF |
ZF |
AF |
PF |
CF |
r |
r |
r |
r |
r |
r |
Применение: Команда mov применяется для различного рода пересылок данных, при этом, несмотря на всю простоту этого действия, необходимо помнить о некоторых ограничениях и особенностях выполнения данной операции: направление пересылки в команде mov всегда справа налево, то есть из второго операнда в первый; значение второго операнда не изменяется; оба операнда не могут быть из памяти; лишь один из операндов может быть сегментным регистром; желательно использовать в качестве одного из операндов регистр al/ax/eax, так как в этом случае TASM генерирует более быструю форму команды mov.
Для выполнения ряда стандартных функций используются программы, входящие в состав MsDos. Для того, чтобы использовать такую программу необходимо ее номер записать в регистр ah, параметры в другие регистры и вызвать ее командой int 21h.
Команда mov также применяется для обмена данными между системными регистрами. Это одна из немногих возможностей доступа к содержимому этих регистров. Данную команду можно использовать только на нулевом уровне привилегий либо в реальном режиме работы микропроцессора.
.286;переключение микропроцессора в защищенныйрежим36: mov eax,cr0 bts eax,0 mov cr0,eax |
INT
(INTerrupt)
Вызов подпрограммы обслуживания прерывания
Схема команды: |
int номер_прерывания |
Назначение: вызов подпрограммы обслуживания прерывания с номером прерывания, заданным операндом команды.
Алгоритм работы:
- записать в стек регистр флагов eflags/flags и адрес возврата. При записи адреса возврата вначале записывается содержимое сегментного регистра cs, затем содержимое указателя команд eip/ip;
- сбросить в ноль флаги if и tf;
- передать управление на программу обработки прерывания с указанным номером. Механизм передачи управления зависит от режима работы микропроцессора (см. уроки 15 и 17).