Last active
June 26, 2016 13:08
-
-
Save MisterTimur/7c64ae327d8d9dcf02f5 to your computer and use it in GitHub Desktop.
timos16
This file has been truncated, but you can view the full file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;{ Тимур Рифович 2015 год Email hostingurifa@gmail.com . | |
;INFO Кодировка файла должна быть CP 866 | |
;GITS https://gist.github.com/MisterTimur/7c64ae327d8d9dcf02f5 | |
;Site http://sites.google.com/site/abdulovtimuros/ | |
;Youtube http://www.youtube.com/channel/UCUhQNuTAQ933YBTy6awC0Pw | |
;Google+ http://plus.google.com/u/0/+%D0%A2%D0%B8%D0%BC%D1%83%D1%80%D0%90%D0%B1%D0%B4%D1%83%D0%BB%D0%BE%D0%B2/posts | |
; | |
; Для Компиляции | |
; | |
; fasm.exe TimOs16.Pas Tim-Lib.com -d PLA=1 для доса Com файл | |
; fasm.exe TimOs16.Pas TimOs16.bin -d PLA=2 диск 1.44 загрузочный 16 битная версия | |
; fasm.exe TimOs16.Pas TimOs32.bin -d PLA=3 диск 1.44 загрузочный 32 битная версия | |
; fasm.exe TimOs16.Pas TimOs16CD.bin -d PLA=2 -d DIS=1 диск CD загрузочный 16 битная версия | |
; fasm.exe TimOs16.Pas TimOs32CD.bin -d PLA=3 -d DIS=1 диск CD загрузочный 32 битная версия | |
; pause | |
; | |
;------------------------------------------------------------------------------} | |
;{ НАСТРОЙКИ ЗАПУСКА ВЫБОР ПЛАТФОРМЫ И ОБРАЗА . | |
ДОС = 1 ;// Работа из под DOS обычный COM файл | |
T16 = 2 ;// Работа 16 битная версия для 3/5 дюма дискеты | |
T32 = 3 ;// 32 битная версия для для 3/5 дюма дискеты | |
;// Тут будут разные режимы и разные форматы файла | |
;// Пока только для Дискетки сделаю так отлаживать проще | |
;// PLA Выбор режима компиляции из коммандной строки | |
;// например компиляции для 16 бит образ | |
;// fasm.exe TimOs16.Pas TimOs32.bin -d PLA=2 | |
T33 = 4 ;// 32 битная версия для для 3/5 дюма дискеты | |
IF ( defined PLA ) ;{ | |
ПЛАТФОРМА = PLA ; // Выбор режима компиляции режимы описаны ниже | |
END IF;} | |
IF ( ~ defined PLA );{ | |
ПЛАТФОРМА = 1 | |
END IF;} | |
IF ( defined DIS ) ;{ | |
NOS = 1 ; // Выбор режима компиляции режимы описаны ниже | |
END IF;} | |
IF ( ~ defined DIS );{ | |
NOS = 0 | |
END IF;} | |
IF ( NOS = 1 );{ | |
display ' Образ CD '; | |
END IF;} | |
IF ( ПЛАТФОРМА = ДОС );{ | |
display ' Компиляция для DOS COM Файл'; | |
END IF;} | |
IF ( ПЛАТФОРМА = T16 );{ | |
display ' Компиляция 16 БИТ '; | |
END IF;} | |
IF ( ПЛАТФОРМА = T32 );{ | |
display ' Компиляция 32 БИТ '; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
;{ ПОДГОТОВКА К ЗАПУСКУ ТУТ РАСПОЛОЖЕНЫ ЗАГРУЗЧИКИ . | |
;{ Загрузка из под доса 16 бит | |
;---------------------; | |
IF (ПЛАТФОРМА = ДОС) ; // Если запуск из под доса то просто указываем | |
ORG 100h ; // адрес для запуска обычного COM файла 100h | |
USE16 ; // Указываем что используем 16 битные инструкции | |
MOV SP,0FFFFh ; | |
END IF ; | |
;---------------------; | |
;------------------------------------------------------------------------------} | |
;{ Загрузочный Cектор для 3/5 Дюймовой дискеты 16 бит. | |
IF (ПЛАТФОРМА = T16) | |
ЗАГРУЗОЧНЫЙ_СЕКТОР: | |
;-------------------; Настройка сегментных регистров | |
cli ; запрещаем прерывания | |
xor ax,ax ; обнуляем регистр ах | |
mov ds,ax ; настраиваем сегмент ds данных на нулевой адрес | |
mov es,ax ; настраиваем сегмент es на нулевой адрес | |
mov ss,ax ; настраиваем сегмент ss стека на нулевой адрес | |
mov sp,0FFFFh ; сегмент sp указывает на текущую вершину стека | |
sti ; разрешаем прерывания | |
;-------------------; | |
IF ( NOS = 0 ) ;{ | |
;-------------------; DL Номер Диска прередается при запуске загрузочного сектора из биос | |
mov dh, 0 ; головка 1 | |
mov ch, 0 ; дорожка | |
mov cl, 2 ; 2-й сектор | |
mov ax, 0000h ; Адрес сегмента куда загружаем | |
mov es, ax ; Адрес куда загружаем | |
mov bx, 1000h ; Адрес куда загружаем | |
mov al, 17 ; кол-во читаемых секторов Не забываем указывать | |
mov ah, 2h ; Номер Функции в биос для чтения с диска | |
int 13h ; Загружаем первыую часть программы 17 секторов так как первый сектор это загрузочный а всего в 1 дорожке 18 секторов | |
;-------------------; | |
;-------------------; DL Номер Диска прередается при запуске загрузочного сектора из биос | |
mov dh, 1 ; головка 2 | |
mov ch, 0 ; дорожка | |
mov cl, 1 ; 1-й сектор | |
mov ax, 0000h ; Адрес сегмента куда загружаем | |
mov es, ax ; Адрес куда загружаем | |
mov bx, 1000h+8704 ; Адрес куда загружаем первые 17 секторов уже загружены по этому +8704 | |
mov al, 18 ; кол-во читаемых секторов Не забываем указывать | |
mov ah, 2h ; Номер Функции в биос для чтения с диска | |
int 13h ; Прерывание для работы с диском | |
;-------------------; | |
END IF ;} | |
IF ( NOS = 1 ) ;{ | |
;-------------------; DL Номер Диска прередается при запуске загрузочного сектора из биос | |
mov dh, 0 ; головка 1 | |
mov ch, 0 ; дорожка | |
mov cl, 2 ; 2-й сектор | |
mov ax, 0000h ; Адрес сегмента куда загружаем | |
mov es, ax ; Адрес куда загружаем | |
mov bx, 1000h ; Адрес куда загружаем | |
mov al, 35 ; кол-во читаемых секторов Не забываем указывать | |
mov ah, 2h ; Номер Функции в биос для чтения с диска | |
int 13h ; Загружаем первыую часть программы 17 секторов так как первый сектор это загрузочный а всего в 1 дорожке 18 секторов | |
;-------------------; | |
END IF ;} | |
;-------------------; Настройка сегментных регистров | |
cli ; запрещаем прерывания | |
xor ax,ax ; обнуляем регистр ах | |
mov ds,ax ; настраиваем сегмент ds данных на нулевой адрес | |
mov es,ax ; настраиваем сегмент es на нулевой адрес | |
mov ss,ax ; настраиваем сегмент ss стека на нулевой адрес | |
mov sp,0FFFFh ; сегмент sp указывает на текущую вершину стека | |
sti ; разрешаем прерывания | |
;-------------------; | |
jmp far 0:1000h ; В 16 битном автономном режиме программа запускаеться с 1000h адреса | |
;-------------------; | |
times 0x200 - 2 - ($ - ЗАГРУЗОЧНЫЙ_СЕКТОР) db 0x90 | |
DB 055h, 0AAh ; Сигнатура загрузчного сктора по ней BIOS узнает что это загрузочный сектор | |
org 1000h; | |
use16 ; | |
END IF ; | |
;-------------------; | |
;------------------------------------------------------------------------------} | |
;{ Загрузочный Cектор для 3/5 Дюймовой дискеты 32 бит. | |
;Помощь при создании 32 битного загрузчика оказал robohacker.ru | |
;Автор 32 битного загрузчика robohacker.ru а я его немного изменил для своей ОС | |
IF (ПЛАТФОРМА = T32) | |
ORG 0; | |
ЗАГРУЗОЧНЫЙ_СЕКТОР:; { Загрузочный сектор | |
;------------------------; | |
mov ah,00h ; // Функция установки видео режима 80 на 25 | |
mov al,03h ; // Устаналиваем Видео режим | |
int 10h ; // Вызываем функцию биос | |
;------------------------; | |
;------------------------; | |
mov ah,05h ; // Выбираем видео страницу | |
mov al,0 ; | |
int 10h ; | |
;------------------------; | |
;------------------------; | |
mov bx,0 ; // Номер видеостраницы | |
mov dl,0 ; // Координата по X | |
mov dh,25 ; // уст. позицию курсора. установка на строку 25 делает курсор невидимым. | |
mov ah,02h ; // ПОдпрограмма установки курсора | |
int 10h ; | |
;------------------------; | |
cli | |
;cld | |
xor ax, ax | |
mov ds, ax | |
mov es, ax | |
mov ss, ax | |
mov sp, 0xFFFF; | |
sti | |
IF ( NOS = 0 ) ;{ | |
;-------------------; DL Номер Диска прередается при запуске загрузочного сектора из биос | |
mov dh, 0 ; головка 1 | |
mov ch, 0 ; дорожка | |
mov cl, 2 ; 2-й сектор | |
mov ax, 0000h ; Адрес сегмента куда загружаем | |
mov es, ax ; Адрес куда загружаем | |
mov bx, 0x8000 ; Адрес куда загружаем | |
mov al, 17 ; кол-во читаемых секторов Не забываем указывать | |
mov ah, 2h ; Номер Функции в биос для чтения с диска | |
int 13h ; Загружаем первыую часть программы 17 секторов так как первый сектор это загрузочный а всего в 1 дорожке 18 секторов | |
;-------------------; | |
;-------------------; DL Номер Диска прередается при запуске загрузочного сектора из биос | |
mov dh, 1 ; головка 2 | |
mov ch, 0 ; дорожка | |
mov cl, 1 ; 1-й сектор | |
mov ax, 0000h ; Адрес сегмента куда загружаем | |
mov es, ax ; Адрес куда загружаем | |
mov bx, 0x8000+8704 ; Адрес куда загружаем первые 17 секторов уже загружены по этому +8704 | |
mov al, 18 ; кол-во читаемых секторов Не забываем указывать | |
mov ah, 2h ; Номер Функции в биос для чтения с диска | |
int 13h ; Прерывание для работы с диском | |
;-------------------; | |
;-------------------; DL Номер Диска прередается при запуске загрузочного сектора из биос | |
mov dh, 0 ; головка 2 | |
mov ch, 1 ; дорожка | |
mov cl, 1 ; 1-й сектор | |
mov ax, 0000h ; Адрес сегмента куда загружаем | |
mov es, ax ; Адрес куда загружаем | |
mov bx, 0x8000+17920; Адрес куда загружаем первые 17 секторов уже загружены по этому +8704 | |
mov al, 18 ; кол-во читаемых секторов Не забываем указывать | |
mov ah, 2h ; Номер Функции в биос для чтения с диска | |
int 13h ; Прерывание для работы с диском | |
;-------------------; | |
END IF;} | |
IF ( NOS = 1 ) ;{ | |
;-------------------; DL Номер Диска прередается при запуске загрузочного сектора из биос | |
mov dh, 0 ; головка 1 | |
mov ch, 0 ; дорожка | |
mov cl, 2 ; 2-й сектор | |
mov ax, 0000h ; Адрес сегмента куда загружаем | |
mov es, ax ; Адрес куда загружаем | |
mov bx, 0x8000 ; Адрес куда загружаем | |
mov al, 60 ; кол-во читаемых секторов Не забываем указывать | |
mov ah, 2h ; Номер Функции в биос для чтения с диска | |
int 13h ; Загружаем первыую часть программы 17 секторов так как первый сектор это загрузочный а всего в 1 дорожке 18 секторов | |
;-------------------; | |
END IF;} | |
jmp far 0:8000h ; | |
;-------------------; | |
times 0x200 - 2 - ($ - ЗАГРУЗОЧНЫЙ_СЕКТОР) db 0x90 | |
db 055h, 0AAh ; Сигнатруа загрузочного сектора | |
;------------------------------------------------------------------------------} | |
ORG 0x8000 ; | |
РЕАЛЬНЫЙ_РЕЖИМ :; { Реальный режим | |
Start: | |
;------------------; // Загрузка шрифтов используя биос пока не перешли в защищеный режим | |
mov bp,Font ; // Первый набор от А до п | |
mov dx, 128 ; // код символа с котрого начинаем загрузку шрифтов | |
mov cx, 48 ; // Количество загружаемых символов | |
mov bx, 1000h ; // Далее указываем высотук символов 16 пик и другие настройки | |
mov ax, 1100h ; // Номер функции и подфункции загрузки шрифтов прерывания 10h | |
int 10h ; // В данном случае для видео режима 80x25 16 пик высоту | |
;------------------; | |
;------------------; // Второй набор от р до яеЁ | |
mov bp,Font2 ; | |
mov dx, 224 ; // код символа с котрого начинаем загрузку шрифтов | |
mov cx, 18 ; // Количество загружаемых символов | |
mov bx, 1000h ; // Далее указываем высотук символов 16 пик и другие настройки | |
mov ax, 1100h ; // Номер функции загрузки шрифтов прерывания 10h | |
int 10h ; // В данном случае для видео режима 80x25 16 пик высоту | |
;------------------; | |
;------------------; // запрет всех прерываний | |
cli ; | |
in al, 70h ; | |
or al, 80h ; | |
out 70h, al ; // запрет NMI | |
;------------------; | |
in al, 92h | |
or al, 2 | |
out 92h, al | |
call СОЗДАТЬ_GDT ; // Сдесь потребуються уточнения еще не достаточно | |
mov eax, cr0 ; | |
or al, 1 ; | |
mov cr0, eax ; | |
jmp 0x0008:0x0000 ; | |
;------------------; | |
Font:;{ Руские буквы | |
;-------------;А | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00011100b ;2 | |
DB 00010100b ;3 | |
DB 00010100b ;4 | |
DB 00010110b ;5 | |
DB 00100010b ;6 | |
DB 00100010b ;7 | |
DB 00100010b ;8 | |
DB 01111111b ;9 | |
DB 01000001b ;10 | |
DB 01000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Б | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01111100b ;2 | |
DB 01000000b ;3 | |
DB 01000000b ;4 | |
DB 01000000b ;5 | |
DB 01111100b ;6 | |
DB 01000110b ;7 | |
DB 01000010b ;8 | |
DB 01000010b ;9 | |
DB 01000110b ;10 | |
DB 01111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;В | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01111100b ;2 | |
DB 01000010b ;3 | |
DB 01000010b ;4 | |
DB 01000110b ;5 | |
DB 01111100b ;6 | |
DB 01000110b ;7 | |
DB 01000010b ;8 | |
DB 01000010b ;9 | |
DB 01000110b ;10 | |
DB 01111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Г | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111111b ;2 | |
DB 00100000b ;3 | |
DB 00100000b ;4 | |
DB 00100000b ;5 | |
DB 00100000b ;6 | |
DB 00100000b ;7 | |
DB 00100000b ;8 | |
DB 00100000b ;9 | |
DB 00100000b ;10 | |
DB 00100000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Д | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111111b ;2 | |
DB 00100001b ;3 | |
DB 00100001b ;4 | |
DB 00100001b ;5 | |
DB 00100001b ;6 | |
DB 00100001b ;7 | |
DB 00100001b ;8 | |
DB 00100001b ;9 | |
DB 01000001b ;10 | |
DB 11111111b ;11 | |
DB 10000000b ;12 | |
DB 10000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Е | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111111b ;2 | |
DB 00100000b ;3 | |
DB 00100000b ;4 | |
DB 00100000b ;5 | |
DB 00111111b ;6 | |
DB 00100000b ;7 | |
DB 00100000b ;8 | |
DB 00100000b ;9 | |
DB 00100000b ;10 | |
DB 00111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ж | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 10001000b ;2 | |
DB 01001001b ;3 | |
DB 00101010b ;4 | |
DB 00101010b ;5 | |
DB 00011100b ;6 | |
DB 00011100b ;7 | |
DB 00101010b ;8 | |
DB 01001001b ;9 | |
DB 01001001b ;10 | |
DB 10001000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;З | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111100b ;2 | |
DB 01000010b ;3 | |
DB 00000010b ;4 | |
DB 00000010b ;5 | |
DB 00111100b ;6 | |
DB 00000110b ;7 | |
DB 00000010b ;8 | |
DB 00000010b ;9 | |
DB 01000110b ;10 | |
DB 00111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;И | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01000011b ;3 | |
DB 01000111b ;4 | |
DB 01000101b ;5 | |
DB 01001101b ;6 | |
DB 01011001b ;7 | |
DB 01010001b ;8 | |
DB 01110001b ;9 | |
DB 01100001b ;10 | |
DB 01000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Й | |
DB 00111000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01000011b ;3 | |
DB 01000111b ;4 | |
DB 01000101b ;5 | |
DB 01001101b ;6 | |
DB 01011001b ;7 | |
DB 01010001b ;8 | |
DB 01110001b ;9 | |
DB 01100001b ;10 | |
DB 01000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;К | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000010b ;2 | |
DB 01000100b ;3 | |
DB 01001100b ;4 | |
DB 01011000b ;5 | |
DB 01110000b ;6 | |
DB 01110000b ;7 | |
DB 01011000b ;8 | |
DB 01001100b ;9 | |
DB 01000100b ;10 | |
DB 01000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Л | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111110b ;2 | |
DB 00100010b ;3 | |
DB 00100010b ;4 | |
DB 00100010b ;5 | |
DB 00100010b ;6 | |
DB 00100010b ;7 | |
DB 01100010b ;8 | |
DB 01000010b ;9 | |
DB 01000010b ;10 | |
DB 11000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;М | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 11000001b ;2 | |
DB 11100011b ;3 | |
DB 11100011b ;4 | |
DB 11110101b ;5 | |
DB 11010101b ;6 | |
DB 11010101b ;7 | |
DB 11001001b ;8 | |
DB 11000001b ;9 | |
DB 11000001b ;10 | |
DB 11000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Н | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01000001b ;3 | |
DB 01000001b ;4 | |
DB 01000001b ;5 | |
DB 01111111b ;6 | |
DB 01000001b ;7 | |
DB 01000001b ;8 | |
DB 01000001b ;9 | |
DB 01000001b ;10 | |
DB 01000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;О | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111100b ;2 | |
DB 01000010b ;3 | |
DB 11000001b ;4 | |
DB 10000001b ;5 | |
DB 10000001b ;6 | |
DB 10000001b ;7 | |
DB 10000001b ;8 | |
DB 10000011b ;9 | |
DB 01000010b ;10 | |
DB 00111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;П | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01111111b ;2 | |
DB 01000001b ;3 | |
DB 01000001b ;4 | |
DB 01000001b ;5 | |
DB 01000001b ;6 | |
DB 01000001b ;7 | |
DB 01000001b ;8 | |
DB 01000001b ;9 | |
DB 01000001b ;10 | |
DB 01000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Р | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01111100b ;2 | |
DB 01000110b ;3 | |
DB 01000010b ;4 | |
DB 01000010b ;5 | |
DB 01000110b ;6 | |
DB 01111000b ;7 | |
DB 01000000b ;8 | |
DB 01000000b ;9 | |
DB 01000000b ;10 | |
DB 01000000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;С | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00011110b ;2 | |
DB 00110001b ;3 | |
DB 00100000b ;4 | |
DB 01000000b ;5 | |
DB 01000000b ;6 | |
DB 01000000b ;7 | |
DB 01000000b ;8 | |
DB 01100000b ;9 | |
DB 00100001b ;10 | |
DB 00011110b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Т | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01111111b ;2 | |
DB 00001000b ;3 | |
DB 00001000b ;4 | |
DB 00001000b ;5 | |
DB 00001000b ;6 | |
DB 00001000b ;7 | |
DB 00001000b ;8 | |
DB 00001000b ;9 | |
DB 00001000b ;10 | |
DB 00001000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;У | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01100011b ;3 | |
DB 00100010b ;4 | |
DB 00110110b ;5 | |
DB 00010100b ;6 | |
DB 00011100b ;7 | |
DB 00001000b ;8 | |
DB 00001000b ;9 | |
DB 00011000b ;10 | |
DB 01110000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ф | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00001000b ;2 | |
DB 00011110b ;3 | |
DB 00101010b ;4 | |
DB 01001001b ;5 | |
DB 01001001b ;6 | |
DB 01001001b ;7 | |
DB 01001001b ;8 | |
DB 01101010b ;9 | |
DB 00111100b ;10 | |
DB 00001000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Х | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 11000011b ;2 | |
DB 01100110b ;3 | |
DB 00110100b ;4 | |
DB 00011100b ;5 | |
DB 00011000b ;6 | |
DB 00011100b ;7 | |
DB 00110100b ;8 | |
DB 00100110b ;9 | |
DB 01100011b ;10 | |
DB 11000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ц | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01000001b ;3 | |
DB 01000001b ;4 | |
DB 01000001b ;5 | |
DB 01000001b ;6 | |
DB 01000001b ;7 | |
DB 01000001b ;8 | |
DB 01000001b ;9 | |
DB 01000001b ;10 | |
DB 01111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ч | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01000001b ;3 | |
DB 01000001b ;4 | |
DB 01000001b ;5 | |
DB 01100001b ;6 | |
DB 00111111b ;7 | |
DB 00000001b ;8 | |
DB 00000001b ;9 | |
DB 00000001b ;10 | |
DB 00000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ш | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01001001b ;2 | |
DB 01001001b ;3 | |
DB 01001001b ;4 | |
DB 01001001b ;5 | |
DB 01001001b ;6 | |
DB 01001001b ;7 | |
DB 01001001b ;8 | |
DB 01001001b ;9 | |
DB 01001001b ;10 | |
DB 01111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Щ | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01001001b ;2 | |
DB 01001001b ;3 | |
DB 01001001b ;4 | |
DB 01001001b ;5 | |
DB 01001001b ;6 | |
DB 01001001b ;7 | |
DB 01001001b ;8 | |
DB 01001001b ;9 | |
DB 01001001b ;10 | |
DB 01111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ъ | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 11100000b ;2 | |
DB 00100000b ;3 | |
DB 00100000b ;4 | |
DB 00100000b ;5 | |
DB 00111110b ;6 | |
DB 00100011b ;7 | |
DB 00100001b ;8 | |
DB 00100001b ;9 | |
DB 00100011b ;10 | |
DB 00111110b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ы | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000001b ;2 | |
DB 01000001b ;3 | |
DB 01000001b ;4 | |
DB 01000001b ;5 | |
DB 01111001b ;6 | |
DB 01000101b ;7 | |
DB 01000101b ;8 | |
DB 01000101b ;9 | |
DB 01001101b ;10 | |
DB 01111001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ь | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01000000b ;2 | |
DB 01000000b ;3 | |
DB 01000000b ;4 | |
DB 01000000b ;5 | |
DB 01111100b ;6 | |
DB 01000110b ;7 | |
DB 01000010b ;8 | |
DB 01000010b ;9 | |
DB 01000110b ;10 | |
DB 01111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Э | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00111100b ;2 | |
DB 01000010b ;3 | |
DB 00000001b ;4 | |
DB 00000001b ;5 | |
DB 00111111b ;6 | |
DB 00000001b ;7 | |
DB 00000001b ;8 | |
DB 00000011b ;9 | |
DB 01000010b ;10 | |
DB 00111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Ю | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 01001111b ;2 | |
DB 01011001b ;3 | |
DB 01010000b ;4 | |
DB 01010000b ;5 | |
DB 01110000b ;6 | |
DB 01010000b ;7 | |
DB 01010000b ;8 | |
DB 01010000b ;9 | |
DB 01001001b ;10 | |
DB 01001111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;Я | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00011110b ;2 | |
DB 00100010b ;3 | |
DB 00100010b ;4 | |
DB 00100010b ;5 | |
DB 00110010b ;6 | |
DB 00011110b ;7 | |
DB 00110010b ;8 | |
DB 00100010b ;9 | |
DB 01100010b ;10 | |
DB 01100010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;а | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00011100b ;5 | |
DB 00100010b ;6 | |
DB 00000010b ;7 | |
DB 00111110b ;8 | |
DB 01000010b ;9 | |
DB 01000110b ;10 | |
DB 00111010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;б | |
DB 00000000b ;0 | |
DB 00011110b ;1 | |
DB 00100000b ;2 | |
DB 00100000b ;3 | |
DB 01011110b ;4 | |
DB 01100010b ;5 | |
DB 01000001b ;6 | |
DB 01000001b ;7 | |
DB 01000001b ;8 | |
DB 01000001b ;9 | |
DB 00100010b ;10 | |
DB 00011100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;в | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01111100b ;5 | |
DB 01000010b ;6 | |
DB 01000010b ;7 | |
DB 01111100b ;8 | |
DB 01000010b ;9 | |
DB 01000010b ;10 | |
DB 01111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;г | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00111111b ;5 | |
DB 00100000b ;6 | |
DB 00100000b ;7 | |
DB 00100000b ;8 | |
DB 00100000b ;9 | |
DB 00100000b ;10 | |
DB 00100000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;д | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00111110b ;5 | |
DB 00100010b ;6 | |
DB 00100010b ;7 | |
DB 00100010b ;8 | |
DB 01100010b ;9 | |
DB 01000010b ;10 | |
DB 11111111b ;11 | |
DB 10000001b ;12 | |
DB 10000001b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;е | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00011110b ;5 | |
DB 00100011b ;6 | |
DB 01000001b ;7 | |
DB 01111111b ;8 | |
DB 01000000b ;9 | |
DB 01100000b ;10 | |
DB 00011111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ж | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 10001000b ;5 | |
DB 01001001b ;6 | |
DB 00101010b ;7 | |
DB 00011100b ;8 | |
DB 00101010b ;9 | |
DB 01101011b ;10 | |
DB 11001001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;з | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01111100b ;5 | |
DB 00000010b ;6 | |
DB 00000010b ;7 | |
DB 00111100b ;8 | |
DB 00000010b ;9 | |
DB 00000010b ;10 | |
DB 01111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;и | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000010b ;5 | |
DB 01000110b ;6 | |
DB 01001110b ;7 | |
DB 01011010b ;8 | |
DB 01110010b ;9 | |
DB 01100010b ;10 | |
DB 01000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;й | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00100100b ;2 | |
DB 00111000b ;3 | |
DB 00000000b ;4 | |
DB 01000010b ;5 | |
DB 01000110b ;6 | |
DB 01001110b ;7 | |
DB 01011010b ;8 | |
DB 01110010b ;9 | |
DB 01100010b ;10 | |
DB 01000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;к | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000010b ;5 | |
DB 01001100b ;6 | |
DB 01010000b ;7 | |
DB 01100000b ;8 | |
DB 01011000b ;9 | |
DB 01001100b ;10 | |
DB 01000110b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;л | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00111110b ;5 | |
DB 00100010b ;6 | |
DB 00100010b ;7 | |
DB 00100010b ;8 | |
DB 00100010b ;9 | |
DB 01000010b ;10 | |
DB 11000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;м | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01100011b ;5 | |
DB 01010101b ;6 | |
DB 01010101b ;7 | |
DB 01010101b ;8 | |
DB 01001001b ;9 | |
DB 01000001b ;10 | |
DB 01000001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;н | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000010b ;5 | |
DB 01000010b ;6 | |
DB 01000010b ;7 | |
DB 01111110b ;8 | |
DB 01000010b ;9 | |
DB 01000010b ;10 | |
DB 01000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;о | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00011110b ;5 | |
DB 00100011b ;6 | |
DB 01000001b ;7 | |
DB 01000001b ;8 | |
DB 01000001b ;9 | |
DB 01100010b ;10 | |
DB 00111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;п | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01111110b ;5 | |
DB 01000010b ;6 | |
DB 01000010b ;7 | |
DB 01000010b ;8 | |
DB 01000010b ;9 | |
DB 01000010b ;10 | |
DB 01000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
Font2: ;-------------;р | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01011110b ;5 | |
DB 01100011b ;6 | |
DB 01000001b ;7 | |
DB 01000001b ;8 | |
DB 01000001b ;9 | |
DB 01000010b ;10 | |
DB 01111100b ;11 | |
DB 01000000b ;12 | |
DB 01000000b ;13 | |
DB 01000000b ;14 | |
DB 00000000b ;15 | |
;-------------;с | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00011110b ;5 | |
DB 00100000b ;6 | |
DB 01000000b ;7 | |
DB 01000000b ;8 | |
DB 01000000b ;9 | |
DB 01100000b ;10 | |
DB 00011110b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;т | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01111111b ;5 | |
DB 00001000b ;6 | |
DB 00001000b ;7 | |
DB 00001000b ;8 | |
DB 00001000b ;9 | |
DB 00001000b ;10 | |
DB 00001000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;у | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000001b ;5 | |
DB 01100011b ;6 | |
DB 00100010b ;7 | |
DB 00100110b ;8 | |
DB 00010100b ;9 | |
DB 00010100b ;10 | |
DB 00011000b ;11 | |
DB 00011000b ;12 | |
DB 00010000b ;13 | |
DB 11100000b ;14 | |
DB 00000000b ;15 | |
;-------------;ф | |
DB 00000000b ;0 | |
DB 00001000b ;1 | |
DB 00001000b ;2 | |
DB 00001000b ;3 | |
DB 00011110b ;4 | |
DB 00101011b ;5 | |
DB 01001001b ;6 | |
DB 01001001b ;7 | |
DB 01001001b ;8 | |
DB 01001001b ;9 | |
DB 01101010b ;10 | |
DB 00111100b ;11 | |
DB 00001000b ;12 | |
DB 00001000b ;13 | |
DB 00001000b ;14 | |
DB 00000000b ;15 | |
;-------------;х | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01100011b ;5 | |
DB 00110110b ;6 | |
DB 00011100b ;7 | |
DB 00001100b ;8 | |
DB 00010110b ;9 | |
DB 00110011b ;10 | |
DB 01100001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ц | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000010b ;5 | |
DB 01000010b ;6 | |
DB 01000010b ;7 | |
DB 01000010b ;8 | |
DB 01000010b ;9 | |
DB 01000010b ;10 | |
DB 01111111b ;11 | |
DB 00000001b ;12 | |
DB 00000001b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ч | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000010b ;5 | |
DB 01000010b ;6 | |
DB 01000010b ;7 | |
DB 00111110b ;8 | |
DB 00000010b ;9 | |
DB 00000010b ;10 | |
DB 00000010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ш | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01001001b ;5 | |
DB 01001001b ;6 | |
DB 01001001b ;7 | |
DB 01001001b ;8 | |
DB 01001001b ;9 | |
DB 01001001b ;10 | |
DB 01111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;щ | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01001001b ;5 | |
DB 01001001b ;6 | |
DB 01001001b ;7 | |
DB 01001001b ;8 | |
DB 01001001b ;9 | |
DB 01001001b ;10 | |
DB 01111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ъ | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 11100000b ;5 | |
DB 00100000b ;6 | |
DB 00100000b ;7 | |
DB 00111100b ;8 | |
DB 00100010b ;9 | |
DB 00100010b ;10 | |
DB 00111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ы | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000001b ;5 | |
DB 01000001b ;6 | |
DB 01000001b ;7 | |
DB 01111001b ;8 | |
DB 01000101b ;9 | |
DB 01000101b ;10 | |
DB 01111001b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ь | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01000000b ;5 | |
DB 01000000b ;6 | |
DB 01000000b ;7 | |
DB 01111100b ;8 | |
DB 01000010b ;9 | |
DB 01000010b ;10 | |
DB 01111100b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;э | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01111100b ;5 | |
DB 00000110b ;6 | |
DB 00000010b ;7 | |
DB 01111110b ;8 | |
DB 00000010b ;9 | |
DB 00000110b ;10 | |
DB 01111000b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ю | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 01001111b ;5 | |
DB 01011001b ;6 | |
DB 01010000b ;7 | |
DB 01110000b ;8 | |
DB 01010000b ;9 | |
DB 01011001b ;10 | |
DB 01001111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;я | |
DB 00000000b ;0 | |
DB 00000000b ;1 | |
DB 00000000b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00011110b ;5 | |
DB 00100010b ;6 | |
DB 00100010b ;7 | |
DB 00011110b ;8 | |
DB 00110010b ;9 | |
DB 00100010b ;10 | |
DB 01100010b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
Font3: ;-------------;Ё | |
DB 00100100b ;0 | |
DB 00000000b ;1 | |
DB 00111111b ;2 | |
DB 00100000b ;3 | |
DB 00100000b ;4 | |
DB 00100000b ;5 | |
DB 00111111b ;6 | |
DB 00100000b ;7 | |
DB 00100000b ;8 | |
DB 00100000b ;9 | |
DB 00100000b ;10 | |
DB 00111111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;-------------;ё | |
DB 00000000b ;0 | |
DB 00110110b ;1 | |
DB 00110110b ;2 | |
DB 00000000b ;3 | |
DB 00000000b ;4 | |
DB 00011110b ;5 | |
DB 00100011b ;6 | |
DB 01000001b ;7 | |
DB 01111111b ;8 | |
DB 01000000b ;9 | |
DB 01100000b ;10 | |
DB 00011111b ;11 | |
DB 00000000b ;12 | |
DB 00000000b ;13 | |
DB 00000000b ;14 | |
DB 00000000b ;15 | |
;---} | |
СОЗДАТЬ_GDT:;{ Создание первичной таблицы GDT | |
mov ax, 0x0400 | |
mov es, ax | |
; Очистить GDT (1024 элементов) | |
xor di, di | |
mov cx, 0x2000 | |
xor ax, ax | |
rep stosb | |
mov di, 8 | |
; ~600 kb кода, который может быть загружен | |
mov eax, 0x93FFF | |
mov ebx, ЗАЩИЩЕННЫЙ_РЕЖИМ ; начало | |
mov cx, 0x90 + 0x8 + 0x4000 ; DPL=0, PRESENT=0x80, BIT_SYSTEM=0x10, CODE_EXEC_ONLY=0x8, BIT_DEFAULT_SIZE_32=0x4000 | |
call СОЗДАТЬ_ДЕСКРИПТОР | |
; повтор сегмента, но уже для данных | |
mov eax, 0x93FFF | |
mov ebx, ЗАЩИЩЕННЫЙ_РЕЖИМ ; начало | |
mov cx, 0x90 + 0x2 + 0x4000 ; DATA_READ_WRITE=0x2 | |
call СОЗДАТЬ_ДЕСКРИПТОР | |
; сегмент стека (256 кб) | |
mov eax, 0x93FFF | |
mov ebx, ЗАЩИЩЕННЫЙ_РЕЖИМ ; Начало в HI-mem | |
mov cx, 0x90 + 0x2 + 0x4000 ; DATA_READ_WRITE=0x2 | |
call СОЗДАТЬ_ДЕСКРИПТОР | |
; Память в целом (es) | |
mov eax, 0xFFFFF | |
xor ebx, ebx | |
mov cx, 0x90 + 0x2 + 0x8000 + 0x4000 ; GRANUL=0x8000 | |
call СОЗДАТЬ_ДЕСКРИПТОР | |
; Загрузка IDT | |
mov word [0x7C00], 0x1FFF | |
mov dword [0x7C02], 0x4000 | |
lgdt [0x7C00] | |
lidt [IDTR]; | |
ret | |
;{ ТАБЛИЦА ПРЕРЫВАНИЙ | |
; Interrupt Descriptor Table | |
IDT: dw I00,08h, 1000111000000000b, 0 ; 0 Division by zero | |
dw I01,08h, 1000111000000000b, 0 ; 1 Debugger | |
dd 0,0 ; 2 NMI | |
dd 0,0 ; 3 Breakpoint | |
dd 0,0 ; 4 Overflow | |
dd 0,0 ; 5 Bounds | |
dd 0,0 ; 6 Invalid Opcode | |
dd 0,0 ; 7 Coprocessor not available | |
dd 0,0 ; 8 Double fault | |
dd 0,0 ; 9 Coprocessor Segment Overrun (386 or earlier only) | |
dd 0,0 ; 10 Invalid Task State Segment | |
dd 0,0 ; 11 Segment not present | |
dd 0,0 ; 12 Stack Fault | |
dw I13,08h, 1000111000000000b, 0 ; 13 General protection fault | |
dd 0,0 ; 14 Page fault | |
dd 0,0 ; 15 reserved | |
dd 0,0 ; 16 Math Fault | |
dd 0,0 ; 17 Alignment Check | |
dd 0,0 ; 18 Machine Check | |
dd 0,0 ; 19 SIMD Floating-Point Exception | |
dd 0,0 ; 20 Virtualization Exception | |
dd 0,0 ; 21 Control Protection Exception | |
dd 0,0 ; 22 | |
dd 0,0 ; 23 | |
dd 0,0 ; 24 | |
dd 0,0 ; 25 | |
dd 0,0 ; 26 | |
dd 0,0 ; 27 | |
dd 0,0 ; 28 | |
dd 0,0 ; 29 | |
dd 0,0 ; 30 | |
dd 0,0 ; 31 | |
dw I32,08h, 1000111000000000b, 0 ; IRQ 0 - системный таймер | |
dw I33,08h, 1000111000000000b, 0 ; IRQ 1 - клавиатура | |
dd 0,0 ; IRQ 2 - Дополнительный контроллер прерываний (для совместимости с 8-битной шиной) | |
dd 0,0 ; IRQ 3 - Порты Com 1 и 3 | |
dd 0,0 ; IRQ 4 - Порты Com 2 и 4 | |
dd 0,0 ; IRQ 5 - Свободно | |
dd 0,0 ; IRQ 6 - Контроллер гибких дисков (FDD) | |
dd 0,0 ; IRQ 7 - Параллельный порт LPT | |
dd 0,0 ; IRQ 8 - Часы реального времени CMOS | |
dd 0,0 ; IRQ 9 - Совмещено с IRQ 2 | |
dd 0,0 ; IRQ 10- Свободно | |
dd 0,0 ; IRQ 11- Свободно | |
dw I44,08h, 1000111000000000b, 0 ; IRQ 12- Порт мыши PS/2 | |
dd 0,0 ; IRQ 13- Сопроцессор (в настоящее время практически не используется) | |
dd 0,0 ; IRQ 14- Первый контроллер IDE | |
dd 0,0 ; IRQ 15- Второй контроллер IDE | |
IDT_size = $-IDT | |
IDTR : dw IDT_size-1 | |
dd IDT ; | |
;} | |
;==============================================================================} | |
СОЗДАТЬ_ДЕСКРИПТОР:;{Создание дескриптора в реальном режиме | |
; -------------------------------------------------------- | |
; EAX - Лимит 24 | |
; EBX - Адрес 32 | |
; CX - Конфигурация | |
; ES:DI - Указатель на элемент GDT | |
; -------------------------------------------------------- | |
stosw ; limit | |
xchg eax, ebx | |
stosw ; address 0..15 | |
shr eax, 16 | |
stosb ; addr 16..23 | |
xchg eax, ebx | |
mov al, cl | |
stosb ; config low | |
shr eax, 16 | |
or al, ch | |
stosb ; config + limit | |
xchg eax, ebx | |
shr ax, 8 | |
stosb ; addr 24..31 | |
ret | |
;==============================================================================} | |
РАЗМЕР_КОДА_РЕАЛЬНОГО_РЕЖИМА = $ - РЕАЛЬНЫЙ_РЕЖИМ | |
;------------------------------------------------------------------------------} | |
ЗАЩИЩЕННЫЙ_РЕЖИМ :; { Защищенный режим | |
org 0 | |
use32 | |
.СТАРТ: | |
mov ax, 0x10 | |
mov ds, ax | |
mov ax, 0x10; | |
mov ss, ax | |
mov esp,0x2FFFF; 0x40000 | |
mov ax, 0x20 | |
mov es, ax | |
mov ax, 0 | |
mov fs, ax | |
mov gs, ax | |
; [ES:0B8000h] Адрес видеопамяти | |
mov dx, 0xFFFF | |
mov bx, 2820h | |
call redirect_IRQ | |
;------------------------------------------------------------------------------} | |
END IF | |
;------------------------------------------------------------------------------} | |
;==============================================================================} | |
;{ ОСНОВНОЕ ТЕЛО ПРОГРАММЫ . | |
;-------------------------; | |
Call ПОДГОТОВКА_К_ЗАПУСКУ ; // Очистка видеобуфера полготовка диспетчера памяти и тд и тп | |
;-------------------------; | |
call КНОП_ПОМ_ОКНА ; // Создает окно помощи | |
;-------------------------; | |
.ОСНОВНОЙ_ЦИКЛ: ; | |
;-------------------------; | |
call ПРЕРЫВАНИЕ ; // Програмное прерывание эмуляция много задачности передача управления другому потоку на время | |
call КЛАВИАТУРА_ЧИТАТЬ ; // Читает нажатую кнопку на клавиатуре и запоминает в переменную [НАЖ_КНОПК] | |
call КНОПКИ ; // Обработка нажатой кнопки | |
call МЫШКА_ЧИТАТЬ ; // Читает координаты мышки | |
call СБРОС_КЕША | |
call ОКНО_ПЕРЕМЕЩЕ ; // Перемещает окна процеду отвечает за перемещение окошек | |
call ЭКРАН_ОЧИСТКА ; // Очитка видеобуфера для рисования | |
Call БИОС_ИНФОРМАЦИЯ ; // Выводит отладочную информацию выпилим на время | |
call КОРНЕВОЙ_ЭЛЕМЕНТ ; // Читает корневой элемент в регистр Di | |
call СБРОС_КЕША | |
call ОКНО_РИСО_ВСЕ ; // Рисует окна в видеобуфере | |
call МЫШКА_НАРИСОВАТЬ ; // РИсует мышку | |
call ЭКРАН_ВЫВОД ; // Вывод содержимого видеобуфера на экран | |
call ОКНО_ПОРЯДОК ; // Определяет порядок прорисовки окон | |
JMP .ОСНОВНОЙ_ЦИКЛ ; | |
;-------------------------; | |
;-------------------------; | |
Call ЗАВЕРШЕНИЕ_РАБОТЫ ; | |
;-------------------------; | |
ret ; | |
TR_TIMER2:dd 00000010b; | |
TR_TIMER:dd 0; | |
;{ | |
;call ПРЕРЫВАНИЕ ; // Програмное прерывание эмуляция много задачности передача управления другому потоку на время | |
;call МЫШКА_ЧИТАТЬ ; // Читает координаты мышки | |
;call КЛАВИАТУРА_ЧИТАТЬ ; // Читает нажатую кнопку на клавиатуре и запоминает в переменную [НАЖ_КНОПК] | |
;call КНОПКИ ; // Обработка нажатой кнопки | |
;call ОКНО_ПЕРЕМЕЩЕ ; // Перемещает окна процеду отвечает за перемещение окошек | |
;call ЭКРАН_ОЧИСТКА ; // Очитка видеобуфера для рисования | |
;Call БИОС_ИНФОРМАЦИЯ ; // Выводит отладочную информацию выпилим на время | |
;call КОРНЕВОЙ_ЭЛЕМЕНТ ; // Читает корневой элемент в регистр Di | |
;call ОКНО_РИСО_ВСЕ ; // Рисует окна в видеобуфере | |
;call МЫШКА_НАРИСОВАТЬ ; // РИсует мышку | |
;call ЭКРАН_ВЫВОД ; // Вывод содержимого видеобуфера на экран | |
;call ОКНО_ПОРЯДОК ; // Определяет порядок прорисовки окон | |
;JMP .ОСНОВНОЙ_ЦИКЛ ; | |
;} | |
;ЗАПРЕТ:DB 0; | |
;==============================================================================}; | |
;{ ФУНКЦИИ ДЛЯ РАБОТЫ C ЯЗЫКОМ ПРОГРАМИРОВАНИЯ . | |
;-ПРОГРАМИРОВАНИЕ: | |
;-ЖШРИФТ: | |
;-clGreen: | |
;{описание раздела | |
; В этой части кода расположены функции для работы с языком програмирвоания | |
; | |
; | |
; | |
; | |
;} | |
РАЗ_НА_СЛОВА:;{ Разбивает строку DI указатель на окно с программой на слова возврвщет элемнт DI со списком слов | |
;{Описание | |
; Функция предназначена для разбивки строки на слова | |
; Создает списко слов из строки ну и всего там что есть в строке | |
; Слова Цифры Чзнаки Скобки все такое вообщем | |
; В DI Содержиться адрес Окна Элемент окно в не есть набор параметров | |
; среди них есть параметр текста окна имено этот параметр содержит | |
; Строку содержащию текст программы строка заканчиваеться 0 | |
; вовращает в DI элемент содержащий Консоль и список слов | |
; Так что при закрытии консоли будет разрушена и структура с программой | |
; В дальнейшем можно будет сделать и по другому но пока так это проще | |
;} | |
IF (ПЛАТФОРМА = ДОС) ;{ Версия для работы в ДОС | |
pushad ; // { ОПИСАНИЕ | |
;------------------------------------------------------------------- | |
; Разбивает текст программы из окна DI на слова | |
; Возращает в регистре DI адрес на структуру содержащию список слов | |
; На Входе DI адрес окна | |
; На выходе адрес DI элемента содеражего список слов | |
;------------------------------------------------------------------} | |
;-------------------------; // ОКНО_ТЕК Возвращает в AX Адрес строки с текстом | |
call ОКНО_ТЕК ; // Записываем в AX адрес строки с текстом прогрыммы | |
JZ .ВЫХОД ; // Если нету текста прогрммы то выход c DI 0 | |
mov si,ax ; // Запоминаем адрес текста программы | |
call ОКНО_МОНИТОР ; // Содаем консоль внутри консоли размещаеться | |
call СОЗДАТЬ_ЭЛЕ_DI_С_ПРОГ; // Структура исполнительная с программой это сделано | |
;-------------------------; // Для того что бы при закрытии консоли удалялася и сама программа ..... | |
.ЦИКЛ: ;-------------------------; // тут обычный цикл до конца строки 0 | |
mov al,[si] ; | |
test al,al ; | |
jZ .КЦИКЛ ; // Выход приокончании строки | |
;-------------------------; | |
call ДОБАВИТЬ_КАК_СЛОВО ; // Пытаеться прочитать слово если удалося Цикл | |
jnz .ЦИКЛ ; // Если не удалося | |
call ДОБАВИТЬ_КАК_ЧИСЛО ; // Пытаеться прочитать как число | |
jnz .ЦИКЛ ; // И так далее .... надеюся тут не запутаюся | |
Call ДОБАВИТЬ_КАК_ЗНАК ; // Хмм.... тут вроде бы ничего оптимизировать )))) | |
jnz .ЦИКЛ ; // Хотя конечно оптимизировать всегда есть что | |
Call ДОБАВИТЬ_КАК_КАВЫЧКУ ; // Но времени не бесконечное количество | |
jnz .ЦИКЛ ; | |
;-------------------------; | |
inc SI ; // Если ничего прочитать не удалося | |
Jmp .ЦИКЛ ; // Пропускаем символ .......... | |
;-------------------------; | |
.КЦИКЛ: | |
.ВЫХОД: | |
;-------------------------; | |
call ВОЗВРАТИТЬ_DI ; // Возвращает адрес консоли | |
test di,di ; // Внтури котрой расположна сама программа | |
popad ; // Если прочитать ничего не удалося возвращет | |
ret ; // DI = 0 Флаг Z 0 | |
;-------------------------; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ Версия для 16 бит | |
pushad ; // { ОПИСАНИЕ | |
;------------------------------------------------------------------- | |
; Разбивает текст программы из окна DI на слова | |
; Возращает в регистре DI адрес на структуру содержащию список слов | |
; На Входе DI адрес окна | |
; На выходе адрес DI элемента содеражего список слов | |
;------------------------------------------------------------------} | |
;-------------------------; | |
call ОКНО_ТЕК ; // Записываем в AX адрес строки с текстом прогрыммы | |
JZ .ВЫХОД ; // Если нету текста прогрммы то выход c DI 0 | |
mov si,ax ; // Запоминаем адрес текста программы | |
call ОКНО_МОНИТОР ; // Содаем консоль | |
call СОЗДАТЬ_ЭЛЕ_DI_С_ПРОГ; | |
;-------------------------; | |
.ЦИКЛ: ;-------------------------; | |
mov al,[si] ; | |
test al,al ; | |
jZ .КЦИКЛ ; // Выход приокончании строки | |
;-------------------------; | |
call ДОБАВИТЬ_КАК_СЛОВО ; | |
jnz .ЦИКЛ ; | |
call ДОБАВИТЬ_КАК_ЧИСЛО ; | |
jnz .ЦИКЛ ; | |
Call ДОБАВИТЬ_КАК_ЗНАК ; | |
jnz .ЦИКЛ ; | |
Call ДОБАВИТЬ_КАК_КАВЫЧКУ ; | |
jnz .ЦИКЛ ; | |
;-------------------------; | |
inc SI ; // Если ничего прочитать не удалося | |
Jmp .ЦИКЛ ; // Пропускаем символ | |
;-------------------------; | |
.КЦИКЛ: | |
.ВЫХОД: | |
;-------------------------; | |
call ВОЗВРАТИТЬ_DI ; | |
test di,di ; | |
popad ; | |
ret ; | |
;-------------------------; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ Версия для 32 бит | |
pushad ; // { ОПИСАНИЕ | |
;------------------------------------------------------------------- | |
; Разбивает текст программы из окна DI на слова | |
; Возращает в регистре DI адрес на структуру содержащию список слов | |
; На Входе DI адрес окна | |
; На выходе адрес DI элемента содеражего список слов | |
;------------------------------------------------------------------} | |
;-------------------------; | |
call ОКНО_ТЕК ; // Записываем в AX адрес строки с текстом прогрыммы | |
JZ .ВЫХОД ; // Если нету текста прогрммы то выход c DI 0 | |
mov esi,eax ; // Запоминаем адрес текста программы | |
call ОКНО_МОНИТОР ; // Содаем консоль | |
call СОЗДАТЬ_ЭЛЕ_DI_С_ПРОГ; | |
;-------------------------; | |
.ЦИКЛ: ;-------------------------; | |
mov al,[esi] ; | |
test al,al ; | |
jZ .КЦИКЛ ; // Выход приокончании строки | |
;-------------------------; | |
call ДОБАВИТЬ_КАК_СЛОВО ; | |
jnz .ЦИКЛ ; | |
call ДОБАВИТЬ_КАК_ЧИСЛО ; | |
jnz .ЦИКЛ ; | |
Call ДОБАВИТЬ_КАК_ЗНАК ; | |
jnz .ЦИКЛ ; | |
Call ДОБАВИТЬ_КАК_КАВЫЧКУ ; | |
jnz .ЦИКЛ ; | |
;-------------------------; | |
inc eSI ; // Если ничего прочитать не удалося | |
Jmp .ЦИКЛ ; // Пропускаем символ | |
;-------------------------; | |
.КЦИКЛ: | |
.ВЫХОД: | |
;-------------------------; | |
call ВОЗВРАТИТЬ_DI ; | |
test edi,edi ; | |
popad ; | |
ret ; | |
;-------------------------; | |
END IF ;} | |
СОЗДАТЬ_ЭЛЕ_DI_С_ПРОГ:;{ Создает Элемент DI с испонительной программой Внутри DI | |
;{ Описание | |
; Создает элемент внтри элемента DI то есть внутри консоли возвращет его адрес в DI | |
; Структура содеращия программу имеет тип число незнай почему имено число | |
; Но поками что так дело в том что каждый элемент должен иметь свой тип | |
; Строка или число пока тока 2 типа вернее 3 еще есть тип 0 это корневая структура | |
; С котрой начинаються все остальные структуры в системе в будуещем будут еще | |
; ТИпы например REAL числа с плавающей точкой так же тип элемента важен | |
; При его разрушении что бы правельно освобождать память | |
;} | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;-------------------------; | |
PUSHAD ; | |
mov al,ТИП_ЧИСЛ ; // Тип Число | |
mov ah,1 ; // Участвует в поиске | |
mov si,.ИМЯ ; // Имя элемента | |
mov bx,0 ; // Значение 0 как число | |
call ЭЛЕ_СОЗДАТЬ ; // Создаем элемнт где будет спис слов | |
call ВОЗВРАТИТЬ_DI ; | |
POPAD ; | |
ret ; | |
;-------------------------; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;-------------------------; // Чаек попить нужно 1 мин | |
PUSHAD ; | |
mov al,ТИП_ЧИСЛ ; // Тип Число | |
mov ah,1 ; // Участвует в поиске | |
mov si,.ИМЯ ; // Имя элемента | |
mov bx,0 ; // Значение 0 как число | |
call ЭЛЕ_СОЗДАТЬ ; // Создаем элемнт где будет спис слов | |
call ВОЗВРАТИТЬ_DI ; | |
POPAD ; | |
;-------------------------; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;-------------------------; // Чаек попить нужно 1 мин | |
PUSHAD ; | |
mov al,ТИП_ЧИСЛ ; // Тип Число | |
mov ah,1 ; // Участвует в поиске | |
mov esi,.ИМЯ ; // Имя элемента | |
mov ebx,0 ; // Значение 0 как число | |
call ЭЛЕ_СОЗДАТЬ ; // Создаем элемнт где будет спис слов | |
call ВОЗВРАТИТЬ_DI ; | |
POPAD ; | |
;-------------------------; | |
ret ; | |
END IF ;} | |
.ИМЯ: db "PROG",0 ; Имя элемнта содержащего стуркутуру программы | |
;------------------------------------------------------------------------------} | |
ДОБАВИТЬ_КАК_СЛОВО :;{ Делает c буквы SI стр эле и добавлет в DI как СТРОКУ . | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
; {ОПИСАНИЕ | |
;---------------------------------------------------------------------- | |
; DI - Родительсикй элемнт в котром нужно создать элемент | |
; SI - Указатель на букву с котрой нужно попытаться прочитать слово | |
; Изменяет SI в случаае успеха флаг Z = 1 | |
; Не изменяет SI если прочитать не удалося флаг Z = 0 | |
; --------------------------------------------------------------------} | |
mov cx,0 ; // Длина прочитаного слова равна 0 | |
call ЧИТ_СЛОВО_С_SI_В_DX ; // Читает слово с строки SI Создает элемент DX | |
jz .ВЫХОД ; // Если это не слово то выход | |
;------------------------; | |
call ДЛИНА_СТРОКИ_DX_В_CX; // Читаю длину прочитаной строки в CX | |
;------------------------; | |
pushad ; // Сохраняю указатель | |
mov si,dx ; // Имя котрое будет у элемента | |
mov bx,dx ; // Значение котрое будет у элемента | |
mov al,ТИП_СТРО ; // Тип Строка | |
mov ah,0 ; // Не участвует в поиске | |
call ЭЛЕ_СОЗДАТЬ ; // Содаею Элемнт добавлю в уонец элемнта DI | |
popad ; // Востанавливаю указатель | |
;------------------------; | |
add si,cx ; // Изменяю указатель на длину проч строки CX | |
;------------------------; | |
.ВЫХОД: | |
call ВОЗВРАТИТЬ_SI ; // Изменяет указатель на символ с котрого читаем | |
test cx,cx ; // Если длина слова равна 0 то прочитать ничего не удалося | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; {ОПИСАНИЕ | |
;---------------------------------------------------------------------- | |
; DI - Родительсикй элемнт в котром нужно создать элемент | |
; SI - Указатель на букву с котрой нужно попытаться прочитать слово | |
; Изменяет SI в случаае успеха JNZ | |
; Не изменяет SI если прочитать не удалося JZ | |
; --------------------------------------------------------------------} | |
mov cx,0 ; // Длина прочитаного слова равна 0 | |
call ЧИТ_СЛОВО_С_SI_В_DX ; // Читает слово с строки SI Создает стр DX | |
jz .ВЫХОД ; // Если это не слово то выход | |
;------------------------; | |
call ДЛИНА_СТРОКИ_DX_В_CX; // Читаю длину прочитаной строки в CX | |
;------------------------; | |
pushad ; // Сохраняю указатель | |
mov si,dx ; // Имя котрое будет у элемента | |
mov bx,dx ; // Значение котрое будет у элемента | |
mov al,ТИП_СТРО ; // Тип Строка | |
mov ah,0 ; // Не участвует в поиске | |
call ЭЛЕ_СОЗДАТЬ ; // Содаею Элемнт добавлю в уонец элемнта DI | |
popad ; // Востанавливаю указатель | |
;------------------------; | |
add si,cx ; // Изменяю указатель на длину проч строки CX | |
;------------------------; | |
.ВЫХОД: | |
call ВОЗВРАТИТЬ_SI ; | |
test cx,cx ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; {ОПИСАНИЕ | |
;---------------------------------------------------------------------- | |
; DI - Родительсикй элемнт в котром нужно создать элемент | |
; SI - Указатель на букву с котрой нужно попытаться прочитать слово | |
; Изменяет SI в случаае успеха JNZ | |
; Не изменяет SI если прочитать не удалося JZ | |
; --------------------------------------------------------------------} | |
mov ecx,0 ; // Длина прочитаного слова равна 0 | |
call ЧИТ_СЛОВО_С_SI_В_DX ; // Читает слово с строки SI Создает стр DX | |
jz .ВЫХОД ; // Если это не слово то выход | |
;------------------------; | |
call ДЛИНА_СТРОКИ_DX_В_CX; // Читаю длину прочитаной строки в CX | |
;------------------------; | |
pushad ; // Сохраняю указатель | |
mov esi,edx ; // Имя котрое будет у элемента | |
mov ebx,edx ; // Значение котрое будет у элемента | |
mov al,ТИП_СТРО ; // Тип Строка | |
mov ah,0 ; // Не участвует в поиске | |
call ЭЛЕ_СОЗДАТЬ ; // Содаею Элемнт добавлю в уонец элемнта DI | |
popad ; // Востанавливаю указатель | |
;------------------------; | |
add esi,ecx ; // Изменяю указатель на длину проч строки CX | |
;------------------------; | |
.ВЫХОД: | |
call ВОЗВРАТИТЬ_SI ; | |
test ecx,ecx ; | |
popad ; | |
ret ; | |
END IF ;} | |
;} | |
ДОБАВИТЬ_КАК_ЧИСЛО :;{ Делает из стр DX число эле и добавлет в DI как число. . | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; {ОПИСАНИЕ | |
;---------------------------------------------------------------------- | |
; DI - Родительсикй элемнт в котром нужно создать элемент | |
; SI - Указатель на букву с котрой нужно попытаться прочитать Число | |
; Изменяет SI в случаае успеха JNZ | |
; Не изменяет SI если прочитать не удалося JZ | |
; --------------------------------------------------------------------} | |
mov cx,0 ; // Длина прочитаного слова равна 0 | |
call ЧИТ_ЧИСЛО_С_SI_В_DX ; // Читает число с строки SI Возвращает слово DX | |
jz .ВЫХОД ; // Если прочитать не удалося Выход | |
;-------------------------; | |
call ДЛИНА_СТРОКИ_DX_В_CX ; // Запоминаю длину строки в CX; | |
;-------------------------; | |
pushad ; | |
mov Si,dx ; // Имя элемента | |
mov bx,dx ; // Значение элемента | |
call СТРО_BX_В_ЧИСЛ_BX ; // Переводит строку BX в число BX Значение | |
mov al,ТИП_ЧИСЛ ; // Тип Число | |
mov ah,0 ; // Не участвует в поиске поками что | |
call ЭЛЕ_СОЗДАТЬ ; // Создаю Элемнт добавлю в конец элемнта DI | |
call УДАЛИТЬ_СТРОКУ_DX ; // Удаляю стролку прочитаную из SI; | |
popad ; | |
;-------------------------; | |
add SI,CX ; // Увеличиваю Указатель на длину числа CX | |
;-------------------------; | |
.ВЫХОД: | |
;-------------------------; | |
call ВОЗВРАТИТЬ_SI ; // Возвращает Указатель на читаемое число | |
test cx,cx ; // Если что то удалося прочитать CX<>0 | |
popad ; // Если прочитать не удалося Si не меняеться | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; {ОПИСАНИЕ | |
;---------------------------------------------------------------------- | |
; DI - Родительсикй элемнт в котром нужно создать элемент | |
; SI - Указатель на букву с котрой нужно попытаться прочитать Число | |
; Изменяет SI в случаае успеха JNZ | |
; Не изменяет SI если прочитать не удалося JZ | |
; --------------------------------------------------------------------} | |
mov cx,0 ; // Длина прочитаного слова равна 0 | |
call ЧИТ_ЧИСЛО_С_SI_В_DX ; // Читает слово с строки SI Возвращает слово DX | |
jz .ВЫХОД ; // Если прочитать не удалося Выход | |
;-------------------------; | |
call ДЛИНА_СТРОКИ_DX_В_CX ; // Запоминаю длину строки в CX; | |
;-------------------------; | |
pushad ; | |
mov Si,dx ; // Имя элемента | |
mov bx,dx ; // Значение элемента | |
call СТРО_BX_В_ЧИСЛ_BX ; // Переводит строку BX в число BX Значение | |
mov al,ТИП_ЧИСЛ ; // Тип Число | |
mov ah,0 ; // Не участвует в поиске поками что | |
call ЭЛЕ_СОЗДАТЬ ; // Создаю Элемнт добавлю в уонец элемнта DI | |
call УДАЛИТЬ_СТРОКУ_DX ; // Удаляю стролку прочитаную из SI; | |
popad ; | |
;-------------------------; | |
add SI,CX ; // Увеличиваю Указатель на длину слова CX | |
;-------------------------; | |
.ВЫХОД: | |
;-------------------------; | |
call ВОЗВРАТИТЬ_SI ; // Возвращает Указатель на читаемое слово | |
test cx,cx ; // Если что то удалося прочитать CX<>0 | |
popad ; // Если прочитать не удалося Si не меняеться | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; {ОПИСАНИЕ | |
;---------------------------------------------------------------------- | |
; DI - Родительсикй элемнт в котром нужно создать элемент | |
; SI - Указатель на букву с котрой нужно попытаться прочитать Число | |
; Изменяет SI в случаае успеха JNZ | |
; Не изменяет SI если прочитать не удалося JZ | |
; --------------------------------------------------------------------} | |
mov ecx,0 ; // Длина прочитаного слова равна 0 | |
call ЧИТ_ЧИСЛО_С_SI_В_DX ; // Читает слово с строки SI Возвращает слово DX | |
jz .ВЫХОД ; // Если прочитать не удалося Выход | |
;-------------------------; | |
call ДЛИНА_СТРОКИ_DX_В_CX ; // Запоминаю длину строки в CX; | |
;-------------------------; | |
pushad ; | |
mov eSi,edx ; // Имя элемента | |
mov ebx,edx ; // Значение элемента | |
call СТРО_BX_В_ЧИСЛ_BX ; // Переводит строку BX в число BX Значение | |
mov al,ТИП_ЧИСЛ ; // Тип Число | |
mov ah,0 ; // Не участвует в поиске поками что | |
call ЭЛЕ_СОЗДАТЬ ; // Создаю Элемнт добавлю в уонец элемнта DI | |
call УДАЛИТЬ_СТРОКУ_DX ; // Удаляю стролку прочитаную из SI; | |
popad ; | |
;-------------------------; | |
add eSI,eCX ; // Увеличиваю Указатель на длину слова CX | |
;-------------------------; | |
.ВЫХОД: | |
;-------------------------; | |
call ВОЗВРАТИТЬ_SI ; // Возвращает Указатель на читаемое слово | |
test ecx,ecx ; // Если что то удалося прочитать CX<>0 | |
popad ; // Если прочитать не удалося Si не меняеться | |
ret ; | |
END IF ;} | |
;} | |
ДОБАВИТЬ_КАК_ЗНАК :;{ Делает из стр DX ЗНАК эле и добавлет в DI как Знак . | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; {ОПИСАНИЕ | |
;---------------------------------------------------------------------- | |
; DI - Родительсикй элемнт в котром нужно создать элемент | |
; SI - Указатель на букву с котрой нужно попытаться прочитать Знак | |
; Изменяет SI в случаае успеха JNZ | |
; Не изменяет SI если прочитать не удалося JZ | |
; --------------------------------------------------------------------} | |
mov cx,0 ; // Длина прочитаного слова равна 0 | |
call ЧИТ_ЗНАК_С_SI_В_DX ; // Читает Знак с строки SI Возвращает строку DX | |
jz .ВЫХОД ; // Если прочитать не удалося Выход | |
;-------------------------; | |
call ДЛИНА_СТРОКИ_DX_В_CX ; // Запоминаю длину строки в CX; | |
;-------------------------; | |
pushad ; | |
mov Si,dx ; // Имя элемента | |
mov bx,dx ; // Значение элемента | |
mov al,ТИП_СТРО ; // Тип СТрока | |
mov ah,0 ; // Не участвует в поиске поками что | |
call ЭЛЕ_СОЗДАТЬ ; // Создаю Элемнт добавлю в уонец элемнта DI | |
popad ; | |
;-------------------------; | |
add SI,CX ; // Увеличиваю Указатель на длину слова CX | |
;-------------------------; | |
.ВЫХОД: | |
;-------------------------; | |
call ВОЗВРАТИТЬ_SI ; // Возвращает Указатель на читаемое слово | |
test cx,cx ; // Если что то удалося прочитать CX<>0 | |
popad ; // Если прочитать не удалося Si не меняеться | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; {ОПИСАНИЕ | |
;---------------------------------------------------------------------- | |
; DI - Родительсикй элемнт в котром нужно создать элемент | |
; SI - Указатель на букву с котрой нужно попытаться прочитать Число | |
; Изменяет SI в случаае успеха JNZ | |
; Не изменяет SI если прочитать не удалося JZ | |
; --------------------------------------------------------------------} | |
mov cx,0 ; // Длина прочитаного слова равна 0 | |
call ЧИТ_ЗНАК_С_SI_В_DX ; // Читает слово с строки SI Возвращает слово DX | |
jz .ВЫХОД ; // Если прочитать не удалося Выход | |
;-------------------------; | |
call ДЛИНА_СТРОКИ_DX_В_CX ; // Запоминаю длину строки в CX; | |
;-------------------------; | |
pushad ; | |
mov Si,dx ; // Имя элемента | |
mov bx,dx ; // Значение элемента | |
mov al,ТИП_СТРО ; // Тип СТрока | |
mov ah,0 ; // Не участвует в поиске поками что | |
call ЭЛЕ_СОЗДАТЬ ; // Создаю Элемнт добавлю в уонец элемнта DI | |
popad ; | |
;-------------------------; | |
add SI,CX ; // Увеличиваю Указатель на длину слова CX | |
;-------------------------; | |
.ВЫХОД: | |
;-------------------------; | |
call ВОЗВРАТИТЬ_SI ; // Возвращает Указатель на читаемое слово | |
test cx,cx ; // Если что то удалося прочитать CX<>0 | |
popad ; // Если прочитать не удалося Si не меняеться | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; {ОПИСАНИЕ | |
;---------------------------------------------------------------------- | |
; DI - Родительсикй элемнт в котром нужно создать элемент | |
; SI - Указатель на букву с котрой нужно попытаться прочитать Число | |
; Изменяет SI в случаае успеха JNZ | |
; Не изменяет SI если прочитать не удалося JZ | |
; --------------------------------------------------------------------} | |
mov ecx,0 ; // Длина прочитаного слова равна 0 | |
call ЧИТ_ЗНАК_С_SI_В_DX ; // Читает слово с строки SI Возвращает слово DX | |
jz .ВЫХОД ; // Если прочитать не удалося Выход | |
;-------------------------; | |
call ДЛИНА_СТРОКИ_DX_В_CX ; // Запоминаю длину строки в CX; | |
;-------------------------; | |
pushad ; | |
mov eSi,edx ; // Имя элемента | |
mov ebx,edx ; // Значение элемента | |
mov al,ТИП_СТРО ; // Тип СТрока | |
mov ah,0 ; // Не участвует в поиске поками что | |
call ЭЛЕ_СОЗДАТЬ ; // Создаю Элемнт добавлю в уонец элемнта DI | |
popad ; | |
;-------------------------; | |
add eSI,eCX ; // Увеличиваю Указатель на длину слова CX | |
;-------------------------; | |
.ВЫХОД: | |
;-------------------------; | |
call ВОЗВРАТИТЬ_SI ; // Возвращает Указатель на читаемое слово | |
test ecx,ecx ; // Если что то удалося прочитать CX<>0 | |
popad ; // Если прочитать не удалося Si не меняеться | |
ret ; | |
END IF ;} | |
;} | |
ДОБАВИТЬ_КАК_КАВЫЧКУ :;{ Делает из стр DX КАВЫЧ эле и добавлет в DI как Кавычку. | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; {ОПИСАНИЕ | |
;---------------------------------------------------------------------- | |
; DI - Родительсикй элемнт в котром нужно создать элемент | |
; SI - Указатель на букву с котрой нужно попытаться прочитать Число | |
; Изменяет SI в случаае успеха JNZ | |
; Не изменяет SI если прочитать не удалося JZ | |
; --------------------------------------------------------------------} | |
mov cx,0 ; // Длина прочитаного слова равна 0 | |
call ЧИТ_КАВЫЧКУ_С_SI_В_DX; // Читает слово с строки SI Возвращает слово DX | |
jz .ВЫХОД ; // Если прочитать не удалося Выход | |
;-------------------------; | |
call ДЛИНА_СТРОКИ_DX_В_CX ; // Запоминаю длину строки в CX; | |
;-------------------------; | |
pushad ; | |
mov Si,dx ; // Имя элемента | |
mov bx,dx ; // Значение элемента | |
mov al,ТИП_СТРО ; // Тип Строка | |
mov ah,0 ; // Не участвует в поиске поками что | |
call ЭЛЕ_СОЗДАТЬ ; // Создаю Элемнт добавлю в уонец элемнта DI | |
popad ; | |
;-------------------------; | |
add SI,CX ; // Увеличиваю Указатель на длину слова CX | |
add si,2 ; | |
;-------------------------; | |
.ВЫХОД: | |
;-------------------------; | |
call ВОЗВРАТИТЬ_SI ; // Возвращает Указатель на читаемое слово | |
test cx,cx ; // Если что то удалося прочитать CX<>0 | |
popad ; // Если прочитать не удалося Si не меняеться | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; {ОПИСАНИЕ | |
;---------------------------------------------------------------------- | |
; DI - Родительсикй элемнт в котром нужно создать элемент | |
; SI - Указатель на букву с котрой нужно попытаться прочитать Число | |
; Изменяет SI в случаае успеха JNZ | |
; Не изменяет SI если прочитать не удалося JZ | |
; --------------------------------------------------------------------} | |
mov cx,0 ; // Длина прочитаного слова равна 0 | |
call ЧИТ_КАВЫЧКУ_С_SI_В_DX; // Читает слово с строки SI Возвращает слово DX | |
jz .ВЫХОД ; // Если прочитать не удалося Выход | |
;-------------------------; | |
call ДЛИНА_СТРОКИ_DX_В_CX ; // Запоминаю длину строки в CX; | |
;-------------------------; | |
pushad ; | |
mov Si,dx ; // Имя элемента | |
mov bx,dx ; // Значение элемента | |
mov al,ТИП_СТРО ; // Тип Строка | |
mov ah,0 ; // Не участвует в поиске поками что | |
call ЭЛЕ_СОЗДАТЬ ; // Создаю Элемнт добавлю в уонец элемнта DI | |
popad ; | |
;-------------------------; | |
add SI,CX ; // Увеличиваю Указатель на длину слова CX | |
add si,2 ; | |
;-------------------------; | |
.ВЫХОД: | |
;-------------------------; | |
call ВОЗВРАТИТЬ_SI ; // Возвращает Указатель на читаемое слово | |
test cx,cx ; // Если что то удалося прочитать CX<>0 | |
popad ; // Если прочитать не удалося Si не меняеться | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; {ОПИСАНИЕ | |
;---------------------------------------------------------------------- | |
; DI - Родительсикй элемнт в котром нужно создать элемент | |
; SI - Указатель на букву с котрой нужно попытаться прочитать Число | |
; Изменяет SI в случаае успеха JNZ | |
; Не изменяет SI если прочитать не удалося JZ | |
; --------------------------------------------------------------------} | |
mov ecx,0 ; // Длина прочитаного слова равна 0 | |
call ЧИТ_КАВЫЧКУ_С_SI_В_DX; // Читает слово с строки SI Возвращает слово DX | |
jz .ВЫХОД ; // Если прочитать не удалося Выход | |
;-------------------------; | |
call ДЛИНА_СТРОКИ_DX_В_CX ; // Запоминаю длину строки в CX; | |
;-------------------------; | |
pushad ; | |
mov eSi,edx ; // Имя элемента | |
mov ebx,edx ; // Значение элемента | |
mov al,ТИП_СТРО ; // Тип Строка | |
mov ah,0 ; // Не участвует в поиске поками что | |
call ЭЛЕ_СОЗДАТЬ ; // Создаю Элемнт добавлю в уонец элемнта DI | |
popad ; | |
;-------------------------; | |
add eSI,eCX ; // Увеличиваю Указатель на длину слова CX | |
add esi,2 ; | |
;-------------------------; | |
.ВЫХОД: | |
;-------------------------; | |
call ВОЗВРАТИТЬ_SI ; // Возвращает Указатель на читаемое слово | |
test ecx,ecx ; // Если что то удалося прочитать CX<>0 | |
popad ; // Если прочитать не удалося Si не меняеться | |
ret ; | |
END IF ;} | |
;} | |
;==============================================================================} | |
ДОП_ТИП_СЛОВ:;{ Определяет доп типы слов в списке элемента DI ; Сюда еще вернуться нада будет убрать BX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; { ОПИСАНИЕ | |
; В этом блоку из программы удаляються не нужные слова | |
; Например ( 2 * 4 ) или ( 2 умножить на 4) Частица НА удаляеться ) | |
; Так же тут идет привдение логических типов например | |
; Преобразует слова TRUE ПРАВДА в число 1 | |
; ПРеобразует слова FALSE ЛОЖ в число 0 | |
;} | |
call ЭЛЕ_ВЛО ; // первый вложеный элемент элемента DI | |
; | |
;-----------------------; | |
.ЦИКЛ: test ax,ax ; // Если в AX = 0 ТО выход | |
jz .ВЫХОД ; | |
mov di,ax ; // Переносим результат из AX в DI | |
call ЭЛЕ_СЛЕ ; // Переходим к следующему элменту | |
mov bx,ax ; // Запоминаем адрес след элемента в BX | |
;-----------------------; | |
call ЭЛЕ_КОД ; // Читаем код элемента у каждого слова есть код в словаре | |
mov si,.ЛОГИЧ ; // Тут видимо ЛОгический тип аааа точно | |
call ПОИСК_AX_В_СТР_SI ; // В SI Список 2 операций например := <= | |
jnz .ЭТО_ЛОГИКА ; // Ищит одну из комбинаций | |
;-----------------------; | |
mov si,.УДАЛЯЕМЫЕ ; | |
call ПОИСК_AX_В_СТР_SI ; | |
jnz .ЭТО_УДАЛ ; | |
.ДАЛЕЕ: call ЭЛЕ_СЛЕ ; // Переходим к следующему элементу в списке | |
jmp .ЦИКЛ ; // Адр след элемнта в AX | |
;-----------------------l | |
.ЭТО_УДАЛ: | |
;-----------------------; // А тут удаляемые слова из программы | |
call ЭЛЕ_УДАЛИТЬ ; // Пустые выражения | |
mov ax,bx ; // Задумвалося например | |
jmp .ЦИКЛ ; // Если пишеш УМНОЖИТЬ Вместо * | |
;-----------------------; // УМНОЖИТЬ НА удаляемое слово НА | |
.ЭТО_ЛОГИКА:call ЭЛЕ_СТР_В_ЛОГ ; | |
jmp .ДАЛЕЕ ; | |
;-----------------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
.ЗНАКИ : DW КОД_КОМ_ЛОГИ,КОД_КОМ_ЛОГИЛИ,0; // Через заптяую я тут перечислял коды операций | |
.ЛОГИЧ : DW КОД_КОМ_ПРАВДА,КОД_КОМ_ЛОЖ,0 ; // Тут логические выражения ПРАВДА , ЛОЖ | |
.УДАЛЯЕМЫЕ: DW КОД_КОМ_НА,0 ; // А тут удаляемые слова котрые не нужны | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; { ОПИСАНИЕ | |
; В этом блоку из программы удаляються не нужные слова | |
; Например ( 2 * 4 ) или ( 2 умножить на 4) Частица НА удаляеться ) | |
; Так же тут идет привдение логических типов например | |
; Преобразует слова TRUE ПРАВДА в число 1 | |
; ПРеобразует слова FALSE ЛОЖ в число 0 | |
;} | |
call ЭЛЕ_ВЛО ; // первый вложеный элемент элемента DI | |
; | |
;-----------------------; | |
.ЦИКЛ: test ax,ax ; // Если в AX = 0 ТО выход | |
jz .ВЫХОД ; | |
mov di,ax ; // Переносим результат из AX в DI | |
call ЭЛЕ_СЛЕ ; // Переходим к следующему элменту | |
mov bx,ax ; // Запоминаем адрес след элемента в BX | |
;-----------------------; | |
call ЭЛЕ_КОД ; // Читаем код элемента у каждого слова есть код в словаре | |
mov si,.ЛОГИЧ ; // Тут видимо ЛОгический тип аааа точно | |
call ПОИСК_AX_В_СТР_SI ; // В SI Список 2 операций например := <= | |
jnz .ЭТО_ЛОГИКА ; // Ищит одну из комбинаций | |
;-----------------------; | |
mov si,.УДАЛЯЕМЫЕ ; | |
call ПОИСК_AX_В_СТР_SI ; | |
jnz .ЭТО_УДАЛ ; | |
.ДАЛЕЕ: call ЭЛЕ_СЛЕ ; // Переходим к следующему элементу в списке | |
jmp .ЦИКЛ ; // Адр след элемнта в AX | |
;-----------------------l | |
.ЭТО_УДАЛ: | |
;-----------------------; // А тут удаляемые слова из программы | |
call ЭЛЕ_УДАЛИТЬ ; // Пустые выражения | |
mov ax,bx ; // Задумвалося например | |
jmp .ЦИКЛ ; // Если пишеш УМНОЖИТЬ Вместо * | |
;-----------------------; // УМНОЖИТЬ НА удаляемое слово НА | |
.ЭТО_ЛОГИКА:call ЭЛЕ_СТР_В_ЛОГ ; | |
jmp .ДАЛЕЕ ; | |
;-----------------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
.ЗНАКИ : DW КОД_КОМ_ЛОГИ,КОД_КОМ_ЛОГИЛИ,0; // Через заптяую я тут перечислял коды операций | |
.ЛОГИЧ : DW КОД_КОМ_ПРАВДА,КОД_КОМ_ЛОЖ,0 ; // Тут логические выражения ПРАВДА , ЛОЖ | |
.УДАЛЯЕМЫЕ: DW КОД_КОМ_НА,0 ; // А тут удаляемые слова котрые не нужны | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; { ОПИСАНИЕ | |
; В этом блоку из программы удаляються не нужные слова | |
; Например ( 2 * 4 ) или ( 2 умножить на 4) Частица НА удаляеться ) | |
; Так же тут идет привдение логических типов например | |
; Преобразует слова TRUE ПРАВДА в число 1 | |
; ПРеобразует слова FALSE ЛОЖ в число 0 | |
;} | |
call ЭЛЕ_ВЛО ; // первый вложеный элемент элемента DI | |
; | |
;-----------------------; | |
.ЦИКЛ: test eax,eax ; // Если в AX = 0 ТО выход | |
jz .ВЫХОД ; | |
mov edi,eax ; // Переносим результат из AX в DI | |
call ЭЛЕ_СЛЕ ; // Переходим к следующему элменту | |
mov ebx,eax ; // Запоминаем адрес след элемента в BX | |
;-----------------------; | |
call ЭЛЕ_КОД ; // Читаем код элемента у каждого слова есть код в словаре | |
mov esi,.ЛОГИЧ ; // Тут видимо ЛОгический тип аааа точно | |
call ПОИСК_AX_В_СТР_SI ; // В SI Список 2 операций например := <= | |
jnz .ЭТО_ЛОГИКА ; // Ищит одну из комбинаций | |
;-----------------------; | |
mov esi,.УДАЛЯЕМЫЕ ; | |
call ПОИСК_AX_В_СТР_SI ; | |
jnz .ЭТО_УДАЛ ; | |
.ДАЛЕЕ: call ЭЛЕ_СЛЕ ; // Переходим к следующему элементу в списке | |
jmp .ЦИКЛ ; // Адр след элемнта в AX | |
;-----------------------l | |
.ЭТО_УДАЛ: | |
;-----------------------; // А тут удаляемые слова из программы | |
call ЭЛЕ_УДАЛИТЬ ; // Пустые выражения | |
mov eax,ebx ; // Задумвалося например | |
jmp .ЦИКЛ ; // Если пишеш УМНОЖИТЬ Вместо * | |
;-----------------------; // УМНОЖИТЬ НА удаляемое слово НА | |
.ЭТО_ЛОГИКА:call ЭЛЕ_СТР_В_ЛОГ ; | |
jmp .ДАЛЕЕ ; | |
;-----------------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
.ЗНАКИ : DD КОД_КОМ_ЛОГИ,КОД_КОМ_ЛОГИЛИ,0; // Через заптяую я тут перечислял коды операций | |
.ЛОГИЧ : DD КОД_КОМ_ПРАВДА,КОД_КОМ_ЛОЖ,0 ; // Тут логические выражения ПРАВДА , ЛОЖ | |
.УДАЛЯЕМЫЕ: DD КОД_КОМ_НА,0 ; // А тут удаляемые слова котрые не нужны | |
END IF ;} | |
; А пока тут размещю | |
ЭЛЕ_СТР_В_ЛОГ:;{ Меняет тип элемнта с строки на логику | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
;-----------------------; | |
Mov si,DI ; // В Si Записываю адрес элемента с логикой | |
add SI,ЭЛ_ТИП ; // ПРибавляю смещение ТИПА меняю тип элемнта | |
mov Byte [si],ТИП_ЧИСЛ ; // На число вся логика представлена как 1 и 0 | |
;-----------------------; | |
CALL ЭЛЕ_КОД ; // Например TRUE это 1 ПРАВДА тоже 1 FALSE 0 | |
cmp ax,КОД_КОМ_ЛОЖ ; // ПРоверяем правда или лож | |
mov dx,0 ; // ПО умолчанию лож 0 | |
jz .ЭТО_ЛОЖ ; // Если ЛОж Переход определяем по коду слова | |
Mov dx,1 ; // Если же не лож то значит правда то биш 1 ))) | |
.ЭТО_ЛОЖ:;-----------------------; // СТрано такой огромнгый блок а всего то для | |
call ЭЛЕ_ЗНА ; // TRUE хмм............ | |
call УДАЛИТЬ_СТРОКУ_AX ; // Освобождаю строку что бы память не занимала | |
mov si,Di ; // Потому что элемент теперь число | |
add si,ЭЛ_ЗНА ; | |
mov word [si],dx ; // Записываю | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
;-----------------------; | |
Mov si,DI ; // В Si Записываю адрес элемента с логикой | |
add SI,ЭЛ_ТИП ; // ПРибавляю смещение ТИПА меняю тип элемнта | |
mov Byte [si],ТИП_ЧИСЛ ; // На число вся логика представлена как 1 и 0 | |
;-----------------------; | |
CALL ЭЛЕ_КОД ; // Например TRUE это 1 ПРАВДА тоже 1 FALSE 0 | |
cmp ax,КОД_КОМ_ЛОЖ ; // ПРоверяем правда или лож | |
mov dx,0 ; // ПО умолчанию лож 0 | |
jz .ЭТО_ЛОЖ ; // Если ЛОж Переход определяем по коду слова | |
Mov dx,1 ; // Если же не лож то значит правда то биш 1 ))) | |
.ЭТО_ЛОЖ:;-----------------------; // СТрано такой огромнгый блок а всего то для | |
call ЭЛЕ_ЗНА ; // TRUE хмм............ | |
call УДАЛИТЬ_СТРОКУ_AX ; // Освобождаю строку что бы память не занимала | |
mov si,Di ; // Потому что элемент теперь число | |
add si,ЭЛ_ЗНА ; | |
mov word [si],dx ; // Записываю | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
;-----------------------; | |
Mov esi,eDI ; // В Si Записываю адрес элемента с логикой | |
add eSI,ЭЛ_ТИП ; // ПРибавляю смещение ТИПА меняю тип элемнта | |
mov [esi],Byte ТИП_ЧИСЛ ; // На число вся логика представлена как 1 и 0 | |
;-----------------------; | |
CALL ЭЛЕ_КОД ; // Например TRUE это 1 ПРАВДА тоже 1 FALSE 0 | |
cmp eax,КОД_КОМ_ЛОЖ ; // ПРоверяем правда или лож | |
mov edx,0 ; // ПО умолчанию лож 0 | |
jz .ЭТО_ЛОЖ ; // Если ЛОж Переход определяем по коду слова | |
Mov edx,1 ; // Если же не лож то значит правда то биш 1 ))) | |
.ЭТО_ЛОЖ:;-----------------------; // СТрано такой огромнгый блок а всего то для | |
call ЭЛЕ_ЗНА ; // TRUE хмм............ | |
call УДАЛИТЬ_СТРОКУ_AX ; // Освобождаю строку что бы память не занимала | |
mov esi,eDi ; // Потому что элемент теперь число | |
add esi,ЭЛ_ЗНА ; | |
mov [esi],edx ; // Записываю | |
popad ; | |
ret ; | |
END IF ;} | |
;} | |
;==============================================================================} | |
ВЛО_СКО :;{ Вкладывание скобок (SI)(SI+1) в списке элемента DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; { ОПИСАНИЕ | |
; Вложение скобок то есть например (2 3 4 5 и тд..) | |
; Внутри элемента скобка будет списко 2 3 4 5 и тд... | |
; ПОследняя скобка закрывающаяся удаляеться | |
;} | |
mov dx,di ; // Запоминаем адрес элемента котирый сканируем | |
mov cx,DI ; // По умолчани. контенер равен сканируемуму элемегту | |
Call ЭЛЕ_ВЛО ; // Читаем первый вложеный Элемент в списке | |
.ЦИКЛ: ;-----------------; | |
test ax,ax ; // ПРоверяем есть ли элемент ил элементы кончилися | |
JZ .КЦИКЛ ; | |
mov di,ax ; | |
;-----------------; | |
call ЭЛЕ_СЛЕ ; // ПОлучаем следующий элемент списка и запоминаем его на всяк случай | |
mov bx,ax ; | |
;-----------------; | |
call ЭЛЕ_КОД ; // Читаем Код имени элемента | |
;-----------------; | |
cmp cx,dx ; // Провека что бы контенер не был равен сканируемому элемнту в таком случае мы в него складываем даллее идущие элементы | |
jz .НЕДОБАВЛЯЕМ; | |
call .ДОБ_DI_В_CX ; // добавить элмент DI(Сканируемый элеминт) в элемент CX(Коннтенер ) | |
;-----------------; | |
.НЕДОБАВЛЯЕМ: | |
;-----------------; | |
cmp ax,SI; | |
JNZ .ДАЛЕЕ2 ; | |
mov cx,di ; | |
;-----------------; | |
.ДАЛЕЕ2: ;-----------------; | |
dec ax ; // SI+1 код закрывающейся скобки | |
cmp aX,SI ; | |
JNZ .ДАЛЕЕ ; | |
call .ЭЛЕ_Р_CX ; // Назначаем родительский элемнт CX в CX перемещаеимся в конетенере в родительский элемнт | |
;-----------------; | |
.ДАЛЕЕ: ;-----------------; | |
mov ax,bx ; | |
jmp .ЦИКЛ ; | |
;-----------------; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
.ЭЛЕ_Р_CX: | |
;----------------; | |
push di ; | |
mov di,cx ; | |
call ЭЛЕ_РОДИТЕЛЬ; | |
mov cx,DI ; | |
pop DI ; | |
ret ; | |
;----------------; | |
.ДОБ_DI_В_CX: | |
;----------------; | |
pushad ; | |
call ЭЛЕ_КОД ; // ЧИтаем код элемента | |
cmp ax,КОД_КОМ_ЗСКОБКА; | |
jz .ПРОСТО_УДА ; | |
mov dx,di ; | |
mov di,CX ; | |
Call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI; | |
jmp .КВЫХОДУ ; | |
.ПРОСТО_УДА: | |
call ЭЛЕ_ОСВОБОДИ; | |
.КВЫХОДУ: | |
popad ; | |
ret ; | |
;----------------; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; { ОПИСАНИЕ | |
; Вложение скобок то есть например (2 3 4 5 и тд..) | |
; Внутри элемента скобка будет списко 2 3 4 5 и тд... | |
; ПОследняя скобка закрывающаяся удаляеться | |
;} | |
mov dx,di ; // Запоминаем адрес элемента котирый сканируем | |
mov cx,DI ; // По умолчани. контенер равен сканируемуму элемегту | |
Call ЭЛЕ_ВЛО ; // Читаем первый вложеный Элемент в списке | |
.ЦИКЛ: ;-----------------; | |
test ax,ax ; // ПРоверяем есть ли элемент ил элементы кончилися | |
JZ .КЦИКЛ ; | |
mov di,ax ; | |
;-----------------; | |
call ЭЛЕ_СЛЕ ; // ПОлучаем следующий элемент списка и запоминаем его на всяк случай | |
mov bx,ax ; | |
;-----------------; | |
call ЭЛЕ_КОД ; // Читаем Код имени элемента | |
;-----------------; | |
cmp cx,dx ; // Провека что бы контенер не был равен сканируемому элемнту в таком случае мы в него складываем даллее идущие элементы | |
jz .НЕДОБАВЛЯЕМ; | |
call .ДОБ_DI_В_CX ; // добавить элмент DI(Сканируемый элеминт) в элемент CX(Коннтенер ) | |
;-----------------; | |
.НЕДОБАВЛЯЕМ: | |
;-----------------; | |
cmp ax,SI; | |
JNZ .ДАЛЕЕ2 ; | |
mov cx,di ; | |
;-----------------; | |
.ДАЛЕЕ2: ;-----------------; | |
dec ax ; // SI+1 код закрывающейся скобки | |
cmp aX,SI ; | |
JNZ .ДАЛЕЕ ; | |
call .ЭЛЕ_Р_CX ; // Назначаем родительский элемнт CX в CX перемещаеимся в конетенере в родительский элемнт | |
;-----------------; | |
.ДАЛЕЕ: ;-----------------; | |
mov ax,bx ; | |
jmp .ЦИКЛ ; | |
;-----------------; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
.ЭЛЕ_Р_CX: | |
;----------------; | |
push di ; | |
mov di,cx ; | |
call ЭЛЕ_РОДИТЕЛЬ; | |
mov cx,DI ; | |
pop DI ; | |
ret ; | |
;----------------; | |
.ДОБ_DI_В_CX: | |
;----------------; | |
pushad ; | |
call ЭЛЕ_КОД ; // ЧИтаем код элемента | |
cmp ax,КОД_КОМ_ЗСКОБКА; | |
jz .ПРОСТО_УДА ; | |
mov dx,di ; | |
mov di,CX ; | |
Call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI; | |
jmp .КВЫХОДУ ; | |
.ПРОСТО_УДА: | |
call ЭЛЕ_ОСВОБОДИ; | |
.КВЫХОДУ: | |
popad ; | |
ret ; | |
;----------------; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; { ОПИСАНИЕ | |
; Вложение скобок то есть например (2 3 4 5 и тд..) | |
; Внутри элемента скобка будет списко 2 3 4 5 и тд... | |
; ПОследняя скобка закрывающаяся удаляеться | |
;} | |
mov edx,edi ; // Запоминаем адрес элемента котирый сканируем | |
mov ecx,eDI ; // По умолчани. контенер равен сканируемуму элемегту | |
Call ЭЛЕ_ВЛО ; // Читаем первый вложеный Элемент в списке | |
.ЦИКЛ: ;-----------------; | |
test eax,eax ; // ПРоверяем есть ли элемент ил элементы кончилися | |
JZ .КЦИКЛ ; | |
mov edi,eax ; | |
;-----------------; | |
call ЭЛЕ_СЛЕ ; // ПОлучаем следующий элемент списка и запоминаем его на всяк случай | |
mov ebx,eax ; | |
;-----------------; | |
call ЭЛЕ_КОД ; // Читаем Код имени элемента | |
;-----------------; | |
cmp ecx,edx ; // Провека что бы контенер не был равен сканируемому элемнту в таком случае мы в него складываем даллее идущие элементы | |
jz .НЕДОБАВЛЯЕМ; | |
call .ДОБ_DI_В_CX ; // добавить элмент DI(Сканируемый элеминт) в элемент CX(Коннтенер ) | |
;-----------------; | |
.НЕДОБАВЛЯЕМ: | |
;-----------------; | |
cmp eax,eSI ; | |
JNZ .ДАЛЕЕ2 ; | |
mov ecx,edi ; | |
;-----------------; | |
.ДАЛЕЕ2: ;-----------------; | |
dec eax ; // SI+1 код закрывающейся скобки | |
cmp eaX,eSI ; | |
JNZ .ДАЛЕЕ ; | |
call .ЭЛЕ_Р_CX ; // Назначаем родительский элемнт CX в CX перемещаеимся в конетенере в родительский элемнт | |
;-----------------; | |
.ДАЛЕЕ: ;-----------------; | |
mov eax,ebx ; | |
jmp .ЦИКЛ ; | |
;-----------------; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
.ЭЛЕ_Р_CX: | |
;----------------; | |
push edi ; | |
mov edi,ecx ; | |
call ЭЛЕ_РОДИТЕЛЬ; | |
mov ecx,eDI ; | |
pop eDI ; | |
ret ; | |
;----------------; | |
.ДОБ_DI_В_CX: | |
;----------------; | |
pushad ; | |
call ЭЛЕ_КОД ; // ЧИтаем код элемента | |
cmp eax,КОД_КОМ_ЗСКОБКА; | |
jz .ПРОСТО_УДА ; | |
mov edx,edi ; | |
mov edi,eCX ; | |
Call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI; | |
jmp .КВЫХОДУ ; | |
.ПРОСТО_УДА: | |
call ЭЛЕ_ОСВОБОДИ; | |
.КВЫХОДУ: | |
popad ; | |
ret ; | |
;----------------; | |
END IF ;} | |
;==============================================================================} | |
ВЛО_МАТ :;{ Вкладываени мат Si операций в списке DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
call ЭЛЕ_ВЛО ; // Читаем первый вложеный элемент в элементе адрес котрого указан в регистре DI возврашает AX | |
.ЦИКЛ: ;---------------------; | |
test ax,ax ; | |
jz .ВЫХОД ; // ПРоверяем если элемнты кончилися то выход | |
mov di,ax ; | |
;---------------------; | |
call ВЛО_МАТ ; | |
;---------------------; | |
call ЭЛЕ_ПРЕ ; // Проверяем наличае следующего элемнета | |
jz .ДАЛЕЕ ; | |
mov cx,ax ; // Запоминаем предыдущий элемент в CX | |
;---------------------; | |
call ЭЛЕ_СЛЕ ; // Проверяем наличае следующего элемнета | |
jz .ВЫХОД ; | |
mov dx,ax ; // Запоминаем следующий элемент в DX | |
;---------------------; | |
call ЭЛЕ_КОД ; // Читаем адрес строки имени элемнта DI вовращает в AX | |
call ПОИСК_AX_В_СТР_SI; | |
jnz .ВЛОЖИТЬ ; | |
;---------------------; | |
jmp .ДАЛЕЕ ; | |
;---------------------; | |
.ВЛОЖИТЬ: | |
;---------------------; | |
push di ; | |
call ДОБ_ЭЛЕ_СX_В_ЭЛЕ_DI; // Добавляем предыдущий элемент | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI; // Добаавляем следующий элемнт | |
mov di,dx ; | |
call ВЛО_МАТ ; | |
pop di ; | |
;---------------------; | |
.ДАЛЕЕ: call ЭЛЕ_СЛЕ ; | |
jmp .ЦИКЛ ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad | |
call ЭЛЕ_ВЛО ; // Читаем первый вложеный элемент в элементе адрес котрого указан в регистре DI возврашает AX | |
.ЦИКЛ: ;---------------------; | |
test ax,ax ; | |
jz .ВЫХОД ; // ПРоверяем если элемнты кончилися то выход | |
mov di,ax ; | |
;---------------------; | |
call ВЛО_МАТ ; | |
;---------------------; | |
call ЭЛЕ_ПРЕ ; // Проверяем наличае следующего элемнета | |
jz .ДАЛЕЕ ; | |
mov cx,ax ; // Запоминаем предыдущий элемент в CX | |
;---------------------; | |
call ЭЛЕ_СЛЕ ; // Проверяем наличае следующего элемнета | |
jz .ВЫХОД ; | |
mov dx,ax ; // Запоминаем следующий элемент в DX | |
;---------------------; | |
call ЭЛЕ_КОД ; // Читаем адрес строки имени элемнта DI вовращает в AX | |
call ПОИСК_AX_В_СТР_SI; | |
jnz .ВЛОЖИТЬ ; | |
;---------------------; | |
jmp .ДАЛЕЕ ; | |
;---------------------; | |
.ВЛОЖИТЬ: | |
;---------------------; | |
push di ; | |
call ДОБ_ЭЛЕ_СX_В_ЭЛЕ_DI; // Добавляем предыдущий элемент | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI; // Добаавляем следующий элемнт | |
mov di,dx ; | |
call ВЛО_МАТ ; | |
pop di ; | |
;---------------------; | |
.ДАЛЕЕ: call ЭЛЕ_СЛЕ ; | |
jmp .ЦИКЛ ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad | |
call ЭЛЕ_ВЛО ; // Читаем первый вложеный элемент в элементе адрес котрого указан в регистре DI возврашает AX | |
.ЦИКЛ: ;---------------------; | |
test eax,eax ; | |
jz .ВЫХОД ; // ПРоверяем если элемнты кончилися то выход | |
mov edi,eax ; | |
;---------------------; | |
call ВЛО_МАТ ; | |
;---------------------; | |
call ЭЛЕ_ПРЕ ; // Проверяем наличае следующего элемнета | |
jz .ДАЛЕЕ ; | |
mov ecx,eax ; // Запоминаем предыдущий элемент в CX | |
;---------------------; | |
call ЭЛЕ_СЛЕ ; // Проверяем наличае следующего элемнета | |
jz .ВЫХОД ; | |
mov edx,eax ; // Запоминаем следующий элемент в DX | |
;---------------------; | |
call ЭЛЕ_КОД ; // Читаем адрес строки имени элемнта DI вовращает в AX | |
call ПОИСК_AX_В_СТР_SI; | |
jnz .ВЛОЖИТЬ ; | |
;---------------------; | |
jmp .ДАЛЕЕ ; | |
;---------------------; | |
.ВЛОЖИТЬ: | |
;---------------------; | |
push edi ; | |
call ДОБ_ЭЛЕ_СX_В_ЭЛЕ_DI; // Добавляем предыдущий элемент | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI; // Добаавляем следующий элемнт | |
mov edi,edx ; | |
call ВЛО_МАТ ; | |
pop edi ; | |
;---------------------; | |
.ДАЛЕЕ: call ЭЛЕ_СЛЕ ; | |
jmp .ЦИКЛ ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
;==============================================================================} | |
ВЛО_ПАР :;{ Вложение параметров или блоков начинающихся с символа cx=(или фигурная скобка summa(a,b) | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ЭЛЕ_ВЛО ; // Читаем первый вложеный элемнт | |
.ЦИКЛ: ;---------------------; | |
test ax,ax ; | |
jz .ВЫХОД ; | |
mov di,ax ; | |
;---------------------; | |
call ВЛО_ПАР ; | |
;---------------------; | |
call ЭЛЕ_СЛЕ ; // Проверяем наличае следующего элемнета | |
mov dx,ax ; // Запоминаем следующий элемент в DX | |
test dx,dx ; // Если нет Следующего элемнта то пропускаем | |
jz .ВЫХОД ; | |
;---------------------; | |
call ЭЛЕ_ТИП ; // Во первых это дожэно быть слово | |
cmp ax,ТИП_СТРО ; | |
jnz .ДАЛЕЕ ; | |
call ЭЛЕ_КОД ; // Во первых это дожэно быть слово | |
cmp ax,МАКС_РЕЗЕРВ_СЛОВО; | |
jbE .ДАЛЕЕ ; | |
;----------------------; | |
push di ; | |
mov di,dx ; | |
call ЭЛЕ_КОД ; // Читаем код следующего элемента | |
cmp ax,cx ; | |
pop di ; | |
jnz .ДАЛЕЕ ; | |
;----------------------; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI; // Добаавляем следующий элемнт | |
cmp ax,КОД_КОМ_НАЧАЛО ; // Сравниваем первую букву вкладываемого элемента с началом блока | |
jnz .ЭТО_НЕ_ФУН ; | |
call ЭЛЕ_КОД ; | |
mov si,.УСЛОВИЕ_ЦИИКЛЫ; // что бы не забыть qwe().asd().zxc():=cvb().sdf().cvb(); | |
call ПОИСК_AX_В_СТР_SI ; | |
jnz .ЭТО_НЕ_ФУН ; | |
mov si,di ; | |
add si,ЭЛ_ФУН ; | |
mov byte[si],1 ; | |
.ЭТО_НЕ_ФУН: | |
mov ax,di ; | |
jmp .ЦИКЛ ; | |
.ДАЛЕЕ: ;----------------------; | |
call ЭЛЕ_СЛЕ ; | |
;----------------------; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
.ВЫХОД: | |
popad; | |
ret; | |
.УСЛОВИЕ_ЦИИКЛЫ: DW КОД_КОМ_ЕСЛИ,КОД_КОМ_ПОКА,0; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ЭЛЕ_ВЛО ; // Читаем первый вложеный элемнт | |
.ЦИКЛ: ;---------------------; | |
test ax,ax ; | |
jz .ВЫХОД ; | |
mov di,ax ; | |
;---------------------; | |
call ВЛО_ПАР ; | |
;---------------------; | |
call ЭЛЕ_СЛЕ ; // Проверяем наличае следующего элемнета | |
mov dx,ax ; // Запоминаем следующий элемент в DX | |
test dx,dx ; // Если нет Следующего элемнта то пропускаем | |
jz .ВЫХОД ; | |
;---------------------; | |
call ЭЛЕ_ТИП ; // Во первых это дожэно быть слово | |
cmp ax,ТИП_СТРО ; | |
jnz .ДАЛЕЕ ; | |
call ЭЛЕ_КОД ; // Во первых это дожэно быть слово | |
cmp ax,МАКС_РЕЗЕРВ_СЛОВО; | |
jbE .ДАЛЕЕ ; | |
;----------------------; | |
push di ; | |
mov di,dx ; | |
call ЭЛЕ_КОД ; // Читаем код следующего элемента | |
cmp ax,cx ; | |
pop di ; | |
jnz .ДАЛЕЕ ; | |
;----------------------; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI; // Добаавляем следующий элемнт | |
cmp ax,КОД_КОМ_НАЧАЛО ; // Сравниваем первую букву вкладываемого элемента с началом блока | |
jnz .ЭТО_НЕ_ФУН ; | |
call ЭЛЕ_КОД ; | |
mov si,.УСЛОВИЕ_ЦИИКЛЫ; // что бы не забыть qwe().asd().zxc():=cvb().sdf().cvb(); | |
call ПОИСК_AX_В_СТР_SI ; | |
jnz .ЭТО_НЕ_ФУН ; | |
mov si,di ; | |
add si,ЭЛ_ФУН ; | |
mov byte[si],1 ; | |
.ЭТО_НЕ_ФУН: | |
mov ax,di ; | |
jmp .ЦИКЛ ; | |
.ДАЛЕЕ: ;----------------------; | |
call ЭЛЕ_СЛЕ ; | |
;----------------------; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
.ВЫХОД: | |
popad; | |
ret; | |
.УСЛОВИЕ_ЦИИКЛЫ: DW КОД_КОМ_ЕСЛИ,КОД_КОМ_ПОКА,0; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ЭЛЕ_ВЛО ; // Читаем первый вложеный элемнт | |
.ЦИКЛ: ;---------------------; | |
test eax,eax ; | |
jz .ВЫХОД ; | |
mov edi,eax ; | |
;---------------------; | |
call ВЛО_ПАР ; | |
;---------------------; | |
call ЭЛЕ_СЛЕ ; // Проверяем наличае следующего элемнета | |
mov edx,eax ; // Запоминаем следующий элемент в DX | |
test edx,edx ; // Если нет Следующего элемнта то пропускаем | |
jz .ВЫХОД ; | |
;---------------------; | |
call ЭЛЕ_ТИП ; // Во первых это дожэно быть слово | |
cmp eax,ТИП_СТРО ; | |
jnz .ДАЛЕЕ ; | |
call ЭЛЕ_КОД ; // Во первых это дожэно быть слово | |
cmp eax,МАКС_РЕЗЕРВ_СЛОВО; | |
jbE .ДАЛЕЕ ; | |
;----------------------; | |
push edi ; | |
mov edi,edx ; | |
call ЭЛЕ_КОД ; // Читаем код следующего элемента | |
cmp eax,ecx ; | |
pop edi ; | |
jnz .ДАЛЕЕ ; | |
;----------------------; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI; // Добаавляем следующий элемнт | |
cmp eax,КОД_КОМ_НАЧАЛО ; // Сравниваем первую букву вкладываемого элемента с началом блока | |
jnz .ЭТО_НЕ_ФУН ; | |
call ЭЛЕ_КОД ; | |
mov esi,.УСЛОВИЕ_ЦИИКЛЫ; // что бы не забыть qwe().asd().zxc():=cvb().sdf().cvb(); | |
call ПОИСК_AX_В_СТР_SI ; | |
jnz .ЭТО_НЕ_ФУН ; | |
mov esi,edi ; | |
add esi,ЭЛ_ФУН ; | |
mov byte[esi],1 ; | |
.ЭТО_НЕ_ФУН: | |
mov eax,edi ; | |
jmp .ЦИКЛ ; | |
.ДАЛЕЕ: ;----------------------; | |
call ЭЛЕ_СЛЕ ; | |
;----------------------; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
.ВЫХОД: | |
popad; | |
ret; | |
.УСЛОВИЕ_ЦИИКЛЫ: DW КОД_КОМ_ЕСЛИ,КОД_КОМ_ПОКА,0; | |
END IF;} | |
;==============================================================================} | |
КОРРЕКЦИЯ :;{ Корреекция cтруктуры | |
pushad; | |
; Сдеась по идеи должна ыть какая то коррекция с готовой | |
; Структурой программы такм всякие шутковины | |
; Вобщем кагда сформирована структура | |
; Исполнительная тут можно чего нить наколдовать | |
; Например там скобки блоки ну вообщем подправлять | |
; Структуру ну или если не понятно может ошибки какие то | |
; Выводить предупредительные ))) вообщем на всякий случай | |
popad ; | |
ret ; | |
;==============================================================================} | |
ВЫПОЛНИТЬ_ЭЛ:;{ Запускает элемнт на выполнение | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ЭЛЕ_КОД ; | |
cmp ax,МАКСВЛО ; | |
ja .ФУНКЦИЯ ; | |
mov dx,2 ; | |
mul dl ; | |
add ax,ВЫПОЛНЕНИЕ; | |
mov si,ax ; | |
mov cx,[si] ; | |
call ЗАПУСТИТЬ_CX ; | |
jmp .ВЫХОД ; | |
.ФУНКЦИЯ: ;-----------------; | |
Call ВЫПОЛНИТЬ_ФУ ; | |
;-----------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ЭЛЕ_КОД ; | |
cmp ax,МАКСВЛО ; | |
ja .ФУНКЦИЯ ; | |
mov dx,2 ; | |
mul dl ; | |
add ax,ВЫПОЛНЕНИЕ; | |
mov si,ax ; | |
mov cx,[si] ; | |
call ЗАПУСТИТЬ_CX ; | |
jmp .ВЫХОД ; | |
.ФУНКЦИЯ: ;-----------------; | |
Call ВЫПОЛНИТЬ_ФУ ; | |
;-----------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov ecx,0; ; | |
call ЭЛЕ_КОД ; | |
cmp eax,МАКСВЛО ; | |
ja .ФУНКЦИЯ ; | |
mov edx,2 ; | |
mul dl ; | |
add ax,ВЫПОЛНЕНИЕ; | |
mov esi,eax ; | |
mov cx,[esi] ; | |
call ЗАПУСТИТЬ_CX ; | |
jmp .ВЫХОД ; | |
.ФУНКЦИЯ: ;-----------------; | |
Call ВЫПОЛНИТЬ_ФУ ; | |
;-----------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
ВЫПОЛНЕНИЕ: | |
DW ВКОД_ТЕК_ПУСТО ; 0 | |
DW ВКОД_ТЕК_СЛОЖЕНИЕ ; 1 | |
DW ВКОД_ТЕК_ВЫЧИТАНИЕ ; 2 | |
DW ВКОД_ТЕК_УМНОЖЕНИЕ ; 3 | |
DW ВКОД_ТЕК_ДЕЛЕНИЕ ; 4 | |
DW ВКОД_ТЕК_ОСТАТОК ; 5 | |
DW ВКОД_ТЕК_ПРИСВОЕНИЕ; 6 | |
DW ВКОД_ТЕК_РАВНО ; 7 | |
DW ВКОД_ТЕК_НЕРАВНО ; 8 | |
DW ВКОД_ТЕК_БОЛЬШЕ ; 9 | |
DW ВКОД_ТЕК_МЕНЬШЕ ; 10 | |
DW ВКОД_ТЕК_МЕНРА ; 11 | |
DW ВКОД_ТЕК_БОЛРА ; 12 | |
DW ВКОД_ТЕК_ЛОГИ ; 13 | |
DW ВКОД_ТЕК_ЛОГИЛИ ; 14 | |
DW ВКОД_ТЕК_ОСКОБ ; 15 | |
DW ВКОД_ТЕК_ЗСКОБ ; 16 | |
DW ВКОД_ТЕК_НАЧАЛО ; 17 | |
DW ВКОД_ТЕК_КОНЕЦ ; 18 | |
DW ВКОД_ТЕК_ЕСЛИ ; 19 | |
DW ВКОД_ТЕК_ПОКА ; 20 | |
DW ВКОД_ТЕК_ВЫВОД ; 21 | |
DW ВКОД_ТЕК_ВЫВОДСТ ; 22 | |
DW ВКОД_ТЕК_ЦИКЛ ; 23 | |
DW ВКОД_ТЕК_ВВОД ; 24 | |
DW ВКОД_ТЕК_ВВОДСТ ; 25 | |
DW ВКОД_ТЕК_ЧПОРТ ; 26 | |
DW ВКОД_ТЕК_ЧПАМЯТЬ ; 27 | |
DW ВКОД_ТЕК_ЗПОРТ ; 28 | |
DW ВКОД_ТЕК_ЗПАМЯТЬ ; 29 | |
DW ВКОД_ТЕК_ЗАПРОСИТЬ ; 30 | |
DW ВКОД_ТЕК_ОСВОБОДИТЬ; 31 | |
DW ВКОД_ТЕК_РОДИТЕЛЬ ; 32 | |
DW ВКОД_ТЕК_РЕЗЕРВ1 ; 33 | |
DW ВКОД_ТЕК_РЕЗЕРВ2 ; 34 | |
DW ВКОД_ТЕК_РЕЗЕРВ3 ; 35 | |
DW ВКОД_ТЕК_РЕЗЕРВ4 ; 36 | |
DW ВКОД_ТЕК_РЕЗЕРВ5 ; 37 | |
DW ВКОД_ТЕК_РЕЗЕРВ6 ; 38 | |
DW ВКОД_ТЕК_РЕЗЕРВ7 ; 39 | |
DW ВКОД_ТЕК_РАЗРЕШИТЬ ; 40 | |
DW ВКОД_ТЕК_ЗАПРЕТИТЬ ; 41 | |
МАКСВЛО=41; | |
;==============================================================================} | |
ВЫПОЛНИТЬ_ВЛ:;{ Выполняет вложеные элемнты элемнета DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ЭЛЕ_ВЛО ; | |
jz .ВЫХОД ; | |
.ЦИКЛ: ;----------------; | |
test ax,ax ; | |
jz .КЦИКЛ ; | |
mov di,ax ; | |
call ЭЛЕ_ФУН ; | |
jnz .ДАЛЕЕ ; | |
call ВЫПОЛНИТЬ_ЭЛ; | |
.ДАЛЕЕ: call ЭЛЕ_СЛЕ ; | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: ;----------------; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ЭЛЕ_ВЛО ; | |
jz .ВЫХОД ; | |
.ЦИКЛ: ;----------------; | |
test ax,ax ; | |
jz .КЦИКЛ ; | |
mov di,ax ; | |
call ЭЛЕ_ФУН ; | |
jnz .ДАЛЕЕ ; | |
call ВЫПОЛНИТЬ_ЭЛ; | |
.ДАЛЕЕ: call ЭЛЕ_СЛЕ ; | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: ;----------------; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ЭЛЕ_ВЛО ; | |
jz .ВЫХОД ; | |
.ЦИКЛ: ;----------------; | |
test eax,eax ; | |
jz .КЦИКЛ ; | |
mov edi,eax ; | |
call ЭЛЕ_ФУН ; | |
jnz .ДАЛЕЕ ; | |
call ВЫПОЛНИТЬ_ЭЛ; | |
.ДАЛЕЕ: call ЭЛЕ_СЛЕ ; | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: ;----------------; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ВЫПОЛНИТЬ_ПР:;{ Запускает ПРОЦЕС с элементом DI | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ; // Вот тут не правельно работает | |
call ЭЛЕ_ОСВОБОДИ; // Ладно не важно щас нереально в этом разобраться буду просто оптимизировать код | |
popad; | |
ret; | |
;==============================================================================} | |
ВЫПОЛНИТЬ_ОК:;{ Выполняет программу в окне DI | |
;{ ОПИСАНИЕ | |
; | |
; | |
; | |
;} | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;---------------------------------------------- | |
call ОКНО_ТЕК; | |
call РАЗ_НА_СЛОВА ; // Разбивка текста окна на слова | |
call ДОП_ТИП_СЛОВ ; // Дополнительные типы | |
mov SI, КОД_КОМ_ОСКОБКА; | |
call ВЛО_СКО ; // Вложене скобок | |
mov cx,КОД_КОМ_ОСКОБКА ; | |
Call ВЛО_ПАР ; // Вложение параметров | |
mov SI,КОД_КОМ_НАЧАЛО | |
call ВЛО_СКО ; // Вложене скобок | |
mov si,.УМНОЖДЕЛЕ ; | |
call ВЛО_МАТ ; // Вложение математических операций | |
mov si,.ПЛЮСМИНУС ; | |
call ВЛО_МАТ ; // Вложение математических операций | |
mov si,.ЛОГИЧОПЕР ; | |
call ВЛО_МАТ ; // Вложение математических операций | |
mov si,.ПРИСВАИВА ; | |
call ВЛО_МАТ ; // Вложение математических операций | |
mov cx,КОД_КОМ_НАЧАЛО ; // | |
Call ВЛО_ПАР ; // Вложение параметров | |
;---------------------------------------------- | |
mov ax,ВЫПОЛНИТЬ_ПР ;// Сдесь указываем процес | |
call ДОБАВИТЬ_ПРОЦЕС ;// Функцию котрую нужно запустить | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;---------------------------------------------- | |
call РАЗ_НА_СЛОВА ; // Разбивка текста окна на слова | |
call ДОП_ТИП_СЛОВ ; // Дополнительные типы | |
mov SI, КОД_КОМ_ОСКОБКА; | |
call ВЛО_СКО ; // Вложене скобок | |
mov SI,КОД_КОМ_НАЧАЛО | |
call ВЛО_СКО ; // Вложене скобок | |
mov si,.УМНОЖДЕЛЕ ; | |
call ВЛО_МАТ ; // Вложение математических операций | |
mov si,.ПЛЮСМИНУС ; | |
call ВЛО_МАТ ; // Вложение математических операций | |
mov si,.ЛОГИЧОПЕР ; | |
call ВЛО_МАТ ; // Вложение математических операций | |
mov si,.ПРИСВАИВА ; | |
call ВЛО_МАТ ; // Вложение математических операций | |
mov cx,КОД_КОМ_ОСКОБКА ; | |
Call ВЛО_ПАР ; // Вложение параметров | |
mov cx,КОД_КОМ_НАЧАЛО ; // | |
Call ВЛО_ПАР ; // Вложение параметров | |
;---------------------------------------------- | |
;call ВЫПОЛНИТЬ_ВЛ; // Вот тут не правельно работает | |
;call ЭЛЕ_ОСВОБОДИ; // Ладно не важно щас нереально в этом разобраться буду просто оптимизировать код | |
mov ax,ВЫПОЛНИТЬ_ПР ;// Сдесь указываем процес | |
call ДОБАВИТЬ_ПРОЦЕС ;// Функцию котрую нужно запустить | |
;mov [МОНИТОР_ОБЬЕКТ],DI; | |
;mov di,[КОР_ЭЛЕМ]; | |
;mov [МОНИТОР_ОБЬЕКТ],DI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;---------------------------------------------- | |
call ОКНО_ТЕК; | |
call РАЗ_НА_СЛОВА ; // Разбивка текста окна на слова | |
call ДОП_ТИП_СЛОВ ; // Дополнительные типы | |
mov ESI, КОД_КОМ_ОСКОБКА; | |
call ВЛО_СКО ; // Вложене скобок | |
mov ecx,КОД_КОМ_ОСКОБКА ; | |
Call ВЛО_ПАР ; // Вложение параметров | |
mov eSI,КОД_КОМ_НАЧАЛО | |
call ВЛО_СКО ; // Вложене скобок | |
mov esi,.УМНОЖДЕЛЕ ; | |
call ВЛО_МАТ ; // Вложение математических операций | |
mov esi,.ПЛЮСМИНУС ; | |
call ВЛО_МАТ ; // Вложение математических операций | |
mov esi,.ЛОГИЧОПЕР ; | |
call ВЛО_МАТ ; // Вложение математических операций | |
mov esi,.ПРИСВАИВА ; | |
call ВЛО_МАТ ; // Вложение математических операций | |
mov ecx,КОД_КОМ_НАЧАЛО ; // | |
Call ВЛО_ПАР ; // Вложение параметров | |
;---------------------------------------------- | |
mov eax,ВЫПОЛНИТЬ_ПР ;// Сдесь указываем процес | |
call ДОБАВИТЬ_ПРОЦЕС ;// Функцию котрую нужно запустить | |
popad; | |
ret; | |
END IF;} | |
.ПЛЮСМИНУС: DW КОД_КОМ_СЛОЖЕНИЕ,КОД_КОМ_ВЫЧИТАНИЕ,0; | |
.УМНОЖДЕЛЕ: DW КОД_КОМ_УМНОЖЕНИЕ,КОД_КОМ_ДЕЛЕНИЕ,0; | |
.ЛОГИЧОПЕР: DW КОД_КОМ_БОЛЬШЕ,КОД_КОМ_МЕНЬШЕ,КОД_КОМ_РАВНО,КОД_КОМ_НЕРАВНО,КОД_КОМ_МЕНРА,КОД_КОМ_БОЛРА,0; | |
.ПРИСВАИВА: DW КОД_КОМ_ПРИСВОЕНИЕ,0; | |
ЭЛЕ_ПРОСМОТР:;{ Просмотр элемента и его характеристик DI | |
pushad ; | |
;-----------------------; | |
mov cx,DI ;// Запоминаем адрес просматриваемого элемента ; | |
;-----------------------; | |
;-----------------------;// Печатаем пробелы равное количесвту элемнтов предков | |
mov SI,Di ;// Печать отступов в количестве предков сколько предков стока и отступов | |
ADD SI,ЭЛ_РОД ; | |
mov ax,[si] ; | |
.ЦИКЛ: ; | |
test ax,ax ; | |
jz .КЦИКЛ ; | |
; | |
call ЭКРАН_ВЫВОД_ПРОБЕЛА; | |
mov si,ax ; | |
add si,ЭЛ_РОД ; | |
mov ax,[si] ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: ;-----------------------; | |
;-----------------------; | |
MOV DI,.ТЕКСТ_АДР_ЭЛ ;// Печать надписи (адреса элемента) | |
call ЭКРАН_ВЫВОД_СТРОКИ ; | |
mov si,cx ; | |
mov ax,si ; | |
call ЭКРАН_ВЫВОД_ЧИСЛА ;// печать адреса расположения элемента | |
call ЭКРАН_ВЫВОД_ПРОБЕЛА;// Пробел разделитель что бы не слипалися надпси | |
;-----------------------; | |
;-----------------------; | |
MOV DI,.ТЕКСТ_ТИП_ЭЛ ;// Печать надпсии (ТИП ЭЛЕМЕНТА) | |
Call ЭКРАН_ВЫВОД_СТРОКИ ; | |
mov DI,CX ; | |
Call ЭЛЕ_ТИП ; | |
call ЭКРАН_ВЫВОД_ЧИСЛА ;// Печать самого типа ввиде числа типы описаны в разделе типы элементов | |
call ЭКРАН_ВЫВОД_ПРОБЕЛА; | |
;-----------------------; | |
;-----------------------; | |
MOV DI,.ТЕКСТ_ФУН_ЭЛ ;// Печать слова (Являеться ли функцией) | |
call ЭКРАН_ВЫВОД_СТРОКИ ; | |
mov DI,CX ; | |
Call ЭЛЕ_ФУН ; | |
call ЭКРАН_ВЫВОД_ЧИСЛА ;// Вывод являеться ли функцией в виде числа если 1 то являеться | |
call ЭКРАН_ВЫВОД_ПРОБЕЛА; | |
;-----------------------; | |
;-----------------------; | |
MOV DI,.ТЕКСТ_КОД_ЭЛ ;// Печать надпсии кода элемента каждому слову сосотвествет код из словаря | |
call ЭКРАН_ВЫВОД_СТРОКИ ;// Коды предназначены для быстрого поиска нужных элементов | |
mov DI,CX ; | |
Call ЭЛЕ_КОД ; | |
call ЭКРАН_ВЫВОД_ЧИСЛА ; | |
call ЭКРАН_ВЫВОД_ПРОБЕЛА; | |
;-----------------------; | |
;------------------------; | |
;MOV DI,.ТЕКСТ_РОД_ЭЛ ;// Печать адреса родительского элемента | |
;call ЭКРАН_ВЫВОД_СТРОКИ ; | |
;mov DI,CX ; | |
;Call ЭЛЕ_РОД ; | |
;call ЭКРАН_ВЫВОД_ЧИСЛА ; | |
;call ЭКРАН_ВЫВОД_ПРОБЕЛА; | |
;------------------------; | |
;------------------------; | |
;MOV DI,.ТЕКСТ_ПРЕ_ЭЛ ;// Печать адреса Предудыдущего элемента | |
;call ЭКРАН_ВЫВОД_СТРОКИ ; | |
;mov DI,CX ; | |
;Call ЭЛЕ_ПРЕ ; | |
;call ЭКРАН_ВЫВОД_ЧИСЛА ; | |
;call ЭКРАН_ВЫВОД_ПРОБЕЛА; | |
;------------------------; | |
;------------------------; | |
;MOV DI,.ТЕКСТ_СЛЕ_ЭЛ ;// Печать адреса следующего элемента | |
;call ЭКРАН_ВЫВОД_СТРОКИ ; | |
;mov DI,CX ; | |
;Call ЭЛЕ_СЛЕ ; | |
;call ЭКРАН_ВЫВОД_ЧИСЛА ; | |
;call ЭКРАН_ВЫВОД_ПРОБЕЛА; | |
;------------------------; | |
;------------------------; | |
;MOV DI,.ТЕКСТ_ВЛО_ЭЛ ;// Печать адреса Первго вложеного эелемента | |
;call ЭКРАН_ВЫВОД_СТРОКИ ; | |
;mov DI,CX ; | |
;Call ЭЛЕ_ВЛО ; | |
;call ЭКРАН_ВЫВОД_ЧИСЛА ; | |
;call ЭКРАН_ВЫВОД_ПРОБЕЛА; | |
;------------------------; | |
;------------------------; | |
;MOV DI,.ТЕКСТ_ИМЯ_ЭЛ ;// Печать Имени элемента | |
;call ЭКРАН_ВЫВОД_СТРОКИ ; | |
;mov di,cx ; | |
;call ЭЛЕ_ИМЯ ; | |
;mov di,ax ; | |
;call ЭКРАН_ВЫВОД_СТРОКИ ; | |
;call ЭКРАН_ВЫВОД_ПРОБЕЛА ; | |
;------------------------; | |
;------------------------; | |
MOV DI,.ТЕКСТ_ЗНА_ЭЛ ;// Печать Значеия элемента | |
call ЭКРАН_ВЫВОД_СТРОКИ ;// Вывод значения зависитт от типа элемента | |
mov di,cx ; | |
call ЭЛЕ_ТИП ; | |
cmp al,ТИП_СТРО ;// Если тип элемента строка то вывод как строки | |
jz .ВСТРО ; | |
cmp al,ТИП_ЧИСЛ ;// Если элемент число то вывод как число .... и атк далее в дальнейшем буду отписаны и другие типы эелемнтов | |
jz .ВЧИСЛ ; | |
;------------------------; | |
mov di,.ТЕК_НЕИЗВЕСТНО ;// Если такой тип не известен то выводиться надпист что тип элемента не известен | |
call ЭКРАН_ВЫВОД_СТРОКИ ; | |
call ЭКРАН_ВЫВОД_ПРОБЕЛА ; | |
jmp .НЕИЗВЕСТНО ; | |
;------------------------; | |
.ВЧИСЛ: | |
;------------------------; | |
mov di,cx ; | |
call ЭЛЕ_ЗНА ; | |
call ЭКРАН_ВЫВОД_ЧИСЛА ; | |
call ЭКРАН_ВЫВОД_ПРОБЕЛА ; | |
jmp .НЕИЗВЕСТНО ; | |
;------------------------; | |
.ВСТРО: | |
;------------------------; | |
mov di,cx ; | |
call ЭЛЕ_ЗНА ; | |
mov di,ax ; | |
call ЭКРАН_ВЫВОД_СТРОКИ ; | |
call ЭКРАН_ВЫВОД_ПРОБЕЛА ; | |
;------------------------; | |
.НЕИЗВЕСТНО: ;// Тут завершение вывода знчения почему называеться неизвестно не помню ))) поф | |
;-----------------------; | |
mov di,cx ;// Востанавливаем адрес просматриваемого элемента | |
Call ЭЛЕ_ПРОС_ВЛО ;// ПРосмотр Вложеных Элементов | |
;-----------------------; | |
.ВЫХОД: | |
popad; | |
ret; | |
.ТЕКСТ_АДР_ЭЛ: db "АДР=",0,0; | |
.ТЕКСТ_ТИП_ЭЛ: db "ТИП=",0,0; | |
.ТЕКСТ_ФУН_ЭЛ: db "ФУН=",0,0; | |
.ТЕКСТ_РОД_ЭЛ: db "РОД=",0,0; | |
.ТЕКСТ_ПРЕ_ЭЛ: db "ПРЕ=",0,0; | |
.ТЕКСТ_СЛЕ_ЭЛ: db "СЛЕ=",0,0; | |
.ТЕКСТ_ВЛО_ЭЛ: db "ВЛО=",0,0; | |
.ТЕКСТ_ИМЯ_ЭЛ: db "ИМЯ=",0,0; | |
.ТЕКСТ_ЗНА_ЭЛ: db "ЗНА=",0,0; | |
.ТЕКСТ_КОД_ЭЛ: db "КОД=",0,0; | |
.ТЕК_НЕИЗВЕСТНО: db "НЕИЗВЕСТНО",0,0; | |
;==============================================================================} | |
ЭЛЕ_ПРОС_ВЛО:;{ ПРосмотр волженых элементов DI используеться функцией ЭЛЕ_ПРОСМОТР | |
pushad; | |
call ЭЛЕ_ВЛО; | |
.ЦИКЛ: ;-----------------------; | |
test ax,ax ;// ПРоверяем наличае певого вложеного элемента | |
JZ .ВЫХОД ; | |
call ЭКРАН_ВЫВОД_ПЕРСТРО; | |
mov di,ax ; | |
call ЭЛЕ_ПРОСМОТР ; | |
call ЭЛЕ_СЛЕ ; | |
jmp .ЦИКЛ ; | |
;-----------------------; | |
.ВЫХОД: | |
popad; | |
ret; | |
;==============================================================================} | |
;==============================================================================} | |
ВЫПОЛНИТЬ_ФУ:;{ Выполняет ФУНКЦИЮ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov dx,di ; // Сохраняем адрес выполняемого элмента | |
call ЭЛЕ_КОД ; // Читаем его имя | |
mov cx,ax ; | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ; // Производим поиск элемнета (функция процедура или параметр ) | |
jz .ВЫХОД; | |
call ЭЛЕ_КОПИЯ_ВС ; // Создаем экземпляр функции | |
call ЭЛЕ_КОПИЯ_ПА ; // Копируем параметры | |
mov bx,DI ; // Запоминаем адрес выполненгого экземплярпа функции | |
pushad; | |
mov di,dx; | |
mov dx,bx; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI; | |
popad; | |
call ЭЛЕ_ВЛО; | |
jz .ДАЛЕЕ; | |
mov di,ax; | |
call ЭЛЕ_СЛЕ; | |
jz .ДАЛЕЕ; | |
mov di,ax; | |
call ВЫПОЛНИТЬ_ЭЛ ; // Выполняем | |
.ДАЛЕЕ: | |
call ПРИСВОИТЬ_ЗНА_В_ЭЛЕ_DX_ИЗ_ЭЛЕ_BX; | |
mov di,bx | |
call ЭЛЕ_ОСВОБОДИ ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov dx,di ; // Сохраняем адрес выполняемого элмента | |
call ЭЛЕ_КОД ; // Читаем его имя | |
mov cx,ax ; | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ; // Производим поиск элемнета (функция процедура или параметр ) | |
jz .ВЫХОД; | |
call ЭЛЕ_КОПИЯ_ВС ; // Создаем экземпляр функции | |
call ЭЛЕ_КОПИЯ_ПА ; // Копируем параметры | |
mov bx,DI ; // Запоминаем адрес выполненгого экземплярпа функции | |
pushad; | |
mov di,dx; | |
mov dx,bx; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI; | |
popad; | |
call ЭЛЕ_ВЛО; | |
jz .ДАЛЕЕ; | |
mov di,ax; | |
call ЭЛЕ_СЛЕ; | |
jz .ДАЛЕЕ; | |
mov di,ax; | |
call ВЫПОЛНИТЬ_ЭЛ ; // Выполняем | |
.ДАЛЕЕ: | |
call ПРИСВОИТЬ_ЗНА_В_ЭЛЕ_DX_ИЗ_ЭЛЕ_BX; | |
mov di,bx | |
call ЭЛЕ_ОСВОБОДИ ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edx,edi ; // Сохраняем адрес выполняемого элмента | |
call ЭЛЕ_КОД ; // Читаем его имя | |
mov ecx,eax ; | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ; // Производим поиск элемнета (функция процедура или параметр ) | |
jz .ВЫХОД; | |
call ЭЛЕ_КОПИЯ_ВС ; // Создаем экземпляр функции | |
call ЭЛЕ_КОПИЯ_ПА ; // Копируем параметры | |
mov ebx,eDI ; // Запоминаем адрес выполненгого экземплярпа функции | |
pushad; | |
mov edi,edx; | |
mov edx,ebx; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI; | |
popad; | |
call ЭЛЕ_ВЛО; | |
jz .ДАЛЕЕ; | |
mov edi,eax; | |
call ЭЛЕ_СЛЕ; | |
jz .ДАЛЕЕ; | |
mov edi,eax; | |
call ВЫПОЛНИТЬ_ЭЛ ; // Выполняем | |
.ДАЛЕЕ: | |
call ПРИСВОИТЬ_ЗНА_В_ЭЛЕ_DX_ИЗ_ЭЛЕ_BX; | |
mov edi,ebx | |
call ЭЛЕ_ОСВОБОДИ ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI:;{ если он есть | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{ ОПИСАНИЕ | |
; Выполняет первый вложеный элемент в элемнете | |
; тут кое что не предусмотрено | |
; если вложеного элемента нет то выход | |
; Так какие еще утт могут быть загвоздки хмм...... | |
; Кажеться больше никаких | |
;} | |
pushad ; Записывает в AX адрес первого вложеного элемента | |
call ЭЛЕ_ВЛО ; В конце функции ЭЛЕ_ВЛО test ax,ax прописано ! | |
JZ .ВЫХОД ; Если влженого элемента нет тогда выход | |
mov di,ax ; | |
call ВЫПОЛНИТЬ_ЭЛ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;----------} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{ ОПИСАНИЕ | |
; Выполняет первый вложеный элемент в элемнете | |
; тут кое что не предусмотрено | |
; если вложеного элемента нет то выход | |
; Так какие еще утт могут быть загвоздки хмм...... | |
; Кажеться больше никаких | |
;} | |
pushad ; Записывает в AX адрес первого вложеного элемента | |
call ЭЛЕ_ВЛО ; В конце функции ЭЛЕ_ВЛО test ax,ax прописано ! | |
JZ .ВЫХОД ; Если влженого элемента нет тогда выход | |
mov di,ax ; | |
call ВЫПОЛНИТЬ_ЭЛ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;----------} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{ ОПИСАНИЕ | |
; Выполняет первый вложеный элемент в элемнете | |
; тут кое что не предусмотрено | |
; если вложеного элемента нет то выход | |
; Так какие еще утт могут быть загвоздки хмм...... | |
; Кажеться больше никаких | |
;} | |
pushad ; Записывает в eAX адрес первого вложеного элемента | |
call ЭЛЕ_ВЛО ; В конце функции ЭЛЕ_ВЛО test eax,eax прописано ! | |
JZ .ВЫХОД ; Если влженого элемента нет тогда выход | |
mov edi,eax ; | |
call ВЫПОЛНИТЬ_ЭЛ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;----------} | |
;==============================================================================} | |
ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI:;{ если он есть | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{ ОПИСАНИЕ | |
; Это выполнение второго вложеного элемента DI если он есть | |
; По хорошему бы тут отмечать сразу места где нада будет | |
; лофить разные ошибочки и выводить о них сообщения | |
;} | |
pushad;----------- | |
call ЭЛЕ_ВЛО ; | |
jz .ВЫХОД ; // Вывод сообщения | |
mov di,ax ; | |
call ЭЛЕ_СЛЕ ; | |
Jz .ВЫХОД ; // А пкоа просто пропишу выход да и все | |
mov di,ax ; // Вывод сообщения | |
call ВЫПОЛНИТЬ_ЭЛ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;----------} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{ ОПИСАНИЕ | |
; Это выполнение второго вложеного элемента DI если он есть | |
; По хорошему бы тут отмечать сразу места где нада будет | |
; лофить разные ошибочки и выводить о них сообщения | |
;} | |
pushad;----------- | |
call ЭЛЕ_ВЛО ; | |
jz .ВЫХОД ; // Вывод сообщения | |
mov di,ax ; | |
call ЭЛЕ_СЛЕ ; | |
Jz .ВЫХОД ; // А пкоа просто пропишу выход да и все | |
mov di,ax ; // Вывод сообщения | |
call ВЫПОЛНИТЬ_ЭЛ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;----------} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{ ОПИСАНИЕ | |
; Это выполнение второго вложеного элемента DI если он есть | |
; По хорошему бы тут отмечать сразу места где нада будет | |
; лофить разные ошибочки и выводить о них сообщения | |
;} | |
pushad;----------- | |
call ЭЛЕ_ВЛО ; | |
jz .ВЫХОД ; // Вывод сообщения | |
mov edi,eax ; // А вот тут где нить забудеш так ка нить | |
call ЭЛЕ_СЛЕ ; // Буковку поменять а потом полдня искать ошибку ))))))) | |
Jz .ВЫХОД ; // А пкоа просто пропишу выход да и все | |
mov edi,eax ; // Вывод сообщения | |
call ВЫПОЛНИТЬ_ЭЛ; // ШУЧЮ | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;----------} | |
;==============================================================================} | |
ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX:;{ Если он Есть | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
call ЭЛЕ_ВЛО; | |
jz .ВЫХОД ; // Вывод сообщения | |
mov di,ax ; | |
call ЭЛЕ_ЗНА; | |
.ВЫХОД: | |
pop di ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
call ЭЛЕ_ВЛО; | |
jz .ВЫХОД ; | |
mov di,ax ; | |
call ЭЛЕ_ЗНА; | |
.ВЫХОД: | |
pop di ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
call ЭЛЕ_ВЛО ; | |
jz .ВЫХОД ; | |
mov edi,eax ; | |
call ЭЛЕ_ЗНА ; | |
.ВЫХОД: | |
pop edi ; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX:;{ Записывает в решистр Ax значение первого вложеного элемента | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX; | |
mov dx,ax; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX; | |
mov dx,ax; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX; | |
mov edx,eax; | |
pop eax; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЗНАЧЕНИЕ_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX:;{ Записывает в решистр Ax значение Второго вложеного элемента | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
call ЭЛЕ_ВЛО; | |
Jz .ВЫХОД ; // Вывод сообщения | |
mov di,ax ; | |
call ЭЛЕ_СЛЕ; // Спомощю надписи // Вывод сообщения можно будет быстро найти все места где нада буит прописать вывод диогнастических сообенйи | |
Jz .ВЫХОД ; // Вывод сообщения | |
mov di,ax ; | |
call ЭЛЕ_ЗНА; | |
.ВЫХОД: | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
call ЭЛЕ_ВЛО; | |
Jz .ВЫХОД ; // Вывод сообщения | |
mov di,ax ; | |
call ЭЛЕ_СЛЕ; // Спомощю надписи // Вывод сообщения можно будет быстро найти все места где нада буит прописать вывод диогнастических сообенйи | |
Jz .ВЫХОД ; // Вывод сообщения | |
mov di,ax ; | |
call ЭЛЕ_ЗНА; | |
.ВЫХОД: | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
call ЭЛЕ_ВЛО ; // Чтение адреса первого вложеного элемента в элемент DI | |
Jz .ВЫХОД ; // Вывод сообщения | |
mov edi,eax ; // Ну а тут запись в Di адреса след элемента | |
call ЭЛЕ_СЛЕ ; // Ну тут надеюся понятно что это чтение с Элемента DI Адр След ЭЛ | |
Jz .ВЫХОД ; // Вывод сообщения | |
mov edi,eax ; | |
call ЭЛЕ_ЗНА ; // Чтение значение элемента Di | |
.ВЫХОД: | |
pop edi ; // Все очень просто следующий предыдущий Значение | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЗНАЧЕНИЕ_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX:;{ Записывает в решистр Dx значение второго вложеного элемента | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push eax; | |
call ЗНАЧЕНИЕ_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX | |
mov edx,eax; Тут просотт перенаправление на пред функцию | |
pop eax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push eax; | |
call ЗНАЧЕНИЕ_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX | |
mov edx,eax; | |
pop eax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
call ЗНАЧЕНИЕ_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX | |
mov edx,eax; | |
pop eax; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА:;{ Записывает в решистр Ax тип вложеного элемента | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
call ЭЛЕ_ВЛО; | |
JZ .ВЫХОД ; // Вывод сообщения | |
mov di,ax ; | |
call ЭЛЕ_ТИП; // Чтение типа элемента Строка число и тд и тп | |
.ВЫХОД: | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
call ЭЛЕ_ВЛО; | |
JZ .ВЫХОД ; // Вывод сообщения | |
mov di,ax ; | |
call ЭЛЕ_ТИП; // Чтение типа элемента Строка число и тд и тп | |
.ВЫХОД: | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
call ЭЛЕ_ВЛО; | |
JZ .ВЫХОД ; // Вывод сообщения | |
mov edi,eax; | |
call ЭЛЕ_ТИП; // Чтение типа элемента Строка число и тд и тп | |
.ВЫХОД: | |
pop edi; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ТИП_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА:;{ Записывает в решистр Ax тип следующего вложеного элемента | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
call ЭЛЕ_ВЛО ; | |
JZ .ВЫХОД ; // Вывод сообщения | |
mov di,ax ; | |
call ЭЛЕ_СЛЕ ; | |
jz .ВЫХОД ; // Вывод сообщения | |
mov di,ax ; | |
call ЭЛЕ_ТИП ; | |
.ВЫХОД: | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
call ЭЛЕ_ВЛО ; | |
JZ .ВЫХОД ; // Вывод сообщения | |
mov di,ax ; | |
call ЭЛЕ_СЛЕ ; | |
jz .ВЫХОД ; // Вывод сообщения | |
mov di,ax ; | |
call ЭЛЕ_ТИП ; | |
.ВЫХОД: | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
call ЭЛЕ_ВЛО ; | |
JZ .ВЫХОД ; // Вывод сообщения | |
mov edi,eax ; | |
call ЭЛЕ_СЛЕ ; | |
jz .ВЫХОД ; // Вывод сообщения | |
mov edi,eax ; | |
call ЭЛЕ_ТИП ; | |
.ВЫХОД: | |
pop edi; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov dx,ax; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov dx,ax; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edx,eax; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
popad; | |
ret; | |
END IF;} | |
;} | |
ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО :;{ Записывает значение DX как число в Элемент DI Изменяя тип если нада | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{ ОПИСАНИЕ | |
; Записывает DX как значение в элемент Di | |
; DX обычное число | |
; То есть устанавливает тип число у эелемнта | |
; Если элемнт был строкой то усвобождает сроку что бы | |
; Память не занимала | |
;} | |
pushad; ; тут нада передалть | |
call ЭЛЕ_ТИП_ЧИСЛО ; // Определяет тип элемента что бы освободить | |
JNZ .ЧИСЛО ; // СТроку если элемнт был строкой ; // Если элемент и был числом то просто запишем значение | |
call ЭЛЕ_ТИП_СТРОКА; // Если элемент строка то нада освободить сперва строку | |
JNZ .СТРОКА ; // и поменять тип элемента | |
JMP .ВЫХОД ; // Если тип элемнта неизвестен то пропускаем ничего не записываем | |
;------------------; | |
.ЧИСЛО: add DI,ЭЛ_ЗНА ; // ПРсто записывем число нвоое | |
mov [DI],DX ; | |
JMP .ВЫХОД ; | |
;------------------; | |
.СТРОКА: | |
Call ЭЛЕ_ЗНА ; // Читаем адрес значения | |
call УДАЛИТЬ_СТРОКУ_AX; // Освобождаю строку | |
MOV SI,DI ; | |
add SI,ЭЛ_ЗНА ; | |
mov [SI],DX ; // Запись новго значения | |
MOV SI,DI ; | |
add SI,ЭЛ_ТИП ; | |
mov Byte [SI],ТИП_ЧИСЛ; // Запись нового типа элемента | |
JMP .ВЫХОД ; | |
;------------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{ ОПИСАНИЕ | |
; Записывает DX как значение в элемент Di | |
; DX обычное число | |
; То есть устанавливает тип число у эелемнта | |
; Если элемнт был строкой то усвобождает сроку что бы | |
; Память не занимала | |
;} | |
pushad; ; тут нада передалть | |
call ЭЛЕ_ТИП_ЧИСЛО ; // Определяет тип элемента что бы освободить | |
JNZ .ЧИСЛО ; // СТроку если элемнт был строкой ; // Если элемент и был числом то просто запишем значение | |
call ЭЛЕ_ТИП_СТРОКА; // Если элемент строка то нада освободить сперва строку | |
JNZ .СТРОКА ; // и поменять тип элемента | |
JMP .ВЫХОД ; // Если тип элемнта неизвестен то пропускаем ничего не записываем | |
;------------------; | |
.ЧИСЛО: add DI,ЭЛ_ЗНА ; // ПРсто записывем число нвоое | |
mov [DI],DX ; | |
JMP .ВЫХОД ; | |
;------------------; | |
.СТРОКА: | |
Call ЭЛЕ_ЗНА ; // Читаем адрес значения | |
call УДАЛИТЬ_СТРОКУ_AX; // Освобождаю строку | |
MOV SI,DI ; | |
add SI,ЭЛ_ЗНА ; | |
mov [SI],DX ; // Запись новго значения | |
MOV SI,DI ; | |
add SI,ЭЛ_ТИП ; | |
mov Byte [SI],ТИП_ЧИСЛ; // Запись нового типа элемента | |
JMP .ВЫХОД ; | |
;------------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{ ОПИСАНИЕ | |
; Записывает DX как значение в элемент Di | |
; DX обычное число | |
; То есть устанавливает тип число у эелемнта | |
; Если элемнт был строкой то усвобождает сроку что бы | |
; Память не занимала | |
;} | |
pushad; ; тут нада передалть | |
call ЭЛЕ_ТИП_ЧИСЛО ; // Определяет тип элемента что бы освободить | |
JNZ .ЧИСЛО ; // СТроку если элемнт был строкой ; // Если элемент и был числом то просто запишем значение | |
call ЭЛЕ_ТИП_СТРОКА; // Если элемент строка то нада освободить сперва строку | |
JNZ .СТРОКА ; // и поменять тип элемента | |
JMP .ВЫХОД ; // Если тип элемнта неизвестен то пропускаем ничего не записываем | |
;------------------; | |
.ЧИСЛО: add EDI,ЭЛ_ЗНА ; // ПРсто записывем число нвоое | |
mov [EDI],EDX ; | |
JMP .ВЫХОД ; | |
;------------------; | |
.СТРОКА: | |
Call ЭЛЕ_ЗНА ; // Читаем адрес значения | |
call УДАЛИТЬ_СТРОКУ_AX; // Освобождаю строку | |
MOV ESI,EDI ; | |
add ESI,ЭЛ_ЗНА ; | |
mov [ESI],EDX ; // Запись новго значения | |
MOV ESI,EDI ; | |
add ESI,ЭЛ_ТИП ; | |
mov Byte [ESI],ТИП_ЧИСЛ; // Запись нового типа элемента | |
JMP .ВЫХОД ; | |
;------------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
;} | |
ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov dx,ax; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov dx,ax; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edx,eax; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА | |
popad; | |
ret; | |
END IF;} | |
;} | |
ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА:;{ Записывает копирует значение DX как строку в Элемент DI Изменяя тип если нада | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
Call ЭЛЕ_ТИП_ЧИСЛО; | |
JNZ .ЧИСЛО; | |
Call ЭЛЕ_ТИП_СТРОКА; продолжимс | |
JNZ .СТРОКА; | |
JMP .ВЫХОД; | |
.ЧИСЛО: | |
MOV SI,DI; | |
add SI,ЭЛ_ТИП; | |
mov Byte [SI],ТИП_СТРО; | |
MOV SI,DI; | |
add SI,ЭЛ_ЗНА; | |
call СОЗДАТЬ_CX_КОПИЮ_СТРОКИ_DX | |
mov [SI],CX; | |
JMP .ВЫХОД; | |
.СТРОКА: | |
Call ЭЛЕ_ЗНА; | |
Mov cx,ax; | |
Call ЗАПИСАТЬ_СТРОКУ_DX_В_СТРОКУ_CX | |
JMP .ВЫХОД; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ЭЛЕ_ТИП ; | |
cmp AX,ТИП_ЧИСЛ; | |
JZ .ЧИСЛО; | |
cmp AX,ТИП_СТРО; | |
JZ .СТРОКА; | |
JMP .ВЫХОД; | |
.ЧИСЛО: | |
MOV SI,DI; | |
add SI,ЭЛ_ТИП; | |
mov Byte [SI],ТИП_СТРО; | |
MOV SI,DI; | |
add SI,ЭЛ_ЗНА; | |
call СОЗДАТЬ_CX_КОПИЮ_СТРОКИ_DX | |
mov [SI],CX; | |
JMP .ВЫХОД; | |
.СТРОКА: | |
Call ЭЛЕ_ЗНА; | |
Mov cx,ax; | |
Call ЗАПИСАТЬ_СТРОКУ_DX_В_СТРОКУ_CX | |
JMP .ВЫХОД; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ЭЛЕ_ТИП ; | |
cmp EAX,ТИП_ЧИСЛ; | |
JZ .ЧИСЛО; | |
cmp EAX,ТИП_СТРО; | |
JZ .СТРОКА; | |
JMP .ВЫХОД; | |
.ЧИСЛО: | |
MOV ESI,EDI; | |
add ESI,ЭЛ_ТИП; | |
mov Byte [ESI],ТИП_СТРО; | |
MOV ESI,EDI; | |
add ESI,ЭЛ_ЗНА; | |
call СОЗДАТЬ_CX_КОПИЮ_СТРОКИ_DX | |
mov [ESI],ECX; | |
JMP .ВЫХОД; | |
.СТРОКА: | |
Call ЭЛЕ_ЗНА; | |
Mov Ecx,Eax; | |
Call ЗАПИСАТЬ_СТРОКУ_DX_В_СТРОКУ_CX | |
JMP .ВЫХОД; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
;} | |
ЗАПИСАТЬ_ЗНАЧЕНИЕ_BX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА:;{ Записывает копирует значение DX как строку в Элемент DI Изменяя тип если нада | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push DX; | |
mov DX,BX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
pop DX ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push DX; | |
mov DX,BX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
pop DX ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push EDX; | |
mov EDX,EBX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
pop EDX ; | |
ret ; | |
END IF;} | |
;} | |
ПОЛУЧИТЬ_КОД_AX_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_В_ЭЛЕМЕНТ_DI:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
call ЭЛЕ_ВЛО; | |
mov di,ax; | |
call ЭЛЕ_КОД; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
call ЭЛЕ_ВЛО; | |
mov di,ax; | |
call ЭЛЕ_КОД; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
call ЭЛЕ_ВЛО; | |
mov edi,eax; | |
call ЭЛЕ_КОД; | |
pop edi; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ПОЛУЧИТЬ_КОД_CX_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push AX; | |
call ПОЛУЧИТЬ_КОД_AX_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_В_ЭЛЕМЕНТ_DI | |
mov cx,ax; | |
pop AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push AX; | |
call ПОЛУЧИТЬ_КОД_AX_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_В_ЭЛЕМЕНТ_DI | |
mov cx,ax; | |
pop AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push EAX; | |
call ПОЛУЧИТЬ_КОД_AX_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_В_ЭЛЕМЕНТ_DI | |
mov Ecx,Eax; | |
pop EAX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
СТРОКА_CX_КОНСОЛИ :;{ Находит консоль для вывода начиная с элемента DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
mov dx,0; | |
mov cx,КОД_ОКН_МОНИТОР ; | |
Call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI; | |
jz .ВЫХОД | |
mov cx,КОД_ПАР_ТЕКС; | |
call ЭЛЕ_ПОИСК_ВН_ПО_КОДУ_CX; | |
jz .ВЫХОД | |
mov dx,di; | |
.ВЫХОД: | |
mov cx,dx; | |
call ВОЗВРАТИТЬ_CX; | |
test cx,cx; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad | |
mov dx,0; | |
mov cx,КОД_ОКН_МОНИТОР ; | |
Call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI; | |
jz .ВЫХОД | |
mov cx,КОД_ПАР_ТЕКС; | |
call ЭЛЕ_ПОИСК_ВН_ПО_КОДУ_CX; | |
jz .ВЫХОД | |
mov dx,di; | |
.ВЫХОД: | |
mov cx,dx; | |
call ВОЗВРАТИТЬ_CX; | |
test cx,cx; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad | |
mov edx,0; | |
mov ecx,КОД_ОКН_МОНИТОР ; | |
Call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI; | |
jz .ВЫХОД | |
mov ecx,КОД_ПАР_ТЕКС; | |
call ЭЛЕ_ПОИСК_ВН_ПО_КОДУ_CX; | |
jz .ВЫХОД | |
mov edx,edi; | |
.ВЫХОД: | |
mov ecx,edx; | |
call ВОЗВРАТИТЬ_CX; | |
test ecx,ecx; | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
НАЙТИ_КОНСОЛЬ_В_DI:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
mov cx,КОД_ОКН_МОНИТОР ; | |
Call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI; | |
call ВОЗВРАТИТЬ_DI; | |
test DI,DI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad | |
mov cx,КОД_ОКН_МОНИТОР ; | |
Call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI; | |
call ВОЗВРАТИТЬ_DI; | |
test DI,DI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad | |
mov ecx,КОД_ОКН_МОНИТОР ; | |
Call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI; | |
call ВОЗВРАТИТЬ_DI; | |
test EDI,EDI; | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
НАЙТИ_БУФЕР_В_AX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov eax,0; | |
call НАЙТИ_КОНСОЛЬ_В_DI; | |
jz .ВЫХОД; | |
call ОКНО_БУФ; | |
.ВЫХОД: | |
call ВОЗВРАТИТЬ_AX; | |
test eax,eax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov eax,0; | |
call НАЙТИ_КОНСОЛЬ_В_DI; | |
jz .ВЫХОД; | |
call ОКНО_БУФ; | |
.ВЫХОД: | |
call ВОЗВРАТИТЬ_AX; | |
test eax,eax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov eax,0; | |
call НАЙТИ_КОНСОЛЬ_В_DI; | |
jz .ВЫХОД; | |
call ОКНО_БУФ; | |
.ВЫХОД: | |
call ВОЗВРАТИТЬ_AX; | |
test eax,eax; | |
popad; | |
ret; | |
END IF;} | |
;} | |
ВЫВОД_В_КОНСОЛЬ_СТРОКИ_SI:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call НАЙТИ_КОНСОЛЬ_В_DI; | |
jz .ВЫХОД; | |
mov ax,0; | |
.ПОВТОР: | |
mov al,[si]; | |
test ax,ax; | |
jz .ВЫХОД; | |
call ОКНО_DI_КН_AX; | |
inc si; | |
jmp .ПОВТОР; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call НАЙТИ_КОНСОЛЬ_В_DI; | |
jz .ВЫХОД; | |
mov ax,0; | |
.ПОВТОР: | |
mov al,[si]; | |
test ax,ax; | |
jz .ВЫХОД; | |
call ОКНО_DI_КН_AX; | |
inc si; | |
jmp .ПОВТОР; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call НАЙТИ_КОНСОЛЬ_В_DI; | |
jz .ВЫХОД; | |
mov eax,0; | |
.ПОВТОР: | |
mov al,[esi]; | |
test eax,eax; | |
jz .ВЫХОД; | |
call ОКНО_DI_КН_AX; | |
inc esi; | |
jmp .ПОВТОР; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
;} | |
ТИП_ОПЕРАЦИИ :;{ ОПРЕДЕЛЯЕТ Тип ОПерации для Элемента DI рез в AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
mov edx,0 | |
call ЭЛЕ_ВЛО ; // Определяем тип результата | |
JZ .ВЫХОД ; // Если нет вложеных элментов то выход | |
;---------------------; | |
mov edi,eax ; // Переходим в первый вложеный эллемент | |
call ЭЛЕ_ТИП ; // Читаем ТИп | |
mov cl,10 ; | |
mul cl ; | |
add edx,eax ; | |
;---------------------; | |
call ЭЛЕ_СЛЕ ; | |
jz .ВЫХОД ; // Если нет следующего Элемента выходим | |
;---------------------; | |
mov edi,eax ; | |
call ЭЛЕ_ТИП ; | |
add edx,eax ; | |
;---------------------; | |
.ВЫХОД: | |
mov eax,edx ; | |
call ВОЗВРАТИТЬ_AX ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad | |
mov edx,0 | |
call ЭЛЕ_ВЛО ; // Определяем тип результата | |
JZ .ВЫХОД ; // Если нет вложеных элментов то выход | |
;---------------------; | |
mov edi,eax ; // Переходим в первый вложеный эллемент | |
call ЭЛЕ_ТИП ; // Читаем ТИп | |
mov cl,10 ; | |
mul cl ; | |
add edx,eax ; | |
;---------------------; | |
call ЭЛЕ_СЛЕ ; | |
jz .ВЫХОД ; // Если нет следующего Элемента выходим | |
;---------------------; | |
mov edi,eax ; | |
call ЭЛЕ_ТИП ; | |
add edx,eax ; | |
;---------------------; | |
.ВЫХОД: | |
mov eax,edx ; | |
call ВОЗВРАТИТЬ_AX ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad | |
mov edx,0 | |
call ЭЛЕ_ВЛО ; // Определяем тип результата | |
JZ .ВЫХОД ; // Если нет вложеных элментов то выход | |
;---------------------; | |
mov edi,eax ; // Переходим в первый вложеный эллемент | |
call ЭЛЕ_ТИП ; // Читаем ТИп | |
mov cl,10 ; | |
mul cl ; | |
add edx,eax ; | |
;---------------------; | |
call ЭЛЕ_СЛЕ ; | |
jz .ВЫХОД ; // Если нет следующего Элемента выходим | |
;---------------------; | |
mov edi,eax ; | |
call ЭЛЕ_ТИП ; | |
add edx,eax ; | |
;---------------------; | |
.ВЫХОД: | |
mov eax,edx ; | |
call ВОЗВРАТИТЬ_AX ; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ТИП_ОПЕРАЦИИ_DI_BX :;{ ОПРЕДЕЛЯЕТ Тип ОПерации для Эл DI и Эл BX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
push dx; | |
mov dx,0 | |
call ЭЛЕ_ТИП ; // Определяем тип результата | |
mov cl,10 ; | |
mul cl ; | |
add dx,ax ; | |
mov di,bx ; | |
call ЭЛЕ_ТИП ; // Определяем тип результата | |
add dx,ax ; | |
mov ax,dx ; | |
pop dx ; | |
pop di ; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
push dx; | |
mov dx,0 | |
call ЭЛЕ_ТИП ; // Определяем тип результата | |
mov cl,10 ; | |
mul cl ; | |
add dx,ax ; | |
mov di,bx ; | |
call ЭЛЕ_ТИП ; // Определяем тип результата | |
add dx,ax ; | |
mov ax,dx ; | |
pop dx ; | |
pop di ; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
push edx; | |
mov edx,0 | |
call ЭЛЕ_ТИП ; // Определяем тип результата | |
mov cl,10 ; | |
mul cl ; | |
add edx,eax ; | |
mov edi,ebx ; | |
call ЭЛЕ_ТИП ; // Определяем тип результата | |
add edx,eax ; | |
mov eax,edx ; | |
pop edx ; | |
pop edi ; | |
ret; | |
END IF ;} | |
;==============================================================================} | |
ПРИСВОИТЬ_ЗНА_В_ЭЛЕ_DI_ИЗ_ЭЛЕ_BX :;{ ПРисвоить значение элемента в DI из элемнета BX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ТИП_ОПЕРАЦИИ_DI_BX; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ; | |
cmp ax,СТР_СТР; | |
jz .CC; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ; | |
jmp .ВЫХОД; | |
.ЧЧ: ;{ЧИСЛО<ЧИСЛО ; | |
mov si,bx ; | |
add di,ЭЛ_ЗНА ; | |
add si,ЭЛ_ЗНА ; | |
mov ax,[si] ; | |
mov [di],ax ; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.CC: ;{СТРОКА<СТРОКА ; | |
call ЭЛЕ_ЗНА ; | |
mov dx,ax ; | |
mov di,bx ; | |
call ЭЛЕ_ЗНА ; | |
mov cx,ax ; | |
call ЗАПИСАТЬ_СТРОКУ_CX_В_СТРОКУ_DX; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ЧС: ;{ЧИСЛО<СТРОКА ; | |
mov si,bx ; | |
add si,ЭЛ_ЗНА ; | |
mov dx,[SI] ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА | |
jmp .ВЫХОД ; | |
;------------------} | |
.СЧ: ;{СТРОКА<ЧИСЛО ; | |
mov si,bx ; | |
add si,ЭЛ_ЗНА ; | |
mov dx,[SI] ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ТИП_ОПЕРАЦИИ_DI_BX; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ; | |
cmp ax,СТР_СТР; | |
jz .CC; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ; | |
jmp .ВЫХОД; | |
.ЧЧ: ;{ЧИСЛО<ЧИСЛО ; | |
mov si,bx ; | |
add di,ЭЛ_ЗНА ; | |
add si,ЭЛ_ЗНА ; | |
mov ax,[si] ; | |
mov [di],ax ; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.CC: ;{СТРОКА<СТРОКА ; | |
call ЭЛЕ_ЗНА ; | |
mov dx,ax ; | |
mov di,bx ; | |
call ЭЛЕ_ЗНА ; | |
mov cx,ax ; | |
call ЗАПИСАТЬ_СТРОКУ_CX_В_СТРОКУ_DX; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ЧС: ;{ЧИСЛО<СТРОКА ; | |
mov si,bx ; | |
add si,ЭЛ_ЗНА ; | |
mov dx,[SI] ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА | |
jmp .ВЫХОД ; | |
;------------------} | |
.СЧ: ;{СТРОКА<ЧИСЛО ; | |
mov si,bx ; | |
add si,ЭЛ_ЗНА ; | |
mov dx,[SI] ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ТИП_ОПЕРАЦИИ_DI_BX; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ; | |
cmp ax,СТР_СТР; | |
jz .CC; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ; | |
jmp .ВЫХОД; | |
.ЧЧ: ;{ЧИСЛО<ЧИСЛО ; | |
mov esi,ebx ; | |
add edi,ЭЛ_ЗНА ; | |
add esi,ЭЛ_ЗНА ; | |
mov eax,[esi] ; | |
mov [edi],eax ; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.CC: ;{СТРОКА<СТРОКА ; | |
call ЭЛЕ_ЗНА ; | |
mov edx,eax ; | |
mov edi,ebx ; | |
call ЭЛЕ_ЗНА ; | |
mov ecx,eax ; | |
call ЗАПИСАТЬ_СТРОКУ_CX_В_СТРОКУ_DX; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ЧС: ;{ЧИСЛО<СТРОКА ; | |
mov esi,ebx ; | |
add esi,ЭЛ_ЗНА ; | |
mov edx,[eSI] ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА | |
jmp .ВЫХОД ; | |
;------------------} | |
.СЧ: ;{СТРОКА<ЧИСЛО ; | |
mov esi,ebx ; | |
add esi,ЭЛ_ЗНА ; | |
mov edx,[eSI] ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ПРИСВОИТЬ_ЗНА_В_ЭЛЕ_DX_ИЗ_ЭЛЕ_BX :;{ ПРисвоить значение элемента в DX из элемнета BX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,dx; | |
call ПРИСВОИТЬ_ЗНА_В_ЭЛЕ_DI_ИЗ_ЭЛЕ_BX; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,dx; | |
call ПРИСВОИТЬ_ЗНА_В_ЭЛЕ_DI_ИЗ_ЭЛЕ_BX; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,edx; | |
call ПРИСВОИТЬ_ЗНА_В_ЭЛЕ_DI_ИЗ_ЭЛЕ_BX; | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ПУСТО :;{ | |
ret;} | |
ВКОД_ТЕК_СЛОЖЕНИЕ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО | |
add Dx,Cx; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА | |
call СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_16_БАЙТ; | |
call ДОБАВИТЬ_ЧИСЛО_CX_В_КОНЕЦ_СТРОКИ_BX; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_BX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
call УДАЛИТЬ_СТРОКУ_BX; | |
jmp .ВЫХОД ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО | |
call СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_16_БАЙТ; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_CX; | |
call ДОБАВИТЬ_ЧИСЛО_DX_В_КОНЕЦ_СТРОКИ_BX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_BX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
call УДАЛИТЬ_СТРОКУ_BX; | |
jmp .ВЫХОД ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА | |
call СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_16_БАЙТ; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_CX; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_BX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
call УДАЛИТЬ_СТРОКУ_BX; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF; } | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО | |
add Dx,Cx; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА | |
call СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_16_БАЙТ; | |
call ДОБАВИТЬ_ЧИСЛО_CX_В_КОНЕЦ_СТРОКИ_BX; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_BX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
call УДАЛИТЬ_СТРОКУ_BX; | |
jmp .ВЫХОД ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО | |
call СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_16_БАЙТ; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_CX; | |
call ДОБАВИТЬ_ЧИСЛО_DX_В_КОНЕЦ_СТРОКИ_BX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_BX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
call УДАЛИТЬ_СТРОКУ_BX; | |
jmp .ВЫХОД ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА | |
call СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_16_БАЙТ; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_CX; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_BX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
call УДАЛИТЬ_СТРОКУ_BX; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF; } | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО | |
add eDx,eCx; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА | |
call СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_16_БАЙТ; | |
call ДОБАВИТЬ_ЧИСЛО_CX_В_КОНЕЦ_СТРОКИ_BX; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_BX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
call УДАЛИТЬ_СТРОКУ_BX; | |
jmp .ВЫХОД ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО | |
call СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_16_БАЙТ; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_CX; | |
call ДОБАВИТЬ_ЧИСЛО_DX_В_КОНЕЦ_СТРОКИ_BX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_BX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
call УДАЛИТЬ_СТРОКУ_BX; | |
jmp .ВЫХОД ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА | |
call СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_16_БАЙТ; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_CX; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_BX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
call УДАЛИТЬ_СТРОКУ_BX; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF; } | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ВЫЧИТАНИЕ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
Sub cx,dx ; | |
mov dx,cx ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
Sub cx,dx ; | |
mov dx,cx ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp eax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
Sub ecx,edx ; | |
mov edx,ecx ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_УМНОЖЕНИЕ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp eax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
;---------; | |
mov ax,cx; | |
mul dl ; | |
mov dx,ax; | |
;---------; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp eax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
;---------; | |
mov ax,cx; | |
mul dl ; | |
mov dx,ax; | |
;---------; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp eax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
;---------; | |
mov eax,ecx; | |
mul dx ; | |
mov edx,eax; | |
;---------; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ДЕЛЕНИЕ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
;---------; | |
mov ax,cx; | |
div dl ; | |
mov dh,0 ; | |
mov dl,al; | |
;---------; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
;---------; | |
mov ax,cx; | |
div dl ; | |
mov dh,0 ; | |
mov dl,al; | |
;---------; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
;---------; | |
mov eax,ecx; | |
div dx ; | |
mov dx,ax; | |
;---------; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ОСТАТОК :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
;---------; | |
mov ax,cx; | |
div dl ; | |
mov dh,0 ; | |
mov dl,ah; | |
;---------; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
;---------; | |
mov ax,cx; | |
div dl ; | |
mov dh,0 ; | |
mov dl,ah; | |
;---------; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
;---------; | |
mov eax,ecx; | |
div dl ; | |
mov dh,0 ; | |
mov dl,ah; | |
;---------; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ПРИСВОЕНИЕ:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ТИП_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
call ЗНАЧЕНИЕ_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
;----------------------------------------------; | |
call ПОЛУЧИТЬ_КОД_CX_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ; | |
jz .ВЫХОД; значение DX уже запомнили | |
;----------------------------------------------; | |
cmp ax,ТИП_ЧИСЛ; | |
jz .ЧИСЛО; | |
cmp ax,ТИП_СТРО; | |
jz .СТРОКА; | |
jmp .ВЫХОД; | |
;----------------------------------------------; | |
.ЧИСЛО: Call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
jmp .ВЫХОД; | |
;----------------------------------------------; | |
.СТРОКА: Call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
jmp .ВЫХОД; | |
;----------------------------------------------; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ТИП_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
call ЗНАЧЕНИЕ_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
;----------------------------------------------; | |
call ПОЛУЧИТЬ_КОД_CX_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ; | |
jz .ВЫХОД; значение DX уже запомнили | |
;----------------------------------------------; | |
cmp ax,ТИП_ЧИСЛ; | |
jz .ЧИСЛО; | |
cmp ax,ТИП_СТРО; | |
jz .СТРОКА; | |
jmp .ВЫХОД; | |
;----------------------------------------------; | |
.ЧИСЛО: Call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
jmp .ВЫХОД; | |
;----------------------------------------------; | |
.СТРОКА: Call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
jmp .ВЫХОД; | |
;----------------------------------------------; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ТИП_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
call ЗНАЧЕНИЕ_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
;----------------------------------------------; | |
call ПОЛУЧИТЬ_КОД_CX_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ; | |
jz .ВЫХОД; значение DX уже запомнили | |
;----------------------------------------------; | |
cmp ax,ТИП_ЧИСЛ; | |
jz .ЧИСЛО; | |
cmp ax,ТИП_СТРО; | |
jz .СТРОКА; | |
jmp .ВЫХОД; | |
;----------------------------------------------; | |
.ЧИСЛО: Call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
jmp .ВЫХОД; | |
;----------------------------------------------; | |
.СТРОКА: Call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
jmp .ВЫХОД; | |
;----------------------------------------------; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ВКОД_ТЕК_РАВНО :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp Dx,Cx; | |
jz .РАВНО; | |
jmp .НЕРАВ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_РАВНО_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_РАВНА_ЧИСЛУ_DX_ФЛАГ_Z_1; | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_РАВНА_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.РАВНО:;{ РАВНО . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕРАВ:;{ НЕ РАВНО . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp Dx,Cx; | |
jz .РАВНО; | |
jmp .НЕРАВ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_РАВНО_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_РАВНА_ЧИСЛУ_DX_ФЛАГ_Z_1; | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_РАВНА_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.РАВНО:;{ РАВНО . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕРАВ:;{ НЕ РАВНО . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp eDx,eCx; | |
jz .РАВНО; | |
jmp .НЕРАВ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_РАВНО_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_РАВНА_ЧИСЛУ_DX_ФЛАГ_Z_1; | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_РАВНА_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.РАВНО:;{ РАВНО . | |
mov edx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕРАВ:;{ НЕ РАВНО . | |
mov edx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
;--------------------------------------------------------} | |
ВКОД_ТЕК_НЕРАВНО :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp Dx,Cx; | |
jz .РАВНО; | |
jmp .НЕРАВ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_РАВНО_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_РАВНА_ЧИСЛУ_DX_ФЛАГ_Z_1; | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_РАВНА_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.РАВНО:;{ РАВНО . | |
mov dx,0 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕРАВ:;{ НЕ РАВНО . | |
mov dx,1;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp Dx,Cx; | |
jz .РАВНО; | |
jmp .НЕРАВ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_РАВНО_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_РАВНА_ЧИСЛУ_DX_ФЛАГ_Z_1; | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_РАВНА_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.РАВНО:;{ РАВНО . | |
mov dx,0 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕРАВ:;{ НЕ РАВНО . | |
mov dx,1;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp Dx,Cx; | |
jz .РАВНО; | |
jmp .НЕРАВ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_РАВНО_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_РАВНА_ЧИСЛУ_DX_ФЛАГ_Z_1; | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_РАВНА_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .РАВНО ; | |
jmp .НЕРАВ ; | |
;--------------} | |
.РАВНО:;{ РАВНО . | |
mov dx,0 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕРАВ:;{ НЕ РАВНО . | |
mov dx,1;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
;--------------------------------------------------------} | |
ВКОД_ТЕК_БОЛЬШЕ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp cx,dx; | |
ja .БОЛЬШЕ; | |
jmp .НЕБОЛЬ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_БОЛЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_БОЛЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1; | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_БОЛЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.БОЛЬШЕ:;{ БОЛЬШЕ . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕБОЛЬ:;{ НЕ БОЛЬШЕ . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp cx,dx; | |
ja .БОЛЬШЕ; | |
jmp .НЕБОЛЬ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_БОЛЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_БОЛЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1; | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_БОЛЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.БОЛЬШЕ:;{ БОЛЬШЕ . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕБОЛЬ:;{ НЕ БОЛЬШЕ . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp cx,dx; | |
ja .БОЛЬШЕ; | |
jmp .НЕБОЛЬ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_БОЛЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_БОЛЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1; | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_БОЛЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.БОЛЬШЕ:;{ БОЛЬШЕ . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕБОЛЬ:;{ НЕ БОЛЬШЕ . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
;--------------------------------------------------------} | |
ВКОД_ТЕК_МЕНЬШЕ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp cx,dx; | |
jb .МЕНЬШЕ; | |
jmp .НЕМЕНШ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_МЕНЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_МЕНЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1; | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_МЕНЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.МЕНЬШЕ:;{ МЕНЬШЕ . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕМЕНШ:;{ НЕ МЕНЬШЕ . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp cx,dx; | |
jb .МЕНЬШЕ; | |
jmp .НЕМЕНШ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_МЕНЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_МЕНЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1; | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_МЕНЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.МЕНЬШЕ:;{ МЕНЬШЕ . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕМЕНШ:;{ НЕ МЕНЬШЕ . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp cx,dx; | |
jb .МЕНЬШЕ; | |
jmp .НЕМЕНШ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_МЕНЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_МЕНЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1; | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_МЕНЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.МЕНЬШЕ:;{ МЕНЬШЕ . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕМЕНШ:;{ НЕ МЕНЬШЕ . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
;--------------------------------------------------------} | |
ВКОД_ТЕК_МЕНРА :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp cx,dx; | |
jbe .МЕНЬШЕ; | |
jmp .НЕМЕНШ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_МЕНЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_МЕНЬШЕР_ЧИСЛА_DX_ФЛАГ_Z_1; | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_МЕНЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.МЕНЬШЕ:;{ МЕНЬШЕ . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕМЕНШ:;{ НЕ МЕНЬШЕ . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp cx,dx; | |
jbe .МЕНЬШЕ; | |
jmp .НЕМЕНШ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_МЕНЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_МЕНЬШЕР_ЧИСЛА_DX_ФЛАГ_Z_1; | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_МЕНЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.МЕНЬШЕ:;{ МЕНЬШЕ . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕМЕНШ:;{ НЕ МЕНЬШЕ . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp cx,dx; | |
jbe .МЕНЬШЕ; | |
jmp .НЕМЕНШ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_МЕНЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_МЕНЬШЕР_ЧИСЛА_DX_ФЛАГ_Z_1; | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_МЕНЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .МЕНЬШЕ ; | |
jmp .НЕМЕНШ ; | |
;--------------} | |
.МЕНЬШЕ:;{ МЕНЬШЕ . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕМЕНШ:;{ НЕ МЕНЬШЕ . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
;--------------------------------------------------------} | |
ВКОД_ТЕК_БОЛРА :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp cx,dx; | |
jae .БОЛЬШЕ; | |
jmp .НЕБОЛЬ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_БОЛЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_БОЛЬШЕР_ЧИСЛА_DX_ФЛАГ_Z_1; | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_БОЛЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.БОЛЬШЕ:;{ БОЛЬШЕ . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕБОЛЬ:;{ НЕ БОЛЬШЕ . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp cx,dx; | |
jae .БОЛЬШЕ; | |
jmp .НЕБОЛЬ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_БОЛЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_БОЛЬШЕР_ЧИСЛА_DX_ФЛАГ_Z_1; | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_БОЛЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.БОЛЬШЕ:;{ БОЛЬШЕ . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕБОЛЬ:;{ НЕ БОЛЬШЕ . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
;{ ВЫБОР ТИПА ОПЕРАЦИИ --------------------------; | |
cmp ax,ЧИС_ЧИС; | |
jz .ЧЧ ; | |
cmp ax,ЧИС_СТР; | |
jz .ЧС ; | |
cmp ax,СТР_ЧИС; | |
jz .СЧ ; | |
cmp ax,СТР_СТР; | |
jz .СС ; | |
jmp .ВЫХОД ; | |
;--------------} | |
.ЧЧ: ;{ ЧИСЛО ЧИСЛО . | |
cmp cx,dx; | |
jae .БОЛЬШЕ; | |
jmp .НЕБОЛЬ; | |
;--------------} | |
.ЧС: ;{ ЧИСЛО СТРОКА. | |
call ЧИСЛО_CX_БОЛЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1 | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.СЧ: ;{ СТРОКА ЧИСЛО . | |
call СТРОКА_CX_БОЛЬШЕР_ЧИСЛА_DX_ФЛАГ_Z_1; | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.СС: ;{ СТРОКА СТРОКА. | |
call СТРОКА_CX_БОЛЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1; | |
jnz .БОЛЬШЕ ; | |
jmp .НЕБОЛЬ ; | |
;--------------} | |
.БОЛЬШЕ:;{ БОЛЬШЕ . | |
mov dx,1 ; | |
jmp .ВЫХОД; | |
;---------} | |
.НЕБОЛЬ:;{ НЕ БОЛЬШЕ . | |
mov dx,0;} | |
.ВЫХОД:call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
popad; | |
ret; | |
END IF;} | |
;--------------------------------------------------------} | |
ВКОД_ТЕК_ЛОГИ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
cmp cx,0 ; | |
jnz .НЕПРАВ ; | |
cmp dx,0 ; | |
jnz .НЕПРАВ ; | |
jmp .ПРАВДА ; | |
.НЕПРАВ:mov dx,0 ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
jmp .ВЫХОД ; | |
.ПРАВДА:mov dx,1 ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
jmp .ВЫХОД ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
cmp cx,0 ; | |
jnz .НЕПРАВ ; | |
cmp dx,0 ; | |
jnz .НЕПРАВ ; | |
jmp .ПРАВДА ; | |
.НЕПРАВ:mov dx,0 ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
jmp .ВЫХОД ; | |
.ПРАВДА:mov dx,1 ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
jmp .ВЫХОД ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
cmp cx,0 ; | |
jnz .НЕПРАВ ; | |
cmp dx,0 ; | |
jnz .НЕПРАВ ; | |
jmp .ПРАВДА ; | |
.НЕПРАВ:mov dx,0 ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
jmp .ВЫХОД ; | |
.ПРАВДА:mov dx,1 ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
jmp .ВЫХОД ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ЛОГИЛИ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
cmp cx,1 ; | |
jnz .ПРАВДА ; | |
cmp dx,1 ; | |
jnz .ПРАВДА ; | |
.НЕПРАВ:mov dx,0 ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
jmp .ВЫХОД ; | |
.ПРАВДА:mov dx,1 ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
jmp .ВЫХОД ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
cmp cx,1 ; | |
jnz .ПРАВДА ; | |
cmp dx,1 ; | |
jnz .ПРАВДА ; | |
.НЕПРАВ:mov dx,0 ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
jmp .ВЫХОД ; | |
.ПРАВДА:mov dx,1 ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
jmp .ВЫХОД ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX ; | |
call ТИП_ОПЕРАЦИИ ; | |
cmp ax,ЧИС_ЧИС ; | |
jnz .ВЫХОД ; | |
cmp cx,1 ; | |
jnz .ПРАВДА ; | |
cmp dx,1 ; | |
jnz .ПРАВДА ; | |
.НЕПРАВ:mov dx,0 ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
jmp .ВЫХОД ; | |
.ПРАВДА:mov dx,1 ; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО ; | |
jmp .ВЫХОД ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ОСКОБ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
;----------------; | |
push di ; // Если это Функция то | |
call ЭЛЕ_РОДИТЕЛЬ; // Выполнять скобку ненада | |
call ЭЛЕ_ФУН ; | |
pop di ; | |
jnz .ВЫХОД ; | |
;----------------; | |
call ВЫПОЛНИТЬ_ВЛ; // Выполняем содержимое скобки | |
;----------------; | |
call ЭЛЕ_ОДИН ; // Если в элементе тока 1 влож элемент | |
jz .ДАЛЕЕ ; | |
;----------------; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ ; | |
jnz .ДАЛЕЕ ; | |
Call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
jmp .ВЫХОД ; | |
;----------------; | |
.ДАЛЕЕ: | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ; Длин Стро не важна назнач ниже | |
Call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
call УДАЛИТЬ_СТРОКУ_DX; | |
call ЭЛЕ_ВЛО ; // Складываем все вложеные значения | |
mov cx,di ; | |
.ЦИКЛ: | |
test ax,ax ; // И помесчаем в значение скобки | |
jz .ВЫХОД ; | |
mov di,ax ; | |
mov dx,ax ; | |
call ДОБ_ЗНА_В_ЭЛЕ_CX_ИЗ_ЭЛЕ_DX; | |
call ЭЛЕ_СЛЕ ; | |
jmp .ЦИКЛ ; | |
;----------------; | |
.КЦИКЛ: | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
;----------------; | |
push di ; // Если это Функция то | |
call ЭЛЕ_РОДИТЕЛЬ; // Выполнять скобку ненада | |
call ЭЛЕ_ФУН ; | |
pop di ; | |
jnz .ВЫХОД ; | |
;----------------; | |
call ВЫПОЛНИТЬ_ВЛ; // Выполняем содержимое скобки | |
;----------------; | |
call ЭЛЕ_ОДИН ; // Если в элементе тока 1 влож элемент | |
jz .ДАЛЕЕ ; | |
;----------------; | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
cmp ax,ТИП_ЧИСЛ ; | |
jnz .ДАЛЕЕ ; | |
Call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
jmp .ВЫХОД ; | |
;----------------; | |
.ДАЛЕЕ: | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ; Длин Стро не важна назнач ниже | |
Call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
call УДАЛИТЬ_СТРОКУ_DX; | |
call ЭЛЕ_ВЛО ; // Складываем все вложеные значения | |
mov cx,di ; | |
.ЦИКЛ: | |
test ax,ax ; // И помесчаем в значение скобки | |
jz .ВЫХОД ; | |
mov di,ax ; | |
mov dx,ax ; | |
call ДОБ_ЗНА_В_ЭЛЕ_CX_ИЗ_ЭЛЕ_DX; | |
call ЭЛЕ_СЛЕ ; | |
jmp .ЦИКЛ ; | |
;----------------; | |
.КЦИКЛ: | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
;----------------; | |
push di ; // Если это Функция то | |
call ЭЛЕ_РОДИТЕЛЬ; // Выполнять скобку ненада | |
call ЭЛЕ_ФУН ; | |
pop di ; | |
jnz .ВЫХОД ; | |
;----------------; | |
call ВЫПОЛНИТЬ_ВЛ; // Выполняем содержимое скобки | |
;----------------; | |
call ЭЛЕ_ОДИН ; // Если в элементе тока 1 влож элемент | |
jz .ДАЛЕЕ ; | |
;----------------; | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
cmp ax,ТИП_ЧИСЛ ; | |
jnz .ДАЛЕЕ ; | |
Call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
jmp .ВЫХОД ; | |
;----------------; | |
.ДАЛЕЕ: | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ; Длин Стро не важна назнач ниже | |
Call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_СТРОКА; | |
call УДАЛИТЬ_СТРОКУ_DX; | |
call ЭЛЕ_ВЛО ; // Складываем все вложеные значения | |
mov cx,di ; | |
.ЦИКЛ: | |
test ax,ax ; // И помесчаем в значение скобки | |
jz .ВЫХОД ; | |
mov di,ax ; | |
mov dx,ax ; | |
call ДОБ_ЗНА_В_ЭЛЕ_CX_ИЗ_ЭЛЕ_DX; | |
call ЭЛЕ_СЛЕ ; | |
jmp .ЦИКЛ ; | |
;----------------; | |
.КЦИКЛ: | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ЗСКОБ :;{ | |
ret;} | |
ВКОД_ТЕК_НАЧАЛО :;{ | |
call ВЫПОЛНИТЬ_ВЛ; | |
ret; | |
;---------------------------} | |
ВКОД_ТЕК_КОНЕЦ :;{ | |
ret;} | |
ВКОД_ТЕК_ЕСЛИ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ ; | |
jnz .ВЫХОД ; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX ; | |
test ax,ax ; | |
jz .ВЫХОД ; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ ; | |
jnz .ВЫХОД ; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX ; | |
test ax,ax ; | |
jz .ВЫХОД ; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ ; | |
jnz .ВЫХОД ; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX ; | |
test ax,ax ; | |
jz .ВЫХОД ; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
;--------------------------------------------------------} | |
ВКОД_ТЕК_ПОКА :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
.ПОВТОРИТЬ:call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ ; | |
jnz .ВЫХОД ; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX ; | |
test ax,ax ; | |
jz .ВЫХОД ; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
jmp .ПОВТОРИТЬ ; | |
;-------------------------------------------------; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
.ПОВТОРИТЬ:call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ ; | |
jnz .ВЫХОД ; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX ; | |
test ax,ax ; | |
jz .ВЫХОД ; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
jmp .ПОВТОРИТЬ ; | |
;-------------------------------------------------; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
.ПОВТОРИТЬ:call ВЫПОЛНИТЬ_ПЕРВЫЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ ; | |
jnz .ВЫХОД ; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX ; | |
test ax,ax ; | |
jz .ВЫХОД ; | |
call ВЫПОЛНИТЬ_ВТОРОЙ_ВЛОЖЕНЫЙ_ЭЛЕМЕНТ_ЭЛЕМЕНТА_DI; | |
jmp .ПОВТОРИТЬ ; | |
;-------------------------------------------------; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;--------------------------------------------------------------------} | |
ВКОД_ТЕК_ВЫВОД :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call СОЗДАТЬ_СТРОКУ_SI_ДЛИНОЙ_1024_БАЙТ; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ЭЛЕ_ВЛО; | |
call ДОБ_ЗНА_В_СТР_SI_ИЗ_ЭЛЕ_AX | |
call ВЫВОД_В_КОНСОЛЬ_СТРОКИ_SI | |
.ВЫХОД: call УДАЛИТЬ_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call СОЗДАТЬ_СТРОКУ_SI_ДЛИНОЙ_1024_БАЙТ; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ЭЛЕ_ВЛО; | |
call ДОБ_ЗНА_В_СТР_SI_ИЗ_ЭЛЕ_AX | |
call ВЫВОД_В_КОНСОЛЬ_СТРОКИ_SI | |
.ВЫХОД: call УДАЛИТЬ_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call СОЗДАТЬ_СТРОКУ_SI_ДЛИНОЙ_1024_БАЙТ; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ЭЛЕ_ВЛО; | |
call ДОБ_ЗНА_В_СТР_SI_ИЗ_ЭЛЕ_AX | |
call ВЫВОД_В_КОНСОЛЬ_СТРОКИ_SI | |
.ВЫХОД: call УДАЛИТЬ_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
;--------------------------------------------------------------------} | |
ВКОД_ТЕК_ВЫВОДСТ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ПРЕРЫВАНИЕ ; | |
call ВКОД_ТЕК_ВЫВОД; | |
call НАЙТИ_КОНСОЛЬ_В_DI; | |
jz .ВЫХОД; | |
call ОКНО_КНО_ЕНТЕ | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ПРЕРЫВАНИЕ ; | |
call ВКОД_ТЕК_ВЫВОД; | |
call НАЙТИ_КОНСОЛЬ_В_DI; | |
jz .ВЫХОД; | |
call ОКНО_КНО_ЕНТЕ | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ПРЕРЫВАНИЕ ; | |
call ВКОД_ТЕК_ВЫВОД; | |
call НАЙТИ_КОНСОЛЬ_В_DI; | |
jz .ВЫХОД; | |
call ОКНО_КНО_ЕНТЕ | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;--------------------------------------------------------------------} | |
ВКОД_ТЕК_ЦИКЛ :;{ | |
ret;} | |
ВКОД_ТЕК_ВВОД :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;------------------------; | |
call НАЙТИ_БУФЕР_В_AX | |
jz .ВЫХОД; | |
call СТРОКА_AX_ОЧИСТКА ; | |
.ПОВТОР: | |
call ПРЕРЫВАНИЕ; | |
call ДЛИНА_СТРОКИ_AX_В_CX; | |
JZ .ПОВТОР; | |
mov si,ax ; | |
call ЭЛЕ_ЗНА ; | |
call ЗАПИСАТЬ_СТРОКУ_AX_В_СТРОКУ_SI; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;------------------------; | |
call НАЙТИ_БУФЕР_В_AX | |
jz .ВЫХОД; | |
call СТРОКА_AX_ОЧИСТКА ; | |
.ПОВТОР: | |
call ПРЕРЫВАНИЕ; | |
call ДЛИНА_СТРОКИ_AX_В_CX; | |
JZ .ПОВТОР; | |
mov si,ax ; | |
call ЭЛЕ_ЗНА ; | |
call ЗАПИСАТЬ_СТРОКУ_AX_В_СТРОКУ_SI; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;------------------------; | |
call НАЙТИ_БУФЕР_В_AX | |
jz .ВЫХОД; | |
call СТРОКА_AX_ОЧИСТКА ; | |
.ПОВТОР: | |
call ПРЕРЫВАНИЕ; | |
call ДЛИНА_СТРОКИ_AX_В_CX; | |
JZ .ПОВТОР; | |
mov si,ax ; | |
call ЭЛЕ_ЗНА ; | |
call ЗАПИСАТЬ_СТРОКУ_AX_В_СТРОКУ_SI; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ВВОДСТ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;------------------------; | |
call НАЙТИ_БУФЕР_В_AX | |
jz .ВЫХОД; | |
call СТРОКА_AX_ОЧИСТКА ; | |
.ПОВТОР: | |
call ПРЕРЫВАНИЕ ; | |
call ДЛИНА_СТРОКИ_AX_В_CX; | |
JZ .ПОВТОР ; | |
mov si,ax ; | |
add si,cx ; | |
dec si; | |
cmp [si],byte 13 ; | |
JnZ .ПОВТОР ; | |
;------------------------; | |
call ПРЕРЫВАНИЕ ; | |
mov [si],Byte 0 ; | |
call ЭЛЕ_ЗНА ; | |
mov si,ax ; | |
call НАЙТИ_БУФЕР_В_AX ; | |
call ЕСЛИ_СТРОКА_AX_ЧИСЛО_ФЛАГ_Z_1; | |
jnz .ЧИСЛО; | |
.СТРОКА: call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
jmp .ВЫХОД; | |
.ЧИСЛО: call ПЕРЕВОДИТ_СТРОКУ_AX_В_ЧИСЛО_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;------------------------; | |
call НАЙТИ_БУФЕР_В_AX | |
jz .ВЫХОД; | |
call СТРОКА_AX_ОЧИСТКА ; | |
.ПОВТОР: | |
call ПРЕРЫВАНИЕ ; | |
call ДЛИНА_СТРОКИ_AX_В_CX; | |
JZ .ПОВТОР ; | |
mov si,ax ; | |
add si,cx ; | |
dec si; | |
cmp [si],byte 13 ; | |
JnZ .ПОВТОР ; | |
;------------------------; | |
call ПРЕРЫВАНИЕ ; | |
mov [si],Byte 0 ; | |
call ЭЛЕ_ЗНА ; | |
mov si,ax ; | |
call НАЙТИ_БУФЕР_В_AX ; | |
call ЕСЛИ_СТРОКА_AX_ЧИСЛО_ФЛАГ_Z_1; | |
jnz .ЧИСЛО; | |
.СТРОКА: call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
jmp .ВЫХОД; | |
.ЧИСЛО: call ПЕРЕВОДИТ_СТРОКУ_AX_В_ЧИСЛО_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;------------------------; | |
call НАЙТИ_БУФЕР_В_AX | |
jz .ВЫХОД; | |
call СТРОКА_AX_ОЧИСТКА ; | |
.ПОВТОР: | |
call ПРЕРЫВАНИЕ ; | |
call ДЛИНА_СТРОКИ_AX_В_CX; | |
JZ .ПОВТОР ; | |
mov si,ax ; | |
add si,cx ; | |
dec si; | |
cmp [si],byte 13 ; | |
JnZ .ПОВТОР ; | |
;------------------------; | |
call ПРЕРЫВАНИЕ ; | |
mov [si],Byte 0 ; | |
call ЭЛЕ_ЗНА ; | |
mov si,ax ; | |
call НАЙТИ_БУФЕР_В_AX ; | |
call ЕСЛИ_СТРОКА_AX_ЧИСЛО_ФЛАГ_Z_1; | |
jnz .ЧИСЛО; | |
.СТРОКА: call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
jmp .ВЫХОД; | |
.ЧИСЛО: call ПЕРЕВОДИТ_СТРОКУ_AX_В_ЧИСЛО_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ЧПОРТ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА | |
cmp ax,ТИП_ЧИСЛ; | |
jnz .ВЫХОД; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
mov ah,0; | |
in al,dx | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА | |
cmp ax,ТИП_ЧИСЛ; | |
jnz .ВЫХОД; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
mov ah,0; | |
in al,dx | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА | |
cmp eax,ТИП_ЧИСЛ; | |
jnz .ВЫХОД; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
xor eax,eax; | |
in al,dx | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ЧПАМЯТЬ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА | |
cmp ax,ТИП_ЧИСЛ; | |
jnz .ВЫХОД; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
mov si,dx; | |
mov ax,[si] | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА | |
cmp ax,ТИП_ЧИСЛ; | |
jnz .ВЫХОД; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
mov si,dx; | |
mov ax,[si] | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА | |
cmp eax,ТИП_ЧИСЛ; | |
jnz .ВЫХОД; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
mov esi,edx; | |
mov eax,[esi] | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ЗПОРТ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ЭЛЕ_ВЛО; Переходим в скобку | |
;----------------------------------; | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ; ПРоверка значений | |
jnz .ВЫХОД; | |
call ТИП_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ; | |
jnz .ВЫХОД; | |
;-----------------------------------; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX | |
out dx,al; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ЭЛЕ_ВЛО; Переходим в скобку | |
;----------------------------------; | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ; ПРоверка значений | |
jnz .ВЫХОД; | |
call ТИП_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ; | |
jnz .ВЫХОД; | |
;-----------------------------------; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX | |
out dx,al; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ЭЛЕ_ВЛО; Переходим в скобку | |
;----------------------------------; | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ; ПРоверка значений | |
jnz .ВЫХОД; | |
call ТИП_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ; | |
jnz .ВЫХОД; | |
;-----------------------------------; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX | |
out dx,al; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;--------------------------------------------------------------------} | |
ВКОД_ТЕК_ЗПАМЯТЬ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ЭЛЕ_ВЛО; Переходим в скобку | |
;----------------------------------; | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ; ПРоверка значений | |
jnz .ВЫХОД; | |
call ТИП_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА; | |
cmp ax,ТИП_ЧИСЛ; | |
jnz .ВЫХОД; | |
;-----------------------------------; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX | |
Mov si,dx; | |
mov [si],al; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call СОЗДАТЬ_СТРОКУ_SI_ДЛИНОЙ_1024_БАЙТ; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ЭЛЕ_ВЛО; | |
call ДОБ_ЗНА_В_СТР_SI_ИЗ_ЭЛЕ_AX | |
call ВЫВОД_В_КОНСОЛЬ_СТРОКИ_SI | |
.ВЫХОД: call УДАЛИТЬ_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call СОЗДАТЬ_СТРОКУ_SI_ДЛИНОЙ_1024_БАЙТ; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ЭЛЕ_ВЛО; | |
call ДОБ_ЗНА_В_СТР_SI_ИЗ_ЭЛЕ_AX | |
call ВЫВОД_В_КОНСОЛЬ_СТРОКИ_SI | |
.ВЫХОД: call УДАЛИТЬ_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
;--------------------------------------------------------------------} | |
ВКОД_ТЕК_ЗАПРОСИТЬ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА | |
cmp ax,ТИП_ЧИСЛ; | |
jz .ВЫХОД; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX; | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DX_РАЗ_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;------------------------; | |
call НАЙТИ_БУФЕР_В_AX | |
jz .ВЫХОД; | |
call СТРОКА_AX_ОЧИСТКА ; | |
.ПОВТОР: | |
call ДЛИНА_СТРОКИ_AX_В_CX; | |
JZ .ПОВТОР ; | |
mov si,ax ; | |
add si,cx ; | |
dec si; | |
cmp [si],byte 13 ; | |
JnZ .ПОВТОР ; | |
;------------------------; | |
mov [si],Byte 0 ; | |
call ЭЛЕ_ЗНА ; | |
mov si,ax ; | |
call НАЙТИ_БУФЕР_В_AX ; | |
call ЕСЛИ_СТРОКА_AX_ЧИСЛО_ФЛАГ_Z_1; | |
jnz .ЧИСЛО; | |
.СТРОКА: call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
jmp .ВЫХОД; | |
.ЧИСЛО: call ПЕРЕВОДИТ_СТРОКУ_AX_В_ЧИСЛО_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;------------------------; | |
call НАЙТИ_БУФЕР_В_AX | |
jz .ВЫХОД; | |
call СТРОКА_AX_ОЧИСТКА ; | |
.ПОВТОР: | |
call ДЛИНА_СТРОКИ_AX_В_CX; | |
JZ .ПОВТОР ; | |
mov si,ax ; | |
add si,cx ; | |
dec si; | |
cmp [si],byte 13 ; | |
JnZ .ПОВТОР ; | |
;------------------------; | |
mov [si],Byte 0 ; | |
call ЭЛЕ_ЗНА ; | |
mov si,ax ; | |
call НАЙТИ_БУФЕР_В_AX ; | |
call ЕСЛИ_СТРОКА_AX_ЧИСЛО_ФЛАГ_Z_1; | |
jnz .ЧИСЛО; | |
.СТРОКА: call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
jmp .ВЫХОД; | |
.ЧИСЛО: call ПЕРЕВОДИТ_СТРОКУ_AX_В_ЧИСЛО_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ОСВОБОДИТЬ:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
call ТИП_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА | |
cmp ax,ТИП_ЧИСЛ; | |
jz .ВЫХОД; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_DX; | |
call ОСВОБОЖДЕНИЕ_УЧАСТКА_ПАМЯТИ_DX | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;------------------------; | |
call НАЙТИ_БУФЕР_В_AX | |
jz .ВЫХОД; | |
call СТРОКА_AX_ОЧИСТКА ; | |
.ПОВТОР: | |
call ДЛИНА_СТРОКИ_AX_В_CX; | |
JZ .ПОВТОР ; | |
mov si,ax ; | |
add si,cx ; | |
dec si; | |
cmp [si],byte 13 ; | |
JnZ .ПОВТОР ; | |
;------------------------; | |
mov [si],Byte 0 ; | |
call ЭЛЕ_ЗНА ; | |
mov si,ax ; | |
call НАЙТИ_БУФЕР_В_AX ; | |
call ЕСЛИ_СТРОКА_AX_ЧИСЛО_ФЛАГ_Z_1; | |
jnz .ЧИСЛО; | |
.СТРОКА: call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
jmp .ВЫХОД; | |
.ЧИСЛО: call ПЕРЕВОДИТ_СТРОКУ_AX_В_ЧИСЛО_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;------------------------; | |
call НАЙТИ_БУФЕР_В_AX | |
jz .ВЫХОД; | |
call СТРОКА_AX_ОЧИСТКА ; | |
.ПОВТОР: | |
call ДЛИНА_СТРОКИ_AX_В_CX; | |
JZ .ПОВТОР ; | |
mov si,ax ; | |
add si,cx ; | |
dec si; | |
cmp [si],byte 13 ; | |
JnZ .ПОВТОР ; | |
;------------------------; | |
mov [si],Byte 0 ; | |
call ЭЛЕ_ЗНА ; | |
mov si,ax ; | |
call НАЙТИ_БУФЕР_В_AX ; | |
call ЕСЛИ_СТРОКА_AX_ЧИСЛО_ФЛАГ_Z_1; | |
jnz .ЧИСЛО; | |
.СТРОКА: call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
jmp .ВЫХОД; | |
.ЧИСЛО: call ПЕРЕВОДИТ_СТРОКУ_AX_В_ЧИСЛО_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_РОДИТЕЛЬ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;------------------------; | |
call НАЙТИ_БУФЕР_В_AX | |
jz .ВЫХОД; | |
call СТРОКА_AX_ОЧИСТКА ; | |
.ПОВТОР: | |
call ДЛИНА_СТРОКИ_AX_В_CX; | |
JZ .ПОВТОР ; | |
mov si,ax ; | |
add si,cx ; | |
dec si; | |
cmp [si],byte 13 ; | |
JnZ .ПОВТОР ; | |
;------------------------; | |
mov [si],Byte 0 ; | |
call ЭЛЕ_ЗНА ; | |
mov si,ax ; | |
call НАЙТИ_БУФЕР_В_AX ; | |
call ЕСЛИ_СТРОКА_AX_ЧИСЛО_ФЛАГ_Z_1; | |
jnz .ЧИСЛО; | |
.СТРОКА: call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
jmp .ВЫХОД; | |
.ЧИСЛО: call ПЕРЕВОДИТ_СТРОКУ_AX_В_ЧИСЛО_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;------------------------; | |
call НАЙТИ_БУФЕР_В_AX | |
jz .ВЫХОД; | |
call СТРОКА_AX_ОЧИСТКА ; | |
.ПОВТОР: | |
call ДЛИНА_СТРОКИ_AX_В_CX; | |
JZ .ПОВТОР ; | |
mov si,ax ; | |
add si,cx ; | |
dec si; | |
cmp [si],byte 13 ; | |
JnZ .ПОВТОР ; | |
;------------------------; | |
mov [si],Byte 0 ; | |
call ЭЛЕ_ЗНА ; | |
mov si,ax ; | |
call НАЙТИ_БУФЕР_В_AX ; | |
call ЕСЛИ_СТРОКА_AX_ЧИСЛО_ФЛАГ_Z_1; | |
jnz .ЧИСЛО; | |
.СТРОКА: call ЗАПИСАТЬ_ЗНАЧЕНИЕ_AX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
jmp .ВЫХОД; | |
.ЧИСЛО: call ПЕРЕВОДИТ_СТРОКУ_AX_В_ЧИСЛО_DX; | |
call ЗАПИСАТЬ_ЗНАЧЕНИЕ_DX_В_ЭЛЕМЕНТ_DI_КАК_ЧИСЛО | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_РЕЗЕРВ1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call НАЙТИ_КОНСОЛЬ_В_DI; | |
push DI | |
jz .ВЫХОД; // Если Консоль отсуствует от выход | |
call ОКНО_ТЕК ; | |
test ax,ax; | |
jz .ВЫХОД; // Если текст отсуствует от выход | |
mov di,ax; | |
.ЦИКЛ:; | |
mov al,[di] | |
test al,al | |
jz .ВЫХОД; | |
cmp al,13; | |
jz .КЦИКЛ; | |
call УДАЛИТЬ_БУКВУ_В_НАЧАЛЕ_СТРОКИ; | |
jmp .ЦИКЛ; | |
.КЦИКЛ: | |
call УДАЛИТЬ_БУКВУ_В_НАЧАЛЕ_СТРОКИ; | |
pop di | |
call ОКНО_КУР_ВВЕР; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call НАЙТИ_КОНСОЛЬ_В_DI; | |
push DI | |
jz .ВЫХОД; // Если Консоль отсуствует от выход | |
call ОКНО_ТЕК ; | |
test ax,ax; | |
jz .ВЫХОД; // Если текст отсуствует от выход | |
mov di,ax; | |
.ЦИКЛ:; | |
mov al,[di] | |
test al,al | |
jz .ВЫХОД; | |
cmp al,13; | |
jz .КЦИКЛ; | |
call УДАЛИТЬ_БУКВУ_В_НАЧАЛЕ_СТРОКИ; | |
jmp .ЦИКЛ; | |
.КЦИКЛ: | |
call УДАЛИТЬ_БУКВУ_В_НАЧАЛЕ_СТРОКИ; | |
pop di | |
call ОКНО_КУР_ВВЕР; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call НАЙТИ_КОНСОЛЬ_В_DI; | |
push eDI | |
jz .ВЫХОД; // Если Консоль отсуствует от выход | |
call ОКНО_ТЕК ; | |
test eax,eax; | |
jz .ВЫХОД; // Если текст отсуствует от выход | |
mov edi,eax; | |
.ЦИКЛ:; | |
mov al,[edi] | |
test al,al | |
jz .ВЫХОД; | |
cmp al,13; | |
jz .КЦИКЛ; | |
call УДАЛИТЬ_БУКВУ_В_НАЧАЛЕ_СТРОКИ; | |
jmp .ЦИКЛ; | |
.КЦИКЛ: | |
call УДАЛИТЬ_БУКВУ_В_НАЧАЛЕ_СТРОКИ; | |
pop edi | |
call ОКНО_КУР_ВВЕР; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_РЕЗЕРВ2 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_РЕЗЕРВ3 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_РЕЗЕРВ4 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_РЕЗЕРВ5 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_РЕЗЕРВ6 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_РЕЗЕРВ7 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_РАЗРЕШИТЬ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
;MOV [ЗАПРЕТ],byte 0; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
; call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
ВКОД_ТЕК_ЗАПРЕТИТЬ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
; call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; MOV [ЗАПРЕТ],byte 1; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
; call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
; call ВЫПОЛНИТЬ_ВЛ ; // Запускаем элемнт на вполнение | |
; КОД | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;------------------------------------------------------------------------------} | |
;==============================================================================} | |
;{ ФУНКЦИИ ДЛЯ РАБОТЫ C ЭЛЕМЕНТАМИ . | |
;---{ Чтение значения полей элементов | |
ЭЛЕ_ТИП:;{ Возвращает в AX Тип элемента DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
xor ax,ax ; | |
add DI,ЭЛ_ТИП; | |
mov al,[di] ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
xor ax,ax ; | |
add DI,ЭЛ_ТИП; | |
mov al,[di] ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
xor eax,eax ; | |
add EDI,ЭЛ_ТИП ; | |
mov al,[edi] ; | |
pop edi ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_ФУН:;{ Возвращает в AX Являеться ли элемента DI функцией устанавливает флаг Z если это функция | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
xor ax,ax ; | |
add DI,ЭЛ_ФУН; | |
mov al,[di] ; | |
test al,al ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
xor ax,ax ; | |
add DI,ЭЛ_ФУН; | |
mov al,[di] ; | |
test al,al ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
xor eax,eax ; | |
add eDI,ЭЛ_ФУН; | |
mov al,[edi] ; | |
test al,al ; | |
pop edi ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_ЗНА:;{ Возвращает в AX Значение элемента DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
add DI,ЭЛ_ЗНА; | |
mov ax,[di] ; | |
test ax,ax ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
add DI,ЭЛ_ЗНА; | |
mov ax,[di] ; | |
test ax,ax ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
add eDI,ЭЛ_ЗНА; | |
mov eax,[edi] ; | |
test eax,eax ; | |
pop edi ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_ПРЕ:;{ Возвращает в AX Предыдущий элемент элемента DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
add DI,ЭЛ_ПРЕ; | |
mov ax,[di] ; | |
test ax,ax ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
add DI,ЭЛ_ПРЕ; | |
mov ax,[di] ; | |
test ax,ax ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
add eDI,ЭЛ_ПРЕ; | |
mov eax,[edi] ; | |
test eax,eax ; | |
pop edi ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_СЛЕ:;{ Возвращает в AX Следующий элемент элемента DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
add DI,ЭЛ_СЛЕ; | |
mov ax,[di] ; | |
test ax,ax ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
add DI,ЭЛ_СЛЕ; | |
mov ax,[di] ; | |
test ax,ax ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
add eDI,ЭЛ_СЛЕ; | |
mov eax,[edi] ; | |
test eax,eax ; | |
pop edi ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_РОД:;{ Возвращает в AX Родительский элемент элемента DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
add DI,ЭЛ_РОД; | |
mov ax,[di] ; | |
test ax,ax ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
add DI,ЭЛ_РОД; | |
mov ax,[di] ; | |
test ax,ax ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
add eDI,ЭЛ_РОД; | |
mov eax,[edi] ; | |
test eax,eax ; | |
pop edi ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_ВЛО:;{ Возвращает в AX Первый вложеный элемент элемента DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
add DI,ЭЛ_ВЛО; | |
mov ax,[di] ; | |
test ax,ax ; | |
pop di ; | |
ret ; | |
ENd IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
add DI,ЭЛ_ВЛО; | |
mov ax,[di] ; | |
test ax,ax ; | |
pop di ; | |
ret ; | |
ENd IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
add eDI,ЭЛ_ВЛО; | |
mov eax,[edi] ; | |
test eax,eax ; | |
pop edi ; | |
ret ; | |
ENd IF ;} | |
;==============================================================================} | |
ЭЛЕ_КОД:;{ Возвращает в AX Код элемент элемента DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
add DI,ЭЛ_КОД; | |
mov ax,[di] ; | |
test ax,ax ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
add DI,ЭЛ_КОД; | |
mov ax,[di] ; | |
test ax,ax ; | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
add eDI,ЭЛ_КОД; | |
mov eax,[edi] ; | |
test eax,eax ; | |
pop edi ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
;---} | |
;---{ Вспомогательные функции | |
ЭЛЕ_ТИП_ЧИСЛО:;{ Если Тип элемента DI ЧИСЛО | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov dx,1 ; )))))))) | |
call ЭЛЕ_ТИП ; | |
cmp ax,ТИП_ЧИСЛ; | |
jz .ЧИСЛО ; | |
mov dx,0 ; ))))))) | |
.ЧИСЛО: | |
test dx,dx ; хи | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov dx,1 ; )))))))) | |
call ЭЛЕ_ТИП ; | |
cmp ax,ТИП_ЧИСЛ; | |
jz .ЧИСЛО ; | |
mov dx,0 ; ))))))) | |
.ЧИСЛО: | |
test dx,dx ; хи | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov edx,1 ; )))))))) | |
call ЭЛЕ_ТИП ; | |
cmp eax,ТИП_ЧИСЛ; | |
jz .ЧИСЛО ; | |
mov dl,0 ; Оптимизация | |
.ЧИСЛО: | |
test dl,dl ; ))))) | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_ТИП_СТРОКА:;{ Если Тип элемента DI Строка | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov dx,1 ; )))))))) | |
call ЭЛЕ_ТИП ; | |
cmp ax,ТИП_СТРО; | |
jz .СТРОКА ; | |
mov dx,0 ; ))))))) | |
.СТРОКА: | |
test dx,dx ; хи | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov dx,1 ; )))))))) | |
call ЭЛЕ_ТИП ; | |
cmp ax,ТИП_СТРО; | |
jz .СТРОКА ; | |
mov dx,0 ; ))))))) | |
.СТРОКА: | |
test dx,dx ; хи | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov edx,1 ; )))))))) | |
call ЭЛЕ_ТИП ; | |
cmp eax,ТИП_СТРО; | |
jz .СТРОКА ; | |
mov dl,0 ; Оптимизация | |
.СТРОКА: | |
test dl,dl ; ))))) | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
;---} | |
СОЗДАТЬ_КОРНЕВОЙ_ЭЛЕМЕНТ:;{ Создание коневого элемента | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov SI,ИМЯ_КОР ;// Указывает адрес строки с именем котрое нужно присвоимть элементу | |
mov DI,0 ;// Указывает в каком элементе создаем элемент | |
mov al,0 ; | |
mov AH,0 ;// Указываем Являетсья ли элмеент функцией | |
mov bx,0 ;// Указываем значение | |
Call ЭЛЕ_СОЗДАТЬ ;// Создаем элемент | |
mov [КОР_ЭЛЕМ],di;// Записываем адрес созданого элемента | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov SI,ИМЯ_КОР ;// Указывает адрес строки с именем котрое нужно присвоимть элементу | |
mov DI,0 ;// Указывает в каком элементе создаем элемент | |
mov al,0 ; | |
mov AH,0 ;// Указываем Являетсья ли элмеент функцией | |
mov bx,0 ;// Указываем значение | |
Call ЭЛЕ_СОЗДАТЬ ;// Создаем элемент | |
mov [КОР_ЭЛЕМ],di;// Записываем адрес созданого элемента | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov ESI,ИМЯ_КОР ;// Указывает адрес строки с именем котрое нужно присвоимть элементу | |
mov EDI,0 ;// Указывает в каком элементе создаем элемент | |
mov al,0 ; | |
mov AH,0 ;// Указываем Являетсья ли элмеент функцией | |
mov Ebx,0 ;// Указываем значение | |
Call ЭЛЕ_СОЗДАТЬ ;// Создаем элемент | |
mov [КОР_ЭЛЕМ],Edi;// Записываем адрес созданого элемента | |
popad; | |
ret; | |
END IF;} | |
ИМЯ_КОР: DB "КОР_ЭЛЕ",0; | |
;==============================================================================} | |
ЭЛЕ_СОЗДАТЬ_КОД :;{ возвращает адрес внось созданого элемента в DI Создание элемента с именем SI-адрес строки с именем элемента AL - Тип элемента Ah Показатель функции DI- адрес того элемента в котрый добвавлем BX- Значение аааа | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ;{ ОПИСАНИЕ | |
; Создает новый элемент -------------------------------------------- | |
; DI - Адрес элемента В котром ьудет создан новый элемнет если 0 | |
; то не в каком просто создаеться элемнт | |
; SI - Имя элемента создаеться копия Строки SI и задаеться как имя | |
; AL - Это тип создаваемого Элемента | |
; AH - Участвует ли элемнт в поиске | |
; BX - Значение элемента Либо адрес строки либо число | |
;------------------------------------------------------------------} | |
;------------------------;// Проверю что я тут попереломал )))) | |
mov DX,16 ;// Выделяем участок памяти под элемент | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DX_РАЗ_DX; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI;// Добавляем Вот тут нужно переделать | |
;------------------------; | |
mov cx,si | |
mov si,dx ; | |
add si,ЭЛ_КОД ; | |
mov [si],cx ; | |
;----------------------; | |
mov si,dx ; | |
add si,ЭЛ_ЗНА ; | |
mov [si],bx ; | |
;----------------------; | |
mov si,dx ;// Указываем тип элемента | |
add si,ЭЛ_ТИП ; | |
mov [si],al ; | |
;--------------------; | |
mov si,dx ;// Указываем являеться ли элемент функцией | |
add si,ЭЛ_ФУН ; | |
mov [si],ah ; | |
;--------------------; | |
pop SI ; | |
push dX ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ;{ ОПИСАНИЕ | |
; Создает новый элемент -------------------------------------------- | |
; DI - Адрес элемента В котром ьудет создан новый элемнет если 0 | |
; то не в каком просто создаеться элемнт | |
; SI - Имя элемента создаеться копия Строки SI и задаеться как имя | |
; AL - Это тип создаваемого Элемента | |
; AH - Участвует ли элемнт в поиске | |
; BX - Значение элемента Либо адрес строки либо число | |
;------------------------------------------------------------------} | |
;------------------------;// Проверю что я тут попереломал )))) | |
mov DX,16 ;// Выделяем участок памяти под элемент | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DX_РАЗ_DX; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI;// Добавляем Вот тут нужно переделать | |
;------------------------; | |
mov cx,si | |
mov si,dx ; | |
add si,ЭЛ_КОД ; | |
mov [si],cx ; | |
;----------------------; | |
mov si,dx ; | |
add si,ЭЛ_ЗНА ; | |
mov [si],bx ; | |
;----------------------; | |
mov si,dx ;// Указываем тип элемента | |
add si,ЭЛ_ТИП ; | |
mov [si],al ; | |
;--------------------; | |
mov si,dx ;// Указываем являеться ли элемент функцией | |
add si,ЭЛ_ФУН ; | |
mov [si],ah ; | |
;--------------------; | |
pop SI ; | |
push dX ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ;{ ОПИСАНИЕ | |
; Создает новый элемент -------------------------------------------- | |
; DI - Адрес элемента В котром ьудет создан новый элемнет если 0 | |
; то не в каком просто создаеться элемнт | |
; SI - Имя элемента создаеться копия Строки SI и задаеться как имя | |
; AL - Это тип создаваемого Элемента | |
; AH - Участвует ли элемнт в поиске | |
; BX - Значение элемента Либо адрес строки либо число | |
;------------------------------------------------------------------} | |
;------------------------;// Проверю что я тут попереломал )))) | |
mov eDX,28 ;// Выделяем участок памяти под элемент | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DX_РАЗ_DX; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI;// Добавляем Вот тут нужно переделать | |
;------------------------; | |
mov ecx,esi | |
mov esi,edx ; | |
add esi,ЭЛ_КОД ; | |
mov [esi],ecx ; | |
;----------------------; | |
mov esi,edx ; | |
add esi,ЭЛ_ЗНА ; | |
mov [esi],ebx ; | |
;----------------------; | |
mov esi,edx ;// Указываем тип элемента | |
add esi,ЭЛ_ТИП ; | |
mov [esi],al ; | |
;--------------------; | |
mov esi,edx ;// Указываем являеться ли элемент функцией | |
add esi,ЭЛ_ФУН ; | |
mov [esi],ah ; | |
;--------------------; | |
pop eSI ; | |
push edX ; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_ОДИН :;{ Если в элементе 1 вложеный элемент возвращает 1 если ноль или больше 1 то 0 возвращет | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
test di,di; | |
jz .ЛОЖ; | |
call ЭЛЕ_ВЛО; | |
jz .ЛОЖ; | |
mov di,ax; | |
call ЭЛЕ_СЛЕ; | |
jnz .ЛОЖ; | |
mov ax,1; | |
test ax,ax; | |
jmp .ВЫХОД; | |
.ЛОЖ: mov ax,0; | |
test ax,ax; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
test di,di; | |
jz .ЛОЖ; | |
call ЭЛЕ_ВЛО; | |
jz .ЛОЖ; | |
mov di,ax; | |
call ЭЛЕ_СЛЕ; | |
jnz .ЛОЖ; | |
mov ax,1; | |
test ax,ax; | |
jmp .ВЫХОД; | |
.ЛОЖ: mov ax,0; | |
test ax,ax; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
test edi,edi; | |
jz .ЛОЖ; | |
call ЭЛЕ_ВЛО; | |
jz .ЛОЖ; | |
mov edi,eax; | |
call ЭЛЕ_СЛЕ; | |
jnz .ЛОЖ; | |
mov eax,1; | |
test eax,eax; | |
jmp .ВЫХОД; | |
.ЛОЖ: mov eax,0; | |
test eax,eax; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
;} | |
ЭЛЕ_СОЗДАТЬ :;{ возвращает адрес внось созданого элемента в DI Создание элемента с именем SI-адрес строки с именем элемента AL - Тип элемента Ah Показатель функции DI- адрес того элемента в котрый добвавлем BX- Значение аааа | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ;{ ОПИСАНИЕ | |
; Создает новый элемент -------------------------------------------- | |
; DI - Адрес элемента В котром ьудет создан новый элемнет если 0 | |
; то не в каком просто создаеться элемнт | |
; SI - Имя элемента создаеться копия Строки SI и задаеться как имя | |
; AL - Это тип создаваемого Элемента | |
; AH - Участвует ли элемнт в поиске | |
; BX - Значение элемента Либо адрес строки либо число | |
;------------------------------------------------------------------} | |
;------------------------;// Проверю что я тут попереломал )))) | |
mov DX,16 ;// Выделяем участок памяти под элемент | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DX_РАЗ_DX; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI;// Добавляем Вот тут нужно переделать | |
;------------------------; | |
mov cx,si | |
call СЛО_В_КОДCX ; | |
mov si,dx ; | |
add si,ЭЛ_КОД ; | |
mov [si],cx ; | |
;----------------------; | |
mov si,dx ; | |
add si,ЭЛ_ЗНА ; | |
mov [si],bx ; | |
;----------------------; | |
mov si,dx ;// Указываем тип элемента | |
add si,ЭЛ_ТИП ; | |
mov [si],al ; | |
;--------------------; | |
mov si,dx ;// Указываем являеться ли элемент функцией | |
add si,ЭЛ_ФУН ; | |
mov [si],ah ; | |
;--------------------; | |
pop SI ; | |
push dX ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ;{ ОПИСАНИЕ | |
; Создает новый элемент -------------------------------------------- | |
; DI - Адрес элемента В котром ьудет создан новый элемнет если 0 | |
; то не в каком просто создаеться элемнт | |
; SI - Имя элемента создаеться копия Строки SI и задаеться как имя | |
; AL - Это тип создаваемого Элемента | |
; AH - Участвует ли элемнт в поиске | |
; BX - Значение элемента Либо адрес строки либо число | |
;------------------------------------------------------------------} | |
;------------------------;// Проверю что я тут попереломал )))) | |
mov DX,16 ;// Выделяем участок памяти под элемент | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DX_РАЗ_DX; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI;// Добавляем Вот тут нужно переделать | |
;------------------------; | |
mov cx,si | |
call СЛО_В_КОДCX ; | |
mov si,dx ; | |
add si,ЭЛ_КОД ; | |
mov [si],cx ; | |
;----------------------; | |
mov si,dx ; | |
add si,ЭЛ_ЗНА ; | |
mov [si],bx ; | |
;----------------------; | |
mov si,dx ;// Указываем тип элемента | |
add si,ЭЛ_ТИП ; | |
mov [si],al ; | |
;--------------------; | |
mov si,dx ;// Указываем являеться ли элемент функцией | |
add si,ЭЛ_ФУН ; | |
mov [si],ah ; | |
;--------------------; | |
pop SI ; | |
push dX ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ;{ ОПИСАНИЕ | |
; Создает новый элемент -------------------------------------------- | |
; DI - Адрес элемента В котром ьудет создан новый элемнет если 0 | |
; то не в каком просто создаеться элемнт | |
; SI - Имя элемента создаеться копия Строки SI и задаеться как имя | |
; AL - Это тип создаваемого Элемента | |
; AH - Участвует ли элемнт в поиске | |
; BX - Значение элемента Либо адрес строки либо число | |
;------------------------------------------------------------------} | |
;------------------------;// Проверю что я тут попереломал )))) | |
mov EDX,28 ;// Выделяем участок памяти под элемент | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DX_РАЗ_DX; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI;// Добавляем Вот тут нужно переделать | |
;------------------------; | |
mov ecx,esi | |
call СЛО_В_КОДCX ; | |
mov esi,edx ; | |
add esi,ЭЛ_КОД ; | |
mov [esi],ecx ; | |
;----------------------; | |
mov esi,edx ; | |
add esi,ЭЛ_ЗНА ; | |
mov [esi],ebx ; | |
;----------------------; | |
mov esi,edx ;// Указываем тип элемента | |
add esi,ЭЛ_ТИП ; | |
mov [esi],al ; | |
;----------------------; | |
mov esi,edx ;// Указываем являеться ли элемент функцией | |
add esi,ЭЛ_ФУН ; | |
mov [esi],ah ; | |
;----------------------; | |
pop eSI ; | |
push edX ; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_КОПИЯ_ПА:;{ Копирвоание параметров Функции DX В DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;-----------; | |
mov ax,dx ; | |
call ЭЛЕ_ЧИТ_СКО_ИЗ_ЭЛЕ_AX; | |
jz .ВЫХОД ; | |
mov bx,ax ; | |
;-----------; | |
mov ax,di ; | |
call ЭЛЕ_ЧИТ_СКО_ИЗ_ЭЛЕ_AX; | |
jz .ВЫХОД ; | |
mov di,ax ; | |
.ЦИКЛ: | |
test di,di ; | |
jz .ВЫХОД ; | |
test bx,bx ; | |
jz .ВЫХОД ; | |
call ПРИСВОИТЬ_ЗНА_В_ЭЛЕ_DI_ИЗ_ЭЛЕ_BX; | |
call ЭЛЕ_СЛЕ ; | |
mov di,ax; | |
push di; | |
mov di,bx; | |
call ЭЛЕ_СЛЕ ; | |
mov bx,ax; | |
pop di; | |
jmp .ЦИКЛ; | |
.КЦИКЛА: | |
.ВЫХОД: | |
popad; | |
ret; | |
END iF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;-----------; | |
mov ax,dx ; | |
call ЭЛЕ_ЧИТ_СКО_ИЗ_ЭЛЕ_AX; | |
jz .ВЫХОД ; | |
mov bx,ax ; | |
;-----------; | |
mov ax,di ; | |
call ЭЛЕ_ЧИТ_СКО_ИЗ_ЭЛЕ_AX; | |
jz .ВЫХОД ; | |
mov di,ax ; | |
.ЦИКЛ: | |
test di,di ; | |
jz .ВЫХОД ; | |
test bx,bx ; | |
jz .ВЫХОД ; | |
call ПРИСВОИТЬ_ЗНА_В_ЭЛЕ_DI_ИЗ_ЭЛЕ_BX; | |
call ЭЛЕ_СЛЕ ; | |
mov di,ax; | |
push di; | |
mov di,bx; | |
call ЭЛЕ_СЛЕ ; | |
mov bx,ax; | |
pop di; | |
jmp .ЦИКЛ; | |
.КЦИКЛА: | |
.ВЫХОД: | |
popad; | |
ret; | |
END iF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;-----------; | |
mov eax,edx ; | |
call ЭЛЕ_ЧИТ_СКО_ИЗ_ЭЛЕ_AX; | |
jz .ВЫХОД ; | |
mov ebx,eax ; | |
;-----------; | |
mov eax,edi ; | |
call ЭЛЕ_ЧИТ_СКО_ИЗ_ЭЛЕ_AX; | |
jz .ВЫХОД ; | |
mov edi,eax ; | |
.ЦИКЛ: | |
test edi,edi ; | |
jz .ВЫХОД ; | |
test ebx,ebx ; | |
jz .ВЫХОД ; | |
call ПРИСВОИТЬ_ЗНА_В_ЭЛЕ_DI_ИЗ_ЭЛЕ_BX; | |
call ЭЛЕ_СЛЕ ; | |
mov edi,eax; | |
push edi; | |
mov edi,ebx; | |
call ЭЛЕ_СЛЕ ; | |
mov ebx,eax; | |
pop edi; | |
jmp .ЦИКЛ; | |
.КЦИКЛА: | |
.ВЫХОД: | |
popad; | |
ret; | |
END iF;} | |
;==============================================================================} | |
ЭЛЕ_РОДИТЕЛЬ:;{ Возвращает в регистре DI Адрес родительского элемента в DI сразу устанавливает флаг Z=0 если NIL | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
add DI,ЭЛ_РОД;// ПРибавляем к адресу элемента DI смещение для чтения РОдителя | |
mov DI,[DI] ;// ЧИтаем адрес родителя | |
test DI,DI ;// ПРоверяем есть ли родитель устанавливаем флаг | |
ret ;// Сразу устанвливает флаг если NIL | |
END iF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
add DI,ЭЛ_РОД;// ПРибавляем к адресу элемента DI смещение для чтения РОдителя | |
mov DI,[DI] ;// ЧИтаем адрес родителя | |
test DI,DI ;// ПРоверяем есть ли родитель устанавливаем флаг | |
ret ;// Сразу устанвливает флаг если NIL | |
END iF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
add EDI,ЭЛ_РОД;// ПРибавляем к адресу элемента DI смещение для чтения РОдителя | |
mov EDI,[EDI] ;// ЧИтаем адрес родителя | |
test EDI,EDI ;// ПРоверяем есть ли родитель устанавливаем флаг | |
ret ;// Сразу устанвливает флаг если NIL | |
END iF ;} | |
;==============================================================================} | |
ЭЛЕ_ПОСЛЕД :;{ Находит последний элемент в списке элемента DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov si,0 ;// ПО умолчанию резальтат равен 0 то биш нету вложеных елемнтов а следователоьно и нету последнего элемента | |
call ЭЛЕ_ВЛО ;// открываем первый элемент вложеного списка в элементе Di В регистр AX | |
.ЦИКЛ: | |
TEST AX,AX ;// Проверяем не достигли ли мы нулевого элемента | |
JZ .КЦИКЛ ;// Если дрстигли нулевой элемент то выходим из списка | |
Mov Si,ax ;// Запоминаем последний не нуллевой элемент в списке | |
Mov di,ax ; | |
call ЭЛЕ_СЛЕ ;// Переходим к следующему элементу | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
pop di ; | |
push SI ;// Возврвщаемый элемент храниться в SI но возвпращаеться в регистре DI | |
test si,si ; | |
popad ; | |
ret ; | |
END iF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov si,0 ;// ПО умолчанию резальтат равен 0 то биш нету вложеных елемнтов а следователоьно и нету последнего элемента | |
call ЭЛЕ_ВЛО ;// открываем первый элемент вложеного списка в элементе Di В регистр AX | |
.ЦИКЛ: | |
TEST AX,AX ;// Проверяем не достигли ли мы нулевого элемента | |
JZ .КЦИКЛ ;// Если дрстигли нулевой элемент то выходим из списка | |
Mov Si,ax ;// Запоминаем последний не нуллевой элемент в списке | |
Mov di,ax ; | |
call ЭЛЕ_СЛЕ ;// Переходим к следующему элементу | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
pop di ; | |
push SI ;// Возврвщаемый элемент храниться в SI но возвпращаеться в регистре DI | |
test si,si ; | |
popad ; | |
ret ; | |
END iF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov esi,0 ;// ПО умолчанию резальтат равен 0 то биш нету вложеных елемнтов а следователоьно и нету последнего элемента | |
call ЭЛЕ_ВЛО ;// открываем первый элемент вложеного списка в элементе Di В регистр AX | |
.ЦИКЛ: | |
TEST eAX,eAX ;// Проверяем не достигли ли мы нулевого элемента | |
JZ .КЦИКЛ ;// Если дрстигли нулевой элемент то выходим из списка | |
Mov eSi,eax ;// Запоминаем последний не нуллевой элемент в списке | |
Mov edi,eax ; | |
call ЭЛЕ_СЛЕ ;// Переходим к следующему элементу | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
pop edi ; | |
push eSI ;// Возврвщаемый элемент храниться в SI но возвпращаеться в регистре DI | |
test esi,esi ; | |
popad ; | |
ret ; | |
END iF ;} | |
;==============================================================================} | |
ЭЛЕ_НАЗАД :;{ Перемещаеться к предыдущему элементу если его нет поднимаеться на верх по иирархии | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
test di,di ; | |
jz .ДАЛЕЕ ; | |
call ЭЛЕ_ПРЕ; | |
test ax,ax ; | |
jnz .ДАЛЕЕ ; | |
call ЭЛЕ_РОД; | |
.ДАЛЕЕ: mov di,ax ; | |
test di,di ; | |
pop ax ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
test di,di ; | |
jz .ДАЛЕЕ ; | |
call ЭЛЕ_ПРЕ; | |
test ax,ax ; | |
jnz .ДАЛЕЕ ; | |
call ЭЛЕ_РОД; | |
.ДАЛЕЕ: mov di,ax ; | |
test di,di ; | |
pop ax ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
test edi,edi ; | |
jz .ДАЛЕЕ ; | |
call ЭЛЕ_ПРЕ; | |
test eax,eax ; | |
jnz .ДАЛЕЕ ; | |
call ЭЛЕ_РОД; | |
.ДАЛЕЕ: mov edi,eax ; | |
test edi,edi ; | |
pop eax ; | |
ret ; | |
END IF ;} | |
;} | |
ЭЛЕ_УДАЛИТЬ :;{ Удаяляет элемент DI из списка | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
;-----------; | |
call ЭЛЕ_ПРЕ ;// CX Запоминаем предыдущий элемент удаляемлого элемента в регистр | |
mov cx,ax; ; | |
;-----------; | |
;-----------; | |
call ЭЛЕ_СЛЕ ;// DX Запоминаем предыдущий элемент удаляемлого элемента в регистр | |
mov Dx,ax; ; | |
;-----------; | |
;------------ | |
test cx,cx ;// Записываем в предыдущем элементе следуюший элемент | |
jz .НЕТУ1 ;// Проверяем есть ли вообще предыдущий элмеент | |
Mov Si,Cx ; | |
add Si,ЭЛ_СЛЕ; | |
Mov [si],dx ; | |
;------------ | |
.НЕТУ1: ;------------ | |
test dx,dx ;// Записываем в Cледующем элементе предыдущимй | |
jz .НЕТУ2 ;// ПРоверяем если вообще следующий элемент | |
mov si,dx ; | |
add si,ЭЛ_ПРЕ; | |
mov [si],cx ; | |
;------------ | |
.НЕТУ2: ;-------------// Настройка родительского элемента | |
call ЭЛЕ_РОД ;// Читаем адрес родительского эдемента | |
test ax,ax ;// Проверяем есть ли вобще родительский элемент | |
Jz .НЕТУ3 ;// Если нету родительского элемента то идем дальше | |
add ax,ЭЛ_ВЛО ;// Читем поле блок родительского элменета | |
mov si,ax ; | |
mov ax,[si] ;// ПРочитали значение поля BLO родительского элменета | |
cmp ax,di ;// ПРоверяем не являемся ли мы первым элментом вложеного спсика в родительском элементе | |
Jnz .НЕТУ3 ;// Если мы не указаны в родительском элементе идем дальше | |
mov [si],dx ;// сли указаны то записываем след элемент вместо себя | |
.НЕТУ3: ;// Отстыковка элемнта | |
mov Si,di ;// Востанавливаем значение удаляемог элмента | |
add SI,ЭЛ_РОД ; | |
mov word[si],0 ;// остоеденяем родительский элемент | |
inc Si ; | |
inc si ;// Переходим к полю предыдущий элемент | |
mov word[si],0 ;// остоеденяем предыдущий элемент | |
inc Si ; | |
inc si ;// Переходим к полю следующий элемент | |
mov word[si],0 ;// остоеденяем Следующий элемент | |
.ВЫХОД: | |
popad | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad | |
;-----------; | |
call ЭЛЕ_ПРЕ ;// CX Запоминаем предыдущий элемент удаляемлого элемента в регистр | |
mov cx,ax; ; | |
;-----------; | |
;-----------; | |
call ЭЛЕ_СЛЕ ;// DX Запоминаем предыдущий элемент удаляемлого элемента в регистр | |
mov Dx,ax; ; | |
;-----------; | |
;------------ | |
test cx,cx ;// Записываем в предыдущем элементе следуюший элемент | |
jz .НЕТУ1 ;// Проверяем есть ли вообще предыдущий элмеент | |
Mov Si,Cx ; | |
add Si,ЭЛ_СЛЕ; | |
Mov [si],dx ; | |
;------------ | |
.НЕТУ1: ;------------ | |
test dx,dx ;// Записываем в Cледующем элементе предыдущимй | |
jz .НЕТУ2 ;// ПРоверяем если вообще следующий элемент | |
mov si,dx ; | |
add si,ЭЛ_ПРЕ; | |
mov [si],cx ; | |
;------------ | |
.НЕТУ2: ;-------------// Настройка родительского элемента | |
call ЭЛЕ_РОД ;// Читаем адрес родительского эдемента | |
test ax,ax ;// Проверяем есть ли вобще родительский элемент | |
Jz .НЕТУ3 ;// Если нету родительского элемента то идем дальше | |
add ax,ЭЛ_ВЛО ;// Читем поле блок родительского элменета | |
mov si,ax ; | |
mov ax,[si] ;// ПРочитали значение поля BLO родительского элменета | |
cmp ax,di ;// ПРоверяем не являемся ли мы первым элментом вложеного спсика в родительском элементе | |
Jnz .НЕТУ3 ;// Если мы не указаны в родительском элементе идем дальше | |
mov [si],dx ;// сли указаны то записываем след элемент вместо себя | |
.НЕТУ3: ;// Отстыковка элемнта | |
mov Si,di ;// Востанавливаем значение удаляемог элмента | |
add SI,ЭЛ_РОД ; | |
mov word[si],0 ;// остоеденяем родительский элемент | |
inc Si ; | |
inc si ;// Переходим к полю предыдущий элемент | |
mov word[si],0 ;// остоеденяем предыдущий элемент | |
inc Si ; | |
inc si ;// Переходим к полю следующий элемент | |
mov word[si],0 ;// остоеденяем Следующий элемент | |
.ВЫХОД: | |
popad | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad | |
;-----------; | |
call ЭЛЕ_ПРЕ ;// CX Запоминаем предыдущий элемент удаляемлого элемента в регистр | |
mov ecx,eax; ; | |
;-----------; | |
;-----------; | |
call ЭЛЕ_СЛЕ ;// DX Запоминаем предыдущий элемент удаляемлого элемента в регистр | |
mov eDx,eax; ; | |
;-----------; | |
;------------ | |
test ecx,ecx ;// Записываем в предыдущем элементе следуюший элемент | |
jz .НЕТУ1 ;// Проверяем есть ли вообще предыдущий элмеент | |
Mov eSi,eCx ; | |
add eSi,ЭЛ_СЛЕ; | |
Mov [esi],edx ; | |
;------------ | |
.НЕТУ1: ;------------ | |
test edx,edx ;// Записываем в Cледующем элементе предыдущимй | |
jz .НЕТУ2 ;// ПРоверяем если вообще следующий элемент | |
mov esi,edx ; | |
add esi,ЭЛ_ПРЕ; | |
mov [esi],ecx ; | |
;------------ | |
.НЕТУ2: ;-------------// Настройка родительского элемента | |
call ЭЛЕ_РОД ;// Читаем адрес родительского эдемента | |
test eax,eax ;// Проверяем есть ли вобще родительский элемент | |
Jz .НЕТУ3 ;// Если нету родительского элемента то идем дальше | |
add eax,ЭЛ_ВЛО ;// Читем поле блок родительского элменета | |
mov esi,eax ; | |
mov eax,[esi] ;// ПРочитали значение поля BLO родительского элменета | |
cmp eax,edi ;// ПРоверяем не являемся ли мы первым элментом вложеного спсика в родительском элементе | |
Jnz .НЕТУ3 ;// Если мы не указаны в родительском элементе идем дальше | |
mov [esi],edx ;// сли указаны то записываем след элемент вместо себя | |
.НЕТУ3: ;// Отстыковка элемнта | |
mov eSi,edi ;// Востанавливаем значение удаляемог элмента | |
add eSI,ЭЛ_РОД ; | |
mov [esi],DWORD 0 ;// остоеденяем родительский элемент | |
mov eSi,edi ;// Востанавливаем значение удаляемог элмента | |
add eSI,ЭЛ_ПРЕ ; | |
mov [esi],DWORD 0 ;// остоеденяем предыдущий элемент | |
mov eSi,edi ;// Востанавливаем значение удаляемог элмента | |
add eSI,ЭЛ_СЛЕ ; | |
mov [Esi],DWORD 0 ;// остоеденяем Следующий элемент | |
.ВЫХОД: | |
popad | |
ret; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_КОПИЯ_ВС:;{ Копию элемнта Di и всех вложеных элемнтов и назначать родителя DX созданая копия возвращеться в DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
test di,di ; | |
jnz .ДАЛЕЕ ; | |
mov dx,0 ; | |
jmp .ВЫХОД ; | |
.ДАЛЕЕ: | |
push di ; | |
call ЭЛЕ_КОПИЯ; | |
mov dx,di ; | |
pop di ; | |
call ЭЛЕ_ВЛО ; | |
.ЦИКЛ: | |
test ax,ax ; | |
jz .КЦИКЛ ; | |
mov di,ax ; | |
push di ; | |
call ЭЛЕ_КОПИЯ_ВС; | |
pop di ; | |
call ЭЛЕ_СЛЕ ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
.ВЫХОД: | |
pop si ; | |
push dx ; | |
popad; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad | |
test di,di ; | |
jnz .ДАЛЕЕ ; | |
mov dx,0 ; | |
jmp .ВЫХОД ; | |
.ДАЛЕЕ: | |
push di ; | |
call ЭЛЕ_КОПИЯ; | |
mov dx,di ; | |
pop di ; | |
call ЭЛЕ_ВЛО ; | |
.ЦИКЛ: | |
test ax,ax ; | |
jz .КЦИКЛ ; | |
mov di,ax ; | |
push di ; | |
call ЭЛЕ_КОПИЯ_ВС; | |
pop di ; | |
call ЭЛЕ_СЛЕ ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
.ВЫХОД: | |
pop si ; | |
push dx ; | |
popad; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad | |
test edi,edi ; | |
jnz .ДАЛЕЕ ; | |
mov edx,0 ; | |
jmp .ВЫХОД ; | |
.ДАЛЕЕ: | |
push edi ; | |
call ЭЛЕ_КОПИЯ; | |
mov edx,edi ; | |
pop edi ; | |
call ЭЛЕ_ВЛО ; | |
.ЦИКЛ: | |
test eax,eax ; | |
jz .КЦИКЛ ; | |
mov edi,eax ; | |
push edi ; | |
call ЭЛЕ_КОПИЯ_ВС; | |
pop edi ; | |
call ЭЛЕ_СЛЕ ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
.ВЫХОД: | |
pop esi ; | |
push edx ; | |
popad; | |
ret; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_КОПИЯ :;{ Копию элемнта Di и назначать родителя DX созданая копия возвращеться в DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ЭЛЕ_ТИП ; // Возвращет тип элемнта в AX | |
cmp al,ТИП_СТРО ; // Если занчение строка то | |
jz .ЭТО_СТРОКА ; | |
call ЭЛЕ_ЗНА ; // Читаем значе в AX | |
mov bx,ax ; // bx-значение | |
jmp .ДАЛЕЕ ; | |
.ЭТО_СТРОКА: | |
;----------------------; | |
mov cx,di ; | |
call ЭЛЕ_ЗНА ; | |
mov di,ax ; | |
call РАЗМЕР_AX_УЧАСТКА_ПАМЯТИ_DI | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_AX_БАЙТ ; // Возвращет в DI АДРЕС Созданой СТРОКИ | |
mov si,di ; | |
mov di,cx ; | |
call ЭЛЕ_ЗНА ; // Возвращает значение адрес строки | |
mov di,ax ; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
mov di,cx ; | |
mov bx,si ; // bx-значение | |
jmp .ДАЛЕЕ ; | |
;----------------------; | |
.ДАЛЕЕ: | |
call ЭЛЕ_КОД ; // Возвращет адрес строки с именем элемнта в AX | |
mov si,ax ; // Si-Имя элемнат | |
call ЭЛЕ_ТИП ; // Возвращет тип элемнта в AX | |
mov cl,al ; // al-ТИп | |
call ЭЛЕ_ФУН ; // Возвращет тип элемнта в AX | |
mov ch,al ; // ah-показат фун | |
mov ax,cx ; | |
mov di,dx ; | |
call ЭЛЕ_СОЗДАТЬ_КОД ; // Создает элемент и возвращает его дарес в DI | |
pop si ; | |
push di ; | |
popad ; | |
ret ; | |
END iF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ЭЛЕ_ТИП ; // Возвращет тип элемнта в AX | |
cmp al,ТИП_СТРО ; // Если занчение строка то | |
jz .ЭТО_СТРОКА ; | |
call ЭЛЕ_ЗНА ; // Читаем значе в AX | |
mov bx,ax ; // bx-значение | |
jmp .ДАЛЕЕ ; | |
.ЭТО_СТРОКА: | |
;----------------------; | |
mov cx,di ; | |
call ЭЛЕ_ЗНА ; | |
mov di,ax ; | |
call РАЗМЕР_AX_УЧАСТКА_ПАМЯТИ_DI | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_AX_БАЙТ ; // Возвращет в DI АДРЕС Созданой СТРОКИ | |
mov si,di ; | |
mov di,cx ; | |
call ЭЛЕ_ЗНА ; // Возвращает значение адрес строки | |
mov di,ax ; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
mov di,cx ; | |
mov bx,si ; // bx-значение | |
jmp .ДАЛЕЕ ; | |
;----------------------; | |
.ДАЛЕЕ: | |
call ЭЛЕ_КОД ; // Возвращет адрес строки с именем элемнта в AX | |
mov si,ax ; // Si-Имя элемнат | |
call ЭЛЕ_ТИП ; // Возвращет тип элемнта в AX | |
mov cl,al ; // al-ТИп | |
call ЭЛЕ_ФУН ; // Возвращет тип элемнта в AX | |
mov ch,al ; // ah-показат фун | |
mov ax,cx ; | |
mov di,dx ; | |
call ЭЛЕ_СОЗДАТЬ_КОД ; // Создает элемент и возвращает его дарес в DI | |
pop si ; | |
push di ; | |
popad ; | |
ret ; | |
END iF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ЭЛЕ_ТИП ; // Возвращет тип элемнта в AX | |
cmp al,ТИП_СТРО ; // Если занчение строка то | |
jz .ЭТО_СТРОКА ; | |
call ЭЛЕ_ЗНА ; // Читаем значе в AX | |
mov ebx,eax ; // bx-значение | |
jmp .ДАЛЕЕ ; | |
.ЭТО_СТРОКА: | |
;----------------------; | |
mov ecx,edi ; | |
call ЭЛЕ_ЗНА ; | |
mov edi,eax ; | |
call РАЗМЕР_AX_УЧАСТКА_ПАМЯТИ_DI | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_AX_БАЙТ ; // Возвращет в DI АДРЕС Созданой СТРОКИ | |
mov esi,edi ; | |
mov edi,ecx ; | |
call ЭЛЕ_ЗНА ; // Возвращает значение адрес строки | |
mov edi,eax ; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
mov edi,ecx ; | |
mov ebx,esi ; // bx-значение | |
jmp .ДАЛЕЕ ; | |
;----------------------; | |
.ДАЛЕЕ: | |
call ЭЛЕ_КОД ; // Возвращет адрес строки с именем элемнта в AX | |
mov esi,eax ; // Si-Имя элемнат | |
call ЭЛЕ_ТИП ; // Возвращет тип элемнта в AX | |
mov cl,al ; // al-ТИп | |
call ЭЛЕ_ФУН ; // Возвращет тип элемнта в AX | |
mov ch,al ; // ah-показат фун | |
mov eax,ecx ; | |
mov edi,edx ; | |
call ЭЛЕ_СОЗДАТЬ_КОД ; // Создает элемент и возвращает его дарес в DI | |
pop esi ; | |
push edi ; | |
popad ; | |
ret ; | |
END iF ;} | |
;==============================================================================} | |
ЭЛЕ_УСТ_ПАР :;{ Функция устанавливает параметр CX В значение AX В элементе DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ЭЛЕ_ПОСЛЕД;// перемщаемся к последнему элементу | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ;// производим поиск нужного нам параметра | |
jz .ВЫХОД ; | |
ADD DI,ЭЛ_ЗНА ; | |
mov [DI],AX ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ЭЛЕ_ПОСЛЕД;// перемщаемся к последнему элементу | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ;// производим поиск нужного нам параметра | |
jz .ВЫХОД ; | |
ADD DI,ЭЛ_ЗНА ; | |
mov [DI],AX ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ЭЛЕ_ПОСЛЕД;// перемщаемся к последнему элементу | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ;// производим поиск нужного нам параметра | |
jz .ВЫХОД ; | |
ADD EDI,ЭЛ_ЗНА ; | |
mov [EDI],EAX ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_ПАРСУМ :;{ Складывает параметр с именем CX Во всех родительских элементах DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
push bx ; | |
mov aX,0 ;// по умолчанию результат равен 0 | |
;----------------; | |
Call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ; | |
JZ .ВЫХОД ; | |
call ЭЛЕ_ЗНА ;// Чтение значения искомого поля | |
mov bx,ax ;// Запоминаем найденое значение | |
call ЭЛЕ_НАЗАД ; | |
jz .ВЫХОД ; | |
Call ЭЛЕ_ПАРСУМ ;// Складываем анологичный параметр родительского элемента | |
add ax,bx ; | |
;----------------; | |
.ВЫХОД: | |
pop bx ; | |
pop di ; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
push bx ; | |
mov aX,0 ;// по умолчанию результат равен 0 | |
;----------------; | |
Call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ; | |
JZ .ВЫХОД ; | |
call ЭЛЕ_ЗНА ;// Чтение значения искомого поля | |
mov bx,ax ;// Запоминаем найденое значение | |
call ЭЛЕ_НАЗАД ; | |
jz .ВЫХОД ; | |
Call ЭЛЕ_ПАРСУМ ;// Складываем анологичный параметр родительского элемента | |
add ax,bx ; | |
;----------------; | |
.ВЫХОД: | |
pop bx ; | |
pop di ; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
push ebx ; | |
mov eaX,0 ;// по умолчанию результат равен 0 | |
;----------------; | |
Call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ; | |
JZ .ВЫХОД ; | |
call ЭЛЕ_ЗНА ;// Чтение значения искомого поля | |
mov ebx,eax ;// Запоминаем найденое значение | |
call ЭЛЕ_НАЗАД ; | |
jz .ВЫХОД ; | |
Call ЭЛЕ_ПАРСУМ ;// Складываем анологичный параметр родительского элемента | |
add eax,ebx ; | |
;----------------; | |
.ВЫХОД: | |
pop ebx ; | |
pop edi ; | |
ret; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_ОСВОБОДИ:;{ Освобождает память занимаемую элементом DI; | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov bx,DI ; // Запоминаем свой адрес | |
call ЭЛЕ_УДАЛИТЬ ; | |
.ЦИКЛ: Call ЭЛЕ_ВЛО ; // Пытаемся прочитать первый вложеный элемент ; | |
jz .КЦИКЛ ; | |
mov di,ax ; | |
call ЭЛЕ_ОСВОБОДИ ; | |
mov di,bx ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov di,bx ; // Востанавливаем адерс | |
;-----------------------; | |
call ЭЛЕ_ТИП ; | |
cmp ax,ТИП_СТРО ; | |
JNZ .НЕ_СТРОКА ; | |
;-----------------------; | |
call ЭЛЕ_ЗНА ; | |
mov di,ax ; | |
call ОСВОБОЖДЕНИЕ_УЧАСТКА_ПАМЯТИ_DI; | |
mov di,bx ; | |
;-----------------------; | |
.НЕ_СТРОКА: | |
;-----------------------; | |
;call ЭЛЕ_ИМЯ ; | |
;mov di,ax ; | |
;call ОСВОБОЖДЕНИЕ_УЧАСТКА_ПАМЯТИ_DI; | |
;mov di,bx ; | |
;-----------------------; | |
call ОСВОБОЖДЕНИЕ_УЧАСТКА_ПАМЯТИ_DI; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov bx,DI ; // Запоминаем свой адрес | |
call ЭЛЕ_УДАЛИТЬ ; | |
.ЦИКЛ: Call ЭЛЕ_ВЛО ; // Пытаемся прочитать первый вложеный элемент ; | |
jz .КЦИКЛ ; | |
mov di,ax ; | |
call ЭЛЕ_ОСВОБОДИ ; | |
mov di,bx ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov di,bx ; // Востанавливаем адерс | |
;-----------------------; | |
call ЭЛЕ_ТИП ; | |
cmp ax,ТИП_СТРО ; | |
JNZ .НЕ_СТРОКА ; | |
;-----------------------; | |
call ЭЛЕ_ЗНА ; | |
mov di,ax ; | |
call ОСВОБОЖДЕНИЕ_УЧАСТКА_ПАМЯТИ_DI; | |
mov di,bx ; | |
;-----------------------; | |
.НЕ_СТРОКА: | |
;-----------------------; | |
;call ЭЛЕ_ИМЯ ; | |
;mov di,ax ; | |
;call ОСВОБОЖДЕНИЕ_УЧАСТКА_ПАМЯТИ_DI; | |
;mov di,bx ; | |
;-----------------------; | |
call ОСВОБОЖДЕНИЕ_УЧАСТКА_ПАМЯТИ_DI; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov ebx,eDI ; // Запоминаем свой адрес | |
call ЭЛЕ_УДАЛИТЬ ; | |
.ЦИКЛ: Call ЭЛЕ_ВЛО ; // Пытаемся прочитать первый вложеный элемент ; | |
jz .КЦИКЛ ; | |
mov edi,eax ; | |
call ЭЛЕ_ОСВОБОДИ ; | |
mov edi,ebx ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov edi,ebx ; // Востанавливаем адерс | |
;-----------------------; | |
call ЭЛЕ_ТИП ; | |
cmp eax,ТИП_СТРО ; | |
JNZ .НЕ_СТРОКА ; | |
;-----------------------; | |
call ЭЛЕ_ЗНА ; | |
mov edi,eax ; | |
call ОСВОБОЖДЕНИЕ_УЧАСТКА_ПАМЯТИ_DI; | |
mov edi,ebx ; | |
;-----------------------; | |
.НЕ_СТРОКА: | |
call ОСВОБОЖДЕНИЕ_УЧАСТКА_ПАМЯТИ_DI; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI:;{ Добавляем элемент DX в элмеент DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov cx,di ;//сохраняем адрес родительского элемента в котрый нужно доавить | |
test DI,DI ; | |
jz .NEX ;// Если нету родительского элемента просто пишем 0 в родитель в конце процедуры | |
;-------------- | |
MOV DI,DX ; | |
CALL ЭЛЕ_УДАЛИТЬ;// Удаляеи элемент из предыдущего списка если он там был | |
;-------------- | |
;------------ | |
mov DI,CX ; | |
Call ЭЛЕ_ПОСЛЕД;// Ощим последний элемент в родительском элементе | |
jnz .ADDNEX ;// Если есть хоть один вложенй элемент присоеденяем к последнему элемнту | |
;// Если нет не одного вложеного элемента то присоеденяем к родителю как первый вложенй элемент | |
MOV Si,cx ; | |
ADD SI,ЭЛ_ВЛО ; | |
Mov [Si],DX ;// ПРисоеденяем в родительском элементе добавляемый элемент как первый элемент вложеного списка | |
Jmp .NEX ; | |
;------------ | |
.ADDNEX: ;------------ | |
mov SI,DI ;// В DI находиться адрес последнего элемента в списке куда добавляем элмент | |
add SI,ЭЛ_СЛЕ ;// ПРисоеденяем добавляемый элмент в конец спсика | |
mov [SI],DX ;// Записываем добавляемый элемент DX | |
mov Si,DX ; | |
add si,ЭЛ_ПРЕ ;// Указывем в добавлемом элементе предыдущий | |
mov [si],di ; | |
;------------ | |
.NEX: MOV Si,DX ;// Указываем родительский элемент | |
add si,ЭЛ_РОД ;// | |
mov [SI],cx ;// | |
popad; | |
ret; | |
END iF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov cx,di ;//сохраняем адрес родительского элемента в котрый нужно доавить | |
test DI,DI ; | |
jz .NEX ;// Если нету родительского элемента просто пишем 0 в родитель в конце процедуры | |
;-------------- | |
MOV DI,DX ; | |
CALL ЭЛЕ_УДАЛИТЬ;// Удаляеи элемент из предыдущего списка если он там был | |
;-------------- | |
;------------ | |
mov DI,CX ; | |
Call ЭЛЕ_ПОСЛЕД;// Ощим последний элемент в родительском элементе | |
jnz .ADDNEX ;// Если есть хоть один вложенй элемент присоеденяем к последнему элемнту | |
;// Если нет не одного вложеного элемента то присоеденяем к родителю как первый вложенй элемент | |
MOV Si,cx ; | |
ADD SI,ЭЛ_ВЛО ; | |
Mov [Si],DX ;// ПРисоеденяем в родительском элементе добавляемый элемент как первый элемент вложеного списка | |
Jmp .NEX ; | |
;------------ | |
.ADDNEX: ;------------ | |
mov SI,DI ;// В DI находиться адрес последнего элемента в списке куда добавляем элмент | |
add SI,ЭЛ_СЛЕ ;// ПРисоеденяем добавляемый элмент в конец спсика | |
mov [SI],DX ;// Записываем добавляемый элемент DX | |
mov Si,DX ; | |
add si,ЭЛ_ПРЕ ;// Указывем в добавлемом элементе предыдущий | |
mov [si],di ; | |
;------------ | |
.NEX: MOV Si,DX ;// Указываем родительский элемент | |
add si,ЭЛ_РОД ;// | |
mov [SI],cx ;// | |
popad; | |
ret; | |
END iF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov ecx,edi ;//сохраняем адрес родительского элемента в котрый нужно доавить | |
test eDI,eDI ; | |
jz .NEX ;// Если нету родительского элемента просто пишем 0 в родитель в конце процедуры | |
;-------------- | |
MOV eDI,eDX ; | |
CALL ЭЛЕ_УДАЛИТЬ;// Удаляеи элемент из предыдущего списка если он там был | |
;-------------- | |
;------------ | |
mov eDI,eCX ; | |
Call ЭЛЕ_ПОСЛЕД;// Ощим последний элемент в родительском элементе | |
jnz .ADDNEX ;// Если есть хоть один вложенй элемент присоеденяем к последнему элемнту | |
;// Если нет не одного вложеного элемента то присоеденяем к родителю как первый вложенй элемент | |
MOV eSi,ecx ; | |
ADD eSI,ЭЛ_ВЛО ; | |
Mov [eSi],eDX ;// ПРисоеденяем в родительском элементе добавляемый элемент как первый элемент вложеного списка | |
Jmp .NEX ; | |
;------------ | |
.ADDNEX: ;------------ | |
mov eSI,eDI ;// В DI находиться адрес последнего элемента в списке куда добавляем элмент | |
add eSI,ЭЛ_СЛЕ ;// ПРисоеденяем добавляемый элмент в конец спсика | |
mov [eSI],eDX ;// Записываем добавляемый элемент DX | |
mov eSi,eDX ; | |
add esi,ЭЛ_ПРЕ ;// Указывем в добавлемом элементе предыдущий | |
mov [esi],edi ; | |
;------------ | |
.NEX: MOV eSi,eDX ;// Указываем родительский элемент | |
add esi,ЭЛ_РОД ;// | |
mov [eSI],ecx ;// | |
popad; | |
ret; | |
END iF ;} | |
;==============================================================================} | |
ДОБ_ЭЛЕ_СX_В_ЭЛЕ_DI:;{ Добавляем элемент CX в элмеент DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push dx; | |
mov dx,cx; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI | |
pop dx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push dx; | |
mov dx,cx; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI | |
pop dx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edx; | |
mov edx,ecx; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI | |
pop edx; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЭЛЕ_ПОИСК_ВН_ПО_КОДУ_CX :;{ Поиск внутри элемента элемнта с кодом CX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
PUSHAD; | |
mov si,0 ; ПО умолчанию результат равен 0 то есть не нашли | |
call ЭЛЕ_ПОСЛЕД ; | |
JZ .ВЫХОД ; | |
.ЦИКЛ: | |
test di,di ; | |
jz .ВЫХОД ; | |
call ЭЛЕ_КОД_РАВ ; | |
jnz .НАШЛИ ; Еслти это элемент с с искомым именем идем на выход элемент найден | |
;----------------- | |
call ЭЛЕ_ПРЕ ; | |
mov di,ax ; | |
Jmp .ЦИКЛ ; | |
;----------------- | |
.НАШЛИ: mov SI,DI ; | |
.ВЫХОД: | |
test si,si ; | |
pop di ; | |
push si ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
PUSHAD; | |
mov si,0 ; ПО умолчанию результат равен 0 то есть не нашли | |
call ЭЛЕ_ПОСЛЕД ; | |
JZ .ВЫХОД ; | |
.ЦИКЛ: | |
test di,di ; | |
jz .ВЫХОД ; | |
call ЭЛЕ_КОД_РАВ ; | |
jnz .НАШЛИ ; Еслти это элемент с с искомым именем идем на выход элемент найден | |
;----------------- | |
call ЭЛЕ_ПРЕ ; | |
mov di,ax ; | |
Jmp .ЦИКЛ ; | |
;----------------- | |
.НАШЛИ: mov SI,DI ; | |
.ВЫХОД: | |
test si,si ; | |
pop di ; | |
push si ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
PUSHAD; | |
mov esi,0 ; ПО умолчанию результат равен 0 то есть не нашли | |
call ЭЛЕ_ПОСЛЕД ; | |
JZ .ВЫХОД ; | |
.ЦИКЛ: | |
test edi,edi ; | |
jz .ВЫХОД ; | |
call ЭЛЕ_КОД_РАВ ; | |
jnz .НАШЛИ ; Еслти это элемент с с искомым именем идем на выход элемент найден | |
;----------------- | |
call ЭЛЕ_ПРЕ ; | |
mov edi,eax ; | |
Jmp .ЦИКЛ ; | |
;----------------- | |
.НАШЛИ: mov eSI,eDI ; | |
.ВЫХОД: | |
test esi,esi ; | |
pop edi ; | |
push esi ; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_КОД_РАВ :;{ Сравнивает имя элемента с строкой CX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ЭЛЕ_КОД; | |
CMP ax,cx ; | |
jz .РАВНО ; | |
mov al,0 ; | |
test al,al ; | |
Jmp .ВЫХОД ; | |
.РАВНО: mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ЭЛЕ_КОД; | |
CMP ax,cx ; | |
jz .РАВНО ; | |
mov al,0 ; | |
test al,al ; | |
Jmp .ВЫХОД ; | |
.РАВНО: mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ЭЛЕ_КОД; | |
CMP eax,ecx ; | |
jz .РАВНО ; | |
mov al,0 ; | |
test al,al ; | |
Jmp .ВЫХОД ; | |
.РАВНО: mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad | |
ret; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_КОД_РАВФ :;{ Сравнивает имя элемента с строкой CX и проверяет являеться ли функцией элемент | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ЭЛЕ_ФУН ;// Устанавливает флаг Z если это функция возвращает в AX значение поля Функция элемента | |
jz .ВЫХОД ;// Если не функцуия то выход | |
call ЭЛЕ_КОД_РАВ ;// сравниаем имена Устанвливает флаг Z если равн имена | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ЭЛЕ_ФУН ;// Устанавливает флаг Z если это функция возвращает в AX значение поля Функция элемента | |
jz .ВЫХОД ;// Если не функцуия то выход | |
call ЭЛЕ_КОД_РАВ ;// сравниаем имена Устанвливает флаг Z если равн имена | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ЭЛЕ_ФУН ;// Устанавливает флаг Z если это функция возвращает в AX значение поля Функция элемента | |
jz .ВЫХОД ;// Если не функцуия то выход | |
call ЭЛЕ_КОД_РАВ ;// сравниаем имена Устанвливает флаг Z если равн имена | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_ПОИСК_ПР_ПО_КОДУ_CX :;{ ПОиск элемента с Кодом CX в предыдущих элементах элемента DI возвращает результат в DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov si,0 ;// По умолчанию резльутат равен 0 то есть не нашел | |
.ЦИКЛ: | |
;----------------- | |
call ЭЛЕ_ПРЕ ; | |
JZ .ВЫХОД ; | |
mov DI,AX ; | |
CALL ЭЛЕ_КОД_РАВФ; | |
JNZ .НАШОЛ ; | |
jmp .ЦИКЛ ; | |
;----------------- | |
.НАШОЛ: mov si,DI ; | |
.ВЫХОД: | |
test si,si ; | |
pop ax; | |
push si; | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov si,0 ;// По умолчанию резльутат равен 0 то есть не нашел | |
.ЦИКЛ: | |
;----------------- | |
call ЭЛЕ_ПРЕ ; | |
JZ .ВЫХОД ; | |
mov DI,AX ; | |
CALL ЭЛЕ_КОД_РАВФ; | |
JNZ .НАШОЛ ; | |
jmp .ЦИКЛ ; | |
;----------------- | |
.НАШОЛ: mov si,DI ; | |
.ВЫХОД: | |
test si,si ; | |
pop ax; | |
push si; | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov esi,0 ;// По умолчанию резльутат равен 0 то есть не нашел | |
.ЦИКЛ: | |
;----------------- | |
call ЭЛЕ_ПРЕ ; | |
JZ .ВЫХОД ; | |
mov eDI,eAX ; | |
CALL ЭЛЕ_КОД_РАВФ; | |
JNZ .НАШОЛ ; | |
jmp .ЦИКЛ ; | |
;----------------- | |
.НАШОЛ: mov esi,eDI ; | |
.ВЫХОД: | |
test esi,esi ; | |
pop eax; | |
push esi; | |
popad ; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
ЭЛЕ_ПОИСК_ПА_ПО_КОДУ_CX :;{ ПОиск элемента с Кодом CX в параметрах элемента DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
PUSHAD; | |
mov si,0 ; ПО умолчанию результат равен 0 то есть не нашли | |
call ЭЛЕ_ФУН ; // ПРоверяем функция ли это | |
jz .ВЫХОД ; | |
;----------------- | |
Call ЭЛЕ_ВЛО ; ПРоверяем еть ли вообще параметры внутри элемента | |
JZ .ВЫХОД ; | |
mov di,ax ; | |
call ЭЛЕ_КОД ; | |
cmp ax,КОД_КОМ_ОСКОБКА;// проверяем что это скобка | |
jnz .ВЫХОД ; | |
Call ЭЛЕ_ВЛО ; ПРоверяем еть ли элемнет внтури скобки | |
.ЦИКЛ: | |
test ax,ax ; | |
jz .ВЫХОД ; | |
mov di,ax ; | |
call ЭЛЕ_КОД_РАВ ; | |
jnz .НАШЛИ ; Еслти это элемент с с искомым именем идем на выход элемент найден | |
;----------------- | |
call ЭЛЕ_СЛЕ ; | |
Jmp .ЦИКЛ ; | |
;----------------- | |
.НАШЛИ: mov SI,DI ; | |
.ВЫХОД: | |
test si,si ; | |
pop di ; | |
push si ; | |
popad ; | |
ret ; | |
END iF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
PUSHAD; | |
mov si,0 ; ПО умолчанию результат равен 0 то есть не нашли | |
call ЭЛЕ_ФУН ; // ПРоверяем функция ли это | |
jz .ВЫХОД ; | |
;----------------- | |
Call ЭЛЕ_ВЛО ; ПРоверяем еть ли вообще параметры внутри элемента | |
JZ .ВЫХОД ; | |
mov di,ax ; | |
call ЭЛЕ_КОД ; | |
cmp ax,КОД_КОМ_ОСКОБКА;// проверяем что это скобка | |
jnz .ВЫХОД ; | |
Call ЭЛЕ_ВЛО ; ПРоверяем еть ли элемнет внтури скобки | |
.ЦИКЛ: | |
test ax,ax ; | |
jz .ВЫХОД ; | |
mov di,ax ; | |
call ЭЛЕ_КОД_РАВ ; | |
jnz .НАШЛИ ; Еслти это элемент с с искомым именем идем на выход элемент найден | |
;----------------- | |
call ЭЛЕ_СЛЕ ; | |
Jmp .ЦИКЛ ; | |
;----------------- | |
.НАШЛИ: mov SI,DI ; | |
.ВЫХОД: | |
test si,si ; | |
pop di ; | |
push si ; | |
popad ; | |
ret ; | |
END iF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
PUSHAD; | |
mov esi,0 ; ПО умолчанию результат равен 0 то есть не нашли | |
call ЭЛЕ_ФУН ; // ПРоверяем функция ли это | |
jz .ВЫХОД ; | |
;----------------- | |
Call ЭЛЕ_ВЛО ; ПРоверяем еть ли вообще параметры внутри элемента | |
JZ .ВЫХОД ; | |
mov edi,eax ; | |
call ЭЛЕ_КОД ; | |
cmp eax,КОД_КОМ_ОСКОБКА;// проверяем что это скобка | |
jnz .ВЫХОД ; | |
Call ЭЛЕ_ВЛО ; ПРоверяем еть ли элемнет внтури скобки | |
.ЦИКЛ: | |
test eax,eax ; | |
jz .ВЫХОД ; | |
mov edi,eax ; | |
call ЭЛЕ_КОД_РАВ ; | |
jnz .НАШЛИ ; Еслти это элемент с с искомым именем идем на выход элемент найден | |
;----------------- | |
call ЭЛЕ_СЛЕ ; | |
Jmp .ЦИКЛ ; | |
;----------------- | |
.НАШЛИ: mov eSI,eDI ; | |
.ВЫХОД: | |
test esi,esi ; | |
pop edi ; | |
push esi ; | |
popad ; | |
ret ; | |
END iF ;} | |
;==============================================================================} | |
ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI :;{ Поиск элемента по Коду наружу ищит елемнт с Кодом CX с элемента DI элемент DI не участвует в поиске возвращает Арес элемента в DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
;-------------------; | |
mov ax,di ;// Запоминаем элемент с котрого ведем поиск | |
;-------------------; | |
call ЭЛЕ_КОД_РАВФ ; | |
jnz .ВЫХОД ; | |
;-------------------; | |
mov di,ax ; | |
call ЭЛЕ_ПОИСК_ПР_ПО_КОДУ_CX ;// Ищим в предыдущих элементах | |
jnz .ВЫХОД ; | |
;-------------------; | |
mov di,ax ; | |
call ЭЛЕ_ПОИСК_ПА_ПО_КОДУ_CX ;// Ищим в параметрах | |
jnz .ВЫХОД ; | |
;-------------------; | |
mov di,ax ; | |
call ЭЛЕ_РОДИТЕЛЬ ; Ищитм в родительском элементе | |
jz .ВЫХОД ; | |
;-------------------; | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI; | |
.ВЫХОД: | |
test di,di ; | |
pop ax ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
;-------------------; | |
mov ax,di ;// Запоминаем элемент с котрого ведем поиск | |
;-------------------; | |
call ЭЛЕ_КОД_РАВФ ; | |
jnz .ВЫХОД ; | |
;-------------------; | |
mov di,ax ; | |
call ЭЛЕ_ПОИСК_ПР_ПО_КОДУ_CX ;// Ищим в предыдущих элементах | |
jnz .ВЫХОД ; | |
;-------------------; | |
mov di,ax ; | |
call ЭЛЕ_ПОИСК_ПА_ПО_КОДУ_CX ;// Ищим в параметрах | |
jnz .ВЫХОД ; | |
;-------------------; | |
mov di,ax ; | |
call ЭЛЕ_РОДИТЕЛЬ ; Ищитм в родительском элементе | |
jz .ВЫХОД ; | |
;-------------------; | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI; | |
.ВЫХОД: | |
test di,di ; | |
pop ax ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
;-------------------; | |
mov eax,edi ;// Запоминаем элемент с котрого ведем поиск | |
;-------------------; | |
call ЭЛЕ_КОД_РАВФ ; | |
jnz .ВЫХОД ; | |
;-------------------; | |
mov edi,eax ; | |
call ЭЛЕ_ПОИСК_ПР_ПО_КОДУ_CX ;// Ищим в предыдущих элементах | |
jnz .ВЫХОД ; | |
;-------------------; | |
mov edi,eax ; | |
call ЭЛЕ_ПОИСК_ПА_ПО_КОДУ_CX ;// Ищим в параметрах | |
jnz .ВЫХОД ; | |
;-------------------; | |
mov edi,eax ; | |
call ЭЛЕ_РОДИТЕЛЬ ; Ищитм в родительском элементе | |
jz .ВЫХОД ; | |
;-------------------; | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI; | |
.ВЫХОД: | |
test edi,edi ; | |
pop eax ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЭЛЕ_ПОИСК_ПО_КОДУ_AX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov cx,ax; | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI; | |
pop si; | |
push di; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov cx,ax; | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI; | |
pop si; | |
push di; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov ecx,eax; | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI; | |
pop esi; | |
push edi; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ДОБ_ЗНА_В_СТР_SI_ИЗ_ЭЛЕ_AX :;{ Копировать значение элемента в DI из элемнета BX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,ax; | |
call ЭЛЕ_ТИП; | |
cmp ax,ТИП_СТРО; | |
jz .СТРОКА; | |
cmp ax,ТИП_ЧИСЛ; | |
jz .ЧИСЛО; | |
jmp .ВЫХОД; | |
.СТРОКА: ;{СТРОКА<СТРОКА ; | |
call ЭЛЕ_ЗНА ; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_SI_СТРОКУ_AX; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ЧИСЛО: ;{СТРОКА<ЧИСЛО ; | |
call ЭЛЕ_ЗНА; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,ax; | |
call ЭЛЕ_ТИП; | |
cmp ax,ТИП_СТРО; | |
jz .СТРОКА; | |
cmp ax,ТИП_ЧИСЛ; | |
jz .ЧИСЛО; | |
jmp .ВЫХОД; | |
.СТРОКА: ;{СТРОКА<СТРОКА ; | |
call ЭЛЕ_ЗНА ; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_SI_СТРОКУ_AX; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ЧИСЛО: ;{СТРОКА<ЧИСЛО ; | |
call ЭЛЕ_ЗНА; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,eax; | |
call ЭЛЕ_ТИП; | |
cmp eax,ТИП_СТРО; | |
jz .СТРОКА; | |
cmp eax,ТИП_ЧИСЛ; | |
jz .ЧИСЛО; | |
jmp .ВЫХОД; | |
.СТРОКА: ;{СТРОКА<СТРОКА ; | |
call ЭЛЕ_ЗНА ; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_SI_СТРОКУ_AX; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ЧИСЛО: ;{СТРОКА<ЧИСЛО ; | |
call ЭЛЕ_ЗНА; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ДОБ_ЗНА_В_ЭЛЕ_DI_ИЗ_ЭЛЕ_BX :;{ Копировать значение элемента в DI из элемнета BX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ТИП_ОПЕРАЦИИ_DI_BX; | |
cmp ax,КОМ_ЧИС_ЧИС; | |
jz .ЧЧ; | |
cmp ax,КОМ_ЧИС_СТР; | |
jz .ЧС; | |
cmp ax,КОМ_СТР_ЧИС; | |
jz .СЧ; | |
cmp ax,КОМ_СТР_СТР; | |
jz .СС; | |
jmp .ВЫХОД; | |
.ЧЧ: ;{ЧИСЛО<ЧИСЛО ; | |
push di; | |
mov di,bx ; | |
call ЭЛЕ_ЗНА ; | |
Mov dx,ax ; | |
pop di ; | |
call ЭЛЕ_ЗНА ; | |
add ax,dx; | |
mov si,di ; | |
add SI,ЭЛ_ЗНА ; | |
mov [si],ax ; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.СС: ;{СТРОКА<СТРОКА ; | |
call ЭЛЕ_ЗНА ; | |
mov dx,ax ; | |
mov di,bx ; | |
call ЭЛЕ_ЗНА ; | |
mov cx,ax ; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_DX_СТРОКУ_CX; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ЧС: ;{ЧИСЛО<СТРОКА ; | |
call ЭЛЕ_ЗНА; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX | |
mov si,di ; | |
add SI,ЭЛ_ТИП ; | |
mov byte[si],ТИП_СТРО; | |
mov si,di ; | |
add SI,ЭЛ_ЗНА ; | |
mov WORD[si],DX ; | |
mov di,BX ; | |
call ЭЛЕ_ЗНА ; | |
mov cx,ax; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_DX_СТРОКУ_CX | |
jmp .ВЫХОД ; | |
;-----------------} | |
.СЧ: ;{СТРОКА<ЧИСЛО ; | |
call ЭЛЕ_ЗНА; | |
mov si,ax; | |
mov di,bx; | |
call ЭЛЕ_ЗНА; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call ТИП_ОПЕРАЦИИ_DI_BX; | |
cmp ax,КОМ_ЧИС_ЧИС; | |
jz .ЧЧ; | |
cmp ax,КОМ_ЧИС_СТР; | |
jz .ЧС; | |
cmp ax,КОМ_СТР_ЧИС; | |
jz .СЧ; | |
cmp ax,КОМ_СТР_СТР; | |
jz .СС; | |
jmp .ВЫХОД; | |
.ЧЧ: ;{ЧИСЛО<ЧИСЛО ; | |
push di; | |
mov di,bx ; | |
call ЭЛЕ_ЗНА ; | |
Mov dx,ax ; | |
pop di ; | |
call ЭЛЕ_ЗНА ; | |
add ax,dx; | |
mov si,di ; | |
add SI,ЭЛ_ЗНА ; | |
mov [si],ax ; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.СС: ;{СТРОКА<СТРОКА ; | |
call ЭЛЕ_ЗНА ; | |
mov dx,ax ; | |
mov di,bx ; | |
call ЭЛЕ_ЗНА ; | |
mov cx,ax ; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_DX_СТРОКУ_CX; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ЧС: ;{ЧИСЛО<СТРОКА ; | |
call ЭЛЕ_ЗНА; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX | |
mov si,di ; | |
add SI,ЭЛ_ТИП ; | |
mov byte[si],ТИП_СТРО; | |
mov si,di ; | |
add SI,ЭЛ_ЗНА ; | |
mov WORD[si],DX ; | |
mov di,BX ; | |
call ЭЛЕ_ЗНА ; | |
mov cx,ax; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_DX_СТРОКУ_CX | |
jmp .ВЫХОД ; | |
;-----------------} | |
.СЧ: ;{СТРОКА<ЧИСЛО ; | |
call ЭЛЕ_ЗНА; | |
mov si,ax; | |
mov di,bx; | |
call ЭЛЕ_ЗНА; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call ТИП_ОПЕРАЦИИ_DI_BX; | |
cmp ax,КОМ_ЧИС_ЧИС; | |
jz .ЧЧ; | |
cmp ax,КОМ_ЧИС_СТР; | |
jz .ЧС; | |
cmp ax,КОМ_СТР_ЧИС; | |
jz .СЧ; | |
cmp ax,КОМ_СТР_СТР; | |
jz .СС; | |
jmp .ВЫХОД; | |
.ЧЧ: ;{ЧИСЛО<ЧИСЛО ; | |
push edi; | |
mov edi,ebx ; | |
call ЭЛЕ_ЗНА ; | |
Mov edx,eax ; | |
pop edi ; | |
call ЭЛЕ_ЗНА ; | |
add eax,edx; | |
mov esi,edi ; | |
add eSI,ЭЛ_ЗНА ; | |
mov [esi],eax ; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.СС: ;{СТРОКА<СТРОКА ; | |
call ЭЛЕ_ЗНА ; | |
mov edx,eax ; | |
mov edi,ebx ; | |
call ЭЛЕ_ЗНА ; | |
mov ecx,eax ; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_DX_СТРОКУ_CX; | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ЧС: ;{ЧИСЛО<СТРОКА ; | |
call ЭЛЕ_ЗНА; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX | |
mov esi,edi ; | |
add eSI,ЭЛ_ТИП ; | |
mov [esi],Byte ТИП_СТРО; | |
mov esi,edi ; | |
add eSI,ЭЛ_ЗНА ; | |
mov [si],eDX ; | |
mov edi,eBX ; | |
call ЭЛЕ_ЗНА ; | |
mov ecx,eax; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_DX_СТРОКУ_CX | |
jmp .ВЫХОД ; | |
;-----------------} | |
.СЧ: ;{СТРОКА<ЧИСЛО ; | |
call ЭЛЕ_ЗНА; | |
mov esi,eax; | |
mov edi,ebx; | |
call ЭЛЕ_ЗНА; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI | |
jmp .ВЫХОД ; | |
;-----------------} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ДОБ_ЗНА_В_ЭЛЕ_CX_ИЗ_ЭЛЕ_DX :;{ Добавить в значение элемента CX значеие элемента DX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,cx; | |
mov bx,dx; | |
call ДОБ_ЗНА_В_ЭЛЕ_DI_ИЗ_ЭЛЕ_BX | |
popad ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,cx; | |
mov bx,dx; | |
call ДОБ_ЗНА_В_ЭЛЕ_DI_ИЗ_ЭЛЕ_BX | |
popad ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,ecx; | |
mov ebx,edx; | |
call ДОБ_ЗНА_В_ЭЛЕ_DI_ИЗ_ЭЛЕ_BX | |
popad ; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЭЛЕ_ЧИТ_СКО_ИЗ_ЭЛЕ_AX:;{ Читает скобку из элемента AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
mov di,ax ; | |
call ЭЛЕ_ВЛО; | |
jz .НЕТУ ; | |
mov di,ax ; | |
call ЭЛЕ_КОД; | |
cmp ax,КОД_КОМ_ОСКОБКА; | |
jnz .НЕТУ ; | |
call ЭЛЕ_ВЛО; // Читаем первый вложеный элмент внтури скобки | |
jmp .ВЫХОД ; | |
.НЕТУ: mov ax,0 ; | |
.ВЫХОД: | |
test ax,ax ; | |
pop di; | |
ret | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
mov di,ax ; | |
call ЭЛЕ_ВЛО; | |
jz .НЕТУ ; | |
mov di,ax ; | |
call ЭЛЕ_КОД; | |
cmp ax,КОД_КОМ_ОСКОБКА; | |
jnz .НЕТУ ; | |
call ЭЛЕ_ВЛО; // Читаем первый вложеный элмент внтури скобки | |
jmp .ВЫХОД ; | |
.НЕТУ: mov ax,0 ; | |
.ВЫХОД: | |
test ax,ax ; | |
pop di; | |
ret | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
mov edi,eax ; | |
call ЭЛЕ_ВЛО; | |
jz .НЕТУ ; | |
mov edi,eax ; | |
call ЭЛЕ_КОД; | |
cmp eax,КОД_КОМ_ОСКОБКА; | |
jnz .НЕТУ ; | |
call ЭЛЕ_ВЛО; // Читаем первый вложеный элмент внтури скобки | |
jmp .ВЫХОД ; | |
.НЕТУ: mov eax,0 ; | |
.ВЫХОД: | |
test eax,eax ; | |
pop edi; | |
ret | |
END IF;} | |
;==============================================================================} | |
ЧИТАТЬ_ВЛОЖЕНЫЕ_ЗНАЧЕНИЯ_В_CX_DX:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX; | |
mov Cx,ax ; | |
call ЗНАЧЕНИЕ_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX; | |
MOV Dx,ax | |
POP ax; | |
RET; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX; | |
mov Cx,ax ; | |
call ЗНАЧЕНИЕ_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX; | |
MOV Dx,ax | |
POP ax; | |
RET; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
call ЗНАЧЕНИЕ_ПЕРВОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX; | |
mov eCx,eax ; | |
call ЗНАЧЕНИЕ_ВТОРОГО_ВЛОЖЕНОГО_ЭЛЕМЕНТА_DI_В_AX; | |
MOV eDx,eax | |
POP eax; | |
RET; | |
END IF;} | |
;==============================================================================} | |
;==============================================================================} | |
;{ ФУНКЦИИ ДЛЯ РАБОТЫ C ОКНАМИ . | |
;---{ Параметры окна | |
ОКНО_ПАР:;{ Чтение параметра окна DI с именем AX если такого параметра нет возвращает флаг переполнения | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
Push DI ; | |
push cx ; | |
mov cx,ax ; | |
mov ax,0 ; | |
test di,di ; | |
jz .ВЫХОД ; | |
call ЭЛЕ_ПОСЛЕД;// Ищим последний элемент в окне | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ;// Ищим элемент с таким именем | |
JZ .ВЫХОД ;// Если нет такого параметра элемента выход | |
call ЭЛЕ_ЗНА ;// достаем значение этого параметра | |
.ВЫХОД: test ax,ax ; | |
pop cx ; | |
pop DI ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
Push DI ; | |
push cx ; | |
mov cx,ax ; | |
mov ax,0 ; | |
test di,di ; | |
jz .ВЫХОД ; | |
call ЭЛЕ_ПОСЛЕД;// Ищим последний элемент в окне | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ;// Ищим элемент с таким именем | |
JZ .ВЫХОД ;// Если нет такого параметра элемента выход | |
call ЭЛЕ_ЗНА ;// достаем значение этого параметра | |
.ВЫХОД: test ax,ax ; | |
pop cx ; | |
pop DI ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
Push EDI ; | |
push Ecx ; | |
mov Ecx,Eax ; | |
mov Eax,0 ; | |
test Edi,Edi ; | |
jz .ВЫХОД ; | |
call ЭЛЕ_ПОСЛЕД;// Ищим последний элемент в окне | |
call ПОИСК_ЭЛЕМЕНТА_ПО_КОДУ_CX_С_ЭЛЕМЕНТА_DI ;// Ищим элемент с таким именем | |
JZ .ВЫХОД ;// Если нет такого параметра элемента выход | |
call ЭЛЕ_ЗНА ;// достаем значение этого параметра | |
.ВЫХОД: test Eax,Eax ; | |
pop Ecx ; | |
pop EDI ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ОКНО_РАМ:;{ ЧТение Рамки для окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov AX,КОД_ПАР_РАМК;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov AX,КОД_ПАР_РАМК;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov EAX,КОД_ПАР_РАМК;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_РЕД:;{ ЧТение параметра возможности редактировать содержимого окна Рамки для окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov AX,КОД_ПАР_РЕДА;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov AX,КОД_ПАР_РЕДА;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov EAX,КОД_ПАР_РЕДА;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ВИД:;{ ЧТение параметра Видимости окна Рамки для окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov AX,КОД_ПАР_ВИДИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov AX,КОД_ПАР_ВИДИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov EAX,КОД_ПАР_ВИДИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ПЕР:;{ ЧТение параметра возможнеости перемещения окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov AX,КОД_ПАР_ПЕРЕ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov AX,КОД_ПАР_ПЕРЕ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov EAX,КОД_ПАР_ПЕРЕ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
;==============================================================================} | |
СБРОС_КЕША:;{ | |
mov [ОКНО_ЛЕВ_DI],Dword 0; | |
mov [ОКНО_ВЕР_DI],Dword 0; | |
mov [ОКНО_ШИР_DI],Dword 0; | |
mov [ОКНО_ВЫС_DI],Dword 0; | |
mov [ОКНО_АТР_DI],Dword 0; | |
mov [ОКНО_АТР_AX],Dword 0; | |
mov [ОКНО_АКУ_DI],dword 0; | |
mov [ОКНО_АКУ_AX],Dword 0; | |
mov [ОКНО_ТЕК_DI],Dword 0; | |
mov [ОКНО_ТЕК_AX],Dword 0; | |
mov [ОКНО_АЛЕ_DI],Dword 0; | |
mov [ОКНО_АЛЕ_AX],Dword 0; | |
mov [ОКНО_АВЕ_DI],Dword 0; | |
mov [ОКНО_АПР_DI],Dword 0; | |
mov [ОКНО_АПР_AX],Dword 0; | |
mov [ОКНО_АНИ_DI],Dword 0; | |
mov [ОКНО_АНИ_AX],dword 0; | |
ret | |
;} | |
ОКНО_ЛЕВ_DI:dd 0; | |
ОКНО_ЛЕВ_AX:dd 0; | |
ОКНО_ВЕР_DI:dd 0; | |
ОКНО_ВЕР_AX:dd 0; | |
ОКНО_ШИР_DI:dd 0; | |
ОКНО_ШИР_AX:dd 0; | |
ОКНО_ВЫС_DI:dd 0; | |
ОКНО_ВЫС_AX:dd 0; | |
ОКНО_АТР_DI:dd 0; | |
ОКНО_АТР_AX:dd 0; | |
ОКНО_АКУ_DI:dd 0; | |
ОКНО_АКУ_AX:dd 0; | |
ОКНО_ТЕК_DI:dd 0; | |
ОКНО_ТЕК_AX:dd 0; | |
ОКНО_АЛЕ_DI:dd 0; | |
ОКНО_АЛЕ_AX:dd 0; | |
ОКНО_АВЕ_DI:dd 0; | |
ОКНО_АВЕ_AX:dd 0; | |
ОКНО_АПР_DI:dd 0; | |
ОКНО_АПР_AX:dd 0; | |
ОКНО_АНИ_DI:dd 0; | |
ОКНО_АНИ_AX:dd 0; | |
ОКНО_ЛЕВ_DI2:dd 0; | |
ОКНО_ЛЕВ_AX2:dd 0; | |
ОКНО_ВЕР_DI2:dd 0; | |
ОКНО_ВЕР_AX2:dd 0; | |
ОКНО_ШИР_DI2:dd 0; | |
ОКНО_ШИР_AX2:dd 0; | |
ОКНО_ВЫС_DI2:dd 0; | |
ОКНО_ВЫС_AX2:dd 0; | |
ОКНО_АТР_DI2:dd 0; | |
ОКНО_АТР_AX2:dd 0; | |
ОКНО_АКУ_DI2:dd 0; | |
ОКНО_АКУ_AX2:dd 0; | |
ОКНО_ТЕК_DI2:dd 0; | |
ОКНО_ТЕК_AX2:dd 0; | |
ОКНО_АЛЕ_DI2:dd 0; | |
ОКНО_АЛЕ_AX2:dd 0; | |
ОКНО_АВЕ_DI2:dd 0; | |
ОКНО_АВЕ_AX2:dd 0; | |
ОКНО_АПР_DI2:dd 0; | |
ОКНО_АПР_AX2:dd 0; | |
ОКНО_АНИ_DI2:dd 0; | |
ОКНО_АНИ_AX2:dd 0; | |
;----------------------------------------------------------------------- | |
ОКНО_ЛЕВ:;{ Чтение координат по X для окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ЛЕВ_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ЛЕВ_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ЛЕВ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_ЛЕВО;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ЛЕВ_DI],DI; | |
mov [ОКНО_ЛЕВ_AX],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ЛЕВ_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ЛЕВ_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ЛЕВ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_ЛЕВО;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ЛЕВ_DI],DI; | |
mov [ОКНО_ЛЕВ_AX],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp Edi,[ОКНО_ЛЕВ_DI]; | |
jnz .НОВОЕ; | |
mov EAx,[ОКНО_ЛЕВ_AX]; | |
test Eax,Eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ЛЕВ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov EAX,КОД_ПАР_ЛЕВО;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ЛЕВ_DI],EDI; | |
mov [ОКНО_ЛЕВ_AX],EAX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ВЕР:;{ Чтение координат по Y для окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ВЕР_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ВЕР_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ВЕР2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_ВЕРХ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР; | |
mov [ОКНО_ВЕР_DI],DI; | |
mov [ОКНО_ВЕР_AX],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ВЕР_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ВЕР_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ВЕР2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_ВЕРХ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР; | |
mov [ОКНО_ВЕР_DI],DI; | |
mov [ОКНО_ВЕР_AX],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_ВЕР_DI]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_ВЕР_AX]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ВЕР2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov EAX,КОД_ПАР_ВЕРХ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР; | |
mov [ОКНО_ВЕР_DI],EDI; | |
mov [ОКНО_ВЕР_AX],EAX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ШИР:;{ Чтение ширину окна по X для окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ШИР_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ШИР_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ШИР2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_ШИРИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ШИР_DI],DI; | |
mov [ОКНО_ШИР_AX],AX; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ШИР_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ШИР_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ШИР2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_ШИРИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ШИР_DI],DI; | |
mov [ОКНО_ШИР_AX],AX; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_ШИР_DI]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_ШИР_AX]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ШИР2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov EAX,КОД_ПАР_ШИРИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ШИР_DI],EDI; | |
mov [ОКНО_ШИР_AX],EAX; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ВЫС:;{ Чтение Высоту окна по Y для окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ВЫС_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ВЫС_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ВЫС2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_ВЫСО;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР; | |
mov [ОКНО_ВЫС_DI],DI; | |
mov [ОКНО_ВЫС_AX],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ВЫС_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ВЫС_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ВЫС2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_ВЫСО;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР; | |
mov [ОКНО_ВЫС_DI],DI; | |
mov [ОКНО_ВЫС_AX],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_ВЫС_DI]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_ВЫС_AX]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ВЫС2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov EAX,КОД_ПАР_ВЫСО;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР; | |
mov [ОКНО_ВЫС_DI],EDI; | |
mov [ОКНО_ВЫС_AX],EAX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ЛЕВ2:;{ Чтение координат по X для окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ЛЕВ_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ЛЕВ_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_ЛЕВО;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ЛЕВ_DI2],DI; | |
mov [ОКНО_ЛЕВ_AX2],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ЛЕВ_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ЛЕВ_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_ЛЕВО;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ЛЕВ_DI2],DI; | |
mov [ОКНО_ЛЕВ_AX2],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp Edi,[ОКНО_ЛЕВ_DI2]; | |
jnz .НОВОЕ; | |
mov EAx,[ОКНО_ЛЕВ_AX2]; | |
test Eax,Eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov EAX,КОД_ПАР_ЛЕВО;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ЛЕВ_DI2],EDI; | |
mov [ОКНО_ЛЕВ_AX2],EAX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ВЕР2:;{ Чтение координат по Y для окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ВЕР_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ВЕР_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_ВЕРХ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР; | |
mov [ОКНО_ВЕР_DI2],DI; | |
mov [ОКНО_ВЕР_AX2],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ВЕР_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ВЕР_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_ВЕРХ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР; | |
mov [ОКНО_ВЕР_DI2],DI; | |
mov [ОКНО_ВЕР_AX2],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_ВЕР_DI2]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_ВЕР_AX2]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov EAX,КОД_ПАР_ВЕРХ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР; | |
mov [ОКНО_ВЕР_DI2],EDI; | |
mov [ОКНО_ВЕР_AX2],EAX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ШИР2:;{ Чтение ширину окна по X для окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ШИР_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ШИР_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_ШИРИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ШИР_DI2],DI; | |
mov [ОКНО_ШИР_AX2],AX; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ШИР_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ШИР_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_ШИРИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ШИР_DI2],DI; | |
mov [ОКНО_ШИР_AX2],AX; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_ШИР_DI2]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_ШИР_AX2]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov EAX,КОД_ПАР_ШИРИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ШИР_DI2],EDI; | |
mov [ОКНО_ШИР_AX2],EAX; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ВЫС2:;{ Чтение Высоту окна по Y для окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ВЫС_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ВЫС_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_ВЫСО;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР; | |
mov [ОКНО_ВЫС_DI2],DI; | |
mov [ОКНО_ВЫС_AX2],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ВЫС_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ВЫС_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_ВЫСО;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР; | |
mov [ОКНО_ВЫС_DI2],DI; | |
mov [ОКНО_ВЫС_AX2],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_ВЫС_DI2]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_ВЫС_AX2]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov EAX,КОД_ПАР_ВЫСО;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР; | |
mov [ОКНО_ВЫС_DI2],EDI; | |
mov [ОКНО_ВЫС_AX2],EAX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
;----------------------------------------------------------------------- | |
ОКНО_ТСX:;{ Чтение смещение текста X нутри окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov AX,КОД_ПАР_ТСМX;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov AX,КОД_ПАР_ТСМX;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov EAX,КОД_ПАР_ТСМX;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ТСY:;{ Чтение смещение текста Y нутри окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov AX,КОД_ПАР_ТСМY;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov AX,КОД_ПАР_ТСМY;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov EAX,КОД_ПАР_ТСМY;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ТКX:;{ Чтение координат курсора X нутри окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov AX,КОД_ПАР_ТКУX;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov AX,КОД_ПАР_ТКУX;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov EAX,КОД_ПАР_ТКУX;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ТКY:;{ Чтение координат курсора Y нутри окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov AX,КОД_ПАР_ТКУY;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov AX,КОД_ПАР_ТКУY;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov EAX,КОД_ПАР_ТКУY;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
;==============================================================================} | |
;----------------------------------------------------------------------- | |
ОКНО_АТР:;{ Читает атрибуты окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АТР_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АТР_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АТР2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_АТРИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_АТР_DI],DI; | |
mov [ОКНО_АТР_AX],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АТР_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АТР_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АТР2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_АТРИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_АТР_DI],DI; | |
mov [ОКНО_АТР_AX],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_АТР_DI]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_АТР_AX]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АТР2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov EAX,КОД_ПАР_АТРИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_АТР_DI],EDI; | |
mov [ОКНО_АТР_AX],EAX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_АКУ:;{ Читает атрибуты курсора DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АКУ_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АКУ_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АКУ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_АКУР;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_АКУ_DI],DI; | |
mov [ОКНО_АКУ_AX],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АКУ_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АКУ_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АКУ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_АКУР;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_АКУ_DI],DI; | |
mov [ОКНО_АКУ_AX],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_АКУ_DI]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_АКУ_AX]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АКУ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov EAX,КОД_ПАР_АКУР;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_АКУ_DI],EDI; | |
mov [ОКНО_АКУ_AX],EAX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ТЕК:;{ Читает адреса текста окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ТЕК_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ТЕК_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ТЕК2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_ТЕКС;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ТЕК_DI],DI; | |
mov [ОКНО_ТЕК_AX],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ТЕК_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ТЕК_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ТЕК2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov AX,КОД_ПАР_ТЕКС;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ТЕК_DI],DI; | |
mov [ОКНО_ТЕК_AX],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_ТЕК_DI]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_ТЕК_AX]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_ТЕК2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov EAX,КОД_ПАР_ТЕКС;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ТЕК_DI],EDI; | |
mov [ОКНО_ТЕК_AX],EAX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_АЛЕ:;{ Чтение абсолютных координат по X для окна возвращает в AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АЛЕ_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АЛЕ_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АЛЕ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov [ОКНО_АЛЕ_DI],DI; | |
push cx ; | |
push di ; | |
push dx ; | |
call ОКНО_ЛЕВ ;// Теперь в AX WIN_LEF окна DI; | |
mov dx,ax ; | |
MOV cx,КОД_ПАР_ЛЕВО;// Указываем что будеи искать WIN_LEF | |
call ЭЛЕ_ПАРСУМ ;// Находим сумму всех окон с параметром WIN_LEF; | |
add ax,dx ;// Прибавляем сумму всех параметров WIN_LEF в предках | |
mov [ОКНО_АЛЕ_AX],AX; | |
pop dx ; | |
pop di ; | |
pop cx ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АЛЕ_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АЛЕ_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АЛЕ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov [ОКНО_АЛЕ_DI],DI; | |
push cx ; | |
push di ; | |
push dx ; | |
call ОКНО_ЛЕВ ;// Теперь в AX WIN_LEF окна DI; | |
mov dx,ax ; | |
MOV cx,КОД_ПАР_ЛЕВО;// Указываем что будеи искать WIN_LEF | |
call ЭЛЕ_ПАРСУМ ;// Находим сумму всех окон с параметром WIN_LEF; | |
add ax,dx ;// Прибавляем сумму всех параметров WIN_LEF в предках | |
mov [ОКНО_АЛЕ_AX],AX; | |
pop dx ; | |
pop di ; | |
pop cx ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_АЛЕ_DI]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_АЛЕ_AX]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АЛЕ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
pushad; | |
mov [ОКНО_АЛЕ_DI],EDI; | |
call ОКНО_ЛЕВ ;// Теперь в AX WIN_LEF окна DI; | |
mov edx,eax ; | |
MOV ecx,КОД_ПАР_ЛЕВО;// Указываем что будеи искать WIN_LEF | |
call ЭЛЕ_ПАРСУМ ;// Находим сумму всех окон с параметром WIN_LEF; | |
add eax,edx ;// Прибавляем сумму всех параметров WIN_LEF в предках | |
call ВОЗВРАТИТЬ_AX; | |
mov [ОКНО_АЛЕ_AX],EAX; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ОКНО_АВЕ:;{ Чтение абсолютных координат по Y для окна возвращает в AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АВЕ_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АВЕ_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АВЕ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov [ОКНО_АВЕ_DI],DI; | |
push cx ; | |
push di ; | |
push dx ; | |
call ОКНО_ВЕР ;// Теперь в AX WIN_TOP окна DI; | |
mov dx,ax; | |
MOV cx,КОД_ПАР_ВЕРХ;// Указываем что будеи искать WIN_TOP | |
call ЭЛЕ_ПАРСУМ;// Находим сумму всех окон с параметром WIN_TOP; | |
add ax,dx ;// Прибавляем сумму всех параметров WIN_TOP в предках | |
mov [ОКНО_АВЕ_AX],AX; | |
pop dx ; | |
pop di ; | |
pop cx ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АВЕ_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АВЕ_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АВЕ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov [ОКНО_АВЕ_DI],DI; | |
push cx ; | |
push di ; | |
push dx ; | |
call ОКНО_ВЕР ;// Теперь в AX WIN_TOP окна DI; | |
mov dx,ax; | |
MOV cx,КОД_ПАР_ВЕРХ;// Указываем что будеи искать WIN_TOP | |
call ЭЛЕ_ПАРСУМ;// Находим сумму всех окон с параметром WIN_TOP; | |
add ax,dx ;// Прибавляем сумму всех параметров WIN_TOP в предках | |
mov [ОКНО_АВЕ_AX],AX; | |
pop dx ; | |
pop di ; | |
pop cx ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_АВЕ_DI]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_АВЕ_AX]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АВЕ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov [ОКНО_АВЕ_DI],EDI; | |
push cx ; | |
push di ; | |
push dx ; | |
call ОКНО_ВЕР ;// Теперь в AX WIN_TOP окна DI; | |
mov dx,ax; | |
MOV cx,КОД_ПАР_ВЕРХ;// Указываем что будеи искать WIN_TOP | |
call ЭЛЕ_ПАРСУМ;// Находим сумму всех окон с параметром WIN_TOP; | |
add ax,dx ;// Прибавляем сумму всех параметров WIN_TOP в предках | |
mov [ОКНО_АВЕ_AX],EAX; | |
pop dx ; | |
pop di ; | |
pop cx ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ОКНО_АПР:;{ Вычисление Абсолютных координат правой стороны окна DI в AX X2 Right | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АПР_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АПР_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АПР2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov [ОКНО_АПР_DI],DI; | |
push cx; | |
Call ОКНО_АЛЕ; | |
Mov CX,ax; | |
Call ОКНО_ШИР; | |
Add Ax,CX; | |
mov [ОКНО_АПР_AX],AX; | |
pop cx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АПР_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АПР_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АПР2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov [ОКНО_АПР_DI],DI; | |
push cx; | |
Call ОКНО_АЛЕ; | |
Mov CX,ax; | |
Call ОКНО_ШИР; | |
Add Ax,CX; | |
mov [ОКНО_АПР_AX],AX; | |
pop cx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_АПР_DI]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_АПР_AX]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АПР2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov [ОКНО_АПР_DI],eDI; | |
push cx; | |
Call ОКНО_АЛЕ; | |
Mov CX,ax; | |
Call ОКНО_ШИР; | |
Add Ax,CX; | |
mov [ОКНО_АПР_AX],eAX; | |
pop cx; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_АНИ:;{ Вычисление Абсолютных координат нижней стороны окна Y2 Bootom | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АНИ_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АНИ_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АНИ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov [ОКНО_АНИ_DI],DI; | |
push cx; | |
Call ОКНО_АВЕ; | |
Mov CX,ax; | |
Call ОКНО_ВЫС; | |
Add Ax,CX; | |
mov [ОКНО_АНИ_AX],AX; | |
pop cx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АНИ_DI]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АНИ_AX]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АНИ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov [ОКНО_АНИ_DI],DI; | |
push cx; | |
Call ОКНО_АВЕ; | |
Mov CX,ax; | |
Call ОКНО_ВЫС; | |
Add Ax,CX; | |
mov [ОКНО_АНИ_AX],AX; | |
pop cx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp Edi,[ОКНО_АНИ_DI]; | |
jnz .НОВОЕ; | |
mov EAx,[ОКНО_АНИ_AX]; | |
test Eax,Eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: call ОКНО_АНИ2; | |
jz .НОВОЕ2; | |
ret ; | |
.НОВОЕ2: | |
;} | |
mov [ОКНО_АНИ_DI],EDI; | |
push cx; | |
Call ОКНО_АВЕ; | |
Mov CX,ax; | |
Call ОКНО_ВЫС; | |
Add Ax,CX; | |
mov [ОКНО_АНИ_AX],EAX; | |
pop cx; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_АТР2:;{ Читает атрибуты окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АТР_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АТР_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_АТРИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_АТР_DI2],DI; | |
mov [ОКНО_АТР_AX2],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АТР_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АТР_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_АТРИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_АТР_DI2],DI; | |
mov [ОКНО_АТР_AX2],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_АТР_DI2]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_АТР_AX2]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov EAX,КОД_ПАР_АТРИ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_АТР_DI2],EDI; | |
mov [ОКНО_АТР_AX2],EAX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_АКУ2:;{ Читает атрибуты курсора DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АКУ_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АКУ_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_АКУР;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_АКУ_DI2],DI; | |
mov [ОКНО_АКУ_AX2],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АКУ_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АКУ_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_АКУР;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_АКУ_DI2],DI; | |
mov [ОКНО_АКУ_AX2],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_АКУ_DI2]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_АКУ_AX2]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov EAX,КОД_ПАР_АКУР;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_АКУ_DI2],EDI; | |
mov [ОКНО_АКУ_AX2],EAX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ТЕК2:;{ Читает адреса текста окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ТЕК_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ТЕК_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_ТЕКС;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ТЕК_DI2],DI; | |
mov [ОКНО_ТЕК_AX2],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_ТЕК_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_ТЕК_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov AX,КОД_ПАР_ТЕКС;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ТЕК_DI2],DI; | |
mov [ОКНО_ТЕК_AX2],AX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_ТЕК_DI2]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_ТЕК_AX2]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov EAX,КОД_ПАР_ТЕКС;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov [ОКНО_ТЕК_DI2],EDI; | |
mov [ОКНО_ТЕК_AX2],EAX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_АЛЕ2:;{ Чтение абсолютных координат по X для окна возвращает в AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АЛЕ_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АЛЕ_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov [ОКНО_АЛЕ_DI2],DI; | |
push cx ; | |
push di ; | |
push dx ; | |
call ОКНО_ЛЕВ ;// Теперь в AX WIN_LEF окна DI; | |
mov dx,ax ; | |
MOV cx,КОД_ПАР_ЛЕВО;// Указываем что будеи искать WIN_LEF | |
call ЭЛЕ_ПАРСУМ ;// Находим сумму всех окон с параметром WIN_LEF; | |
add ax,dx ;// Прибавляем сумму всех параметров WIN_LEF в предках | |
mov [ОКНО_АЛЕ_AX2],AX; | |
pop dx ; | |
pop di ; | |
pop cx ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АЛЕ_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АЛЕ_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov [ОКНО_АЛЕ_DI2],DI; | |
push cx ; | |
push di ; | |
push dx ; | |
call ОКНО_ЛЕВ ;// Теперь в AX WIN_LEF окна DI; | |
mov dx,ax ; | |
MOV cx,КОД_ПАР_ЛЕВО;// Указываем что будеи искать WIN_LEF | |
call ЭЛЕ_ПАРСУМ ;// Находим сумму всех окон с параметром WIN_LEF; | |
add ax,dx ;// Прибавляем сумму всех параметров WIN_LEF в предках | |
mov [ОКНО_АЛЕ_AX2],AX; | |
pop dx ; | |
pop di ; | |
pop cx ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_АЛЕ_DI2]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_АЛЕ_AX2]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
pushad; | |
mov [ОКНО_АЛЕ_DI2],EDI; | |
call ОКНО_ЛЕВ ;// Теперь в AX WIN_LEF окна DI; | |
mov edx,eax ; | |
MOV ecx,КОД_ПАР_ЛЕВО;// Указываем что будеи искать WIN_LEF | |
call ЭЛЕ_ПАРСУМ ;// Находим сумму всех окон с параметром WIN_LEF; | |
add eax,edx ;// Прибавляем сумму всех параметров WIN_LEF в предках | |
call ВОЗВРАТИТЬ_AX; | |
mov [ОКНО_АЛЕ_AX2],EAX; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ОКНО_АВЕ2:;{ Чтение абсолютных координат по Y для окна возвращает в AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АВЕ_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АВЕ_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov [ОКНО_АВЕ_DI2],DI; | |
push cx ; | |
push di ; | |
push dx ; | |
call ОКНО_ВЕР ;// Теперь в AX WIN_TOP окна DI; | |
mov dx,ax; | |
MOV cx,КОД_ПАР_ВЕРХ;// Указываем что будеи искать WIN_TOP | |
call ЭЛЕ_ПАРСУМ;// Находим сумму всех окон с параметром WIN_TOP; | |
add ax,dx ;// Прибавляем сумму всех параметров WIN_TOP в предках | |
mov [ОКНО_АВЕ_AX2],AX; | |
pop dx ; | |
pop di ; | |
pop cx ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АВЕ_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АВЕ_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov [ОКНО_АВЕ_DI2],DI; | |
push cx ; | |
push di ; | |
push dx ; | |
call ОКНО_ВЕР ;// Теперь в AX WIN_TOP окна DI; | |
mov dx,ax; | |
MOV cx,КОД_ПАР_ВЕРХ;// Указываем что будеи искать WIN_TOP | |
call ЭЛЕ_ПАРСУМ;// Находим сумму всех окон с параметром WIN_TOP; | |
add ax,dx ;// Прибавляем сумму всех параметров WIN_TOP в предках | |
mov [ОКНО_АВЕ_AX2],AX; | |
pop dx ; | |
pop di ; | |
pop cx ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_АВЕ_DI2]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_АВЕ_AX2]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov [ОКНО_АВЕ_DI2],EDI; | |
push cx ; | |
push di ; | |
push dx ; | |
call ОКНО_ВЕР ;// Теперь в AX WIN_TOP окна DI; | |
mov dx,ax; | |
MOV cx,КОД_ПАР_ВЕРХ;// Указываем что будеи искать WIN_TOP | |
call ЭЛЕ_ПАРСУМ;// Находим сумму всех окон с параметром WIN_TOP; | |
add ax,dx ;// Прибавляем сумму всех параметров WIN_TOP в предках | |
mov [ОКНО_АВЕ_AX2],EAX; | |
pop dx ; | |
pop di ; | |
pop cx ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ОКНО_АПР2:;{ Вычисление Абсолютных координат правой стороны окна DI в AX X2 Right | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АПР_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АПР_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov [ОКНО_АПР_DI2],DI; | |
push cx; | |
Call ОКНО_АЛЕ; | |
Mov CX,ax; | |
Call ОКНО_ШИР; | |
Add Ax,CX; | |
mov [ОКНО_АПР_AX2],AX; | |
pop cx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АПР_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АПР_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov [ОКНО_АПР_DI2],DI; | |
push cx; | |
Call ОКНО_АЛЕ; | |
Mov CX,ax; | |
Call ОКНО_ШИР; | |
Add Ax,CX; | |
mov [ОКНО_АПР_AX2],AX; | |
pop cx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp edi,[ОКНО_АПР_DI2]; | |
jnz .НОВОЕ; | |
mov eAx,[ОКНО_АПР_AX2]; | |
test eax,eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov [ОКНО_АПР_DI2],eDI; | |
push cx; | |
Call ОКНО_АЛЕ; | |
Mov CX,ax; | |
Call ОКНО_ШИР; | |
Add Ax,CX; | |
mov [ОКНО_АПР_AX2],eAX; | |
pop cx; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_АНИ2:;{ Вычисление Абсолютных координат нижней стороны окна Y2 Bootom | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АНИ_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АНИ_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov [ОКНО_АНИ_DI2],DI; | |
push cx; | |
Call ОКНО_АВЕ; | |
Mov CX,ax; | |
Call ОКНО_ВЫС; | |
Add Ax,CX; | |
mov [ОКНО_АНИ_AX2],AX; | |
pop cx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
;{КЕШ | |
cmp di,[ОКНО_АНИ_DI2]; | |
jnz .НОВОЕ; | |
mov Ax,[ОКНО_АНИ_AX2]; | |
test ax,ax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov [ОКНО_АНИ_DI2],DI; | |
push cx; | |
Call ОКНО_АВЕ; | |
Mov CX,ax; | |
Call ОКНО_ВЫС; | |
Add Ax,CX; | |
mov [ОКНО_АНИ_AX2],AX; | |
pop cx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
;{КЕШ | |
cmp Edi,[ОКНО_АНИ_DI2]; | |
jnz .НОВОЕ; | |
mov EAx,[ОКНО_АНИ_AX2]; | |
test Eax,Eax | |
jz .НОВОЕ; | |
ret ; | |
.НОВОЕ: | |
;} | |
mov [ОКНО_АНИ_DI2],EDI; | |
push cx; | |
Call ОКНО_АВЕ; | |
Mov CX,ax; | |
Call ОКНО_ВЫС; | |
Add Ax,CX; | |
mov [ОКНО_АНИ_AX2],EAX; | |
pop cx; | |
ret; | |
END IF;} | |
;==============================================================================} | |
;----------------------------------------------------------------------- | |
ОКНО_АКX:;{ Чтение абсолютных координат курсора X нутри окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push DX; | |
mov AX,КОД_ПАР_ТКУX;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov dx,ax ; | |
mov AX,КОД_ПАР_ТСМX;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
add ax,Dx; | |
test ax,ax; | |
POP DX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push DX; | |
mov AX,КОД_ПАР_ТКУX;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov dx,ax ; | |
mov AX,КОД_ПАР_ТСМX;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
add ax,Dx; | |
test ax,ax; | |
POP DX; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push DX; | |
mov AX,КОД_ПАР_ТКУX;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov dx,ax ; | |
mov AX,КОД_ПАР_ТСМX;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
add ax,Dx; | |
test ax,ax; | |
POP DX; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_АКY:;{ Чтение координат курсора Y нутри окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push dx; | |
mov AX,КОД_ПАР_ТКУY;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov dx,ax; | |
mov AX,КОД_ПАР_ТСМY;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
add ax,dx; | |
test ax,ax; | |
pop dx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push dx; | |
mov AX,КОД_ПАР_ТКУY;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov dx,ax; | |
mov AX,КОД_ПАР_ТСМY;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
add ax,dx; | |
test ax,ax; | |
pop dx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push dx; | |
mov AX,КОД_ПАР_ТКУY;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
mov dx,ax; | |
mov AX,КОД_ПАР_ТСМY;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
add ax,dx; | |
test ax,ax; | |
pop dx; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_КСК:;{ Количество символов в строке с курсром окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov AX,КОД_ПАР_КССК;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov AX,КОД_ПАР_КССК;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov AX,КОД_ПАР_КССК;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_КСТ:;{ Чтение Реального количества строк текста Окно DI возвращает AX Количество строк | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov AX,КОД_ПАР_КОСТ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov AX,КОД_ПАР_КОСТ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov AX,КОД_ПАР_КОСТ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ПАС:;{ окна DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov AX,КОД_ПАР_ПАВС;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov AX,КОД_ПАР_ПАВС;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov AX,КОД_ПАР_ПАВС;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ДПС:;{ возвращает длину строки над курсором в окне DI возвращает AX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov AX,КОД_ПАР_ДПСТ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov AX,КОД_ПАР_ДПСТ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov AX,КОД_ПАР_ДПСТ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_БУФ:;{ Строка содержащия списко последних нажатых символов в окне | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov AX,КОД_ПАР_БУФЕ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov AX,КОД_ПАР_БУФЕ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov AX,КОД_ПАР_БУФЕ;// Указываем имя элемиента котрый будем искать | |
call ОКНО_ПАР ; | |
ret; | |
END IF;} | |
;==============================================================================} | |
;---} | |
;---{ Обработка нажатых кнопок | |
ОКНО_КУР_ВПРА:;{ Перемещение крусора окна DI вправо | |
pushad; | |
call ОКНО_ТКX ;// читаем кординату курсора | |
mov cx,ax ;// Запоминаем координату курсорпа | |
Call ОКНО_ШИР ;// Читаем ширину окна | |
dec ax; | |
cmp cx,ax ; // сравниваем координату крусора и ширину окна | |
JAE .ДАЛЕЕ ; | |
INC CX ;// Сдвиагем курсор впрво | |
mov ax,cx ; | |
mov cx,КОД_ПАР_ТКУX; | |
call ЭЛЕ_УСТ_ПАР; | |
jmp .ВЫХОД ; | |
.ДАЛЕЕ: | |
call ОКНО_ТСX ;// Читаем смещенеи внутри текста | |
inc ax ;// Увеличиваем смещение внтури текста | |
mov cx,КОД_ПАР_ТСМX; | |
call ЭЛЕ_УСТ_ПАР; | |
.ВЫХОД: | |
popad; | |
ret; | |
;==============================================================================} | |
ОКНО_КУР_ВЛЕВ:;{ Перемещение крусора окна DI влево | |
pushad; | |
call ОКНО_ТКX ;// читаем кординату курсора | |
mov cx,ax ;// Запоминаем координату курсорпа | |
test cx,cx ; // сравниваем координату крусора если ноль то некст | |
JZ .ДАЛЕЕ ; | |
DEC CX ;// Сдвиагем курсор Влево | |
mov ax,cx ; | |
mov cx,КОД_ПАР_ТКУX ; | |
call ЭЛЕ_УСТ_ПАР ; | |
jmp .ВЫХОД ; | |
.ДАЛЕЕ: | |
call ОКНО_ТСX ;// Читаем смещенеи внутри текста | |
test ax,ax ; | |
jz .ПЕРЕХОД ; | |
dec ax ;// Увеличиваем смещение внтури текста | |
mov cx,КОД_ПАР_ТСМX ; | |
call ЭЛЕ_УСТ_ПАР ; | |
JMP .ВЫХОД ; | |
.ПЕРЕХОД: | |
call ОКНО_АКY ;// Читаем координату курсора по Y | |
test ax,ax ; | |
jz .ВЫХОД ; | |
call ОКНО_ШИР ;// Читаем ширину окна | |
mov dl,al ;// Запоминиаем ширну окна | |
call ОКНО_ДПС ;// Читаем длиину предыдущей строки | |
DIv dl ;// Делем на ширину окна | |
mov bx,ax ;// Запоминаем рещультат деления | |
xor ax,ax ; | |
mov al,bh ;// остаток от деления будет координатой курсора в окне | |
mov cx,КОД_ПАР_ТКУX ; | |
call ЭЛЕ_УСТ_ПАР ; | |
mov al,bl ;// количество смещений в тексте размером в ширину окна | |
mul dl ;// Умножаем на ширину окна | |
mov cx,КОД_ПАР_ТСМX; | |
call ЭЛЕ_УСТ_ПАР ; | |
call ОКНО_КУР_ВВЕР; | |
.ВЫХОД: | |
popad; | |
ret; | |
;==============================================================================} | |
ОКНО_КУР_ВНИЗ:;{ Перемещение крусора окна DI Вниз | |
pushad; | |
call ОКНО_ТКY ;// читаем кординату курсора | |
mov cx,ax ;// Запоминаем координату курсорпа | |
Call ОКНО_ВЫС ;// Читаем высоту окна | |
dec ax ; | |
cmp cx,ax ; // сравниваем координату крусора и высоту окна | |
JAE .ДАЛЕЕ ; | |
INC CX ;// Сдвиагем курсор вниз | |
mov ax,cx ; | |
mov cx,КОД_ПАР_ТКУY; | |
call ЭЛЕ_УСТ_ПАР; | |
jmp .ВЫХОД ; | |
.ДАЛЕЕ: | |
call ОКНО_ТСY ;// Читаем смещенеи внутри текста | |
inc ax ;// Увеличиваем смещение внтури текста | |
mov cx,КОД_ПАР_ТСМY; | |
call ЭЛЕ_УСТ_ПАР; | |
.ВЫХОД: | |
popad; | |
ret; | |
;==============================================================================} | |
ОКНО_КУР_ВВЕР:;{ Перемещение крусора окна DI Вверх | |
pushad; | |
call ОКНО_ТКY ;// читаем кординату курсора | |
mov cx,ax ;// Запоминаем координату курсорпа | |
JZ .ДАЛЕЕ ; | |
DEC CX ;// Сдвиагем курсор вверх | |
mov ax,cx ; | |
mov cx,КОД_ПАР_ТКУY; | |
call ЭЛЕ_УСТ_ПАР; | |
jmp .ВЫХОД ; | |
.ДАЛЕЕ: | |
call ОКНО_ТСY ;// Читаем смещенеи внутри текста | |
jz .ВЫХОД ; | |
dec ax ;// уменьшаем смещение внтури текста | |
mov cx,КОД_ПАР_ТСМY; | |
call ЭЛЕ_УСТ_ПАР; | |
.ВЫХОД: | |
popad; | |
ret; | |
;==============================================================================} | |
ОКНО_КНО_УДЛЕ:;{ Удаление символа слева от курсора | |
pushad; | |
call ОКНО_АКX; | |
jnz .ДАЛЕЕ; | |
call ОКНО_АКY; | |
jnz .ДАЛЕЕ; | |
jmp .ВЫХОД; | |
.ДАЛЕЕ: | |
call ОКНО_ПАС; | |
mov si,ax; | |
Call УДАЛЕНИЕ_ИЗ_АДРЕСА_SI_СИМВОЛА_ДО_0; | |
Call ОКНО_КУР_ВЛЕВ; | |
.ВЫХОД: | |
popad; | |
ret; | |
;==============================================================================} | |
ОКНО_КНО_БУКВ:;{ Обработка нажатия кнопок (Буквы цифры и тд и тп AL ) окна DI | |
pushad; | |
mov di,[МЫШ_ВЫДЕ2] ; // Указываем активное окно | |
mov bx,ax ; // Запоминаем код нажатой кнопки | |
;---------------------; | |
pushad | |
call ОКНО_БУФ; | |
mov si,ax; | |
mov al,bl; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_SI | |
popad; | |
;---------------------; | |
call ОКНО_ПАС ; // Читаем предположительный адрес в строке куда нужно добавить символ сформированый в ОКНО_ВЫВОД_ТЕ | |
mov si,ax ; | |
;// Дописываем не достающие переводы строки | |
call ОКНО_КСТ ; // Читаем количество строк в тексте окна | |
mov cx,ax ; // теперь в CX Количество строк в тексте | |
call ОКНО_АКY ; // Читаем Абсолютную позицию курсора в тексте | |
mov dx,ax ; // теперь в DX абсолютная координата курсора в тексте по Y | |
.ЦИКЛ2: CMP cx,dx ; | |
JA .КЦИКЛ2 ; | |
call НАЙТИ_КОНЕЦ_СТРОКИ_С_АДРЕСА_SI; | |
mov al,13 ; | |
call ВСТАВКА_СИМВОЛА_AL_ПО_АДРЕСУ_SI_ДО_0; | |
inc CX ; | |
JMP .ЦИКЛ2 ; | |
.КЦИКЛ2: | |
;// Дписываем не достающие пробелы если это необходимо | |
call ОКНО_КСК ;// Читаем правй край в тексте где расположен курсор | |
mov dx,ax ;// Запоминаем | |
call ОКНО_АКX ;// Читаем абсолютную координату курсора по X | |
mov cx,ax; | |
.ЦИКЛ: cmp dx,cx ;// Сравниваем правй край строки в котрой расположен курсор и координату курсора по X | |
jae .ДАЛЕЕ ; | |
; Дописываем необходимое количество пробелов | |
mov al,' ' ; | |
call ВСТАВКА_СИМВОЛА_AL_ПО_АДРЕСУ_SI_ДО_0; | |
inc SI ; | |
inc dx ; | |
jmp .ЦИКЛ ; | |
;---------------------- | |
.ДАЛЕЕ: | |
mov ax,bx ; | |
cmp ax,3592 ; | |
jz .ПРОПУСТИТЬ ; | |
call ВСТАВКА_СИМВОЛА_AL_ПО_АДРЕСУ_SI_ДО_0; | |
call ОКНО_КУР_ВПРА ; | |
.ПРОПУСТИТЬ: | |
mov ax,si; | |
mov cx,КОД_ПАР_ПАВС ; | |
call ЭЛЕ_УСТ_ПАР ; | |
popad ; | |
ret ; | |
;==============================================================================} | |
ОКНО_КНО_ЕНТЕ:;{ ОБработка нажатия Энтер | |
pushad; | |
mov cx,КОД_ПАР_ТСМX; | |
mov ax,0; | |
call ЭЛЕ_УСТ_ПАР; | |
mov cx,КОД_ПАР_ТКУX; | |
mov ax,0; | |
call ЭЛЕ_УСТ_ПАР; | |
call ОКНО_КУР_ВНИЗ; | |
call ОКНО_ВЫВОД_ТЕ ; | |
popad; | |
ret; | |
;---} | |
ОКНО_КНО_РАСК:;{ Обработка нажатия F10 раскладка клавиатуры | |
pushad; | |
mov ax,[РАС_КЛАВ] ; // Читаем текущию раскладку | |
test ax,ax ; // Если текущая раскладка 0 | |
jz .УСТАН_АНГ ; // то устанавливаем 1 англ раскладку | |
.УСТАН_РУС: ;------------------; | |
mov ax,0 ; // Иначе Установка Рус Раскладки клавиатуры | |
mov [РАС_КЛАВ],ax ; // Если 1 это АНГ бук Если 0 То Рус | |
jmp .ВЫХОД ; // Выход из обработчика нажатых кнопок | |
.УСТАН_АНГ: ;------------------; // Установка Агл раскладки клавиатуры | |
mov ax,1 ; | |
mov [РАС_КЛАВ],ax ; // Устанавливаем англ раскладку | |
jmp .ВЫХОД ; // Выход из обработчика нажатых кнопок | |
;------------------; | |
.ВЫХОД: | |
popad; | |
ret; | |
;} | |
ОКНО_НАЖ_БУКВ:;{ Обработка нажатия букв и цифер на клавиатуре | |
pushad ; | |
mov cx,[РАС_КЛАВ] ; // Читаем раскладку клавиатуры | |
test cx,cx ; // Если 0 значит преобразовать в руские буквы | |
jnz .АНГ_РАС ; | |
Call ПРЕОБРАЗУЕТ_АНГ_БУК_AL_В_РУС; | |
.АНГ_РАС: call ОКНО_КНО_БУКВ ; | |
popad ; | |
ret ; | |
;} | |
;==============================================================================} | |
ЭТО_ОКНО :;{ Определяет явлеться ли элемент DI Окном JZ - если не окно | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ;;{ ОПИСАНИЕ | |
; ПРоцедура определяет являеться ли элемент окном | |
; И начливае всех необходимых параметров | |
; Что бы нормально вырисовать это окно | |
;} | |
test di,di ; | |
jz .НЕТ ; | |
;--------------; // Тип элемента должен быть Окно | |
;--------------; | |
mov CX,КОД_ТИП; // Указываем имя элемиента котрый будем искать | |
call ЭЛЕ_ПОИСК_ВН_ПО_КОДУ_CX;// Ищим элемент с таким именем | |
jz .НЕТ ; | |
call ЭЛЕ_ТИП ; | |
CMP ax,ТИП_ЧИСЛ; | |
jnz .НЕТ ; | |
call ЭЛЕ_ЗНА ; | |
test ax,ax ; | |
jmp .ВЫХОД ; | |
.НЕТ: mov ax,0 ; | |
test ax,ax ; | |
.ВЫХОД: | |
popad ;// Если такого параметра нету если ? | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ;;{ ОПИСАНИЕ | |
; ПРоцедура определяет являеться ли элемент окном | |
; И начливае всех необходимых параметров | |
; Что бы нормально вырисовать это окно | |
;} | |
test di,di ; | |
jz .НЕТ ; | |
;--------------; // Тип элемента должен быть Окно | |
;--------------; | |
mov CX,КОД_ТИП; // Указываем имя элемиента котрый будем искать | |
call ЭЛЕ_ПОИСК_ВН_ПО_КОДУ_CX;// Ищим элемент с таким именем | |
jz .НЕТ ; | |
call ЭЛЕ_ТИП ; | |
CMP ax,ТИП_ЧИСЛ; | |
jnz .НЕТ ; | |
call ЭЛЕ_ЗНА ; | |
test ax,ax ; | |
jmp .ВЫХОД ; | |
.НЕТ: mov ax,0 ; | |
test ax,ax ; | |
.ВЫХОД: | |
popad ;// Если такого параметра нету если ? | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ;;{ ОПИСАНИЕ | |
; ПРоцедура определяет являеться ли элемент окном | |
; И начливае всех необходимых параметров | |
; Что бы нормально вырисовать это окно | |
;} | |
test edi,edi ; | |
jz .НЕТ ; | |
;--------------; // Тип элемента должен быть Окно | |
;--------------; | |
mov eCX,КОД_ТИП; // Указываем имя элемиента котрый будем искать | |
call ЭЛЕ_ПОИСК_ВН_ПО_КОДУ_CX;// Ищим элемент с таким именем | |
jz .НЕТ ; | |
call ЭЛЕ_ТИП ; | |
CMP eax,ТИП_ЧИСЛ; | |
jnz .НЕТ ; | |
call ЭЛЕ_ЗНА ; | |
test eax,eax ; | |
jmp .ВЫХОД ; | |
.НЕТ: mov eax,0 ; | |
test eax,eax ; | |
.ВЫХОД: | |
popad ;// Если такого параметра нету если ? | |
ret ; | |
END IF ;} | |
;------------------------------------------------------------------------------} | |
КНОПКИ :;{ Обработка Нажатия кнопок | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;------------------; | |
mov ax,[НАЖ_КНОПК]; // Читаем код нажатой кнопки | |
mov di,[МЫШ_ВЫДЕ2]; // Читаем активное окно | |
;------------------; | |
mov si,ТАБЛИЦА_КНО; | |
call ПОИСК_ДВОЙНОЙ_БУКВЫ_AX_В_СТРОКЕ_SI_ШАГ2; | |
jz .БУКВ ; | |
cmp bx,5 ; | |
ja .ДЛЯ_ОКНА ; | |
call ЗАПУСТИТЬ_CX ; | |
jmp .ВЫХОД ; | |
.ДЛЯ_ОКНА: test di,di ; | |
jz .ВЫХОД ; | |
call ЗАПУСТИТЬ_CX ; | |
JMP .ВЫХОД ; | |
.БУКВ: | |
call ЕСЛИ_В_AL_НЕ_СИМВОЛ_ФЛАГ_Z_0; | |
jz .ВЫХОД ; | |
call ОКНО_НАЖ_БУКВ ; | |
.ВЫХОД: | |
;------------------; // Обработка нажаиых кнопок завершена обнуление наж кнопки | |
mov ax,0 ; | |
mov [НАЖ_КНОПК],ax ; | |
;------------------; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;------------------; | |
mov ax,[НАЖ_КНОПК]; // Читаем код нажатой кнопки | |
mov di,[МЫШ_ВЫДЕ2]; // Читаем активное окно | |
;------------------; | |
mov si,ТАБЛИЦА_КНО; | |
call ПОИСК_ДВОЙНОЙ_БУКВЫ_AX_В_СТРОКЕ_SI_ШАГ2; | |
jz .БУКВ ; | |
cmp bx,5 ; | |
ja .ДЛЯ_ОКНА ; | |
call ЗАПУСТИТЬ_CX ; | |
jmp .ВЫХОД ; | |
.ДЛЯ_ОКНА: test di,di ; | |
jz .ВЫХОД ; | |
call ЗАПУСТИТЬ_CX ; | |
JMP .ВЫХОД ; | |
.БУКВ: | |
call ЕСЛИ_В_AL_НЕ_СИМВОЛ_ФЛАГ_Z_0; | |
jz .ВЫХОД ; | |
call ОКНО_НАЖ_БУКВ ; | |
.ВЫХОД: | |
;------------------; // Обработка нажаиых кнопок завершена обнуление наж кнопки | |
mov ax,0 ; | |
mov [НАЖ_КНОПК],ax ; | |
;------------------; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov ecx,0; | |
;------------------; | |
mov eax,[НАЖ_КНОПК]; // Читаем код нажатой кнопки | |
mov edi,[МЫШ_ВЫДЕ2]; // Читаем активное окно | |
;------------------; | |
mov esi,ТАБЛИЦА_КНО; | |
call ПОИСК_ДВОЙНОЙ_БУКВЫ_AX_В_СТРОКЕ_SI_ШАГ2; | |
jz .БУКВ ; | |
cmp ebx,5 ; | |
ja .ДЛЯ_ОКНА ; | |
call ЗАПУСТИТЬ_CX ; | |
jmp .ВЫХОД ; | |
.ДЛЯ_ОКНА: test edi,edi ; | |
jz .ВЫХОД ; | |
call ЗАПУСТИТЬ_CX ; | |
JMP .ВЫХОД ; | |
.БУКВ: | |
call ЕСЛИ_В_AL_НЕ_СИМВОЛ_ФЛАГ_Z_0; | |
jz .ВЫХОД ; | |
call ОКНО_НАЖ_БУКВ ; | |
.ВЫХОД: | |
;------------------; // Обработка нажаиых кнопок завершена обнуление наж кнопки | |
mov eax,0 ; | |
mov [НАЖ_КНОПК],eax ; | |
;------------------; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_DI_КН_AX:;{ Нажатие кнопки AX в ОКне DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ОКНО_ВЫВОД_ТЕ ; | |
mov bx,ax ; // Запоминаем код нажатой кнопки | |
call ОКНО_ПАС ; // Читаем предположительный адрес в строке куда нужно добавить символ сформированый в ОКНО_ВЫВОД_ТЕ | |
mov si,ax ; | |
;// Дописываем не достающие переводы строки | |
call ОКНО_КСТ ; // Читаем количество строк в тексте окна | |
mov cx,ax ; // теперь в CX Количество строк в тексте | |
call ОКНО_АКY ; // Читаем Абсолютную позицию курсора в тексте | |
mov dx,ax ; // теперь в DX абсолютная координата курсора в тексте по Y | |
.ЦИКЛ2: CMP cx,dx ; | |
JA .КЦИКЛ2 ; | |
call НАЙТИ_КОНЕЦ_СТРОКИ_С_АДРЕСА_SI; | |
mov al,13 ; | |
call ВСТАВКА_СИМВОЛА_AL_ПО_АДРЕСУ_SI_ДО_0; | |
inc CX ; | |
JMP .ЦИКЛ2 ; | |
.КЦИКЛ2: | |
;// Дписываем не достающие пробелы если это необходимо | |
call ОКНО_КСК ;// Читаем правй край в тексте где расположен курсор | |
mov dx,ax ;// Запоминаем | |
call ОКНО_АКX ;// Читаем абсолютную координату курсора по X | |
mov cx,ax; | |
.ЦИКЛ: cmp dx,cx ;// Сравниваем правй край строки в котрой расположен курсор и координату курсора по X | |
jae .ДАЛЕЕ ; | |
; Дописываем необходимое количество пробелов | |
mov al,' ' ; | |
call ВСТАВКА_СИМВОЛА_AL_ПО_АДРЕСУ_SI_ДО_0; | |
inc SI ; | |
inc dx ; | |
jmp .ЦИКЛ ; | |
;---------------------- | |
.ДАЛЕЕ: | |
mov ax,bx ; | |
cmp ax,3592 ; | |
jz .ПРОПУСТИТЬ ; | |
call ВСТАВКА_СИМВОЛА_AL_ПО_АДРЕСУ_SI_ДО_0; | |
call ОКНО_КУР_ВПРА ; | |
.ПРОПУСТИТЬ: | |
mov ax,si; | |
mov cx,КОД_ПАР_ПАВС ; | |
call ЭЛЕ_УСТ_ПАР ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ОКНО_ВЫВОД_ТЕ ; | |
mov bx,ax ; // Запоминаем код нажатой кнопки | |
call ОКНО_ПАС ; // Читаем предположительный адрес в строке куда нужно добавить символ сформированый в ОКНО_ВЫВОД_ТЕ | |
mov si,ax ; | |
;// Дописываем не достающие переводы строки | |
call ОКНО_КСТ ; // Читаем количество строк в тексте окна | |
mov cx,ax ; // теперь в CX Количество строк в тексте | |
call ОКНО_АКY ; // Читаем Абсолютную позицию курсора в тексте | |
mov dx,ax ; // теперь в DX абсолютная координата курсора в тексте по Y | |
.ЦИКЛ2: CMP cx,dx ; | |
JA .КЦИКЛ2 ; | |
call НАЙТИ_КОНЕЦ_СТРОКИ_С_АДРЕСА_SI; | |
mov al,13 ; | |
call ВСТАВКА_СИМВОЛА_AL_ПО_АДРЕСУ_SI_ДО_0; | |
inc CX ; | |
JMP .ЦИКЛ2 ; | |
.КЦИКЛ2: | |
;// Дписываем не достающие пробелы если это необходимо | |
call ОКНО_КСК ;// Читаем правй край в тексте где расположен курсор | |
mov dx,ax ;// Запоминаем | |
call ОКНО_АКX ;// Читаем абсолютную координату курсора по X | |
mov cx,ax; | |
.ЦИКЛ: cmp dx,cx ;// Сравниваем правй край строки в котрой расположен курсор и координату курсора по X | |
jae .ДАЛЕЕ ; | |
; Дописываем необходимое количество пробелов | |
mov al,' ' ; | |
call ВСТАВКА_СИМВОЛА_AL_ПО_АДРЕСУ_SI_ДО_0; | |
inc SI ; | |
inc dx ; | |
jmp .ЦИКЛ ; | |
;---------------------- | |
.ДАЛЕЕ: | |
mov ax,bx ; | |
cmp ax,3592 ; | |
jz .ПРОПУСТИТЬ ; | |
call ВСТАВКА_СИМВОЛА_AL_ПО_АДРЕСУ_SI_ДО_0; | |
call ОКНО_КУР_ВПРА ; | |
.ПРОПУСТИТЬ: | |
mov ax,si; | |
mov cx,КОД_ПАР_ПАВС ; | |
call ЭЛЕ_УСТ_ПАР ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad | |
call ОКНО_ВЫВОД_ТЕ ; | |
mov ebx,eax ; // Запоминаем код нажатой кнопки | |
call ОКНО_ПАС ; // Читаем предположительный адрес в строке куда нужно добавить символ сформированый в ОКНО_ВЫВОД_ТЕ | |
mov esi,eax ; | |
;// Дописываем не достающие переводы строки | |
call ОКНО_КСТ ; // Читаем количество строк в тексте окна | |
mov ecx,eax ; // теперь в CX Количество строк в тексте | |
call ОКНО_АКY ; // Читаем Абсолютную позицию курсора в тексте | |
mov edx,eax ; // теперь в DX абсолютная координата курсора в тексте по Y | |
.ЦИКЛ2: CMP ecx,edx ; | |
JA .КЦИКЛ2 ; | |
call НАЙТИ_КОНЕЦ_СТРОКИ_С_АДРЕСА_SI; | |
mov al,13 ; | |
call ВСТАВКА_СИМВОЛА_AL_ПО_АДРЕСУ_SI_ДО_0; | |
inc eCX ; | |
JMP .ЦИКЛ2 ; | |
.КЦИКЛ2: | |
;// Дписываем не достающие пробелы если это необходимо | |
call ОКНО_КСК ;// Читаем правй край в тексте где расположен курсор | |
mov edx,eax ;// Запоминаем | |
call ОКНО_АКX ;// Читаем абсолютную координату курсора по X | |
mov ecx,eax; | |
.ЦИКЛ: cmp edx,ecx ;// Сравниваем правй край строки в котрой расположен курсор и координату курсора по X | |
jae .ДАЛЕЕ ; | |
; Дописываем необходимое количество пробелов | |
mov al,' ' ; | |
call ВСТАВКА_СИМВОЛА_AL_ПО_АДРЕСУ_SI_ДО_0; | |
inc eSI ; | |
inc edx ; | |
jmp .ЦИКЛ ; | |
;---------------------- | |
.ДАЛЕЕ: | |
mov eax,ebx ; | |
cmp eax,3592 ; | |
jz .ПРОПУСТИТЬ ; | |
call ВСТАВКА_СИМВОЛА_AL_ПО_АДРЕСУ_SI_ДО_0; | |
call ОКНО_КУР_ВПРА ; | |
.ПРОПУСТИТЬ: | |
mov eax,esi; | |
mov ecx,КОД_ПАР_ПАВС ; | |
call ЭЛЕ_УСТ_ПАР ; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ТАБЛИЦА_КНО :;{ Таблица для кнопок | |
dW 15616,КНОП_СОЗ_ОКНА ; 1 | |
dW 15104,КНОП_ПОМ_ОКНА ; 2 | |
dW 16896,ОКНО_КНО_РАСК ; 3 | |
dW 17408,КНОП_ПРИ_ОКНА ; 4 | |
dW 16640,КНОП_ИНФ_СТРО ; 5 | |
dW 15872,КНОП_УДА_ОКНА ; 6 | |
dW 17152,ВЫПОЛНИТЬ_ОК ; 7 | |
dW 19712,ОКНО_КУР_ВПРА ; 8 | |
dW 19200,ОКНО_КУР_ВЛЕВ ; 9 | |
dW 20480,ОКНО_КУР_ВНИЗ ; 10 | |
dW 18432,ОКНО_КУР_ВВЕР ; 11 | |
dW 3592 ,ОКНО_КНО_УДАЛ ; 12 | |
dW 7181 ,ОКНО_КНО_ЕНТР ; 13 | |
dW 0 ,0 ; 14 | |
;-----------------------} | |
ИНФ_СТРО:DD 1; | |
ЗАПУСТИТЬ_CX:;{ | |
IF (ПЛАТФОРМА = T32);{ | |
call ecx | |
END IF ;} | |
IF (ПЛАТФОРМА = T16);{ | |
call cx | |
END IF ;} | |
IF (ПЛАТФОРМА = ДОС);{ | |
call cx | |
END IF ;} | |
ret; | |
;} | |
КНОП_УДА_ОКНА:;{ Унопка Удаление окна | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,[МЫШ_ВЫДЕ2];// Читаем активное окно | |
test di,di; | |
jz .ВЫХОД; | |
call ЭЛЕ_ОСВОБОДИ ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,[МЫШ_ВЫДЕ2];// Читаем активное окно | |
test di,di; | |
jz .ВЫХОД; | |
call ЭЛЕ_ОСВОБОДИ ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,[МЫШ_ВЫДЕ2];// Читаем активное окно | |
test edi,edi; | |
jz .ВЫХОД; | |
call ЭЛЕ_ОСВОБОДИ ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;=============================================================================} | |
КНОП_СОЗ_ОКНА:;{ Унопка создания окна | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;mov di,[МЫШ_ВЫДЕ2];// Читаем активное окно | |
mov di,[КОР_ЭЛЕМ];// Читаем активное окно | |
call .СОЗ_ТЕК ; // Создаем строку с текстом окна заносим в BX её адрес | |
mov CL,10 ; // Указываем координату окна по X | |
mov CH,10 ; // Указываем координату окна по Y | |
mov DL,10 ; // Указываем Ширину окна | |
mov DH,10 ; // Указываем Указываем высоту окна | |
mov si,.ИМЯ_ОКНА ; | |
call ОКНО_СОЗДАТЬ ; | |
mov cx,КОД_ПАР_АТРИ ; | |
mov ax,10110000b ; | |
call ЭЛЕ_УСТ_ПАР ; | |
pop si ; | |
Push di ; | |
popad ; | |
ret ; | |
.СОЗ_ТЕК: | |
push si; | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_1024_БАЙТ; // Выделяем участок памяти для текста результат возвращеться адрес DI | |
mov si,di ; // Указывапем куда копировать то есть в новую строку | |
mov di,.ТЕКС_ОКНА1 ; // Указывапем откудвава копировать | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; // Копируем | |
mov bx,si ; // Заном адрес строки в BX | |
pop di; | |
pop si; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;mov di,[МЫШ_ВЫДЕ2];// Читаем активное окно | |
mov di,[КОР_ЭЛЕМ];// Читаем активное окно | |
call .СОЗ_ТЕК ; // Создаем строку с текстом окна заносим в BX её адрес | |
mov CL,10 ; // Указываем координату окна по X | |
mov CH,10 ; // Указываем координату окна по Y | |
mov DL,10 ; // Указываем Ширину окна | |
mov DH,10 ; // Указываем Указываем высоту окна | |
mov si,.ИМЯ_ОКНА ; | |
call ОКНО_СОЗДАТЬ ; | |
mov cx,КОД_ПАР_АТРИ ; | |
mov ax,10110000b ; | |
call ЭЛЕ_УСТ_ПАР ; | |
pop si ; | |
Push di ; | |
popad ; | |
ret ; | |
.СОЗ_ТЕК: | |
push si; | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_1024_БАЙТ; // Выделяем участок памяти для текста результат возвращеться адрес DI | |
mov si,di ; // Указывапем куда копировать то есть в новую строку | |
mov di,.ТЕКС_ОКНА1 ; // Указывапем откудвава копировать | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; // Копируем | |
mov bx,si ; // Заном адрес строки в BX | |
pop di; | |
pop si; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;mov Edi,[МЫШ_ВЫДЕ2];// Читаем активное окно | |
mov Edi,[КОР_ЭЛЕМ];// Читаем активное окно | |
call .СОЗ_ТЕК ; // Создаем строку с текстом окна заносим в BX её адрес | |
mov CL,10 ; // Указываем координату окна по X | |
mov CH,10 ; // Указываем координату окна по Y | |
mov DL,10 ; // Указываем Ширину окна | |
mov DH,10 ; // Указываем Указываем высоту окна | |
mov Esi,.ИМЯ_ОКНА ; | |
call ОКНО_СОЗДАТЬ ; | |
mov Ecx,КОД_ПАР_АТРИ ; | |
mov Eax,10110000b ; | |
call ЭЛЕ_УСТ_ПАР ; | |
pop Esi ; | |
Push Edi ; | |
popad ; | |
ret ; | |
.СОЗ_ТЕК: | |
push esi; | |
push edi; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_1024_БАЙТ; // Выделяем участок памяти для текста результат возвращеться адрес DI | |
mov Esi,edi ; // Указывапем куда копировать то есть в новую строку | |
mov Edi,.ТЕКС_ОКНА1 ; // Указывапем откудвава копировать | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; // Копируем | |
mov Ebx,esi ; // Заном адрес строки в BX | |
pop edi; | |
pop esi; | |
ret; | |
END IF;} | |
.ТЕКС_ОКНА1:;{ | |
DB ' А(){}',13; | |
DB ' Б(){}',13; | |
DB ' Ц(){}',13; | |
DB ' ВЫВОД("ВВЕДИТЕ А " ) А:=ВВОДСТ ',13; | |
DB ' ВЫВОД("ВВЕДИТЕ Б " ) Б:=ВВОДСТ ',13; | |
DB ' ВЫВОД("ВВЕДИТЕ Ц " ) Ц:=ВВОДСТ ',13; | |
DB ' ВЫВОД("РЕЗУЛЬТАТ " А+Б*Ц) ',13,0; | |
.ИМЯ_ОКНА: db ' НОВОЕ ОКНО ',0; | |
;} | |
;=============================================================================} | |
КНОП_ПОМ_ОКНА:;{ Унопка окна Помощи | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,[КОР_ЭЛЕМ] ;// Читаем активное окно | |
mov CX,КОД_ПОМОЩЬ ; | |
call ЭЛЕ_ПОИСК_ВН_ПО_КОДУ_CX | |
jnz .УДАЛИТЬ_ОКНО ; | |
mov di,[КОР_ЭЛЕМ] ;// Читаем активное окно | |
call .СОЗ_ТЕК ; // Создаем строку с текстом окна заносим в BX её адрес | |
mov CL,32 ; // Указываем координату окна по X | |
mov CH,1 ; // Указываем координату окна по Y | |
mov DL,45 ; // Указываем Ширину окна | |
mov DH,14 ; // Указываем Указываем высоту окна | |
mov Si,ТЕК_ПОМОЩЬ ; | |
call ОКНО_СОЗДАТЬ ; | |
mov cx,КОД_ПАР_АТРИ ; | |
mov ax,01011111b ; | |
call ЭЛЕ_УСТ_ПАР ; | |
pop si ; | |
Push di ; | |
popad ; | |
ret ; | |
.УДАЛИТЬ_ОКНО: | |
call ЭЛЕ_ОСВОБОДИ ; | |
pop si | |
push DI | |
popad; | |
ret; | |
.СОЗ_ТЕК: | |
push si; | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_1024_БАЙТ; // Выделяем участок памяти для текста результат возвращеться адрес DI | |
mov si,di ; // Указывапем куда копировать то есть в новую строку | |
mov di,.ТЕКС_ОКНА1 ; // Указывапем откудвава копировать | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; // Копируем | |
mov bx,si ; // Заном адрес строки в BX | |
pop di; | |
pop si; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,[КОР_ЭЛЕМ] ;// Читаем активное окно | |
mov CX,КОД_ПОМОЩЬ ; | |
call ЭЛЕ_ПОИСК_ВН_ПО_КОДУ_CX | |
jnz .УДАЛИТЬ_ОКНО ; | |
mov di,[КОР_ЭЛЕМ] ;// Читаем активное окно | |
call .СОЗ_ТЕК ; // Создаем строку с текстом окна заносим в BX её адрес | |
mov CL,32 ; // Указываем координату окна по X | |
mov CH,1 ; // Указываем координату окна по Y | |
mov DL,45 ; // Указываем Ширину окна | |
mov DH,14 ; // Указываем Указываем высоту окна | |
mov Si,ТЕК_ПОМОЩЬ ; | |
call ОКНО_СОЗДАТЬ ; | |
mov cx,КОД_ПАР_АТРИ ; | |
mov ax,01011111b ; | |
call ЭЛЕ_УСТ_ПАР ; | |
pop si ; | |
Push di ; | |
popad ; | |
ret ; | |
.УДАЛИТЬ_ОКНО: | |
call ЭЛЕ_ОСВОБОДИ ; | |
pop si | |
push DI | |
popad; | |
ret; | |
.СОЗ_ТЕК: | |
push si; | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_1024_БАЙТ; // Выделяем участок памяти для текста результат возвращеться адрес DI | |
mov si,di ; // Указывапем куда копировать то есть в новую строку | |
mov di,.ТЕКС_ОКНА1 ; // Указывапем откудвава копировать | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; // Копируем | |
mov bx,si ; // Заном адрес строки в BX | |
pop di; | |
pop si; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,[КОР_ЭЛЕМ] ;// Читаем активное окно | |
mov eCX,КОД_ПОМОЩЬ ; | |
call ЭЛЕ_ПОИСК_ВН_ПО_КОДУ_CX | |
jnz .УДАЛИТЬ_ОКНО ; | |
mov edi,[КОР_ЭЛЕМ] ;// Читаем активное окно | |
call .СОЗ_ТЕК ; // Создаем строку с текстом окна заносим в BX её адрес | |
mov CL,32 ; // Указываем координату окна по X | |
mov CH,1 ; // Указываем координату окна по Y | |
mov DL,45 ; // Указываем Ширину окна | |
mov DH,14 ; // Указываем Указываем высоту окна | |
mov eSi,ТЕК_ПОМОЩЬ ; | |
call ОКНО_СОЗДАТЬ ; | |
mov ecx,КОД_ПАР_АТРИ ; | |
mov eax,01011111b ; | |
call ЭЛЕ_УСТ_ПАР ; | |
pop esi ; | |
Push edi ; | |
popad ; | |
ret ; | |
.УДАЛИТЬ_ОКНО: | |
call ЭЛЕ_ОСВОБОДИ ; | |
pop esi | |
push eDI | |
popad; | |
ret; | |
.СОЗ_ТЕК: | |
push esi; | |
push edi; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_1024_БАЙТ; // Выделяем участок памяти для текста результат возвращеться адрес DI | |
mov esi,edi ; // Указывапем куда копировать то есть в новую строку | |
mov edi,.ТЕКС_ОКНА1 ; // Указывапем откудвава копировать | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; // Копируем | |
mov ebx,esi ; // Заном адрес строки в BX | |
pop edi; | |
pop esi; | |
ret; | |
END IF;} | |
.ТЕКС_ОКНА1: | |
db " -------------------------------------------",13; | |
db " Тим ОС в 1.0 Абдулов Тимур Рифович ",13; | |
db " -------------------------------------------",13; | |
db " F1 - Окно помощи",13; | |
db " F3 - Создать окно",13; | |
db " F4 - Закрыть окно",13; | |
db " F7 - Состояние системы",13; | |
db " F8 - Раскладка клаиатуры",13; | |
db " F9 - Запуск программы",13; | |
db " F10- Пример программы",13; | |
db " ------------------------------------------- ",13; | |
db " Электронная Почта hostingurifa@gmail.com ",13; | |
db " http://sites.google.com/site/abdulovtimuros ",13; | |
db " ------------------------------------------- ",13,0; | |
.ИМЯ_ОКНА:db 'Окно помощи',0; | |
;=============================================================================} | |
КНОП_ПРИ_ОКНА:;{ Создает окно с именем SI внутри элемента DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,[КОР_ЭЛЕМ] ;// Читаем активное окно | |
call .СОЗ_ТЕК ; // Создаем строку с текстом окна заносим в BX её адрес | |
mov CL,5 ; // Указываем координату окна по X | |
mov CH,5 ; // Указываем координату окна по Y | |
mov DL,30 ; // Указываем Ширину окна | |
mov DH,10 ; // Указываем Указываем высоту окна | |
MOV SI,.ПРИМЕР ; | |
call ОКНО_СОЗДАТЬ ; | |
; | |
pop si ; | |
Push di ; | |
popad ; | |
ret ; | |
.СОЗ_ТЕК: | |
push si; | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_1024_БАЙТ; // Выделяем участок памяти для текста результат возвращеться адрес DI | |
mov si,di ; // Указывапем куда копировать то есть в новую строку | |
mov di,.ТЕКС_ОКНА1 ; // Указывапем откудвава копировать | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; // Копируем | |
mov bx,si ; // Заном адрес строки в BX | |
pop di; | |
pop si; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,[КОР_ЭЛЕМ] ;// Читаем активное окно | |
call .СОЗ_ТЕК ; // Создаем строку с текстом окна заносим в BX её адрес | |
mov CL,5 ; // Указываем координату окна по X | |
mov CH,5 ; // Указываем координату окна по Y | |
mov DL,30 ; // Указываем Ширину окна | |
mov DH,10 ; // Указываем Указываем высоту окна | |
MOV SI,.ПРИМЕР ; | |
call ОКНО_СОЗДАТЬ ; | |
; | |
pop si ; | |
Push di ; | |
popad ; | |
ret ; | |
.СОЗ_ТЕК: | |
push si; | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_1024_БАЙТ; // Выделяем участок памяти для текста результат возвращеться адрес DI | |
mov si,di ; // Указывапем куда копировать то есть в новую строку | |
mov di,.ТЕКС_ОКНА1 ; // Указывапем откудвава копировать | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; // Копируем | |
mov bx,si ; // Заном адрес строки в BX | |
pop di; | |
pop si; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,[КОР_ЭЛЕМ] ;// Читаем активное окно | |
call .СОЗ_ТЕК ; // Создаем строку с текстом окна заносим в BX её адрес | |
mov CL,5 ; // Указываем координату окна по X | |
mov CH,5 ; // Указываем координату окна по Y | |
mov DL,30 ; // Указываем Ширину окна | |
mov DH,10 ; // Указываем Указываем высоту окна | |
MOV eSI,.ПРИМЕР ; | |
call ОКНО_СОЗДАТЬ ; | |
; | |
pop esi ; | |
Push edi ; | |
popad ; | |
ret ; | |
.СОЗ_ТЕК: | |
push esi; | |
push edi; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_1024_БАЙТ; // Выделяем участок памяти для текста результат возвращеться адрес DI | |
mov esi,edi ; // Указывапем куда копировать то есть в новую строку | |
mov edi,.ТЕКС_ОКНА1 ; // Указывапем откудвава копировать | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; // Копируем | |
mov ebx,esi ; // Заном адрес строки в BX | |
pop edi; | |
pop esi; | |
ret ; | |
END IF;} | |
.ПРИМЕР:Db "ПРИМЕР",0; | |
.ТЕКС_ОКНА :;{ | |
DB 'ОКНО(){ ',13; | |
DB ' ',13; | |
DB ' ПАР_ЛЕВО (){} ; ' ;// Left координата по X отображемого окна | |
DB ' ПАР_ВЕРХ (){} ; ' ;// Top координата по Y отображемого окна | |
DB ' ПАР_ШИРИ (){} ; ' ;// Width Ширина отображемого окна | |
DB ' ПАР_ВЫСО (){} ; ',13;// HEight Высота отображемого окна | |
DB ' ПАР_АТРИ (){} ; ' ;// Атрибуты окна Забыл совсем что писал эти параметры ) | |
DB ' ПАР_АКУР (){} ; ' ;// Атрибуты Курсора Ого у меня даже задать курсор можно | |
DB ' ПАР_ТСМX (){} ; ' ;// Смещение видимого текста внтури текста по X Круто | |
DB ' ПАР_ТСМY (){} ; ',13;// Смещение видимого текста внтури текста по Y | |
DB ' ПАР_ТКУX (){} ; ' ;// координаты текстового курсора по X | |
DB ' ПАР_ТКУY (){} ; ' ;// координаты текстового курсора по Y | |
DB ' ПАР_ТЕКС (){} ; ' ;// Текст окна для редактирования | |
DB ' ПАР_КССК (){} ; ',13;// Количество символов в строке с курсором | |
DB ' ПАР_КОСТ (){} ; ' ;// Реальное количество строк в тексте окна | |
DB ' ПАР_ПАВС (){} ; ' ;// Предположительный адрес для вставки символа | |
DB ' ПАР_ДПСТ (){} ; ' ;// Длина предыдущей строки до курсора | |
DB ' ТИП (){} ; ',13;// Длина предыдущей строки до курсора | |
DB ' ',13; | |
DB ' ПАР_ЛЕВО :=10 ; ' ;// Left координата по X отображемого окна | |
DB ' ПАР_ВЕРХ :=10 ; ' ;// Top координата по Y отображемого окна | |
DB ' ПАР_ШИРИ :=10 ; ' ;// Width Ширина отображемого окна | |
DB ' ПАР_ВЫСО :=10 ; ',13;// HEight Высота отображемого окна | |
DB ' ПАР_АТРИ :=31 ; ' ;// Атрибуты окна Забыл совсем что писал эти параметры ) | |
DB ' ПАР_АКУР :=100; ' ;// Атрибуты Курсора Ого у меня даже задать курсор можно | |
DB ' ПАР_ТСМX :=0 ; ' ;// Смещение видимого текста внтури текста по X Круто | |
DB ' ПАР_ТСМY :=0 ; ',13;// Смещение видимого текста внтури текста по Y | |
DB ' ПАР_ТКУX :=0 ; ' ;// координаты текстового курсора по X | |
DB ' ПАР_ТКУY :=0 ; ' ;// координаты текстового курсора по Y | |
DB ' ПАР_ТЕКС :=ТЕС; ' ;// Текст окна для редактирования | |
DB ' ПАР_КССК :=0 ; ',13;// Количество символов в строке с курсором | |
DB ' ПАР_КОСТ :=0 ; ' ;// Реальное количество строк в тексте окна | |
DB ' ПАР_ПАВС :=0 ; ' ;// Предположительный адрес для вставки символа | |
DB ' ПАР_ДПСТ :=0 ; ' ;// Длина предыдущей строки до курсора | |
DB ' ТИП :=1 ; ',13;// Длина предыдущей строки до курсора | |
DB ' ',13; | |
DB ' РОДИТЕЛЬ:=РАБОЧИЙ_СТОЛ ; ',13;// Длина предыдущей строки до курсора | |
DB ' ',13; | |
DB ' x(){};' ; | |
DB ' x:=1;' ; | |
DB ' while (x<23)' ; | |
DB ' {' ; | |
DB ' x:=x+1;' ; | |
DB ' ВЫВОДСТ(x);' ; | |
DB ' }' ,13; | |
DB '}' ,13; | |
DB 'ОКНО();' ,13; | |
DB 0;} | |
.ТЕКС_ОКНА4 :;{ | |
DB ' А(){}' ,13; | |
DB ' Б(){}' ,13; | |
DB ' Ц(){}' ,13; | |
DB ' ВЫВОД("ВВЕДИТЕ А " ) А:=ВВОДСТ ' ,13; | |
DB ' ВЫВОД("ВВЕДИТЕ Б " ) Б:=ВВОДСТ ' ,13; | |
DB ' ВЫВОД("ВВЕДИТЕ Ц " ) Ц:=ВВОДСТ ' ,13; | |
DB ' ВЫВОД("РЕЗУЛЬТАТ " А+Б*Ц) ' ,13; | |
DB 0 | |
;} | |
.ТЕКС_ОКНА2 :;{ | |
DB ' ВЫВОД(2+3) ' ,13; | |
DB 0;} | |
.ТЕКС_ОКНА3 :;{ | |
DB ' x(){};' ,13; | |
DB ' з(){};' ,13; | |
DB ' ЗАПРЕТИТЬ;' ,13; | |
DB ' x:=1;' ,13; | |
DB ' while (x<100)',13; | |
DB ' {' ,13; | |
DB ' x:=x+1;' ,13; | |
DB ' з:=ЧПОРТ(64);',13; | |
DB ' ВЫВОДСТ(з);' ,13; | |
DB ' }' ,13; | |
DB ' РАЗРЕШИТЬ;' ,13; | |
DB 0;} | |
.ТЕКС_ОКНА1 :;{ | |
DB ' x(){};',13; | |
db ' x:=1;',13; | |
DB ' while (x<1000)',13; | |
DB ' {',13; | |
DB ' ВЫВОДСТ("X="+x);',13; | |
DB ' x:=x+1;',13; | |
DB ' if (x>5) {УДА_СТР;}',13; | |
DB ' }',13; | |
DB 0; | |
;} | |
;==============================================================================} | |
ОКНО_МОНИТОР :;{ Создает окно МОНИТОР внутри элемента DI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call .СОЗ_ТЕК ; // Создаем строку с текстом окна заносим в BX её адрес | |
mov SI,МОНИТОР ; | |
mov CL,1 ; // Указываем координату окна по X | |
mov CH,1 ; // Указываем координату окна по Y | |
mov DL,10 ; // Указываем Ширину окна | |
mov DH,5 ; // Указываем Указываем высоту окна | |
call ОКНО_СОЗДАТЬ ; | |
;----------------------; | |
mov cx,КОД_ПАР_АТРИ ; | |
mov ax,00001111b ; | |
call ЭЛЕ_УСТ_ПАР ; | |
;----------------------; | |
Call ВОЗВРАТИТЬ_DI ; | |
popad ; | |
ret ; | |
.СОЗ_ТЕК: | |
push si ; | |
push di ; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_1024_БАЙТ; // Выделяем участок памяти для текста результат возвращеться адрес DI | |
mov si,di ; // Указывапем куда копировать то есть в новую строку | |
mov di,.ТЕКС_ОКНА1 ; // Указывапем откудвава копировать | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; // Копируем | |
mov bx,si ; // Заном адрес строки в BX | |
pop di ; | |
pop si ; | |
ret; | |
END iF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call .СОЗ_ТЕК ; // Создаем строку с текстом окна заносим в BX её адрес | |
mov SI,МОНИТОР ; | |
mov CL,1 ; // Указываем координату окна по X | |
mov CH,1 ; // Указываем координату окна по Y | |
mov DL,10 ; // Указываем Ширину окна | |
mov DH,5 ; // Указываем Указываем высоту окна | |
call ОКНО_СОЗДАТЬ ; | |
;----------------------; | |
mov cx,КОД_ПАР_АТРИ ; | |
mov ax,00001111b ; | |
call ЭЛЕ_УСТ_ПАР ; | |
;----------------------; | |
Call ВОЗВРАТИТЬ_DI ; | |
popad ; | |
ret ; | |
.СОЗ_ТЕК: | |
push si ; | |
push di ; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_1024_БАЙТ; // Выделяем участок памяти для текста результат возвращеться адрес DI | |
mov si,di ; // Указывапем куда копировать то есть в новую строку | |
mov di,.ТЕКС_ОКНА1 ; // Указывапем откудвава копировать | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; // Копируем | |
mov bx,si ; // Заном адрес строки в BX | |
pop di ; | |
pop si ; | |
ret; | |
END iF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call .СОЗ_ТЕК ; // Создаем строку с текстом окна заносим в BX её адрес | |
mov ESI,МОНИТОР ; | |
mov CL,1 ; // Указываем координату окна по X | |
mov CH,1 ; // Указываем координату окна по Y | |
mov DL,10 ; // Указываем Ширину окна | |
mov DH,5 ; // Указываем Указываем высоту окна | |
call ОКНО_СОЗДАТЬ ; | |
;----------------------; | |
mov ecx,КОД_ПАР_АТРИ ; | |
mov eax,00001111b ; | |
call ЭЛЕ_УСТ_ПАР ; | |
;----------------------; | |
;.zzz: | |
;call КУРСОР; | |
;call ОКНО_АВЕ | |
;call ЧИСЛОAX; | |
;call ЭКРАН_ВЫВОД; | |
;jmp .zzz; | |
Call ВОЗВРАТИТЬ_DI ; | |
popad ; | |
ret ; | |
.СОЗ_ТЕК: | |
push esi ; | |
push edi ; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_1024_БАЙТ; // Выделяем участок памяти для текста результат возвращеться адрес DI | |
mov esi,edi ; // Указывапем куда копировать то есть в новую строку | |
mov edi,.ТЕКС_ОКНА1 ; // Указывапем откудвава копировать | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; // Копируем | |
mov ebx,esi ; // Заном адрес строки в BX | |
pop edi ; | |
pop esi ; | |
ret; | |
END iF;} | |
.ТЕКС_ОКНА1: db ' ',13,0; | |
;==============================================================================} | |
КНОП_ИНФ_СТРО:;{ Информационная строка | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
mov si,1 | |
mov ax,[ИНФ_СТРО] ; | |
test ax,ax ; | |
jz .ЖЖЖ ; | |
mov Si,0; | |
.ЖЖЖ: mov [ИНФ_СТРО],si | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad | |
mov si,1 | |
mov ax,[ИНФ_СТРО] ; | |
test ax,ax ; | |
jz .ЖЖЖ ; | |
mov Si,0; | |
.ЖЖЖ: mov [ИНФ_СТРО],si | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad | |
mov esi,1 | |
mov eax,[ИНФ_СТРО] ; | |
test eax,eax ; | |
jz .ЖЖЖ ; | |
mov eSi,0; | |
.ЖЖЖ: mov [ИНФ_СТРО],esi | |
popad; | |
ret; | |
END IF;} | |
;} | |
ОКНО_КНО_УДАЛ:;{ | |
pushad; | |
call ОКНО_КНО_БУКВ ; // Сперва добавлет удаление как буд то это буквы в связи с осбеностями системы и дорисовки не достающих знаков | |
Call ОКНО_КНО_УДЛЕ ; // Удаляет 2 символа слева | |
popad; | |
ret; | |
;} | |
ОКНО_КНО_ЕНТР:;{ | |
pushad; | |
call ОКНО_КНО_БУКВ ; | |
call ОКНО_КНО_ЕНТЕ ; | |
popad; | |
ret; | |
;} | |
ОКНО_ПОРЯДОК:;{Порядок окон | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
mov dx,[МЫШ_ВЫДЕ2] | |
mov di,[МЫШ_ВЫДЕ2] | |
test Di,Di | |
jz .LLL; | |
mov si,di; | |
call ЭЛЕ_РОД; | |
jz .LLL; | |
mov DI,AX; | |
mov bx,di; | |
call ЭЛЕ_ПОСЛЕД | |
jz .LLL; | |
cmp di,si; | |
jz .LLL; | |
mov di,bx; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI | |
.LLL: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad | |
mov dx,[МЫШ_ВЫДЕ2] | |
mov di,[МЫШ_ВЫДЕ2] | |
test Di,Di | |
jz .LLL; | |
mov si,di; | |
call ЭЛЕ_РОД; | |
jz .LLL; | |
mov DI,AX; | |
mov bx,di; | |
call ЭЛЕ_ПОСЛЕД | |
jz .LLL; | |
cmp di,si; | |
jz .LLL; | |
mov di,bx; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI | |
.LLL: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad | |
mov edx,[МЫШ_ВЫДЕ2] | |
mov edi,[МЫШ_ВЫДЕ2] | |
test eDi,eDi | |
jz .LLL; | |
mov esi,edi; | |
call ЭЛЕ_РОД; | |
jz .LLL; | |
mov eDI,eAX; | |
mov ebx,edi; | |
call ЭЛЕ_ПОСЛЕД | |
jz .LLL; | |
cmp edi,esi; | |
jz .LLL; | |
mov edi,ebx; | |
call ДОБ_ЭЛЕ_DX_В_ЭЛЕ_DI | |
.LLL: | |
popad; | |
ret; | |
END IF;} | |
;} | |
ОКНО_ПРЕДЕЛЫ :;{ Проверка вхождение координат CL-X,DL-Y в пространство окна | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;--------------;// Проверка вхождения сммвола по X | |
Call ОКНО_АЛЕ ;// Получаем абсолютные координаты левого угла окна | |
Cmp Cl,AL ;// Сравниваем с левым краем окна координату символа по X | |
jb .НЕВХОДИТ ; | |
Call ОКНО_АПР ;// Читаем абсолютнуюю координату правой стороны окна | |
cmp cl,al ;// Сравниваем | |
JAE .НЕВХОДИТ ;// Если Правый край окна оказался больше либо равен Координате символа рисовать ненада | |
;--------------; | |
;--------------;// Проверка вхождения сммвола по Y | |
Call ОКНО_АВЕ ;// Получаем абсолютные координаты левого верхнего угла окна | |
Cmp dl,AL ;// Сравниваем с левым верхним углом окна координату символа по Y | |
jb .НЕВХОДИТ ; | |
Call ОКНО_АНИ ;// Читаем абсолютнуюю координату правой нижней стороны окна | |
cmp dl,al ;// Сравниваем | |
JAE .НЕВХОДИТ ;// Если Правый край окна оказался больше либо равен Координате символа рисовать ненада | |
;--------------; | |
.ВХОДИТ: | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕВХОДИТ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;--------------;// Проверка вхождения сммвола по X | |
Call ОКНО_АЛЕ ;// Получаем абсолютные координаты левого угла окна | |
Cmp Cl,AL ;// Сравниваем с левым краем окна координату символа по X | |
jb .НЕВХОДИТ ; | |
Call ОКНО_АПР ;// Читаем абсолютнуюю координату правой стороны окна | |
cmp cl,al ;// Сравниваем | |
JAE .НЕВХОДИТ ;// Если Правый край окна оказался больше либо равен Координате символа рисовать ненада | |
;--------------; | |
;--------------;// Проверка вхождения сммвола по Y | |
Call ОКНО_АВЕ ;// Получаем абсолютные координаты левого верхнего угла окна | |
Cmp dl,AL ;// Сравниваем с левым верхним углом окна координату символа по Y | |
jb .НЕВХОДИТ ; | |
Call ОКНО_АНИ ;// Читаем абсолютнуюю координату правой нижней стороны окна | |
cmp dl,al ;// Сравниваем | |
JAE .НЕВХОДИТ ;// Если Правый край окна оказался больше либо равен Координате символа рисовать ненада | |
;--------------; | |
.ВХОДИТ: | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕВХОДИТ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;--------------;// Проверка вхождения сммвола по X | |
Call ОКНО_АЛЕ ;// Получаем абсолютные координаты левого угла окна | |
Cmp Cl,AL ;// Сравниваем с левым краем окна координату символа по X | |
jb .НЕВХОДИТ ; | |
Call ОКНО_АПР ;// Читаем абсолютнуюю координату правой стороны окна | |
cmp cl,al ;// Сравниваем | |
JAE .НЕВХОДИТ ;// Если Правый край окна оказался больше либо равен Координате символа рисовать ненада | |
;--------------; | |
;--------------;// Проверка вхождения сммвола по Y | |
Call ОКНО_АВЕ ;// Получаем абсолютные координаты левого верхнего угла окна | |
Cmp dl,AL ;// Сравниваем с левым верхним углом окна координату символа по Y | |
jb .НЕВХОДИТ ; | |
Call ОКНО_АНИ ;// Читаем абсолютнуюю координату правой нижней стороны окна | |
cmp dl,al ;// Сравниваем | |
JAE .НЕВХОДИТ ;// Если Правый край окна оказался больше либо равен Координате символа рисовать ненада | |
;--------------; | |
.ВХОДИТ: | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕВХОДИТ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ВЫВОД_XY:;{ Вывод символа в окно Di-si Cl-X DL-Y AX-Символ и атрибуты | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov bx,Ax ;// Запоминаем Символ и атрибуты | |
;-----------------; | |
call ЭТО_ОКНО ; | |
jz .ДАЛЕЕ ;// Если элемент не являетсья окном то пропускам проверку пределов | |
;-----------------; | |
;-----------------; | |
call ОКНО_ПРЕДЕЛЫ ; | |
jz .ВЫХОД ;// ПРоверка предлов | |
;-----------------; | |
.ДАЛЕЕ: | |
;-----------------; | |
Call ЭЛЕ_РОДИТЕЛЬ ;// Переходим в родительский элемент | |
JZ .РИСОВАТЬ ;// Символ рисовать если больше родителей нету | |
;-----------------; | |
;-----------------; | |
mov ax,bx ; | |
call ОКНО_ВЫВОД_XY; | |
Jmp .ВЫХОД ; | |
;-----------------; | |
.РИСОВАТЬ: | |
;---------------------- | |
mov ax,Bx ;// Востанавливаем сивмол и атрибуты | |
call ЭКРАН_ВЫВОД_AX_CX_DX ;// Выводи символ на экран | |
;---------------------- | |
cmp cl,[МЫШ_КООX2]; | |
jnz .ВЫХОД; | |
cmp dl,[МЫШ_КООY2]; | |
jnz .ВЫХОД; | |
;---------------------- | |
call МЫШКА_ЩЕЛЧЕК ;// Установка активного элемента по щелчку мышки | |
jz .ВЫХОД ;// Если мышка не нажата то выход | |
;---------------------- | |
mov di,SI ;// Востанавливаем элемент источник печати символа | |
mov [МЫШ_ВЫДЕ2],di ;// Записываем дарес элемента по котрому нажата кнопка | |
;---------------------- | |
mov bx,1 ;// Устанавливаем Режим перемещени окна | |
mov [МЫШ_ТИППЕ],bx ;// ПО умолчанию режим перемесчения окна | |
;-------------------- | |
;-------------------- | |
call ОКНО_АЛЕ ;// Читаем Абсолютный Левый край окна | |
mov cx,[МЫШ_КООX2] ; | |
SUB cx,ax ; | |
mov [МЫШ_СМЕЩX],CX ;// Записываем смещеие ОТ левого края окна до координаты нажатия мышки | |
mov ax,cx ; | |
mov cx,КОД_ПАР_ТКУX ;// Установка текст курсор X | |
call ЭЛЕ_УСТ_ПАР ; | |
;-------------------- | |
;----------------------- | |
call ОКНО_АВЕ ;// Читаем Абсолюиный Верхний край окна | |
mov cx,[МЫШ_КООY2] ; | |
SUB cx,ax ; | |
mov [МЫШ_СМЕЩY],CX ; | |
mov ax,cx ; | |
mov cx,КОД_ПАР_ТКУY ;// Установка текст курсор Y | |
call ЭЛЕ_УСТ_ПАР ; | |
;----------------------- | |
;--------------------;// Вычисление правой кооррдинаты окна | |
call ОКНО_АПР ;// Читаем правый край окна | |
mov cx,ax ;// cx вычислили правый край окна | |
dec cx; | |
;----------------------- | |
;--------------------;// Вычисление нижней кооррдинаты окна | |
call ОКНО_АНИ ;// Читаем нижний край окна | |
mov Dx,ax ;// cx вычислили нижений край окна | |
dec dx; | |
;----------------------- | |
;----------------------- | |
cmp [МЫШ_КООX2],CX ;// Если мышка нажата по правому краю окна то | |
jnz .ДАЛЕЕ3 ; | |
add bx,1 ;// Если нажато по правому краю окна то BX=2; | |
;----------------------- | |
.ДАЛЕЕ3: | |
;----------------------- | |
cmp [МЫШ_КООY2],DX ;// Если нажато по нижнему краю окна | |
JNZ .ДАЛЕЕ4 ; | |
ADD BX,2 ;если нажата по нижнему краю то равно BX=3; либо 4 если по нижнему краю и правому краю | |
;----------------------- | |
.ДАЛЕЕ4: MOV [МЫШ_ТИППЕ],BX ;// Записываем типи дейтсвия над окощком | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov bx,Ax ;// Запоминаем Символ и атрибуты | |
;-----------------; | |
call ЭТО_ОКНО ; | |
jz .ДАЛЕЕ ;// Если элемент не являетсья окном то пропускам проверку пределов | |
;-----------------; | |
;-----------------; | |
call ОКНО_ПРЕДЕЛЫ ; | |
jz .ВЫХОД ;// ПРоверка предлов | |
;-----------------; | |
.ДАЛЕЕ: | |
;-----------------; | |
Call ЭЛЕ_РОДИТЕЛЬ ;// Переходим в родительский элемент | |
JZ .РИСОВАТЬ ;// Символ рисовать если больше родителей нету | |
;-----------------; | |
;-----------------; | |
mov ax,bx ; | |
call ОКНО_ВЫВОД_XY; | |
Jmp .ВЫХОД ; | |
;-----------------; | |
.РИСОВАТЬ: | |
;---------------------- | |
mov ax,Bx ;// Востанавливаем сивмол и атрибуты | |
call ЭКРАН_ВЫВОД_AX_CX_DX ;// Выводи символ на экран | |
;---------------------- | |
cmp cl,[МЫШ_КООX2]; | |
jnz .ВЫХОД; | |
cmp dl,[МЫШ_КООY2]; | |
jnz .ВЫХОД; | |
;---------------------- | |
call МЫШКА_ЩЕЛЧЕК ;// Установка активного элемента по щелчку мышки | |
jz .ВЫХОД ;// Если мышка не нажата то выход | |
;---------------------- | |
mov di,SI ;// Востанавливаем элемент источник печати символа | |
mov [МЫШ_ВЫДЕ2],di ;// Записываем дарес элемента по котрому нажата кнопка | |
;---------------------- | |
mov bx,1 ;// Устанавливаем Режим перемещени окна | |
mov [МЫШ_ТИППЕ],bx ;// ПО умолчанию режим перемесчения окна | |
;-------------------- | |
;-------------------- | |
call ОКНО_АЛЕ ;// Читаем Абсолютный Левый край окна | |
mov cx,[МЫШ_КООX2] ; | |
SUB cx,ax ; | |
mov [МЫШ_СМЕЩX],CX ;// Записываем смещеие ОТ левого края окна до координаты нажатия мышки | |
mov ax,cx ; | |
mov cx,КОД_ПАР_ТКУX ;// Установка текст курсор X | |
call ЭЛЕ_УСТ_ПАР ; | |
;-------------------- | |
;----------------------- | |
call ОКНО_АВЕ ;// Читаем Абсолюиный Верхний край окна | |
mov cx,[МЫШ_КООY2] ; | |
SUB cx,ax ; | |
mov [МЫШ_СМЕЩY],CX ; | |
mov ax,cx ; | |
mov cx,КОД_ПАР_ТКУY ;// Установка текст курсор Y | |
call ЭЛЕ_УСТ_ПАР ; | |
;----------------------- | |
;--------------------;// Вычисление правой кооррдинаты окна | |
call ОКНО_АПР ;// Читаем правый край окна | |
mov cx,ax ;// cx вычислили правый край окна | |
dec cx; | |
;----------------------- | |
;--------------------;// Вычисление нижней кооррдинаты окна | |
call ОКНО_АНИ ;// Читаем нижний край окна | |
mov Dx,ax ;// cx вычислили нижений край окна | |
dec dx; | |
;----------------------- | |
;----------------------- | |
cmp [МЫШ_КООX2],CX ;// Если мышка нажата по правому краю окна то | |
jnz .ДАЛЕЕ3 ; | |
add bx,1 ;// Если нажато по правому краю окна то BX=2; | |
;----------------------- | |
.ДАЛЕЕ3: | |
;----------------------- | |
cmp [МЫШ_КООY2],DX ;// Если нажато по нижнему краю окна | |
JNZ .ДАЛЕЕ4 ; | |
ADD BX,2 ;если нажата по нижнему краю то равно BX=3; либо 4 если по нижнему краю и правому краю | |
;----------------------- | |
.ДАЛЕЕ4: MOV [МЫШ_ТИППЕ],BX ;// Записываем типи дейтсвия над окощком | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov ebx,eAx ;// Запоминаем Символ и атрибуты | |
;-----------------; | |
call ЭТО_ОКНО ; | |
jz .ДАЛЕЕ ;// Если элемент не являетсья окном то пропускам проверку пределов | |
;-----------------; | |
;-----------------; | |
call ОКНО_ПРЕДЕЛЫ ; | |
jz .ВЫХОД ;// ПРоверка предлов | |
;-----------------; | |
.ДАЛЕЕ: | |
;-----------------; | |
Call ЭЛЕ_РОДИТЕЛЬ ;// Переходим в родительский элемент | |
JZ .РИСОВАТЬ ;// Символ рисовать если больше родителей нету | |
;-----------------; | |
;-----------------; | |
mov eax,ebx ; | |
call ОКНО_ВЫВОД_XY; | |
Jmp .ВЫХОД ; | |
;-----------------; | |
.РИСОВАТЬ: | |
;---------------------- | |
mov eax,eBx ;// Востанавливаем сивмол и атрибуты | |
call ЭКРАН_ВЫВОД_AX_CX_DX ;// Выводи символ на экран | |
;---------------------- | |
cmp cl,[МЫШ_КООX2]; | |
jnz .ВЫХОД; | |
cmp dl,[МЫШ_КООY2]; | |
jnz .ВЫХОД; | |
;---------------------- | |
call МЫШКА_ЩЕЛЧЕК ;// Установка активного элемента по щелчку мышки | |
jz .ВЫХОД ;// Если мышка не нажата то выход | |
;---------------------- | |
mov edi,eSI ;// Востанавливаем элемент источник печати символа | |
mov [МЫШ_ВЫДЕ2],edi ;// Записываем дарес элемента по котрому нажата кнопка | |
;---------------------- | |
mov ebx,1 ;// Устанавливаем Режим перемещени окна | |
mov [МЫШ_ТИППЕ],ebx ;// ПО умолчанию режим перемесчения окна | |
;-------------------- | |
;-------------------- | |
call ОКНО_АЛЕ ;// Читаем Абсолютный Левый край окна | |
mov ecx,[МЫШ_КООX2] ; | |
SUB ecx,eax ; | |
mov [МЫШ_СМЕЩX],eCX ;// Записываем смещеие ОТ левого края окна до координаты нажатия мышки | |
mov eax,ecx ; | |
mov ecx,КОД_ПАР_ТКУX ;// Установка текст курсор X | |
call ЭЛЕ_УСТ_ПАР ; | |
;-------------------- | |
;----------------------- | |
call ОКНО_АВЕ ;// Читаем Абсолюиный Верхний край окна | |
mov ecx,[МЫШ_КООY2] ; | |
SUB ecx,eax ; | |
mov [МЫШ_СМЕЩY],eCX ; | |
mov eax,ecx ; | |
mov ecx,КОД_ПАР_ТКУY ;// Установка текст курсор Y | |
call ЭЛЕ_УСТ_ПАР ; | |
;----------------------- | |
;--------------------;// Вычисление правой кооррдинаты окна | |
call ОКНО_АПР ;// Читаем правый край окна | |
mov ecx,eax ;// cx вычислили правый край окна | |
dec ecx; | |
;----------------------- | |
;--------------------;// Вычисление нижней кооррдинаты окна | |
call ОКНО_АНИ ;// Читаем нижний край окна | |
mov eDx,eax ;// cx вычислили нижений край окна | |
dec edx; | |
;----------------------- | |
;----------------------- | |
cmp [МЫШ_КООX2],eCX ;// Если мышка нажата по правому краю окна то | |
jnz .ДАЛЕЕ3 ; | |
add ebx,1 ;// Если нажато по правому краю окна то BX=2; | |
;----------------------- | |
.ДАЛЕЕ3: | |
;----------------------- | |
cmp [МЫШ_КООY2],eDX ;// Если нажато по нижнему краю окна | |
JNZ .ДАЛЕЕ4 ; | |
ADD eBX,2 ;если нажата по нижнему краю то равно BX=3; либо 4 если по нижнему краю и правому краю | |
;----------------------- | |
.ДАЛЕЕ4: MOV [МЫШ_ТИППЕ],eBX ;// Записываем типи дейтсвия над окощком | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ОЧИСТКА :;{ Очищает участок экрана для рисования окна DI-SI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;------------------ Читаем XY | |
Call ОКНО_АЛЕ ;// Возвращает Координаты по X абсолютные AX для окна DI X1 | |
MOV CL,AL ; | |
;------------------ | |
Call ОКНО_АВЕ ;// Возвращает Координаты по Y абсолютные AX для окна DI Y1 | |
MOV DL,AL ; | |
;------------------ Расчитываем X2 | |
Call ОКНО_АПР ;// Возвращает ширину окна в регистре AX для окна DI | |
MOV CH,AL ; | |
;------------------ Расчитываем Y2 | |
Call ОКНО_АНИ ;// Возвращает Высоту окна в регистре AX для окна DI | |
MOV DH,AL ; | |
;------------------ Читаем атрибуты | |
Call ОКНО_АТР ;// Возвращает атрибуты окна в регистре AH для окна DI; | |
mov AH,AL ; | |
mov AL,' ' ;// Заноим пробел для затирания экрана | |
;------------------ | |
mov bl,cl ;// Запоминаем координату X1 | |
.ЦИКЛ: ;------------------ | |
cmp dl,dh ;// ПРоверяем не достигли ли нижней границы окна | |
JAE .ВЫХОД ;// Если достигли то очистка закончена | |
CMP CL,CH ;// | |
JAE .СЛЕДСТРО ;// Если X>=X2 то переходим на след строку для очистки | |
mov si,di; | |
call ОКНО_ВЫВОД_XY; | |
INC CL ;// В противном случае сдвигаемся в право X:=X+1; | |
JMP .ЦИКЛ ; | |
.СЛЕДСТРО: | |
MOV CL,Bl ;// Перемещаемся к левому краю | |
INC DL ;// Увеличиваем координату по Y | |
jmp .ЦИКЛ ; | |
;----------------- | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;------------------ Читаем XY | |
Call ОКНО_АЛЕ ;// Возвращает Координаты по X абсолютные AX для окна DI X1 | |
MOV CL,AL ; | |
;------------------ | |
Call ОКНО_АВЕ ;// Возвращает Координаты по Y абсолютные AX для окна DI Y1 | |
MOV DL,AL ; | |
;------------------ Расчитываем X2 | |
Call ОКНО_АПР ;// Возвращает ширину окна в регистре AX для окна DI | |
MOV CH,AL ; | |
;------------------ Расчитываем Y2 | |
Call ОКНО_АНИ ;// Возвращает Высоту окна в регистре AX для окна DI | |
MOV DH,AL ; | |
;------------------ Читаем атрибуты | |
Call ОКНО_АТР ;// Возвращает атрибуты окна в регистре AH для окна DI; | |
mov AH,AL ; | |
mov AL,' ' ;// Заноим пробел для затирания экрана | |
;------------------ | |
mov bl,cl ;// Запоминаем координату X1 | |
.ЦИКЛ: ;------------------ | |
cmp dl,dh ;// ПРоверяем не достигли ли нижней границы окна | |
JAE .ВЫХОД ;// Если достигли то очистка закончена | |
CMP CL,CH ;// | |
JAE .СЛЕДСТРО ;// Если X>=X2 то переходим на след строку для очистки | |
mov si,di; | |
call ОКНО_ВЫВОД_XY; | |
INC CL ;// В противном случае сдвигаемся в право X:=X+1; | |
JMP .ЦИКЛ ; | |
.СЛЕДСТРО: | |
MOV CL,Bl ;// Перемещаемся к левому краю | |
INC DL ;// Увеличиваем координату по Y | |
jmp .ЦИКЛ ; | |
;----------------- | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov ecx,0; | |
mov edx,0; | |
;------------------ Читаем XY | |
Call ОКНО_АЛЕ ;// Возвращает Координаты по X абсолютные AX для окна DI X1 | |
MOV CL,AL ; | |
;------------------ | |
Call ОКНО_АВЕ ;// Возвращает Координаты по Y абсолютные AX для окна DI Y1 | |
MOV DL,AL ; | |
;------------------ Расчитываем X2 | |
Call ОКНО_АПР ;// Возвращает ширину окна в регистре AX для окна DI | |
MOV CH,AL ; | |
;------------------ Расчитываем Y2 | |
Call ОКНО_АНИ ;// Возвращает Высоту окна в регистре AX для окна DI | |
MOV DH,AL ; | |
;------------------ Читаем атрибуты | |
Call ОКНО_АТР ;// Возвращает атрибуты окна в регистре AH для окна DI; | |
mov AH,AL ; | |
mov AL,' ' ;// Заноим пробел для затирания экрана | |
;------------------ | |
mov bl,cl ;// Запоминаем координату X1 | |
.ЦИКЛ: ;------------------ | |
cmp dl,dh ;// ПРоверяем не достигли ли нижней границы окна | |
JAE .ВЫХОД ;// Если достигли то очистка закончена | |
CMP CL,CH ;// | |
JAE .СЛЕДСТРО ;// Если X>=X2 то переходим на след строку для очистки | |
mov esi,edi; | |
call ОКНО_ВЫВОД_XY; | |
INC CL ;// В противном случае сдвигаемся в право X:=X+1; | |
JMP .ЦИКЛ ; | |
.СЛЕДСТРО: | |
MOV CL,Bl ;// Перемещаемся к левому краю | |
INC DL ;// Увеличиваем координату по Y | |
jmp .ЦИКЛ ; | |
;----------------- | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ВЫВОД_XY2:;{ Вывод символа в окно Di-si Cl-X DL-Y AX-Символ и атрибуты | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov bx,Ax ;// Запоминаем Символ и атрибуты | |
;-----------------; | |
call ЭТО_ОКНО ;// Программа стала меньше | |
jz .ДАЛЕЕ ;// Если элемент не являетсья окном то пропускам проверку пределов | |
;-----------------; | |
;---------------- | |
call ОКНО_ПРЕДЕЛЫ ; | |
jz .ВЫХОД ;// ПРоверка предлов | |
;---------------- | |
.ДАЛЕЕ: | |
;---------------- | |
Call ЭЛЕ_РОДИТЕЛЬ ;// Переходим в родительский элемент | |
JZ .РИСОВАТЬ ;// Символ рисовать если больше родителей нету | |
;---------------- | |
;---------------- | |
mov ax,bx ; | |
call ОКНО_ВЫВОД_XY2; | |
Jmp .ВЫХОД ; | |
;---------------- | |
.РИСОВАТЬ: | |
;---------------------- | |
mov ax,Bx ;// Востанавливаем сивмол и атрибуты | |
call ЭКРАН_ВЫВОД_AX_CX_DX ;// Выводи символ на экран | |
;---------------------- | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov bx,Ax ;// Запоминаем Символ и атрибуты | |
;-----------------; | |
call ЭТО_ОКНО ;// Программа стала меньше | |
jz .ДАЛЕЕ ;// Если элемент не являетсья окном то пропускам проверку пределов | |
;-----------------; | |
;---------------- | |
call ОКНО_ПРЕДЕЛЫ ; | |
jz .ВЫХОД ;// ПРоверка предлов | |
;---------------- | |
.ДАЛЕЕ: | |
;---------------- | |
Call ЭЛЕ_РОДИТЕЛЬ ;// Переходим в родительский элемент | |
JZ .РИСОВАТЬ ;// Символ рисовать если больше родителей нету | |
;---------------- | |
;---------------- | |
mov ax,bx ; | |
call ОКНО_ВЫВОД_XY2; | |
Jmp .ВЫХОД ; | |
;---------------- | |
.РИСОВАТЬ: | |
;---------------------- | |
mov ax,Bx ;// Востанавливаем сивмол и атрибуты | |
call ЭКРАН_ВЫВОД_AX_CX_DX ;// Выводи символ на экран | |
;---------------------- | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov ebx,eAx ;// Запоминаем Символ и атрибуты | |
;-----------------; | |
call ЭТО_ОКНО ;// Программа стала меньше | |
jz .ДАЛЕЕ ;// Если элемент не являетсья окном то пропускам проверку пределов | |
;-----------------; | |
;---------------- | |
call ОКНО_ПРЕДЕЛЫ ; | |
jz .ВЫХОД ;// ПРоверка предлов | |
;---------------- | |
.ДАЛЕЕ: | |
;---------------- | |
Call ЭЛЕ_РОДИТЕЛЬ ;// Переходим в родительский элемент | |
JZ .РИСОВАТЬ ;// Символ рисовать если больше родителей нету | |
;---------------- | |
;---------------- | |
mov eax,ebx ; | |
call ОКНО_ВЫВОД_XY2; | |
Jmp .ВЫХОД ; | |
;---------------- | |
.РИСОВАТЬ: | |
;---------------------- | |
mov eax,eBx ;// Востанавливаем сивмол и атрибуты | |
call ЭКРАН_ВЫВОД_AX_CX_DX ;// Выводи символ на экран | |
;---------------------- | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_РАМКА :;{ Очищает участок экрана для рисования окна DI-SI | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;-----------------; // Проверканужно ли рисовать рамку | |
Call ОКНО_РАМ ; // Возвращает Координаты по X абсолютные AX для окна DI X1 | |
Jz .ВЫХОД ; // Если Параметр РАМКА=0 То рисовать ненада | |
;-----------------; | |
;-----------------; Читаем XY | |
Call ОКНО_АЛЕ ;// Возвращает Координаты по X абсолютные AX для окна DI X1 | |
MOV CL,AL ; | |
;------------------ | |
Call ОКНО_АВЕ ;// Возвращает Координаты по Y абсолютные AX для окна DI Y1 | |
MOV DL,AL ; | |
;------------------ Расчитываем X2 | |
Call ОКНО_АПР ;// Возвращает ширину окна в регистре AX для окна DI | |
MOV CH,AL ; | |
;------------------ Расчитываем Y2 | |
Call ОКНО_АНИ ;// Возвращает Высоту окна в регистре AX для окна DI | |
MOV DH,AL ; | |
;------------------ Читаем атрибуты | |
Call ОКНО_АТР ;// Возвращает атрибуты окна в регистре AH для окна DI; | |
mov AH,AL ; | |
mov AL,' ' ;// Заноим пробел для затирания экрана | |
;------------------ | |
mov bl,cl ;// Запоминаем координату X1 | |
pushad | |
mov al,218; | |
call ОКНО_ВЫВОД_XY2; | |
popad; | |
pushad | |
mov al,192; | |
mov dl,dh; | |
dec dl; | |
call ОКНО_ВЫВОД_XY2; | |
popad; | |
pushad | |
mov cl,ch; | |
dec cl; | |
mov al,191; | |
call ОКНО_ВЫВОД_XY2; | |
popad | |
pushad | |
mov cl,ch; | |
dec cl; | |
mov dl,dh; | |
dec dl; | |
mov al,217; | |
call ОКНО_ВЫВОД_XY2; | |
popad | |
pushad | |
mov al,196; | |
inc cl; | |
dec ch; | |
.ЦИКЛ: | |
cmp cl,ch; | |
jae .КЦИКЛ; | |
call ОКНО_ВЫВОД_XY2; | |
push dx; | |
mov dl,dh; | |
dec dl; | |
call ОКНО_ВЫВОД_XY2; | |
pop dx; | |
inc cl; | |
jmp .ЦИКЛ; | |
.КЦИКЛ: | |
popad; | |
mov al,179; | |
inc dl; | |
dec dh; | |
.ЦИКЛ2: | |
cmp dl,dh; | |
jae .КЦИКЛ2; | |
call ОКНО_ВЫВОД_XY2; | |
push cx; | |
mov cl,ch; | |
dec cl; | |
call ОКНО_ВЫВОД_XY2; | |
pop cx; | |
inc dl; | |
jmp .ЦИКЛ2; | |
.КЦИКЛ2: | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;-----------------; // Проверканужно ли рисовать рамку | |
Call ОКНО_РАМ ; // Возвращает Координаты по X абсолютные AX для окна DI X1 | |
Jz .ВЫХОД ; // Если Параметр РАМКА=0 То рисовать ненада | |
;-----------------; | |
;-----------------; Читаем XY | |
Call ОКНО_АЛЕ ;// Возвращает Координаты по X абсолютные AX для окна DI X1 | |
MOV CL,AL ; | |
;------------------ | |
Call ОКНО_АВЕ ;// Возвращает Координаты по Y абсолютные AX для окна DI Y1 | |
MOV DL,AL ; | |
;------------------ Расчитываем X2 | |
Call ОКНО_АПР ;// Возвращает ширину окна в регистре AX для окна DI | |
MOV CH,AL ; | |
;------------------ Расчитываем Y2 | |
Call ОКНО_АНИ ;// Возвращает Высоту окна в регистре AX для окна DI | |
MOV DH,AL ; | |
;------------------ Читаем атрибуты | |
Call ОКНО_АТР ;// Возвращает атрибуты окна в регистре AH для окна DI; | |
mov AH,AL ; | |
mov AL,' ' ;// Заноим пробел для затирания экрана | |
;------------------ | |
mov bl,cl ;// Запоминаем координату X1 | |
pushad | |
mov al,218; | |
call ОКНО_ВЫВОД_XY2; | |
popad; | |
pushad | |
mov al,192; | |
mov dl,dh; | |
dec dl; | |
call ОКНО_ВЫВОД_XY2; | |
popad; | |
pushad | |
mov cl,ch; | |
dec cl; | |
mov al,191; | |
call ОКНО_ВЫВОД_XY2; | |
popad | |
pushad | |
mov cl,ch; | |
dec cl; | |
mov dl,dh; | |
dec dl; | |
mov al,217; | |
call ОКНО_ВЫВОД_XY2; | |
popad | |
pushad | |
mov al,196; | |
inc cl; | |
dec ch; | |
.ЦИКЛ: | |
cmp cl,ch; | |
jae .КЦИКЛ; | |
call ОКНО_ВЫВОД_XY2; | |
push dx; | |
mov dl,dh; | |
dec dl; | |
call ОКНО_ВЫВОД_XY2; | |
pop dx; | |
inc cl; | |
jmp .ЦИКЛ; | |
.КЦИКЛ: | |
popad; | |
mov al,179; | |
inc dl; | |
dec dh; | |
.ЦИКЛ2: | |
cmp dl,dh; | |
jae .КЦИКЛ2; | |
call ОКНО_ВЫВОД_XY2; | |
push cx; | |
mov cl,ch; | |
dec cl; | |
call ОКНО_ВЫВОД_XY2; | |
pop cx; | |
inc dl; | |
jmp .ЦИКЛ2; | |
.КЦИКЛ2: | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;-----------------; // Проверканужно ли рисовать рамку | |
Call ОКНО_РАМ ; // Возвращает Координаты по X абсолютные AX для окна DI X1 | |
Jz .ВЫХОД ; // Если Параметр РАМКА=0 То рисовать ненада | |
;-----------------; | |
;-----------------; Читаем XY | |
Call ОКНО_АЛЕ ;// Возвращает Координаты по X абсолютные AX для окна DI X1 | |
MOV CL,AL ; | |
;------------------ | |
Call ОКНО_АВЕ ;// Возвращает Координаты по Y абсолютные AX для окна DI Y1 | |
MOV DL,AL ; | |
;------------------ Расчитываем X2 | |
Call ОКНО_АПР ;// Возвращает ширину окна в регистре AX для окна DI | |
MOV CH,AL ; | |
;------------------ Расчитываем Y2 | |
Call ОКНО_АНИ ;// Возвращает Высоту окна в регистре AX для окна DI | |
MOV DH,AL ; | |
;------------------ Читаем атрибуты | |
Call ОКНО_АТР ;// Возвращает атрибуты окна в регистре AH для окна DI; | |
mov AH,AL ; | |
mov AL,' ' ;// Заноим пробел для затирания экрана | |
;------------------ | |
mov bl,cl ;// Запоминаем координату X1 | |
pushad | |
mov al,218; | |
call ОКНО_ВЫВОД_XY2; | |
popad; | |
pushad | |
mov al,192; | |
mov dl,dh; | |
dec dl; | |
call ОКНО_ВЫВОД_XY2; | |
popad; | |
pushad | |
mov cl,ch; | |
dec cl; | |
mov al,191; | |
call ОКНО_ВЫВОД_XY2; | |
popad | |
pushad | |
mov cl,ch; | |
dec cl; | |
mov dl,dh; | |
dec dl; | |
mov al,217; | |
call ОКНО_ВЫВОД_XY2; | |
popad | |
pushad | |
mov al,196; | |
inc cl; | |
dec ch; | |
.ЦИКЛ: | |
cmp cl,ch; | |
jae .КЦИКЛ; | |
call ОКНО_ВЫВОД_XY2; | |
push edx; | |
mov dl,dh; | |
dec dl; | |
call ОКНО_ВЫВОД_XY2; | |
pop edx; | |
inc cl; | |
jmp .ЦИКЛ; | |
.КЦИКЛ: | |
popad; | |
mov al,179; | |
inc dl; | |
dec dh; | |
.ЦИКЛ2: | |
cmp dl,dh; | |
jae .КЦИКЛ2; | |
call ОКНО_ВЫВОД_XY2; | |
push cx; | |
mov cl,ch; | |
dec cl; | |
call ОКНО_ВЫВОД_XY2; | |
pop cx; | |
inc dl; | |
jmp .ЦИКЛ2; | |
.КЦИКЛ2: | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ОКНО_ВЫВОД_ТЕ:;{ Выводит текста окна di | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call СБРОС_КЕША | |
;---------------; | |
mov cx,КОД_ПАР_КССК ;// Указываем количество символов в строке с курсором равно 0 | |
mov ax,0 ; | |
Call ЭЛЕ_УСТ_ПАР ; | |
;---------------; | |
mov cx,КОД_ПАР_КОСТ ;// Указываем количество символов в строке с курсором равно 0 | |
mov ax,0 ; | |
Call ЭЛЕ_УСТ_ПАР ; | |
;---------------; | |
mov cx,КОД_ПАР_ПАВС ;// Указываем предположительный адрес для вставки символа | |
call ОКНО_ТЕК ;// Читаем адрес текста | |
Call ЭЛЕ_УСТ_ПАР ; | |
test ax,ax ; | |
jz .ВЫХОД ;// если текст отсуствует тто выход | |
;------------------ | |
Mov si,ax ;// Сохраняем адрес выводимого текста в регистр SI | |
mov cx,0 ;// Координата в тексте X | |
mov dx,0 ;// Координата в тексте Y | |
.ЦИКЛ: | |
;------------------- | |
call ОКНО_АКY ; | |
cmp dx,ax ; | |
jae .ДАЛЕЕ2 ; | |
mov bx,cx ;// Сохраняем содержимое регистра CX - X | |
mov ax,cx ; | |
mov cx,КОД_ПАР_ДПСТ; | |
call ЭЛЕ_УСТ_ПАР ; | |
mov cx,bx ;// Востанавливаем содержимое CX | |
;------------------- | |
.ДАЛЕЕ2: | |
;----------------; | |
call ОКНО_АКY ;// Получаем абсолютные координаты курсора по Y в тексте | |
cmp dx,ax ; | |
jnz .ДАЛЕЕ ; | |
call ОКНО_АКX ;// Получаем абсолютные координаты курсора по X в тексте | |
cmp cx,ax ; | |
ja .ДАЛЕЕ ; | |
mov bx,cx ;// Сохраняем значение регистра CX | |
mov ax,cx ;// Сохраняем правый край строки в месте где расположен курсор | |
mov cx,КОД_ПАР_КССК ; | |
Call ЭЛЕ_УСТ_ПАР ; | |
mov ax,si ; | |
mov cx,КОД_ПАР_ПАВС ;// сохраняем адрес символа в тексте окна где расположен правый крвй строки в месте где располен край строки | |
Call ЭЛЕ_УСТ_ПАР ; | |
mov cx,bx ;// Востанавливаем значение регистра CX | |
;----------------; | |
.ДАЛЕЕ: | |
;----------------; | |
mov al,[si] ;// Читаем символ из текста | |
test al,al ;// Проверяем на звершение текста 0 | |
jz .ВЫХОД ; | |
;----------------; | |
;----------------; | |
cmp al,13 ;// ПРоверка на перевод каретки перевод строки | |
jZ .ENTER ;// Если первод строки то переходим к .ENTER | |
;----------------; | |
call .OUTCHA ;// Вывод символа | |
inc cx ;// Сдвигаем символ в право | |
inc si ; | |
jmp .ЦИКЛ ; | |
;----------------; | |
.ENTER: | |
;----------------; | |
inc si ; | |
mov cx,0 ; | |
inc Dx ; | |
;----------------; Запоминаем количество строк в тексте | |
mov bx,cx ; Сохраняем значение регистра CX | |
mov cx,КОД_ПАР_КОСТ ; | |
mov ax,dx ; | |
call ЭЛЕ_УСТ_ПАР ; | |
mov cx,bx ; Востанавливаем значение CX | |
JMP .ЦИКЛ ; | |
;----------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
.OUTCHA: | |
pushad; | |
mov si,ax ;// Сохраняем выводимый символ d BL | |
call ОКНО_ТСX;// Читаем смещение внтури текста X | |
cmp cx,ax ;// проверяем что выводимый символ больше либо равно смещения в тексте | |
jb .ВЫХОД2 ;// Если меньше смещения то выход | |
mov bx,ax ;// Запоминаем смещение внтури текста | |
call ОКНО_ШИР;// Читаем ширину окна | |
add ax,bx ;// складываем смещенеи внтури текста и ширину окна | |
cmp cx,ax ;// Сравниаем с X | |
JA .ВЫХОД2 ;// если оказалася больше то выход | |
call ОКНО_ТСY;// Читаем смещение внтури текста Y | |
cmp dx,ax ;// проверяем что выводимый символ больше либо равно смещения в тексте | |
jb .ВЫХОД2 ;// Если меньше смещения то выход | |
mov bx,ax ;// Запоминаем смещение внтури текста | |
call ОКНО_ВЫС;// Читаем Dscjnt jryf окна | |
add ax,bx ;// складываем смещенеи внтури текста и Высотук окна | |
cmp dx,ax ;// Сравниаем с Y | |
JA .ВЫХОД2 ;// если оказалася больше то выход | |
call ОКНО_ТСX;// Вычитаем из координаты символа смещене внутри текста | |
SUB cx,AX ; | |
call ОКНО_АЛЕ;// прибавляем абсолютную координату окнга слева | |
add cx,ax; | |
call ОКНО_ТСY;// Вычитаем из координаты символа смещене внутри текста | |
SUB dx,AX ; | |
call ОКНО_АВЕ;// прибавляем абсолютную координату окнга слева | |
add Dx,ax; | |
call ОКНО_АТР ;// читем атрибуты окна | |
mov bl,al ; | |
mov ax,si ;// Востанавлвиаем печатаемый символ | |
mov ah,bl ; | |
mov si,di; | |
call ОКНО_ВЫВОД_XY;// Выводим символ в окно | |
.ВЫХОД2: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call СБРОС_КЕША | |
;---------------; | |
mov cx,КОД_ПАР_КССК ;// Указываем количество символов в строке с курсором равно 0 | |
mov ax,0 ; | |
Call ЭЛЕ_УСТ_ПАР ; | |
;---------------; | |
mov cx,КОД_ПАР_КОСТ ;// Указываем количество символов в строке с курсором равно 0 | |
mov ax,0 ; | |
Call ЭЛЕ_УСТ_ПАР ; | |
;---------------; | |
mov cx,КОД_ПАР_ПАВС ;// Указываем предположительный адрес для вставки символа | |
call ОКНО_ТЕК ;// Читаем адрес текста | |
Call ЭЛЕ_УСТ_ПАР ; | |
test ax,ax ; | |
jz .ВЫХОД ;// если текст отсуствует тто выход | |
;------------------ | |
Mov si,ax ;// Сохраняем адрес выводимого текста в регистр SI | |
mov cx,0 ;// Координата в тексте X | |
mov dx,0 ;// Координата в тексте Y | |
.ЦИКЛ: | |
;------------------- | |
call ОКНО_АКY ; | |
cmp dx,ax ; | |
jae .ДАЛЕЕ2 ; | |
mov bx,cx ;// Сохраняем содержимое регистра CX - X | |
mov ax,cx ; | |
mov cx,КОД_ПАР_ДПСТ ; | |
call ЭЛЕ_УСТ_ПАР ; | |
mov cx,bx ;// Востанавливаем содержимое CX | |
;------------------- | |
.ДАЛЕЕ2: | |
;----------------; | |
call ОКНО_АКY ;// Получаем абсолютные координаты курсора по Y в тексте | |
cmp dx,ax ; | |
jnz .ДАЛЕЕ ; | |
call ОКНО_АКX ;// Получаем абсолютные координаты курсора по X в тексте | |
cmp cx,ax ; | |
ja .ДАЛЕЕ ; | |
mov bx,cx ;// Сохраняем значение регистра CX | |
mov ax,cx ;// Сохраняем правый край строки в месте где расположен курсор | |
mov cx,КОД_ПАР_КССК ; | |
Call ЭЛЕ_УСТ_ПАР ; | |
mov ax,si ; | |
mov cx,КОД_ПАР_ПАВС ;// сохраняем адрес символа в тексте окна где расположен правый крвй строки в месте где располен край строки | |
Call ЭЛЕ_УСТ_ПАР ; | |
mov cx,bx ;// Востанавливаем значение регистра CX | |
;----------------; | |
.ДАЛЕЕ: | |
;----------------; | |
mov al,[si] ;// Читаем символ из текста | |
test al,al ;// Проверяем на звершение текста 0 | |
jz .ВЫХОД ; | |
;----------------; | |
;----------------; | |
cmp al,13 ;// ПРоверка на перевод каретки перевод строки | |
jZ .ENTER ;// Если первод строки то переходим к .ENTER | |
;----------------; | |
call .OUTCHA ;// Вывод символа | |
inc cx ;// Сдвигаем символ в право | |
inc si ; | |
jmp .ЦИКЛ ; | |
;----------------; | |
.ENTER: | |
;----------------; | |
inc si ; | |
mov cx,0 ; | |
inc Dx ; | |
;----------------; Запоминаем количество строк в тексте | |
mov bx,cx ; Сохраняем значение регистра CX | |
mov cx,КОД_ПАР_КОСТ ; | |
mov ax,dx ; | |
call ЭЛЕ_УСТ_ПАР ; | |
mov cx,bx ; Востанавливаем значение CX | |
JMP .ЦИКЛ ; | |
;----------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
.OUTCHA: | |
pushad; | |
mov si,ax ;// Сохраняем выводимый символ d BL | |
call ОКНО_ТСX;// Читаем смещение внтури текста X | |
cmp cx,ax ;// проверяем что выводимый символ больше либо равно смещения в тексте | |
jb .ВЫХОД2 ;// Если меньше смещения то выход | |
mov bx,ax ;// Запоминаем смещение внтури текста | |
call ОКНО_ШИР;// Читаем ширину окна | |
add ax,bx ;// складываем смещенеи внтури текста и ширину окна | |
cmp cx,ax ;// Сравниаем с X | |
JA .ВЫХОД2 ;// если оказалася больше то выход | |
call ОКНО_ТСY;// Читаем смещение внтури текста Y | |
cmp dx,ax ;// проверяем что выводимый символ больше либо равно смещения в тексте | |
jb .ВЫХОД2 ;// Если меньше смещения то выход | |
mov bx,ax ;// Запоминаем смещение внтури текста | |
call ОКНО_ВЫС;// Читаем Dscjnt jryf окна | |
add ax,bx ;// складываем смещенеи внтури текста и Высотук окна | |
cmp dx,ax ;// Сравниаем с Y | |
JA .ВЫХОД2 ;// если оказалася больше то выход | |
call ОКНО_ТСX;// Вычитаем из координаты символа смещене внутри текста | |
SUB cx,AX ; | |
call ОКНО_АЛЕ;// прибавляем абсолютную координату окнга слева | |
add cx,ax; | |
call ОКНО_ТСY;// Вычитаем из координаты символа смещене внутри текста | |
SUB dx,AX ; | |
call ОКНО_АВЕ;// прибавляем абсолютную координату окнга слева | |
add Dx,ax; | |
call ОКНО_АТР ;// читем атрибуты окна | |
mov bl,al ; | |
mov ax,si ;// Востанавлвиаем печатаемый символ | |
mov ah,bl ; | |
mov si,di; | |
call ОКНО_ВЫВОД_XY;// Выводим символ в окно | |
.ВЫХОД2: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call СБРОС_КЕША | |
;---------------; | |
mov ecx,КОД_ПАР_КССК ;// Указываем количество символов в строке с курсором равно 0 | |
mov eax,0 ; | |
Call ЭЛЕ_УСТ_ПАР ; | |
;---------------; | |
mov ecx,КОД_ПАР_КОСТ ;// Указываем количество символов в строке с курсором равно 0 | |
mov eax,0 ; | |
Call ЭЛЕ_УСТ_ПАР ; | |
;---------------; | |
mov ecx,КОД_ПАР_ПАВС ;// Указываем предположительный адрес для вставки символа | |
call ОКНО_ТЕК ;// Читаем адрес текста | |
Call ЭЛЕ_УСТ_ПАР ; | |
test eax,eax ; | |
jz .ВЫХОД ;// если текст отсуствует тто выход | |
;------------------ | |
Mov esi,eax ;// Сохраняем адрес выводимого текста в регистр SI | |
mov ecx,0 ;// Координата в тексте X | |
mov edx,0 ;// Координата в тексте Y | |
.ЦИКЛ: | |
;------------------- | |
call ОКНО_АКY ; | |
cmp edx,eax ; | |
jae .ДАЛЕЕ2 ; | |
mov ebx,ecx ;// Сохраняем содержимое регистра CX - X | |
mov eax,ecx ; | |
mov ecx,КОД_ПАР_ДПСТ ; | |
call ЭЛЕ_УСТ_ПАР ; | |
mov ecx,ebx ;// Востанавливаем содержимое CX | |
;------------------- | |
.ДАЛЕЕ2: | |
;----------------; | |
call ОКНО_АКY ;// Получаем абсолютные координаты курсора по Y в тексте | |
cmp edx,eax ; | |
jnz .ДАЛЕЕ ; | |
call ОКНО_АКX ;// Получаем абсолютные координаты курсора по X в тексте | |
cmp ecx,eax ; | |
ja .ДАЛЕЕ ; | |
mov ebx,ecx ;// Сохраняем значение регистра CX | |
mov eax,ecx ;// Сохраняем правый край строки в месте где расположен курсор | |
mov ecx,КОД_ПАР_КССК ; | |
Call ЭЛЕ_УСТ_ПАР ; | |
mov eax,esi ; | |
mov ecx,КОД_ПАР_ПАВС ;// сохраняем адрес символа в тексте окна где расположен правый крвй строки в месте где располен край строки | |
Call ЭЛЕ_УСТ_ПАР ; | |
mov ecx,ebx ;// Востанавливаем значение регистра CX | |
;----------------; | |
.ДАЛЕЕ: | |
;----------------; | |
mov al,[esi] ;// Читаем символ из текста | |
test al,al ;// Проверяем на звершение текста 0 | |
jz .ВЫХОД ; | |
;----------------; | |
;----------------; | |
cmp al,13 ;// ПРоверка на перевод каретки перевод строки | |
jZ .ENTER ;// Если первод строки то переходим к .ENTER | |
;----------------; | |
call .OUTCHA ;// Вывод символа | |
inc ecx ;// Сдвигаем символ в право | |
inc esi ; | |
jmp .ЦИКЛ ; | |
;----------------; | |
.ENTER: | |
;----------------; | |
inc esi ; | |
mov ecx,0 ; | |
inc eDx ; | |
;----------------; Запоминаем количество строк в тексте | |
mov ebx,ecx ; Сохраняем значение регистра CX | |
mov ecx,КОД_ПАР_КОСТ ; | |
mov eax,edx ; | |
call ЭЛЕ_УСТ_ПАР ; | |
mov ecx,ebx ; Востанавливаем значение CX | |
JMP .ЦИКЛ ; | |
;----------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
.OUTCHA: | |
pushad; | |
mov esi,eax ;// Сохраняем выводимый символ d BL | |
call ОКНО_ТСX;// Читаем смещение внтури текста X | |
cmp ecx,eax ;// проверяем что выводимый символ больше либо равно смещения в тексте | |
jb .ВЫХОД2 ;// Если меньше смещения то выход | |
mov ebx,eax ;// Запоминаем смещение внтури текста | |
call ОКНО_ШИР;// Читаем ширину окна | |
add eax,ebx ;// складываем смещенеи внтури текста и ширину окна | |
cmp ecx,eax ;// Сравниаем с X | |
JA .ВЫХОД2 ;// если оказалася больше то выход | |
call ОКНО_ТСY;// Читаем смещение внтури текста Y | |
cmp edx,eax ;// проверяем что выводимый символ больше либо равно смещения в тексте | |
jb .ВЫХОД2 ;// Если меньше смещения то выход | |
mov ebx,eax ;// Запоминаем смещение внтури текста | |
call ОКНО_ВЫС;// Читаем Dscjnt jryf окна | |
add eax,ebx ;// складываем смещенеи внтури текста и Высотук окна | |
cmp edx,eax ;// Сравниаем с Y | |
JA .ВЫХОД2 ;// если оказалася больше то выход | |
call ОКНО_ТСX;// Вычитаем из координаты символа смещене внутри текста | |
SUB ecx,eAX ; | |
call ОКНО_АЛЕ;// прибавляем абсолютную координату окнга слева | |
add ecx,eax; | |
call ОКНО_ТСY;// Вычитаем из координаты символа смещене внутри текста | |
SUB edx,eAX ; | |
call ОКНО_АВЕ;// прибавляем абсолютную координату окнга слева | |
add eDx,eax; | |
call ОКНО_АТР ;// читем атрибуты окна | |
mov bl,al ; | |
mov eax,esi ;// Востанавлвиаем печатаемый символ | |
mov ah,bl ; | |
mov esi,edi; | |
call ОКНО_ВЫВОД_XY;// Выводим символ в окно | |
.ВЫХОД2: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ВЫВОД_КУ:;{ РИсует курсор Окна Di | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
cmp di,[МЫШ_ВЫДЕ2];// сравниваем с активным окном | |
jnz .ВЫХОД ;// Если окно не активно рисовать курсор ненадаь | |
;-------------------- | |
Call ОКНО_ТКX ;// Вычисление абсолютных координат курсора на экране | |
mov CX,ax ; | |
call ОКНО_АЛЕ ; | |
add cx,ax ; | |
;-------------------- | |
;-------------------- | |
Call ОКНО_ТКY ;// Вычисление абсолюной коорднаты Y на экране | |
mov DX,ax ; | |
call ОКНО_АВЕ ; | |
add dx,ax ; | |
;-------------------- | |
call ОКНО_АКУ | |
mov ah,al; | |
mov al,0; | |
mov si,di; | |
Call ОКНО_ВЫВОД_XY ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad | |
cmp di,[МЫШ_ВЫДЕ2];// сравниваем с активным окном | |
jnz .ВЫХОД ;// Если окно не активно рисовать курсор ненадаь | |
;-------------------- | |
Call ОКНО_ТКX ;// Вычисление абсолютных координат курсора на экране | |
mov CX,ax ; | |
call ОКНО_АЛЕ ; | |
add cx,ax ; | |
;-------------------- | |
;-------------------- | |
Call ОКНО_ТКY ;// Вычисление абсолюной коорднаты Y на экране | |
mov DX,ax ; | |
call ОКНО_АВЕ ; | |
add dx,ax ; | |
;-------------------- | |
call ОКНО_АКУ | |
mov ah,al; | |
mov al,0; | |
mov si,di; | |
Call ОКНО_ВЫВОД_XY ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad | |
cmp edi,[МЫШ_ВЫДЕ2];// сравниваем с активным окном | |
jnz .ВЫХОД ;// Если окно не активно рисовать курсор ненадаь | |
;-------------------- | |
Call ОКНО_ТКX ;// Вычисление абсолютных координат курсора на экране | |
mov eCX,eax ; | |
call ОКНО_АЛЕ ; | |
add ecx,eax ; | |
;-------------------- | |
;-------------------- | |
Call ОКНО_ТКY ;// Вычисление абсолюной коорднаты Y на экране | |
mov eDX,eax ; | |
call ОКНО_АВЕ ; | |
add edx,eax ; | |
;-------------------- | |
call ОКНО_АКУ | |
mov ah,al; | |
mov al,0; | |
mov esi,edi; | |
Call ОКНО_ВЫВОД_XY ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_РИСОВАТЬ:;{ Пытаеться нарисовать Элемент DI как окно | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call ЭТО_ОКНО ; // все понятно вот эта фун не работает толком | |
jz .ВЫХОД ; | |
call ОКНО_ОЧИСТКА ;// ПОдгатавливает место под рисование текста окна | |
Call ОКНО_РАМКА ; | |
call ОКНО_ВЫВОД_ТЕ;// Выводит текст окна di | |
call ОКНО_ВЫВОД_КУ;// Выводит курсора окна di | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;call ОТЛАДЧИК1 ; // Ну хотя бы нашел место где проблемма | |
call ЭТО_ОКНО ; // все понятно вот эта фун не работает толком | |
jz .ВЫХОД ; | |
call ОКНО_ОЧИСТКА ;// ПОдгатавливает место под рисование текста окна | |
Call ОКНО_РАМКА ; | |
call ОКНО_ВЫВОД_ТЕ;// Выводит текст окна di | |
call ОКНО_ВЫВОД_КУ;// Выводит курсора окна di | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;call ОТЛАДЧИК1 ; // Ну хотя бы нашел место где проблемма | |
call ЭТО_ОКНО ; // все понятно вот эта фун не работает толком | |
jz .ВЫХОД ; | |
call ОКНО_ОЧИСТКА ;// ПОдгатавливает место под рисование текста окна | |
Call ОКНО_РАМКА ; | |
call ОКНО_ВЫВОД_ТЕ;// Выводит текст окна di | |
call ОКНО_ВЫВОД_КУ;// Выводит курсора окна di | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_РИСО_ВСЕ:;{ РИсует окно DI и все вложеные окна | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
test di,di ; | |
jz .ВЫХОД ; | |
call ОКНО_РИСОВАТЬ; // РИсуем коно DI | |
Call ЭЛЕ_ВЛО ; // Перемещаемся к первому вложеному элемнту | |
.ЦИКЛ: test ax,ax ; // ПРоверка на NIL | |
jz .КЦИКЛ ; // Если окно не существует закончить рисование | |
mov di,ax ; // Если 0 Выход | |
Call ОКНО_РИСО_ВСЕ; // Рисуем окна вложеные в этот элемент рекурсия | |
Call ЭЛЕ_СЛЕ ; // Переходим к следующему окну | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
test di,di ; | |
jz .ВЫХОД ; | |
call ОКНО_РИСОВАТЬ; // РИсуем коно DI | |
Call ЭЛЕ_ВЛО ; // Перемещаемся к первому вложеному элемнту | |
.ЦИКЛ: test ax,ax ; // ПРоверка на NIL | |
jz .КЦИКЛ ; // Если окно не существует закончить рисование | |
mov di,ax ; // Если 0 Выход | |
Call ОКНО_РИСО_ВСЕ; // Рисуем окна вложеные в этот элемент рекурсия | |
Call ЭЛЕ_СЛЕ ; // Переходим к следующему окну | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
test edi,edi ; | |
jz .ВЫХОД ; | |
call ОКНО_РИСОВАТЬ; // РИсуем коно DI | |
Call ЭЛЕ_ВЛО ; // Перемещаемся к первому вложеному элемнту | |
.ЦИКЛ: test eax,eax ; // ПРоверка на NIL | |
jz .КЦИКЛ ; // Если окно не существует закончить рисование | |
mov edi,eax ; // Если 0 Выход | |
Call ОКНО_РИСО_ВСЕ; // Рисуем окна вложеные в этот элемент рекурсия | |
Call ЭЛЕ_СЛЕ ; // Переходим к следующему окну | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_ПЕРЕМЕЩЕ:;{ Функция для перемещения окон на экране | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;------------------- | |
call МЫШКА_НАЖАТА ; | |
JZ .ВЫХОД ;// Если мышка не нажата перемещение не осуществляеться | |
;------------------- | |
;------------------- | |
mov ax,[МЫШ_ВЫДЕ1]; ПРоверяем наличае элемента по котрому была нажата кнопка прошлый раз | |
test ax,ax ; | |
JZ .ВЫХОД ; | |
mov ax,[МЫШ_ВЫДЕ2]; ПРоверяем наличае элемента по котрому была нажата кнопка щас | |
test ax,ax ; | |
JZ .ВЫХОД ; | |
mov ax,[МЫШ_ВЫДЕ1];// ПРоверяем что реч идет об одном и том же элементе что и в прошлый рас нажатия кнопки | |
cmp ax,[МЫШ_ВЫДЕ2]; | |
JNZ .ВЫХОД ; Готово осталося порядок навести | |
;------------------- | |
mov DI,[МЫШ_ВЫДЕ2] ;// Проверяем что элемент являеться имиено окошком | |
call ЭТО_ОКНО ; | |
JZ .ВЫХОД ; | |
mov ax,[МЫШ_ТИППЕ];// СМотрим тип перемещения | |
cmp ax,1 ; | |
JZ .ОКПЕР ;// Просто перемещение окна | |
cmp ax,2 ; | |
JZ .ОКШИР ;// Изменение ширины окна | |
cmp ax,3 ; | |
JZ .ОКВЫС ;// Изменение ВЫСОТЫ окна | |
cmp ax,4 ; | |
JZ .ОКРАЗ ;// Изменеине размера окна | |
Jmp .ВЫХОД ; | |
.ОКПЕР:;{ НЕпосредственно перемещение | |
call ОКНО_АЛЕ ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
add ax,[МЫШ_СМЕЩX] ; | |
cmp [МЫШ_КООX2],ax ;// Сравниваем с координатами мышки координату окна по Х | |
JA .XБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .XМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ДАЛЕЕ ; | |
.XБОЛ: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ЛЕВ ;// Читаем локальную координату окна | |
inc ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ЛЕВО;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Устанавливаем значения параметра окна левый край | |
JMP .ДАЛЕЕ ; | |
.XМЕН: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ЛЕВ ;// Читаем локальную координату окна | |
test ax,ax ;// Ниже нудя нельзя | |
jz .ДАЛЕЕ ; | |
dec ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ЛЕВО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Устанавлвиаем значение параметра окна | |
JMP .ДАЛЕЕ ; | |
.ДАЛЕЕ: | |
call ОКНО_АВЕ ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
add ax,[МЫШ_СМЕЩY] ; | |
cmp [МЫШ_КООY2],ax ;// Сравниваем с координатами мышки координату окна по Х | |
JA .YБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .YМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ВЫХОД ; | |
.YБОЛ: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЕР ;// Читаем локальную координату окна | |
inc ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЕРХ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР;// Элемент сет параметр | |
JMP .ВЫХОД ; | |
.YМЕН: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЕР ;// Читаем локальную координату окна | |
test ax,ax ;// Ниже нудя нельзя | |
jz .ВЫХОД | |
dec ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЕРХ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР;// Элемент сет параметр | |
JMP .ВЫХОД ; | |
;} | |
.ОКШИР:;{ изменение шинрины окна | |
push dx | |
call ОКНО_АПР ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
dec ax; | |
mov dx,[МЫШ_КООX2]; | |
sub dx,ax; | |
cmp [МЫШ_КООX2],ax;// Сравниваем с координатами мышки координату окна по Х | |
JA .ПРXБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .ПРXМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ПРДАЛЕЕ ;// Ох ё ничего себе навзвания ))) | |
.ПРXБОЛ: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ШИР ;// Читаем локальную координату окна | |
add ax,dx ;// и увеличиваем её | |
mov CX,КОД_ПАР_ШИРИ ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ПРДАЛЕЕ ; | |
.ПРXМЕН: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ШИР ;// Читаем локальную координату окна | |
cmp ax,1 ;// Ниже нудя нельзя | |
jbe .ПРДАЛЕЕ ; | |
sub ax,dx ;// и увеличиваем её | |
mov CX,КОД_ПАР_ШИРИ ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ПРДАЛЕЕ ; | |
.ПРДАЛЕЕ:pop dx | |
JMP .ВЫХОД ; | |
;} | |
.ОКВЫС:;{ изменение Высота окна | |
call ОКНО_АНИ ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
dec ax; | |
cmp [МЫШ_КООY2],ax;// Сравниваем с координатами мышки координату окна по Х | |
JA .ВЫYБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .ВЫYМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ВЫYДАЛЕЕ ; | |
.ВЫYБОЛ: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЫС ;// Читаем локальную координату окна | |
inc ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЫСО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ВЫYДАЛЕЕ ; | |
.ВЫYМЕН: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЫС ;// Читаем локальную координату окна | |
cmp ax,1 ;// Ниже нудя нельзя | |
jbe .ВЫYДАЛЕЕ ; | |
dec ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЫСО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ВЫYДАЛЕЕ ; | |
.ВЫYДАЛЕЕ: | |
JMP .ВЫХОД ; | |
;} | |
.ОКРАЗ:;{ Изменение разммера окошка | |
call ОКНО_АПР ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
dec ax; | |
cmp [МЫШ_КООX2],ax;// Сравниваем с координатами мышки координату окна по Х | |
JA .РАXBOL ;// Если координата мышки оказалася больше координаты окна | |
JB .РАXMEN ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .РАXДАЛЕЕ ; | |
.РАXBOL:;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ШИР ;// Читаем локальную координату окна | |
inc ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ШИРИ ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .РАXДАЛЕЕ ; | |
.РАXMEN: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ШИР ;// Читаем локальную координату окна | |
cmp ax,1 ;// Ниже нудя нельзя | |
jbe .РАXДАЛЕЕ | |
dec ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ШИРИ ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .РАXДАЛЕЕ ; | |
.РАXДАЛЕЕ: | |
call ОКНО_АНИ ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
dec ax; | |
cmp [МЫШ_КООY2],ax;// Сравниваем с координатами мышки координату окна по Х | |
JA .РАYБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .РАYМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ВЫХОД ; | |
.РАYБОЛ:;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЫС ;// Читаем локальную координату окна | |
inc ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЫСО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ВЫХОД ; | |
.РАYМЕН:;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЫС ;// Читаем локальную координату окна | |
cmp ax,1 ;// Ниже нудя нельзя | |
jbe .ВЫХОД | |
dec ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЫСО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ВЫХОД ; | |
;} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;------------------- | |
call МЫШКА_НАЖАТА ; | |
JZ .ВЫХОД ;// Если мышка не нажата перемещение не осуществляеться | |
;------------------- | |
;------------------- | |
mov ax,[МЫШ_ВЫДЕ1]; ПРоверяем наличае элемента по котрому была нажата кнопка прошлый раз | |
test ax,ax ; | |
JZ .ВЫХОД ; | |
mov ax,[МЫШ_ВЫДЕ2]; ПРоверяем наличае элемента по котрому была нажата кнопка щас | |
test ax,ax ; | |
JZ .ВЫХОД ; | |
mov ax,[МЫШ_ВЫДЕ1];// ПРоверяем что реч идет об одном и том же элементе что и в прошлый рас нажатия кнопки | |
cmp ax,[МЫШ_ВЫДЕ2]; | |
JNZ .ВЫХОД ; Готово осталося порядок навести | |
;------------------- | |
mov DI,[МЫШ_ВЫДЕ2] ;// Проверяем что элемент являеться имиено окошком | |
call ЭТО_ОКНО ; | |
JZ .ВЫХОД ; | |
mov ax,[МЫШ_ТИППЕ];// СМотрим тип перемещения | |
cmp ax,1 ; | |
JZ .ОКПЕР ;// Просто перемещение окна | |
cmp ax,2 ; | |
JZ .ОКШИР ;// Изменение ширины окна | |
cmp ax,3 ; | |
JZ .ОКВЫС ;// Изменение ВЫСОТЫ окна | |
cmp ax,4 ; | |
JZ .ОКРАЗ ;// Изменеине размера окна | |
Jmp .ВЫХОД ; | |
.ОКПЕР:;{ НЕпосредственно перемещение | |
call ОКНО_АЛЕ ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
add ax,[МЫШ_СМЕЩX] ; | |
cmp [МЫШ_КООX2],ax ;// Сравниваем с координатами мышки координату окна по Х | |
JA .XБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .XМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ДАЛЕЕ ; | |
.XБОЛ: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ЛЕВ ;// Читаем локальную координату окна | |
inc ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ЛЕВО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Устанавливаем значения параметра окна левый край | |
JMP .ДАЛЕЕ ; | |
.XМЕН: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ЛЕВ ;// Читаем локальную координату окна | |
test ax,ax ;// Ниже нудя нельзя | |
jz .ДАЛЕЕ ; | |
dec ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ЛЕВО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Устанавлвиаем значение параметра окна | |
JMP .ДАЛЕЕ ; | |
.ДАЛЕЕ: | |
call ОКНО_АВЕ ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
add ax,[МЫШ_СМЕЩY] ; | |
cmp [МЫШ_КООY2],ax ;// Сравниваем с координатами мышки координату окна по Х | |
JA .YБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .YМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ВЫХОД ; | |
.YБОЛ: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЕР ;// Читаем локальную координату окна | |
inc ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЕРХ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР;// Элемент сет параметр | |
JMP .ВЫХОД ; | |
.YМЕН: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЕР ;// Читаем локальную координату окна | |
test ax,ax ;// Ниже нудя нельзя | |
jz .ВЫХОД | |
dec ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЕРХ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР;// Элемент сет параметр | |
JMP .ВЫХОД ; | |
;} | |
.ОКШИР:;{ изменение шинрины окна | |
call ОКНО_АПР ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
dec ax; | |
cmp [МЫШ_КООX2],ax;// Сравниваем с координатами мышки координату окна по Х | |
JA .ПРXБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .ПРXМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ПРДАЛЕЕ ;// Ох ё ничего себе навзвания ))) | |
.ПРXБОЛ: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ШИР ;// Читаем локальную координату окна | |
inc ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ШИРИ ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ПРДАЛЕЕ ; | |
.ПРXМЕН: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ШИР ;// Читаем локальную координату окна | |
cmp ax,1 ;// Ниже нудя нельзя | |
jbe .ПРДАЛЕЕ ; | |
dec ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ШИРИ ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ПРДАЛЕЕ ; | |
.ПРДАЛЕЕ: | |
JMP .ВЫХОД ; | |
;} | |
.ОКВЫС:;{ изменение Высота окна | |
call ОКНО_АНИ ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
dec ax; | |
cmp [МЫШ_КООY2],ax;// Сравниваем с координатами мышки координату окна по Х | |
JA .ВЫYБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .ВЫYМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ВЫYДАЛЕЕ ; | |
.ВЫYБОЛ: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЫС ;// Читаем локальную координату окна | |
inc ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЫСО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ВЫYДАЛЕЕ ; | |
.ВЫYМЕН: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЫС ;// Читаем локальную координату окна | |
cmp ax,1 ;// Ниже нудя нельзя | |
jbe .ВЫYДАЛЕЕ ; | |
dec ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЫСО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ВЫYДАЛЕЕ ; | |
.ВЫYДАЛЕЕ: | |
JMP .ВЫХОД ; | |
;} | |
.ОКРАЗ:;{ Изменение разммера окошка | |
call ОКНО_АПР ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
dec ax; | |
cmp [МЫШ_КООX2],ax;// Сравниваем с координатами мышки координату окна по Х | |
JA .РАXBOL ;// Если координата мышки оказалася больше координаты окна | |
JB .РАXMEN ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .РАXДАЛЕЕ ; | |
.РАXBOL:;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ШИР ;// Читаем локальную координату окна | |
inc ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ШИРИ ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .РАXДАЛЕЕ ; | |
.РАXMEN: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ШИР ;// Читаем локальную координату окна | |
cmp ax,1 ;// Ниже нудя нельзя | |
jbe .РАXДАЛЕЕ | |
dec ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ШИРИ ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .РАXДАЛЕЕ ; | |
.РАXДАЛЕЕ: | |
call ОКНО_АНИ ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
dec ax; | |
cmp [МЫШ_КООY2],ax;// Сравниваем с координатами мышки координату окна по Х | |
JA .РАYБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .РАYМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ВЫХОД ; | |
.РАYБОЛ:;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЫС ;// Читаем локальную координату окна | |
inc ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЫСО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ВЫХОД ; | |
.РАYМЕН:;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЫС ;// Читаем локальную координату окна | |
cmp ax,1 ;// Ниже нудя нельзя | |
jbe .ВЫХОД | |
dec ax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЫСО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ВЫХОД ; | |
;} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;------------------- | |
call МЫШКА_НАЖАТА ; | |
JZ .ВЫХОД ;// Если мышка не нажата перемещение не осуществляеться | |
;------------------- | |
;------------------- | |
mov eax,[МЫШ_ВЫДЕ1]; ПРоверяем наличае элемента по котрому была нажата кнопка прошлый раз | |
test ax,ax ; | |
JZ .ВЫХОД ; | |
mov eax,[МЫШ_ВЫДЕ2]; ПРоверяем наличае элемента по котрому была нажата кнопка щас | |
test eax,eax ; | |
JZ .ВЫХОД ; | |
mov eax,[МЫШ_ВЫДЕ1];// ПРоверяем что реч идет об одном и том же элементе что и в прошлый рас нажатия кнопки | |
cmp eax,[МЫШ_ВЫДЕ2]; | |
JNZ .ВЫХОД ; Готово осталося порядок навести | |
;------------------- | |
mov eDI,[МЫШ_ВЫДЕ2] ;// Проверяем что элемент являеться имиено окошком | |
call ЭТО_ОКНО ; | |
JZ .ВЫХОД ; | |
mov Eax,[МЫШ_ТИППЕ];// СМотрим тип перемещения | |
cmp Eax,1 ; | |
JZ .ОКПЕР ;// Просто перемещение окна | |
cmp Eax,2 ; | |
JZ .ОКШИР ;// Изменение ширины окна | |
cmp Eax,3 ; | |
JZ .ОКВЫС ;// Изменение ВЫСОТЫ окна | |
cmp Eax,4 ; | |
JZ .ОКРАЗ ;// Изменеине размера окна | |
Jmp .ВЫХОД ; | |
.ОКПЕР:;{ НЕпосредственно перемещение | |
push edx | |
mov edx,0; | |
call ОКНО_АЛЕ ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
add eax,[МЫШ_СМЕЩX] ; | |
mov edx,[МЫШ_КООX2]; | |
sub edx,eax; | |
cmp [МЫШ_КООX2],eax ;// Сравниваем с координатами мышки координату окна по Х | |
JA .XБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .XМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ДАЛЕЕ ; | |
.XБОЛ: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ЛЕВ ;// Читаем локальную координату окна | |
add ax, dx ; | |
;inc eax ;// и увеличиваем её | |
mov eCX,КОД_ПАР_ЛЕВО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Устанавливаем значения параметра окна левый край | |
JMP .ДАЛЕЕ ; | |
.XМЕН: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ЛЕВ ;// Читаем локальную координату окна | |
test eax,eax ;// Ниже нудя нельзя | |
jz .ДАЛЕЕ ; | |
dec eax ;// и увеличиваем её | |
mov eCX,КОД_ПАР_ЛЕВО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Устанавлвиаем значение параметра окна | |
JMP .ДАЛЕЕ ; | |
.ДАЛЕЕ: | |
pop edx; | |
call ОКНО_АВЕ ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
add eax,[МЫШ_СМЕЩY] ; | |
cmp [МЫШ_КООY2],eax ;// Сравниваем с координатами мышки координату окна по Х | |
JA .YБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .YМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ВЫХОД ; | |
.YБОЛ: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЕР ;// Читаем локальную координату окна | |
inc eax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЕРХ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР;// Элемент сет параметр | |
JMP .ВЫХОД ; | |
.YМЕН: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЕР ;// Читаем локальную координату окна | |
test eax,eax ;// Ниже нудя нельзя | |
jz .ВЫХОД | |
dec eax ;// и увеличиваем её | |
mov eCX,КОД_ПАР_ВЕРХ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР;// Элемент сет параметр | |
JMP .ВЫХОД ; | |
;} | |
.ОКШИР:;{ изменение шинрины окна | |
push edx | |
call ОКНО_АПР ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
dec eax; | |
mov edx,[МЫШ_КООX2]; | |
sub edx,eax; | |
cmp [МЫШ_КООX2],eax;// Сравниваем с координатами мышки координату окна по Х | |
JA .ПРXБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .ПРXМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ПРДАЛЕЕ ;// Ох ё ничего себе навзвания ))) | |
.ПРXБОЛ: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ШИР ;// Читаем локальную координату окна | |
add eax,edx ;// и увеличиваем её | |
mov eCX,КОД_ПАР_ШИРИ ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ПРДАЛЕЕ ; | |
.ПРXМЕН: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ШИР ;// Читаем локальную координату окна | |
cmp eax,1 ;// Ниже нудя нельзя | |
jbe .ПРДАЛЕЕ ; | |
inc eax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ШИРИ ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ПРДАЛЕЕ ; | |
.ПРДАЛЕЕ:pop edx | |
JMP .ВЫХОД ; | |
;} | |
.ОКВЫС:;{ изменение Высота окна | |
call ОКНО_АНИ ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
dec eax; | |
cmp [МЫШ_КООY2],eax;// Сравниваем с координатами мышки координату окна по Х | |
JA .ВЫYБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .ВЫYМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ВЫYДАЛЕЕ ; | |
.ВЫYБОЛ: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЫС ;// Читаем локальную координату окна | |
inc eax ;// и увеличиваем её | |
mov eCX,КОД_ПАР_ВЫСО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ВЫYДАЛЕЕ ; | |
.ВЫYМЕН: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЫС ;// Читаем локальную координату окна | |
cmp eax,1 ;// Ниже нудя нельзя | |
jbe .ВЫYДАЛЕЕ ; | |
dec eax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЫСО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ВЫYДАЛЕЕ ; | |
.ВЫYДАЛЕЕ: | |
JMP .ВЫХОД ; | |
;} | |
.ОКРАЗ:;{ Изменение разммера окошка | |
call ОКНО_АПР ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
dec eax; | |
cmp [МЫШ_КООX2],eax;// Сравниваем с координатами мышки координату окна по Х | |
JA .РАXBOL ;// Если координата мышки оказалася больше координаты окна | |
JB .РАXMEN ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .РАXДАЛЕЕ ; | |
.РАXBOL:;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ШИР ;// Читаем локальную координату окна | |
inc eax ;// и увеличиваем её | |
mov eCX,КОД_ПАР_ШИРИ ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .РАXДАЛЕЕ ; | |
.РАXMEN: ;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ШИР ;// Читаем локальную координату окна | |
cmp eax,1 ;// Ниже нудя нельзя | |
jbe .РАXДАЛЕЕ | |
dec eax ;// и увеличиваем её | |
mov eCX,КОД_ПАР_ШИРИ ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .РАXДАЛЕЕ ; | |
.РАXДАЛЕЕ: | |
call ОКНО_АНИ ;// Читаем абсолютные координаты по Х окна котрое нужно подвинуть | |
dec eax; | |
cmp [МЫШ_КООY2],eax;// Сравниваем с координатами мышки координату окна по Х | |
JA .РАYБОЛ ;// Если координата мышки оказалася больше координаты окна | |
JB .РАYМЕН ;// Если координата мышки оказалася Меньше координаты окна | |
JMP .ВЫХОД ; | |
.РАYБОЛ:;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЫС ;// Читаем локальную координату окна | |
inc eax ;// и увеличиваем её | |
mov eCX,КОД_ПАР_ВЫСО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ВЫХОД ; | |
.РАYМЕН:;// Если координата мышки оказалася больше двигаем окно по х к мышке | |
CAll ОКНО_ВЫС ;// Читаем локальную координату окна | |
cmp eax,1 ;// Ниже нудя нельзя | |
jbe .ВЫХОД | |
dec eax ;// и увеличиваем её | |
mov CX,КОД_ПАР_ВЫСО ;// и сохраняем значение | |
call ЭЛЕ_УСТ_ПАР ;// Элемент сет параметр | |
JMP .ВЫХОД ; | |
;} | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ОКНО_СОЗДАТЬ :;{ Создает окно с координами Cx-x Ch-Y Ширина Dl - Высота dh с именем SI внутри элемента DI Текст окна BX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;--------------------; | |
; // В SI Имя окна | |
; // В BX значение окна | |
mov al,5 ; // Создаем элемент с именем SI В Элементе DI в AL тип элемента ТИП_ОКНО | |
mov ah,1 ; // Заполняем поле функция чтор означает что элемент участвует в поиске | |
call ЭЛЕ_СОЗДАТЬ ; // Создаем элемент получаем его адрес в DI | |
;--------------------; // SI Теперь свободно для использования | |
;--------------------; | |
mov SI,ПАР_ТЕКС ; // Создаем параметро Смещене текста по Y | |
mov AL,ТИП_СТРО ; // Тип элемента текст то есть строка заканчивающаяся нулем | |
mov ah,1 ; // Участвует в поиске | |
; // В BX Содержиться адрес текста окна | |
call .ПАР_СОЗДАТЬ ; // | |
;--------------------; // Регистр BX Свободен для использолвания | |
;-----------------------; | |
mov SI,ПАР_ЛЕВО ; // Создаем параметро имя=ЛЕВО Координата окна по X | |
mov AL,ТИП_ЧИСЛ ; // Указываем ТИп Число | |
mov ah,1 ; // Указываем что это функция | |
xor bx,bx ; | |
mov Bl,Cl ; // Указываем значение | |
call .ПАР_СОЗДАТЬ ; // Создание эелемнта внутри элемента DI | |
;-----------------------; | |
mov SI,ПАР_ВЕРХ ; // Создаем параметро ВЕРХ | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
xor bx,bx ; | |
mov Bl,Ch ; // | |
call .ПАР_СОЗДАТЬ ; | |
;----------------------- | |
mov SI,ПАР_ШИРИ ; // | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
xor bx,bx ; | |
mov Bl,dl ; // | |
call .ПАР_СОЗДАТЬ ; | |
;----------------------- | |
mov SI,ПАР_ВЫСО ; // | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
xor bx,bx ; | |
mov Bl,Dh ; // | |
call .ПАР_СОЗДАТЬ ; | |
;--------------------; | |
; Смещение окна внутри текста мыже через окно видим только кусочек текста | |
;--------------------; | |
mov SI,ПАР_ТСМX ; // Создаем параметро Смещене текста по X | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
mov Bx,0 ; // | |
call .ПАР_СОЗДАТЬ ; // | |
;----------------------- | |
mov SI,ПАР_ТСМY ; // Создаем параметро Смещене текста по Y | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
mov Bx,0 ; // | |
call .ПАР_СОЗДАТЬ ; // | |
;--------------------; | |
; Координаты курсора внутри текста | |
;----------------------- | |
mov SI,ПАР_ТКУX ; // Создаем параметро координаат курсора по X в окне | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
mov Bx,0 ; // | |
call .ПАР_СОЗДАТЬ ; // | |
;----------------------- | |
mov SI,ПАР_ТКУY ; // Создаем параметро координаат курсора по Y в окне | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
mov Bx,0 ; // | |
call .ПАР_СОЗДАТЬ ; // | |
;--------------------- | |
; Параметр Атрибуты Цвет Фона и текста окна и Цвет фона и цвет текста курсора | |
;--------------------; | |
mov SI,ПАР_АТРИ ;// Атрибуты окна | |
mov AL,ТИП_ЧИСЛ ;// | |
mov ah,1 ;// | |
mov Bx,01001111b ;// | |
call .ПАР_СОЗДАТЬ ;// | |
;--------------------- | |
mov SI,ПАР_АКУР ;// Атрибуты курсора | |
mov AL,ТИП_ЧИСЛ ;// | |
mov ah,1 ;// | |
mov Bx,01111111b ;// | |
call .ПАР_СОЗДАТЬ ;// | |
;--------------------; | |
; Дополнительные параметры для работы с текстом | |
;------------------------------------------ | |
mov SI,ПАР_ДПСТ ;// Создаем параметро Длина последней строки до курсора по Y длина строки над курсором Количества символов в встроке с курсором | |
mov AL,ТИП_ЧИСЛ ;// Указываем ТИп Параметр | |
mov ah,1 ;// Указываем что это функция | |
mov Bx,0 ;// Указываем значение | |
call .ПАР_СОЗДАТЬ ; | |
;------------------------------------------ | |
mov SI,ПАР_КССК ;// Создаем параметро Количества символов в встроке с курсором | |
mov AL,ТИП_ЧИСЛ ;// Указываем ТИп Параметр | |
mov ah,1 ;// Указываем что это функция | |
mov Bx,0 ;// Указываем значение | |
call .ПАР_СОЗДАТЬ ; | |
;------------------------------------------ | |
mov SI,ПАР_ПАВС ;// Создаем параметро Предположительный адрес для вставки символа | |
mov AL,ТИП_ЧИСЛ ;// Указываем ТИп Параметр | |
mov ah,1 ;// Указываем что это функция | |
mov Bx,0 ;// Указываем значение | |
call .ПАР_СОЗДАТЬ ; | |
;------------------------------------------ | |
mov SI,ПАР_КОСТ ;// Создаем параметро Количество строк в тексте | |
mov AL,ТИП_ЧИСЛ ;// Указываем ТИп Параметр | |
mov ah,1 ;// Указываем что это функция | |
mov Bx,0 ;// Указываем значение | |
call .ПАР_СОЗДАТЬ ; | |
;------------------------------------------- | |
;----------------------; | |
mov SI,ПАР_ТИП ; // Создаем параметро Смещене текста по Y | |
mov AL,ТИП_ЧИСЛ ; // Тип элемента текст то есть строка заканчивающаяся нулем | |
mov ah,1 ; // Участвует в поиске | |
mov bx,1 ; // В BX Содержиться адрес текста окна | |
call .ПАР_СОЗДАТЬ ; // | |
;----------------------; // Регистр BX Свободен для использолвания | |
;----------------------; | |
mov SI,ПАР_БУФЕ ; // Создаем параметро Последних нажатых символов | |
mov AL,ТИП_СТРО ; // Тип элемента текст то есть строка заканчивающаяся нулем | |
mov ah,1 ; // Участвует в поиске | |
Call СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_16_БАЙТ; | |
call .ПАР_СОЗДАТЬ ; // | |
;----------------------; // Регистр BX Свободен для использолвания | |
pop si ; | |
Push di ; | |
popad ; | |
ret ; | |
.ПАР_СОЗДАТЬ:; ДЛя создания параметров | |
push di ; | |
call ЭЛЕ_СОЗДАТЬ ; | |
pop di ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;--------------------; | |
; // В SI Имя окна | |
; // В BX значение окна | |
mov al,5 ; // Создаем элемент с именем SI В Элементе DI в AL тип элемента ТИП_ОКНО | |
mov ah,1 ; // Заполняем поле функция чтор означает что элемент участвует в поиске | |
call ЭЛЕ_СОЗДАТЬ ; // Создаем элемент получаем его адрес в DI | |
;--------------------; // SI Теперь свободно для использования | |
;--------------------; | |
mov SI,ПАР_ТЕКС ; // Создаем параметро Смещене текста по Y | |
mov AL,ТИП_СТРО ; // Тип элемента текст то есть строка заканчивающаяся нулем | |
mov ah,1 ; // Участвует в поиске | |
; // В BX Содержиться адрес текста окна | |
call .ПАР_СОЗДАТЬ ; // | |
;--------------------; // Регистр BX Свободен для использолвания | |
;-----------------------; | |
mov SI,ПАР_ЛЕВО ; // Создаем параметро имя=ЛЕВО Координата окна по X | |
mov AL,ТИП_ЧИСЛ ; // Указываем ТИп Число | |
mov ah,1 ; // Указываем что это функция | |
xor bx,bx ; | |
mov Bl,Cl ; // Указываем значение | |
call .ПАР_СОЗДАТЬ ; // Создание эелемнта внутри элемента DI | |
;-----------------------; | |
mov SI,ПАР_ВЕРХ ; // Создаем параметро ВЕРХ | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
xor bx,bx ; | |
mov Bl,Ch ; // | |
call .ПАР_СОЗДАТЬ ; | |
;----------------------- | |
mov SI,ПАР_ШИРИ ; // | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
xor bx,bx ; | |
mov Bl,dl ; // | |
call .ПАР_СОЗДАТЬ ; | |
;----------------------- | |
mov SI,ПАР_ВЫСО ; // | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
xor bx,bx ; | |
mov Bl,Dh ; // | |
call .ПАР_СОЗДАТЬ ; | |
;--------------------; | |
; Смещение окна внутри текста мыже через окно видим только кусочек текста | |
;--------------------; | |
mov SI,ПАР_ТСМX ; // Создаем параметро Смещене текста по X | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
mov Bx,0 ; // | |
call .ПАР_СОЗДАТЬ ; // | |
;----------------------- | |
mov SI,ПАР_ТСМY ; // Создаем параметро Смещене текста по Y | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
mov Bx,0 ; // | |
call .ПАР_СОЗДАТЬ ; // | |
;--------------------; | |
; Координаты курсора внутри текста | |
;----------------------- | |
mov SI,ПАР_ТКУX ; // Создаем параметро координаат курсора по X в окне | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
mov Bx,0 ; // | |
call .ПАР_СОЗДАТЬ ; // | |
;----------------------- | |
mov SI,ПАР_ТКУY ; // Создаем параметро координаат курсора по Y в окне | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
mov Bx,0 ; // | |
call .ПАР_СОЗДАТЬ ; // | |
;--------------------- | |
; Параметр Атрибуты Цвет Фона и текста окна и Цвет фона и цвет текста курсора | |
;--------------------; | |
mov SI,ПАР_АТРИ ;// Атрибуты окна | |
mov AL,ТИП_ЧИСЛ ;// | |
mov ah,1 ;// | |
mov Bx,01001111b ;// | |
call .ПАР_СОЗДАТЬ ;// | |
;--------------------- | |
mov SI,ПАР_АКУР ;// Атрибуты курсора | |
mov AL,ТИП_ЧИСЛ ;// | |
mov ah,1 ;// | |
mov Bx,01111111b ;// | |
call .ПАР_СОЗДАТЬ ;// | |
;--------------------; | |
; Дополнительные параметры для работы с текстом | |
;------------------------------------------ | |
mov SI,ПАР_ДПСТ ;// Создаем параметро Длина последней строки до курсора по Y длина строки над курсором Количества символов в встроке с курсором | |
mov AL,ТИП_ЧИСЛ ;// Указываем ТИп Параметр | |
mov ah,1 ;// Указываем что это функция | |
mov Bx,0 ;// Указываем значение | |
call .ПАР_СОЗДАТЬ ; | |
;------------------------------------------ | |
mov SI,ПАР_КССК ;// Создаем параметро Количества символов в встроке с курсором | |
mov AL,ТИП_ЧИСЛ ;// Указываем ТИп Параметр | |
mov ah,1 ;// Указываем что это функция | |
mov Bx,0 ;// Указываем значение | |
call .ПАР_СОЗДАТЬ ; | |
;------------------------------------------ | |
mov SI,ПАР_ПАВС ;// Создаем параметро Предположительный адрес для вставки символа | |
mov AL,ТИП_ЧИСЛ ;// Указываем ТИп Параметр | |
mov ah,1 ;// Указываем что это функция | |
mov Bx,0 ;// Указываем значение | |
call .ПАР_СОЗДАТЬ ; | |
;------------------------------------------ | |
mov SI,ПАР_КОСТ ;// Создаем параметро Количество строк в тексте | |
mov AL,ТИП_ЧИСЛ ;// Указываем ТИп Параметр | |
mov ah,1 ;// Указываем что это функция | |
mov Bx,0 ;// Указываем значение | |
call .ПАР_СОЗДАТЬ ; | |
;------------------------------------------- | |
;----------------------; | |
mov SI,ПАР_ТИП ; // Создаем параметро Смещене текста по Y | |
mov AL,ТИП_ЧИСЛ ; // Тип элемента текст то есть строка заканчивающаяся нулем | |
mov ah,1 ; // Участвует в поиске | |
mov bx,1 ; // В BX Содержиться адрес текста окна | |
call .ПАР_СОЗДАТЬ ; // | |
;----------------------; // Регистр BX Свободен для использолвания | |
;----------------------; | |
mov SI,ПАР_БУФЕ ; // Создаем параметро Последних нажатых символов | |
mov AL,ТИП_СТРО ; // Тип элемента текст то есть строка заканчивающаяся нулем | |
mov ah,1 ; // Участвует в поиске | |
Call СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_16_БАЙТ; | |
call .ПАР_СОЗДАТЬ ; // | |
;----------------------; // Регистр BX Свободен для использолвания | |
pop si ; | |
Push di ; | |
popad ; | |
ret ; | |
.ПАР_СОЗДАТЬ:; ДЛя создания параметров | |
push di ; | |
call ЭЛЕ_СОЗДАТЬ ; | |
pop di ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;--------------------; | |
; // В SI Имя окна | |
; // В BX значение окна | |
mov al,5 ; // Создаем элемент с именем SI В Элементе DI в AL тип элемента ТИП_ОКНО | |
mov ah,1 ; // Заполняем поле функция чтор означает что элемент участвует в поиске | |
call ЭЛЕ_СОЗДАТЬ ; // Создаем элемент получаем его адрес в DI | |
;--------------------; // SI Теперь свободно для использования | |
;--------------------; | |
mov ESI,ПАР_ТЕКС ; // Создаем параметро Смещене текста по Y | |
mov AL,ТИП_СТРО ; // Тип элемента текст то есть строка заканчивающаяся нулем | |
mov ah,1 ; // Участвует в поиске | |
; // В BX Содержиться адрес текста окна | |
call .ПАР_СОЗДАТЬ ; // | |
;--------------------; // Регистр BX Свободен для использолвания | |
;-----------------------; | |
mov ESI,ПАР_ЛЕВО ; // Создаем параметро имя=ЛЕВО Координата окна по X | |
mov AL,ТИП_ЧИСЛ ; // Указываем ТИп Число | |
mov ah,1 ; // Указываем что это функция | |
xor ebx,ebx ; | |
mov Bl,Cl ; // Указываем значение | |
call .ПАР_СОЗДАТЬ ; // Создание эелемнта внутри элемента DI | |
;-----------------------; | |
mov ESI,ПАР_ВЕРХ ; // Создаем параметро ВЕРХ | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
xor Ebx,Ebx ; | |
mov Bl,Ch ; // | |
call .ПАР_СОЗДАТЬ ; | |
;----------------------- | |
mov eSI,ПАР_ШИРИ ; // | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
xor ebx,ebx ; | |
mov Bl,dl ; // | |
call .ПАР_СОЗДАТЬ ; | |
;----------------------- | |
mov eSI,ПАР_ВЫСО ; // | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
xor ebx,ebx ; | |
mov Bl,Dh ; // | |
call .ПАР_СОЗДАТЬ ; | |
;--------------------; | |
; Смещение окна внутри текста мыже через окно видим только кусочек текста | |
;--------------------; | |
mov eSI,ПАР_ТСМX ; // Создаем параметро Смещене текста по X | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
mov eBx,0 ; // | |
call .ПАР_СОЗДАТЬ ; // | |
;----------------------- | |
mov eSI,ПАР_ТСМY ; // Создаем параметро Смещене текста по Y | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
mov eBx,0 ; // | |
call .ПАР_СОЗДАТЬ ; // | |
;--------------------; | |
; Координаты курсора внутри текста | |
;----------------------- | |
mov eSI,ПАР_ТКУX ; // Создаем параметро координаат курсора по X в окне | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
mov eBx,0 ; // | |
call .ПАР_СОЗДАТЬ ; // | |
;----------------------- | |
mov eSI,ПАР_ТКУY ; // Создаем параметро координаат курсора по Y в окне | |
mov AL,ТИП_ЧИСЛ ; // | |
mov ah,1 ; // | |
mov eBx,0 ; // | |
call .ПАР_СОЗДАТЬ ; // | |
;--------------------- | |
; Параметр Атрибуты Цвет Фона и текста окна и Цвет фона и цвет текста курсора | |
;--------------------; | |
mov eSI,ПАР_АТРИ ;// Атрибуты окна | |
mov AL,ТИП_ЧИСЛ ;// | |
mov ah,1 ;// | |
mov eBx,01001111b ;// | |
call .ПАР_СОЗДАТЬ ;// | |
;--------------------- | |
mov eSI,ПАР_АКУР ;// Атрибуты курсора | |
mov AL,ТИП_ЧИСЛ ;// | |
mov ah,1 ;// | |
mov eBx,01111111b ;// | |
call .ПАР_СОЗДАТЬ ;// | |
;--------------------; | |
; Дополнительные параметры для работы с текстом | |
;------------------------------------------ | |
mov eSI,ПАР_ДПСТ ;// Создаем параметро Длина последней строки до курсора по Y длина строки над курсором Количества символов в встроке с курсором | |
mov AL,ТИП_ЧИСЛ ;// Указываем ТИп Параметр | |
mov ah,1 ;// Указываем что это функция | |
mov eBx,0 ;// Указываем значение | |
call .ПАР_СОЗДАТЬ ; | |
;------------------------------------------ | |
mov eSI,ПАР_КССК ;// Создаем параметро Количества символов в встроке с курсором | |
mov AL,ТИП_ЧИСЛ ;// Указываем ТИп Параметр | |
mov ah,1 ;// Указываем что это функция | |
mov eBx,0 ;// Указываем значение | |
call .ПАР_СОЗДАТЬ ; | |
;------------------------------------------ | |
mov eSI,ПАР_ПАВС ;// Создаем параметро Предположительный адрес для вставки символа | |
mov AL,ТИП_ЧИСЛ ;// Указываем ТИп Параметр | |
mov ah,1 ;// Указываем что это функция | |
mov eBx,0 ;// Указываем значение | |
call .ПАР_СОЗДАТЬ ; | |
;------------------------------------------ | |
mov eSI,ПАР_КОСТ ;// Создаем параметро Количество строк в тексте | |
mov AL,ТИП_ЧИСЛ ;// Указываем ТИп Параметр | |
mov ah,1 ;// Указываем что это функция | |
mov eBx,0 ;// Указываем значение | |
call .ПАР_СОЗДАТЬ ; | |
;------------------------------------------- | |
;----------------------; | |
mov eSI,ПАР_ТИП ; // Создаем параметро Смещене текста по Y | |
mov AL,ТИП_ЧИСЛ ; // Тип элемента текст то есть строка заканчивающаяся нулем | |
mov ah,1 ; // Участвует в поиске | |
mov ebx,1 ; // В BX Содержиться адрес текста окна | |
call .ПАР_СОЗДАТЬ ; // | |
;----------------------; // Регистр BX Свободен для использолвания | |
;----------------------; | |
mov eSI,ПАР_БУФЕ ; // Создаем параметро Последних нажатых символов | |
mov AL,ТИП_СТРО ; // Тип элемента текст то есть строка заканчивающаяся нулем | |
mov ah,1 ; // Участвует в поиске | |
Call СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_16_БАЙТ; | |
call .ПАР_СОЗДАТЬ ; // | |
;----------------------; // Регистр BX Свободен для использолвания | |
pop esi ; | |
Push edi ; | |
popad ; | |
ret ; | |
.ПАР_СОЗДАТЬ:; ДЛя создания параметров | |
push edi ; | |
call ЭЛЕ_СОЗДАТЬ ; | |
pop edi ; | |
ret ; | |
END IF;} | |
;} | |
;==============================================================================} | |
;{ ФУНКЦИИ ДЛЯ РАБОТЫ C СЛОВАРЕМ . | |
СЛО_В_КОД :;{ ПРеаобразует слово DI в уникальный код DI если слова нету то присваевает ему код BX если BX=0 ТО генериует код сама | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call СОЗДАТЬ_СТРОКУ_SI_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_БОЛЬШИЕ_БУКВЫ; | |
mov cx,0 ; | |
mov di,[СЛОВАРЬ] ; | |
.ЦИКЛ: mov al,[di] ; | |
test al,al ; | |
jz .ДОБАВИТЬ ; | |
call СРАВНИТЬ_СТРОКИ_SI_DI; | |
JNZ .НАШОЛ ; | |
add di,16 ; | |
inc cx ; | |
jmp .ЦИКЛ ; | |
.ДОБАВИТЬ: | |
mov ax,cx; | |
mov dx,si ; | |
mov cx,di ; | |
call ЗАПИСАТЬ_СТРОКУ_DX_В_СТРОКУ_CX; | |
mov cx,ax; | |
add di,14 ; | |
test bx,bx ; | |
jnz .ЗАПКОД ; | |
mov [di],cx ; | |
jmp .ВЫХОД ; | |
.ЗАПКОД: mov [di],bx ; | |
mov cx,bx ; | |
jmp .ВЫХОД ; | |
.НАШОЛ: | |
add di,14 ; | |
mov cx,[di] ; | |
.ВЫХОД: | |
mov di,si; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
pop si; | |
push cx; | |
popad; | |
ret | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call СОЗДАТЬ_СТРОКУ_SI_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_БОЛЬШИЕ_БУКВЫ; | |
mov cx,0 ; | |
mov di,[СЛОВАРЬ] ; | |
.ЦИКЛ: mov al,[di] ; | |
test al,al ; | |
jz .ДОБАВИТЬ ; | |
call СРАВНИТЬ_СТРОКИ_SI_DI; | |
JNZ .НАШОЛ ; | |
add di,16 ; | |
inc cx ; | |
jmp .ЦИКЛ ; | |
.ДОБАВИТЬ: | |
mov ax,cx; | |
mov dx,si ; | |
mov cx,di ; | |
call ЗАПИСАТЬ_СТРОКУ_DX_В_СТРОКУ_CX; | |
mov cx,ax; | |
add di,14 ; | |
test bx,bx ; | |
jnz .ЗАПКОД ; | |
mov [di],cx ; | |
jmp .ВЫХОД ; | |
.ЗАПКОД: mov [di],bx ; | |
mov cx,bx ; | |
jmp .ВЫХОД ; | |
.НАШОЛ: | |
add di,14 ; | |
mov cx,[di] ; | |
.ВЫХОД: | |
mov di,si; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
pop si; | |
push cx; | |
popad; | |
ret | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call СОЗДАТЬ_СТРОКУ_SI_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_БОЛЬШИЕ_БУКВЫ; | |
mov Ecx,0 ; | |
mov Edi,[СЛОВАРЬ] ; | |
.ЦИКЛ: mov al,[Edi] ; | |
test al,al ; | |
jz .ДОБАВИТЬ ; | |
call СРАВНИТЬ_СТРОКИ_SI_DI; | |
JNZ .НАШОЛ ; | |
add edi,16 ; | |
inc ecx ; | |
jmp .ЦИКЛ ; | |
.ДОБАВИТЬ: | |
mov eax,ecx; | |
mov edx,esi ; | |
mov ecx,edi ; | |
call ЗАПИСАТЬ_СТРОКУ_DX_В_СТРОКУ_CX; | |
mov ecx,eax; | |
add edi,14 ; | |
test ebx,ebx ; | |
jnz .ЗАПКОД ; | |
mov [edi],cx ; | |
jmp .ВЫХОД ; | |
.ЗАПКОД: mov [edi],bx ; | |
mov ecx,ebx ; | |
jmp .ВЫХОД ; | |
.НАШОЛ: | |
add edi,14 ; | |
mov cx,[edi] ; | |
.ВЫХОД: | |
mov edi,esi; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
pop esi; | |
push ecx; | |
popad; | |
ret | |
END IF;} | |
;==============================================================================} | |
СЛО_В_КОДCX :;{ ПРеаобразует слово CX в уникальный код CX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
push bx ; | |
mov bx,0 ; | |
mov di,cx ; | |
call СЛО_В_КОД ; | |
mov cx,di ; | |
pop bx ; | |
pop di ; | |
ret ; | |
END iF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
push bx ; | |
mov bx,0 ; | |
mov di,cx ; | |
call СЛО_В_КОД ; | |
mov cx,di ; | |
pop bx ; | |
pop di ; | |
ret ; | |
END iF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push Edi ; | |
push Ebx ; | |
mov Ebx,0 ; | |
mov Edi,Ecx ; | |
call СЛО_В_КОД ; | |
mov Ecx,Edi ; | |
pop Ebx ; | |
pop Edi ; | |
ret ; | |
END iF ;} | |
;==============================================================================} | |
ДОБАВИТЬ_СЛОВО :;{ Добавляет слово SI назначает код CX возвращает длину добавленого слова в DX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
push bx; | |
mov di,si; | |
mov bx,cx; | |
call СЛО_В_КОД; | |
mov di,si; | |
call ВОЗАРАЩАЕТ_В_DI_ДЛИНУ_СТРОКИ_DI; | |
mov dx,di; | |
pop bx; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
push bx; | |
mov di,si; | |
mov bx,cx; | |
call СЛО_В_КОД; | |
mov di,si; | |
call ВОЗАРАЩАЕТ_В_DI_ДЛИНУ_СТРОКИ_DI; | |
mov dx,di; | |
pop bx; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push Edi; | |
push Ebx; | |
mov Edi,Esi; | |
mov Ebx,Ecx; | |
call СЛО_В_КОД; | |
mov Edi,Esi; | |
call ВОЗАРАЩАЕТ_В_DI_ДЛИНУ_СТРОКИ_DI; | |
mov Edx,Edi; | |
pop Ebx; | |
pop Edi; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ПОДГОТОВКА_СЛОВАРЯ :;{ подготавливает словарь для работы | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov DI,4096 ;// Указываем размер запрашиваемого участка памяти для буфера экрана | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI;// Выделяем участок | |
mov [СЛОВАРЬ],di; | |
mov si,СПИСОК_СЛОВ; | |
mov cx,1; | |
.ЦИКЛ: | |
mov al,[si]; | |
test al,al ; | |
jz .КЦИКЛ ; | |
Call ДОБАВИТЬ_СЛОВО ; // Добавляет слово SI в словарь назначает номер CX в DX возвращает длину добавленого слова | |
add si,dx ; | |
inc si; | |
mov al,[si]; | |
cmp al,1 ; | |
jnz .ДАЛЕЕ ; | |
inc cx ; | |
inc si ; | |
.ДАЛЕЕ: | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov DI,4096 ;// Указываем размер запрашиваемого участка памяти для буфера экрана | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI;// Выделяем участок | |
mov [СЛОВАРЬ],di; | |
mov si,СПИСОК_СЛОВ; | |
mov cx,1; | |
.ЦИКЛ: | |
mov al,[si]; | |
test al,al ; | |
jz .КЦИКЛ ; | |
Call ДОБАВИТЬ_СЛОВО ; // Добавляет слово SI в словарь назначает номер CX в DX возвращает длину добавленого слова | |
add si,dx ; | |
inc si; | |
mov al,[si]; | |
cmp al,1 ; | |
jnz .ДАЛЕЕ ; | |
inc cx ; | |
inc si ; | |
.ДАЛЕЕ: | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov EDI,4096 ;// Указываем размер запрашиваемого участка памяти для буфера экрана | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI;// Выделяем участок | |
mov [СЛОВАРЬ],Edi; | |
mov Esi,СПИСОК_СЛОВ; | |
mov Ecx,1; | |
.ЦИКЛ: | |
mov al,[Esi]; | |
test al,al ; | |
jz .КЦИКЛ ; | |
Call ДОБАВИТЬ_СЛОВО ; // Добавляет слово SI в словарь назначает номер CX в DX возвращает длину добавленого слова | |
add Esi,Edx ; | |
inc Esi; | |
mov al,[Esi]; | |
cmp al,1 ; | |
jnz .ДАЛЕЕ ; | |
inc Ecx ; | |
inc Esi ; | |
.ДАЛЕЕ: | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
;Переменные { | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
СЛОВАРЬ: DW 0 ; // Адрес участка в памяти выделеного под словарь | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
СЛОВАРЬ: DW 0 ; // Адрес участка в памяти выделеного под словарь | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
СЛОВАРЬ: DD 0 ; // Адрес участка в памяти выделеного под словарь | |
END IF;} | |
;} | |
;==============================================================================} | |
;{ ПЕРЕМЕННЫЕ . | |
МЫШ_ВЫДЕ1: DD 0 ;// Адрес елемнта по котрому нажата предыдущий раз мышка | |
МЫШ_ВЫДЕ2: DD 0 ;// Адрес елемнта по котрому нажата последний раз кнопка | |
МЫШ_СМЕЩX: DD 0 ;// Координаты смещения мышки внтри окна принажатии абсолютная коордиана окна + смещение = кооордината нажатия мышки | |
МЫШ_СМЕЩY: DD 0 ;// Координаты смещения внтри окна по y | |
МЫШ_ТИППЕ: DD 0 ;// 1 пермещение 2 изменение ширины 3 изменение высоты и 4 изменение размера окошка | |
ЭКР_ЦВЕТ : DD 0 ;// Цветовая гамма экрана | |
РАС_КЛАВ : DD 0 ;// Раскладка клавиатуры | |
КОРНЕВОЙ_ЭЛЕМЕНТ:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov di,[КОР_ЭЛЕМ]; | |
ret; | |
END IF; | |
;==============================================================================} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov di,[КОР_ЭЛЕМ]; | |
ret; | |
END IF; | |
;==============================================================================} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov edi,[КОР_ЭЛЕМ]; | |
ret; | |
END IF; | |
;==============================================================================} | |
;} | |
КОР_ЭЛЕМ :;{ Адрес корневого элемента | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
DW 0 | |
END IF; | |
;==============================================================================} | |
IF (ПЛАТФОРМА = T16) ;{ | |
DW 0 | |
END IF; | |
;==============================================================================} | |
IF (ПЛАТФОРМА = T32) ;{ | |
DD 0 | |
END IF; | |
;==============================================================================} | |
;} | |
СПИСОК_СЛОВ : | |
КОД_ТЕК_СЛОЖЕНИЕ : DB '+' ,0,'ПРИБАВИТЬ' ,0,1; | |
КОД_ТЕК_ВЫЧИТАНИЕ : DB '-' ,0,'ОТНЯТЬ' ,0,1; | |
КОД_ТЕК_УМНОЖЕНИЕ : DB '*' ,0,'УМНОЖИТЬ' ,0,1; | |
КОД_ТЕК_ДЕЛЕНИЕ : DB '/' ,0,'ПОДЕЛИТЬ' ,0,1; | |
КОД_ТЕК_ОСТАТОК : DB 'MOD' ,0,'ОСТАТОК' ,0,1; | |
КОД_ТЕК_ПРИСВОЕНИЕ : DB ':=' ,0,'ПРИСВОИТЬ' ,0,1; | |
КОД_ТЕК_РАВНО : DB '=' ,0,'РАВНО' ,0,'==' ,0,1; | |
КОД_ТЕК_НЕРАВНО : DB '<>' ,0,'!=' ,0,1; | |
КОД_ТЕК_БОЛЬШЕ : DB '>' ,0,'БОЛЬШЕ' ,0,1; | |
КОД_ТЕК_МЕНЬШЕ : DB '<' ,0,'МЕНЬШЕ' ,0,1; | |
КОД_ТЕК_МЕНРА : DB '<=' ,0,1; | |
КОД_ТЕК_БОЛРА : DB '>=' ,0,1; | |
КОД_ТЕК_ЛОГИ : DB 'И' ,0,'AND' ,0,'&&' ,0,1; | |
КОД_ТЕК_ЛОГИЛИ : DB 'ИЛИ' ,0,'OR' ,0,'||' ,0,1; | |
КОД_ТЕК_ОСКОБ : DB '(' ,0,1; | |
КОД_ТЕК_ЗСКОБ : DB ')' ,0,1; | |
КОД_ТЕК_НАЧАЛО : DB 'НАЧАЛО' ,0,'BEGIN' ,0,'{' ,0,1; | |
КОД_ТЕК_КОНЕЦ : DB 'КОНЕЦ' ,0,'END' ,0,'}' ,0,1; | |
; Внимание вложеные скобочки сворачиваються при просмотре сиходника ) | |
; Все что выше в них не вкладываються скобки котрые идут следющими в тексте | |
КОД_ТЕК_ЕСЛИ : DB 'ЕСЛИ' ,0,'IF' ,0,1; | |
КОД_ТЕК_ПОКА : DB 'ПОКА' ,0,'WHILE' ,0,1; | |
КОД_ТЕК_ВЫВОД : DB 'ВЫВОД' ,0,'PRINT' ,0,'WRITE' ,0,1; | |
КОД_ТЕК_ВЫВОДСТ : DB 'ВЫВОДСТ' ,0,'PRINTLN' ,0,'WRITELN' ,0,1; | |
КОД_ТЕК_ЦИКЛ : DB 'ЦИКЛ' ,0,'ПОВТОРЯТЬ' ,0,'FOR' ,0,1; | |
КОД_ТЕК_ВВОД : DB 'ВВОД' ,0,'INPUT' ,0,'READ' ,0,1; | |
КОД_ТЕК_ВВОДСТ : DB 'ВВОДСТ' ,0,'INPUTLN' ,0,'READLN' ,0,1; | |
КОД_ТЕК_ЧПОРТ : DB 'ЧПОРТ' ,0,'IN' ,0,1; | |
КОД_ТЕК_ЧПАМЯТЬ : DB 'ЧПАМЯТЬ' ,0,'PEEK' ,0,1; | |
КОД_ТЕК_ЗПОРТ : DB 'ЗПОРТ' ,0,'OUT' ,0,1; | |
КОД_ТЕК_ЗПАМЯТЬ : DB 'ЗПАМЯТЬ' ,0,'POKE' ,0,1; | |
КОД_ТЕК_ВЗЯТЬ : DB 'ВЗЯТЬ' ,0,'GET' ,0,1; | |
ТЕК_ОСВОБОДИТЬ : db 'ОСВОБОДИТЬ',0,'FREE' ,0,1; // Освободить | |
ТЕК_РОДИТЕЛЬ : db 'РОДИТЕЛЬ' ,0,'PARENT' ,0,1; // Родитель | |
КОД_ТЕК_РЕЗЕРВ1 : DB 'УДА_СТР' ,0,'РЕЗЕРВ11' ,0,1; | |
КОД_ТЕК_РЕЗЕРВ2 : DB 'РЕЗЕРВ2' ,0,'РЕЗЕРВ12' ,0,1; | |
КОД_ТЕК_РЕЗЕРВ3 : DB 'РЕЗЕРВ3' ,0,'РЕЗЕРВ13' ,0,1; | |
КОД_ТЕК_РЕЗЕРВ4 : DB 'РЕЗЕРВ4' ,0,'РЕЗЕРВ14' ,0,1; | |
КОД_ТЕК_РЕЗЕРВ5 : DB 'РЕЗЕРВ5' ,0,'РЕЗЕРВ15' ,0,1; | |
КОД_ТЕК_РЕЗЕРВ6 : DB 'РЕЗЕРВ6' ,0,'РЕЗЕРВ16' ,0,1; | |
КОД_ТЕК_РЕЗЕРВ7 : DB 'РЕЗЕРВ7' ,0,'РЕЗЕРВ17' ,0,1; | |
КОД_ТЕК_РАЗРЕШИТЬ : DB 'РАЗРЕШИТЬ' ,0,'РЕЗЕРВ18' ,0,1; | |
КОД_ТЕК_ЗАПРЕТИТЬ : DB 'ЗАПРЕТИТЬ' ,0,'РЕЗЕРВ19' ,0,1; | |
КОД_ТЕК_ПРАВДА : DB 'ПРАВДА' ,0,'TRUE' ,0,1; | |
КОД_ТЕК_ЛОЖ : DB 'ЛОЖ' ,0,'FALSE' ,0,1; | |
ПАР_ЛЕВО : db 'ПАР_ЛЕВО' ,0,'ЛЕВО' ,0,1; // Left координата по X отображемого окна | |
ПАР_ВЕРХ : db 'ПАР_ВЕРХ' ,0,'ВЕРХ' ,0,1; // Top координата по Y отображемого окна | |
ПАР_ШИРИ : db 'ПАР_ШИРИ' ,0,'ШИРИНА' ,0,1; // Width Ширина отображемого окна | |
ПАР_ВЫСО : db 'ПАР_ВЫСО' ,0,'ВЫСОТА' ,0,1; // HEight Высота отображемого окна | |
ПАР_АТРИ : db 'ПАР_АТРИ' ,0,'ФОН' ,0,1; // Атрибуты окна | |
ПАР_АКУР : db 'ПАР_АКУР' ,0,'КУРСОР' ,0,1; // Атрибуты Курсора | |
ПАР_ТСМX : db 'ПАР_ТСМX' ,0,'СМЕЩЕНИЕ_X' ,0,1; // Смещение видимого текста внтури текста по X | |
ПАР_ТСМY : db 'ПАР_ТСМY' ,0,'СМЕЩЕНИЕ_Y' ,0,1; // Смещение видимого текста внтури текста по Y | |
ПАР_ТКУX : db 'ПАР_ТКУX' ,0,'КУРСОР_X' ,0,1; // координаты текстового курсора по X | |
ПАР_ТКУY : db 'ПАР_ТКУY' ,0,'КУРСОР_Y' ,0,1; // координаты текстового курсора по Y | |
ПАР_ТЕКС : db 'ПАР_ТЕКС' ,0,'ТЕКСТ' ,0,1; // Текст окна для редактирования | |
ПАР_КССК : db 'ПАР_КССК' ,0,1 ; // Количество символов в строке с курсором | |
ПАР_КОСТ : db 'ПАР_КОСТ' ,0,'КОЛ_СТРОК' ,0,1; // Реальное количество строк в тексте окна | |
ПАР_ПАВС : db 'ПАР_ПАВС' ,0,1 ; // Предположительный адрес для вставки символа | |
ПАР_ДПСТ : db 'ПАР_ДПСТ' ,0,1 ; // Длина предыдущей строки до курсора | |
ПАР_НАЖА : db 'ПАР_НАЖА' ,0,1 ; // Так называеться событие наж кнопки мыш | |
ПАР_РЕДА : db 'ПАР_РЕДА' ,0,1 ; // Разрешает или запре Редакт текст вну | |
ПАР_РАМК : db 'ПАР_РАМК' ,0,1 ; // Рисовать рамку или не рисовать | |
ПАР_ВИДИ : db 'ПАР_ВИДИ' ,0,1 ; // Видимость элемента | |
ПАР_ПЕРЕ : db 'ПАР_ПЕРЕ' ,0,1 ; // Разрешает или запрещает перемесчение окна | |
ПАР_БУФЕ : db 'ПАР_БУФЕ' ,0,1 ; // Буфер последних нажатых символов | |
МОНИТОР : db 'МОНИТОР' ,0,1 ; // Окно монитора | |
КОД_ТЕК_НА : db 'НА' ,0,1 ; // Пустое слово | |
ТЕК_ПОМОЩЬ : db 'ПОМОЩЬ' ,0,1 ; // ПОМОЩЬ | |
ПАР_ТИП : db 'ТИП' ,0,0 ; // параметр ТИП | |
NOM=1; | |
КОД_КОМ_СЛОЖЕНИЕ = 1 ; | |
КОД_КОМ_ВЫЧИТАНИЕ = 2 ; | |
КОД_КОМ_УМНОЖЕНИЕ = 3 ; | |
КОД_КОМ_ДЕЛЕНИЕ = 4 ; | |
КОД_КОМ_ОСТАТОК = 5 ; | |
КОД_КОМ_ПРИСВОЕНИЕ = 6 ; | |
КОД_КОМ_РАВНО = 7 ; | |
КОД_КОМ_НЕРАВНО = 8 ; | |
КОД_КОМ_БОЛЬШЕ = 9 ; | |
КОД_КОМ_МЕНЬШЕ = 10; | |
КОД_КОМ_МЕНРА = 11; | |
КОД_КОМ_БОЛРА = 12; | |
КОД_КОМ_ЛОГИ = 13; | |
КОД_КОМ_ЛОГИЛИ = 14; | |
КОД_КОМ_ОСКОБКА = 15; // Внимание скобки должны идти подряд | |
КОД_КОМ_ЗСКОБКА = 16; // Внимание скобки должны идти подряд | |
КОД_КОМ_НАЧАЛО = 17; // Внимание скобки должны идти подряд | |
КОД_КОМ_КОНЕЦ = 18; // Внимание скобки должны идти подряд | |
КОД_КОМ_ЕСЛИ = 19; | |
КОД_КОМ_ПОКА = 20; | |
КОД_КОМ_ВЫВОД = 21; | |
КОД_КОМ_ВЫВОДСТ = 22; | |
КОД_КОМ_ЦИКЛ = 23; | |
КОД_КОМ_ВВОД = 24; | |
КОД_КОМ_ВВОДСТ = 25; | |
КОД_КОМ_ЧПОРТ = 26; | |
КОД_КОМ_ЧПАМЯТЬ = 27; | |
КОД_КОМ_ЗПОРТ = 28; | |
КОД_КОМ_ЗПАМЯТЬ = 29; | |
КОД_КОМ_ВЗЯТЬ = 30; | |
КОД_ОСВОБОДИТЬ = 31; | |
КОД_РОДИТЕЛЬ = 32; | |
КОД_КОМ_РЕЗЕРВ1 = 33; | |
КОД_КОМ_РЕЗЕРВ2 = 34; | |
КОД_КОМ_РЕЗЕРВ3 = 35; | |
КОД_КОМ_РЕЗЕРВ4 = 36; | |
КОД_КОМ_РЕЗЕРВ5 = 37; | |
КОД_КОМ_РЕЗЕРВ6 = 38; | |
КОД_КОМ_РЕЗЕРВ7 = 39; | |
КОД_КОМ_РАЗРЕШИТЬ = 40; | |
КОД_КОМ_ЗАПРЕТИТЬ = 41; | |
КОД_КОМ_ПРАВДА = 42; | |
КОД_КОМ_ЛОЖ = 43; | |
КОД_ПАР_ЛЕВО = 44; // Вот блин вот от сюда | |
КОД_ПАР_ВЕРХ = 45; | |
КОД_ПАР_ШИРИ = 46; | |
КОД_ПАР_ВЫСО = 47; | |
КОД_ПАР_АТРИ = 48; | |
КОД_ПАР_АКУР = 49; | |
КОД_ПАР_ТСМX = 50; | |
КОД_ПАР_ТСМY = 51; | |
КОД_ПАР_ТКУX = 52; | |
КОД_ПАР_ТКУY = 53; | |
КОД_ПАР_ТЕКС = 54; | |
КОД_ПАР_КССК = 55; | |
КОД_ПАР_КОСТ = 56; | |
КОД_ПАР_ПАВС = 57; | |
КОД_ПАР_ДПСТ = 58; | |
КОД_ПАР_НАЖА = 59; | |
КОД_ПАР_РЕДА = 60; | |
КОД_ПАР_РАМК = 61; | |
КОД_ПАР_ВИДИ = 62; | |
КОД_ПАР_ПЕРЕ = 63; | |
КОД_ПАР_БУФЕ = 64; | |
КОД_ОКН_МОНИТОР = 65; | |
КОД_КОМ_НА = 66; | |
КОД_ПОМОЩЬ = 67; | |
КОД_ТИП = 68; | |
;Все что выше в них не вкладываються скобки котрые идут следющими в тексте | |
МАКС_РЕЗЕРВ_СЛОВО = 18; | |
;==============================================================================} | |
;{ СТРУКТУРА ЭЛЕМЕНТА . | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
ЭЛ_ТИП = 0 ;// ТИп элементы | |
ЭЛ_ФУН = 1 ;// Если это функция Участвует ли в поиске | |
ЭЛ_ИМЯ = 2 ;// Название элемента | |
ЭЛ_ЗНА = 4 ;// Адрес значения | |
ЭЛ_КОД = 6 ;// Код имени элемента | |
ЭЛ_РОД = 8 ;// Адрес родительского элемента | |
ЭЛ_ПРЕ = 10;// Адрес предыдущего элемента | |
ЭЛ_СЛЕ = 12;// Адрес Следующего элемента | |
ЭЛ_ВЛО = 14;// Адрес первого элемента вложеного списка | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
ЭЛ_ТИП = 0 ;// ТИп элементы | |
ЭЛ_ФУН = 1 ;// Если это функция Участвует ли в поиске | |
ЭЛ_ИМЯ = 2 ;// Название элемента | |
ЭЛ_ЗНА = 4 ;// Адрес значения | |
ЭЛ_КОД = 6 ;// Код имени элемента | |
ЭЛ_РОД = 8 ;// Адрес родительского элемента | |
ЭЛ_ПРЕ = 10;// Адрес предыдущего элемента | |
ЭЛ_СЛЕ = 12;// Адрес Следующего элемента | |
ЭЛ_ВЛО = 14;// Адрес первого элемента вложеного списка | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
ЭЛ_ТИП = 0 ;// ТИп элементы | |
ЭЛ_ФУН = 1 ;// Если это функция Участвует ли в поиске | |
ЭЛ_ИМЯ = 2 ;// Название элемента | |
ЭЛ_ЗНА = 4 ;// Адрес значения | |
ЭЛ_КОД = 8 ;// Код имени элемента | |
ЭЛ_РОД = 12 ;// Адрес родительского элемента | |
ЭЛ_ПРЕ = 16;// Адрес предыдущего элемента | |
ЭЛ_СЛЕ = 20;// Адрес Следующего элемента | |
ЭЛ_ВЛО = 24;// Адрес первого элемента вложеного списка | |
END IF;} | |
;==============================================================================} | |
;{ ТИПЫ ЭЛЕМЕНТОВ . | |
; Типы элемнтов | |
ТИП_ПУСТ = 0 ; // ТИП Корневой элемент всего 1 во всей системе | |
ТИП_ЧИСЛ = 1 ; // Число 2 байтовое | |
ТИП_СТРО = 2 ; // Адрес короткой строки заканчиваеющейся нулем | |
ТИП_КАВЫ = 3 ; // Адрес строки в кавычках | |
ЧИС_ЧИС = ТИП_ЧИСЛ*10+ТИП_ЧИСЛ; | |
ЧИС_СТР = ТИП_ЧИСЛ*10+ТИП_СТРО; | |
СТР_ЧИС = ТИП_СТРО*10+ТИП_ЧИСЛ; | |
СТР_СТР = ТИП_СТРО*10+ТИП_СТРО; | |
КОМ_ЧИС_ЧИС = ТИП_ЧИСЛ*10+ТИП_ЧИСЛ; | |
КОМ_ЧИС_СТР = ТИП_ЧИСЛ*10+ТИП_СТРО; | |
КОМ_ЧИС_КАВ = ТИП_ЧИСЛ*10+ТИП_КАВЫ; | |
КОМ_СТР_ЧИС = ТИП_СТРО*10+ТИП_ЧИСЛ; | |
КОМ_СТР_СТР = ТИП_СТРО*10+ТИП_СТРО; | |
КОМ_СТР_КАВ = ТИП_СТРО*10+ТИП_КАВЫ; | |
КОМ_КАВ_ЧИС = ТИП_КАВЫ*10+ТИП_ЧИСЛ; | |
КОМ_КАВ_СТР = ТИП_КАВЫ*10+ТИП_СТРО; | |
КОМ_КАВ_КАВ = ТИП_КАВЫ*10+ТИП_КАВЫ; | |
; КОМ_СТР_ЧИС_ЧИС = ТИП_СТРО*100+ТИП_ЧИСЛ*10+ТИП_ЧИСЛ; | |
; КОМ_СТР_ЧИС_СТР = ТИП_СТРО*100+ТИП_ЧИСЛ*10+ТИП_СТРО; | |
; КОМ_СТР_ЧИС_КАВ = ТИП_СТРО*100+ТИП_ЧИСЛ*10+ТИП_КАВЫ; | |
; КОМ_СТР_СТР_ЧИС = ТИП_СТРО*100+ТИП_СТРО*10+ТИП_ЧИСЛ; | |
; КОМ_СТР_СТР_СТР = ТИП_СТРО*100+ТИП_СТРО*10+ТИП_СТРО; | |
; КОМ_СТР_СТР_КАВ = ТИП_СТРО*100+ТИП_СТРО*10+ТИП_КАВЫ; | |
;==============================================================================} | |
;{ Tim-Pascal-Lib БИБЛИОТЕКА . | |
;---{ ФУНКЦИИ ДЛЯ РАБОТЫ С СТРОКАМИ . | |
ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov si,dx ; | |
mov [si],byte 0 ; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov si,dx ; | |
mov [si],byte 0 ; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov Esi,Edx ; | |
mov [Esi],byte 0 ; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
MOV BX,10 ;// 10 система счисления | |
xor cx,cx ; | |
.ЦИКЛ1: ;-------------; | |
xor DX,DX ; | |
DIV BX ; | |
push dx ;// Сохраняем остаток от деления в стек | |
inc cx ; | |
test ax,ax ; | |
jnz .ЦИКЛ1 ; | |
;-------------; | |
.ЦИКЛ2: ;-------------; | |
pop dx ; | |
add dl,'0' ; | |
mov al,dl ; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_SI; | |
dec cx ; | |
test cx,cx ; | |
jnz .ЦИКЛ2 ; | |
;-------------; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad | |
MOV BX,10 ;// 10 система счисления | |
xor cx,cx ; | |
.ЦИКЛ1: ;-------------; | |
xor DX,DX ; | |
DIV BX ; | |
push dx ;// Сохраняем остаток от деления в стек | |
inc cx ; | |
test ax,ax ; | |
jnz .ЦИКЛ1 ; | |
;-------------; | |
.ЦИКЛ2: ;-------------; | |
pop dx ; | |
add dl,'0' ; | |
mov al,dl ; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_SI; | |
dec cx ; | |
test cx,cx ; | |
jnz .ЦИКЛ2 ; | |
;-------------; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad | |
MOV EBX,10 ;// 10 система счисления | |
xor Ecx,Ecx ; | |
.ЦИКЛ1: ;-------------; | |
xor EDX,EDX ; | |
DIV EBX ; | |
push Edx ;// Сохраняем остаток от деления в стек | |
inc Ecx ; | |
test Eax,Eax ; | |
jnz .ЦИКЛ1 ; | |
;-------------; | |
.ЦИКЛ2: ;-------------; | |
pop Edx ; | |
add dl,'0' ; | |
mov al,dl ; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_SI; | |
dec Ecx ; | |
test Ecx,Ecx ; | |
jnz .ЦИКЛ2 ; | |
;-------------; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ДОБАВИТЬ_ЧИСЛО_CX_В_КОНЕЦ_СТРОКИ_BX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov si,bx ; | |
mov ax,cx ; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov si,bx ; | |
mov ax,cx ; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov Esi,Ebx ; | |
mov Eax,Ecx ; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ДОБАВИТЬ_ЧИСЛО_DX_В_КОНЕЦ_СТРОКИ_BX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov si,bx ; | |
mov ax,dx ; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov si,bx ; | |
mov ax,dx ; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov esi,ebx ; | |
mov eax,edx ; | |
call ДОБАВИТЬ_ЧИСЛО_AX_В_КОНЕЦ_СТРОКИ_SI; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_CX_СТРОКУ_DX:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov si,dx ; | |
mov di,cx ; | |
.ЦИКЛ: | |
mov al,[si] ; | |
test al,al ; | |
jz .КЦИКЛ ; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI; | |
inc sI ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov si,dx ; | |
mov di,cx ; | |
.ЦИКЛ: | |
mov al,[si] ; | |
test al,al ; | |
jz .КЦИКЛ ; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI; | |
inc sI ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov esi,edx ; | |
mov edi,ecx ; | |
.ЦИКЛ: | |
mov al,[esi] ; | |
test al,al ; | |
jz .КЦИКЛ ; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI; | |
inc esI ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_DX_СТРОКУ_CX:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov bx,cx; | |
mov cx,dx; | |
mov dx,bx; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_CX_СТРОКУ_DX; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov bx,cx; | |
mov cx,dx; | |
mov dx,bx; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_CX_СТРОКУ_DX; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov ebx,ecx; | |
mov ecx,edx; | |
mov edx,ebx; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_CX_СТРОКУ_DX; | |
popad ; | |
ret ; | |
END IF ;} | |
;} | |
ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_SI_СТРОКУ_AX:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov cx,SI; | |
mov dx,ax; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_CX_СТРОКУ_DX; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov cx,SI; | |
mov dx,ax; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_CX_СТРОКУ_DX; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov ecx,eSI; | |
mov edx,eax; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_CX_СТРОКУ_DX; | |
popad ; | |
ret ; | |
END IF ;} | |
;} | |
ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_DX:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov cx,bx; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_CX_СТРОКУ_DX; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov cx,bx; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_CX_СТРОКУ_DX; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov ecx,ebx; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_CX_СТРОКУ_DX; | |
popad ; | |
ret ; | |
END IF ;} | |
;} | |
ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_BX_СТРОКУ_CX:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov dx,bx; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_DX_СТРОКУ_CX; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov dx,bx; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_DX_СТРОКУ_CX; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov edx,ebx; | |
call ДОБАВИТЬ_В_КОНЕЦ_СТРОКИ_DX_СТРОКУ_CX; | |
popad ; | |
ret ; | |
END IF ;} | |
;} | |
СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI :;{ 1 МЕНЬШЕ 0 РАВНЫ 2 БОЛЬШЕ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov si,cx; | |
mov di,dx; | |
xor cx,cx; | |
xor dx,dx; | |
.ЦИКЛ: | |
mov cl,[si]; | |
mov dl,[di]; | |
mov ax,cx; | |
add ax,dx; | |
test ax,ax; | |
jz .РАВНЫ; | |
test cx,cx; | |
jz .МЕНЬШЕ; | |
test dx,dx; | |
jz .БОЛЬШЕ; | |
cmp cx,dx; // НЕ смешно ! ))))))) | |
jb .МЕНЬШЕ ; | |
ja .БОЛЬШЕ ; | |
inc si; | |
inc di; | |
jmp .ЦИКЛ; | |
.КЦИКЛА: | |
.БОЛЬШЕ: | |
mov ax,2; | |
jmp .ВЫХОД; | |
.МЕНЬШЕ: | |
mov ax,1; | |
jmp .ВЫХОД; | |
.РАВНЫ: | |
mov ax,0; | |
jmp .ВЫХОД; | |
.ВЫХОД: | |
pop si; | |
push ax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov si,cx; | |
mov di,dx; | |
xor cx,cx; | |
xor dx,dx; | |
.ЦИКЛ: | |
mov cl,[si]; | |
mov dl,[di]; | |
mov ax,cx; | |
add ax,dx; | |
test ax,ax; | |
jz .РАВНЫ; | |
test cx,cx; | |
jz .МЕНЬШЕ; | |
test dx,dx; | |
jz .БОЛЬШЕ; | |
cmp cx,dx; // НЕ смешно ! ))))))) | |
jb .МЕНЬШЕ ; | |
ja .БОЛЬШЕ ; | |
inc si; | |
inc di; | |
jmp .ЦИКЛ; | |
.КЦИКЛА: | |
.БОЛЬШЕ: | |
mov ax,2; | |
jmp .ВЫХОД; | |
.МЕНЬШЕ: | |
mov ax,1; | |
jmp .ВЫХОД; | |
.РАВНЫ: | |
mov ax,0; | |
jmp .ВЫХОД; | |
.ВЫХОД: | |
pop si; | |
push ax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov esi,ecx; | |
mov edi,edx; | |
xor ecx,ecx; | |
xor edx,edx; | |
.ЦИКЛ: | |
mov cl,[esi]; | |
mov dl,[edi]; | |
mov eax,ecx; | |
add eax,edx; | |
test eax,eax; | |
jz .РАВНЫ; | |
test ecx,ecx; | |
jz .МЕНЬШЕ; | |
test edx,edx; | |
jz .БОЛЬШЕ; | |
cmp ecx,edx; // НЕ смешно ! ))))))) | |
jb .МЕНЬШЕ ; | |
ja .БОЛЬШЕ ; | |
inc esi; | |
inc edi; | |
jmp .ЦИКЛ; | |
.КЦИКЛА: | |
.БОЛЬШЕ: | |
mov eax,2; | |
jmp .ВЫХОД; | |
.МЕНЬШЕ: | |
mov eax,1; | |
jmp .ВЫХОД; | |
.РАВНЫ: | |
mov eax,0; | |
jmp .ВЫХОД; | |
.ВЫХОД: | |
pop esi; | |
push eax; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
СТРОКА_CX_БОЛЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1 :;{ Если строка CX Больще СТРОКИ DX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp di,2 ; | |
jnz .НЕ_БОЛЬШЕ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_БОЛЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp di,2 ; | |
jnz .НЕ_БОЛЬШЕ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_БОЛЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp edi,2 ; | |
jnz .НЕ_БОЛЬШЕ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_БОЛЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret | |
END IF;} | |
;==============================================================================} | |
СТРОКА_CX_БОЛЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1:;{ Если строка CX Больще либо равно СТРОКИ DX | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp di,1 ; | |
jz .НЕ_БОЛЬШЕ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_БОЛЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp di,1 ; | |
jz .НЕ_БОЛЬШЕ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_БОЛЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp edi,1 ; | |
jz .НЕ_БОЛЬШЕ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_БОЛЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
СТРОКА_CX_МЕНЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp di,1 ; | |
jnz .НЕ_МЕНЬШЕ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_МЕНЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp di,1 ; | |
jnz .НЕ_МЕНЬШЕ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_МЕНЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp edi,1 ; | |
jnz .НЕ_МЕНЬШЕ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_МЕНЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
СТРОКА_CX_МЕНЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp di,2 ; | |
jz .НЕ_МЕНЬШЕ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_МЕНЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp di,2 ; | |
jz .НЕ_МЕНЬШЕ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_МЕНЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp edi,2 ; | |
jz .НЕ_МЕНЬШЕ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_МЕНЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
СТРОКА_CX_РАВНА_СТРОКИ_DX_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp di,0 ; | |
jnz .НЕ_РАВНО ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_РАВНО: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp di,0 ; | |
jnz .НЕ_РАВНО ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_РАВНО: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
cmp edi,0 ; | |
jnz .НЕ_РАВНО ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_РАВНО: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
СТРОКА_CX_БОЛЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp cx,dx ; | |
ja .БОЛЬШЕ ; | |
jmp .НЕ_БОЛЬШЕ ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov ax,dx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp di,2 ; | |
jnz .НЕ_БОЛЬШЕ ; | |
.БОЛЬШЕ: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_БОЛЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp cx,dx ; | |
ja .БОЛЬШЕ ; | |
jmp .НЕ_БОЛЬШЕ ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov ax,dx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp di,2 ; | |
jnz .НЕ_БОЛЬШЕ ; | |
.БОЛЬШЕ: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_БОЛЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp ecx,edx ; | |
ja .БОЛЬШЕ ; | |
jmp .НЕ_БОЛЬШЕ ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov eax,edx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp edi,2 ; | |
jnz .НЕ_БОЛЬШЕ ; | |
.БОЛЬШЕ: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_БОЛЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
СТРОКА_CX_БОЛЬШЕР_ЧИСЛА_DX_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp cx,dx ; | |
ja .БОЛЬШЕ ; | |
jmp .НЕ_БОЛЬШЕ ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov ax,dx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp di,2 ; | |
jnz .НЕ_БОЛЬШЕ ; | |
.БОЛЬШЕ: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_БОЛЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp cx,dx ; | |
ja .БОЛЬШЕ ; | |
jmp .НЕ_БОЛЬШЕ ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov ax,dx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp di,2 ; | |
jnz .НЕ_БОЛЬШЕ ; | |
.БОЛЬШЕ: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_БОЛЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp ecx,edx ; | |
ja .БОЛЬШЕ ; | |
jmp .НЕ_БОЛЬШЕ ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov eax,edx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp edi,2 ; | |
jnz .НЕ_БОЛЬШЕ ; | |
.БОЛЬШЕ: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_БОЛЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
СТРОКА_CX_МЕНЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp cx,dx ; | |
jb .МЕНЬШЕ ; | |
jmp .НЕ_МЕНЬШЕ ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov ax,dx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp di,1 ; | |
jnz .НЕ_МЕНЬШЕ ; | |
.МЕНЬШЕ: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_МЕНЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp cx,dx ; | |
jb .МЕНЬШЕ ; | |
jmp .НЕ_МЕНЬШЕ ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov ax,dx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp di,1 ; | |
jnz .НЕ_МЕНЬШЕ ; | |
.МЕНЬШЕ: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_МЕНЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp ecx,edx ; | |
jb .МЕНЬШЕ ; | |
jmp .НЕ_МЕНЬШЕ ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov eax,edx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp edi,1 ; | |
jnz .НЕ_МЕНЬШЕ ; | |
.МЕНЬШЕ: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_МЕНЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
СТРОКА_CX_МЕНЬШЕР_ЧИСЛА_DX_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp cx,dx ; | |
jb .МЕНЬШЕ ; | |
jmp .НЕ_МЕНЬШЕ ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov ax,dx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp di,1 ; | |
jnz .НЕ_МЕНЬШЕ ; | |
.МЕНЬШЕ: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_МЕНЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp cx,dx ; | |
jb .МЕНЬШЕ ; | |
jmp .НЕ_МЕНЬШЕ ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov ax,dx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp di,1 ; | |
jnz .НЕ_МЕНЬШЕ ; | |
.МЕНЬШЕ: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_МЕНЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp ecx,edx ; | |
jb .МЕНЬШЕ ; | |
jmp .НЕ_МЕНЬШЕ ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov eax,edx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp edi,1 ; | |
jnz .НЕ_МЕНЬШЕ ; | |
.МЕНЬШЕ: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_МЕНЬШЕ: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
;==============================================================================} | |
СТРОКА_CX_РАВНА_ЧИСЛУ_DX_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp cx,dx ; | |
jz .РАВНО ; | |
jmp .НЕ_РАВНО ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov ax,dx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp di,0 ; | |
jnz .НЕ_РАВНО ; | |
.РАВНО: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_РАВНО: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp cx,dx ; | |
jz .РАВНО ; | |
jmp .НЕ_РАВНО ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov ax,dx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp di,0 ; | |
jnz .НЕ_РАВНО ; | |
.РАВНО: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_РАВНО: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;--------------------------------------; | |
call ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 ; | |
jz .СТР_ЧИС ; | |
;--------------------------------------; | |
call ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX ; | |
cmp Ecx,Edx ; | |
jz .РАВНО ; | |
jmp .НЕ_РАВНО ; | |
;--------------------------------------; | |
.СТР_ЧИС: | |
;--------------------------------------; | |
mov Eax,Edx ; | |
call СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ ; | |
call ЗАПИСАТЬ_ЧИСЛО_AX_В_СТРОКУ_DX ; | |
call СРАВНИТЬ_СТРОКИ_CX_DX_РЕЗУЛЬТАТ_DI; | |
call УДАЛИТЬ_СТРОКУ_DX ; | |
;--------------------------------------; | |
cmp Edi,0 ; | |
jnz .НЕ_РАВНО ; | |
.РАВНО: mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕ_РАВНО: mov al,0 ; | |
test al,al ; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЧИСЛО_CX_БОЛЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov bx,cx; | |
moV cx,dx; | |
mov dx,bx; | |
call СТРОКА_CX_МЕНЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1; | |
mov ax,0 ; | |
jz .МЕНЬШЕ; | |
mov ax,1; | |
.МЕНЬШЕ: | |
test ax,ax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov bx,cx; | |
moV cx,dx; | |
mov dx,bx; | |
call СТРОКА_CX_МЕНЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1; | |
mov ax,0 ; | |
jz .МЕНЬШЕ; | |
mov ax,1; | |
.МЕНЬШЕ: | |
test ax,ax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov ebx,ecx; | |
moV ecx,edx; | |
mov edx,ebx; | |
call СТРОКА_CX_МЕНЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1; | |
mov eax,0 ; | |
jz .МЕНЬШЕ; | |
mov eax,1; | |
.МЕНЬШЕ: | |
test eax,eax; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЧИСЛО_CX_БОЛЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov bx,cx; | |
moV cx,dx; | |
mov dx,bx; | |
call СТРОКА_CX_МЕНЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1; | |
mov ax,0; | |
jz .МЕНЬШЕ; | |
mov ax,1; | |
.МЕНЬШЕ: | |
test ax,ax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov bx,cx; | |
moV cx,dx; | |
mov dx,bx; | |
call СТРОКА_CX_МЕНЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1; | |
mov ax,0; | |
jz .МЕНЬШЕ; | |
mov ax,1; | |
.МЕНЬШЕ: | |
test ax,ax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov ebx,ecx; | |
moV ecx,edx; | |
mov edx,ebx; | |
call СТРОКА_CX_МЕНЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1; | |
mov eax,0; | |
jz .МЕНЬШЕ; | |
mov eax,1; | |
.МЕНЬШЕ: | |
test eax,eax; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЧИСЛО_CX_МЕНЬШЕ_СТРОКИ_DX_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov bx,cx; | |
mov cx,dx; | |
mov dx,bx; | |
call СТРОКА_CX_БОЛЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1;// СТРОКА DX>ЧИС CX | |
mov ax,0; | |
jz .БОЛЬШЕ; | |
mov ax,1; | |
.БОЛЬШЕ: | |
test ax,ax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov bx,cx; | |
mov cx,dx; | |
mov dx,bx; | |
call СТРОКА_CX_БОЛЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1;// СТРОКА DX>ЧИС CX | |
mov ax,0; | |
jz .БОЛЬШЕ; | |
mov ax,1; | |
.БОЛЬШЕ: | |
test ax,ax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov ebx,ecx; | |
mov ecx,edx; | |
mov edx,ebx; | |
call СТРОКА_CX_БОЛЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1;// СТРОКА DX>ЧИС CX | |
mov eax,0; | |
jz .БОЛЬШЕ; | |
mov eax,1; | |
.БОЛЬШЕ: | |
test eax,eax; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЧИСЛО_CX_МЕНЬШЕР_СТРОКИ_DX_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov bx,cx; | |
mov cx,dx; | |
mov dx,bx; | |
call СТРОКА_CX_БОЛЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1;// СТРОКА DX>ЧИС CX | |
mov ax,0; | |
jz .БОЛЬШЕ; | |
mov ax,1; | |
.БОЛЬШЕ: | |
test ax,ax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov bx,cx; | |
mov cx,dx; | |
mov dx,bx; | |
call СТРОКА_CX_БОЛЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1;// СТРОКА DX>ЧИС CX | |
mov ax,0; | |
jz .БОЛЬШЕ; | |
mov ax,1; | |
.БОЛЬШЕ: | |
test ax,ax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov ebx,ecx; | |
mov ecx,edx; | |
mov edx,ebx; | |
call СТРОКА_CX_БОЛЬШЕ_ЧИСЛА_DX_ФЛАГ_Z_1;// СТРОКА DX>ЧИС CX | |
mov eax,0; | |
jz .БОЛЬШЕ; | |
mov eax,1; | |
.БОЛЬШЕ: | |
test eax,eax; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЧИСЛО_CX_РАВНО_СТРОКИ_DX_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov bx,cx; | |
mov cx,dx; | |
mov dx,bx; | |
call СТРОКА_CX_РАВНА_ЧИСЛУ_DX_ФЛАГ_Z_1; | |
mov ax,0; | |
jz .НЕ_РАВНО; | |
mov ax,1; | |
.НЕ_РАВНО: | |
test ax,ax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov bx,cx; | |
mov cx,dx; | |
mov dx,bx; | |
call СТРОКА_CX_РАВНА_ЧИСЛУ_DX_ФЛАГ_Z_1; | |
mov ax,0; | |
jz .НЕ_РАВНО; | |
mov ax,1; | |
.НЕ_РАВНО: | |
test ax,ax; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov ebx,ecx; | |
mov ecx,edx; | |
mov edx,ebx; | |
call СТРОКА_CX_РАВНА_ЧИСЛУ_DX_ФЛАГ_Z_1; | |
mov eax,0; | |
jz .НЕ_РАВНО; | |
mov eax,1; | |
.НЕ_РАВНО: | |
test eax,eax; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
СТРО_BX_В_ЧИСЛ_BX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,bx; | |
call ПЕРЕВОДИТ_СТРОКУ_DI_В_ЧИСЛО_BX; | |
call ВОЗВРАТИТЬ_BX; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,bx; | |
call ПЕРЕВОДИТ_СТРОКУ_DI_В_ЧИСЛО_BX; | |
call ВОЗВРАТИТЬ_BX; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,ebx; | |
call ПЕРЕВОДИТ_СТРОКУ_DI_В_ЧИСЛО_BX; | |
call ВОЗВРАТИТЬ_BX; | |
popad; | |
ret; | |
END IF;} | |
;} | |
ПЕРЕВОДИТ_СТРОКУ_DI_В_ЧИСЛО_BX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
push si; | |
mov si,di; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov bx,ax; | |
pop si; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
push si; | |
mov si,di; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov bx,ax; | |
pop si; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
push esi; | |
mov esi,edi; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov ebx,eax; | |
pop esi; | |
pop eax; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push dx; | |
push si; | |
xor dx,dx | |
.ЦИКЛ: xor ax,ax | |
mov al,[si];;lodsb | |
inc si; | |
test al,al | |
jz .КЦИКЛ | |
sub ax,'0' | |
shl dx,1 | |
add ax,dx | |
shl dx,2 | |
add dx,ax | |
jmp .ЦИКЛ | |
.КЦИКЛ: mov ax,dx; | |
pop si; | |
pop dx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push dx; | |
push si; | |
xor dx,dx | |
.ЦИКЛ: xor ax,ax | |
mov al,[si];;lodsb | |
inc si; | |
test al,al | |
jz .КЦИКЛ | |
sub ax,'0' | |
shl dx,1 | |
add ax,dx | |
shl dx,2 | |
add dx,ax | |
jmp .ЦИКЛ | |
.КЦИКЛ: mov ax,dx; | |
pop si; | |
pop dx; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edx; | |
push esi; | |
xor edx,edx | |
.ЦИКЛ: xor eax,eax | |
mov al,[esi]; | |
inc esi; | |
test al,al | |
jz .КЦИКЛ | |
sub eax,'0' | |
shl edx,1 | |
add eax,edx | |
shl edx,2 | |
add edx,eax | |
jmp .ЦИКЛ | |
.КЦИКЛ: mov eax,edx; | |
pop esi; | |
pop edx; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ПЕРЕВОДИТ_СТРОКУ_AX_В_ЧИСЛО_DX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
push si; | |
mov si,ax; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov dx,ax; | |
pop si; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
push si; | |
mov si,ax; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov dx,ax; | |
pop si; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
push esi; | |
mov esi,eax; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov edx,eax; | |
pop esi; | |
pop eax; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ПЕРЕВОДИТ_СТРОКУ_AX_В_ЧИСЛО_BX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
push si; | |
mov si,ax; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov bx,ax; | |
pop si; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
push si; | |
mov si,ax; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov bx,ax; | |
pop si; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
push esi; | |
mov esi,eax; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov ebx,eax; | |
pop esi; | |
pop eax; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_BX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov bx,ax; | |
pop ax; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov bx,ax; | |
pop ax; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov ebx,eax; | |
pop eax; | |
ret; | |
END IF ;} | |
;==============================================================================} | |
ПЕРЕВОДИТ_СТРОКУ_CX_В_ЧИСЛО_CX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
push si; | |
mov si,cx; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov cx,ax; | |
pop si; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
push si; | |
mov si,cx; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov cx,ax; | |
pop si; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
push esi; | |
mov esi,ecx; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov ecx,eax; | |
pop esi; | |
pop eax; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ПЕРЕВОДИТ_СТРОКУ_DX_В_ЧИСЛО_DX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
push si; | |
mov si,dx; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov dx,ax; | |
pop si; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
push si; | |
mov si,dx; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov dx,ax; | |
pop si; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
push esi; | |
mov esi,edx; | |
call ПЕРЕВОДИТ_СТРОКУ_SI_В_ЧИСЛО_AX; | |
mov edx,eax; | |
pop esi; | |
pop eax; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ПЕРЕВОДИТ_СТРОКУ_DI_В_БОЛЬШИЕ_БУКВЫ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
.ЦИКЛ: mov al,[di]; | |
test al,al ;// Если конец строки то выход | |
JZ .КЦИКЛ ; | |
call ПРЕОБРАЗУЕТ_МАЛ_БУК_AL_В_БОЛ; | |
mov [di],al; | |
inc DI ;// Увеличиывкем указатель на читаемый символ | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
.ЦИКЛ: mov al,[di]; | |
test al,al ;// Если конец строки то выход | |
JZ .КЦИКЛ ; | |
call ПРЕОБРАЗУЕТ_МАЛ_БУК_AL_В_БОЛ; | |
mov [di],al; | |
inc DI ;// Увеличиывкем указатель на читаемый символ | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
.ЦИКЛ: mov al,[edi]; | |
test al,al ;// Если конец строки то выход | |
JZ .КЦИКЛ ; | |
call ПРЕОБРАЗУЕТ_МАЛ_БУК_AL_В_БОЛ; | |
mov [edi],al; | |
inc eDI ;// Увеличиывкем указатель на читаемый символ | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
ПЕРЕВОДИТ_СТРОКУ_SI_В_БОЛЬШИЕ_БУКВЫ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
mov di,SI | |
call ПЕРЕВОДИТ_СТРОКУ_DI_В_БОЛЬШИЕ_БУКВЫ; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
mov di,SI | |
call ПЕРЕВОДИТ_СТРОКУ_DI_В_БОЛЬШИЕ_БУКВЫ; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
mov edi,eSI | |
call ПЕРЕВОДИТ_СТРОКУ_DI_В_БОЛЬШИЕ_БУКВЫ; | |
pop edi; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ДОБ_AL_В_СТРО_DI:;--------------------- | |
ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI :;{ // тут нужны переделки глобальные | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
;----------------; | |
call РАЗМЕР_DX_УЧАСТКА_ПАМЯТИ_DI; // Рассчитываем Максимальный адрес | |
add Dx,di ; | |
;----------------; | |
Call ВОЗВРАЩАЕТ_АДРЕС_DI_0БАЙТА_СТРОКИ_DI;// Перемещаемся в конец строки | |
cmp Dx,di ; // Можно ли дописать ? | |
JBE .НЕЛЬЗЯ ; // Если больше допустимого нельзя | |
;----------------; | |
.МОЖНО: | |
;----------------; | |
mov [DI],AL ; // Записываем символ вместо 0 конца строки | |
inc DI ; // Увеличиваем указатель на читаемый символ | |
mov byte [DI],0 ; // Дописываем ноль в конец строки | |
mov al,1 ; | |
test al,al ; // JNZ Значит добавилося | |
jmp .ВЫХОД ; // Поф на Скорость ПОтом понятность вжнее | |
;----------------; | |
.НЕЛЬЗЯ: | |
;----------------; | |
mov al,0 ; | |
test al,al ; // JZ Значит НЕ добавилося | |
;----------------; | |
.ВЫХОД: | |
popad | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad | |
;----------------; | |
call РАЗМЕР_DX_УЧАСТКА_ПАМЯТИ_DI; // Рассчитываем Максимальный адрес | |
add Dx,di ; | |
;----------------; | |
Call ВОЗВРАЩАЕТ_АДРЕС_DI_0БАЙТА_СТРОКИ_DI;// Перемещаемся в конец строки | |
cmp Dx,di ; // Можно ли дописать ? | |
JBE .НЕЛЬЗЯ ; // Если больше допустимого нельзя | |
;----------------; | |
.МОЖНО: | |
;----------------; | |
mov [DI],AL ; // Записываем символ вместо 0 конца строки | |
inc DI ; // Увеличиваем указатель на читаемый символ | |
mov byte [DI],0 ; // Дописываем ноль в конец строки | |
mov al,1 ; | |
test al,al ; // JNZ Значит добавилося | |
jmp .ВЫХОД ; // Поф на Скорость ПОтом понятность вжнее | |
;----------------; | |
.НЕЛЬЗЯ: | |
;----------------; | |
mov al,0 ; | |
test al,al ; // JZ Значит НЕ добавилося | |
;----------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;----------------; | |
call РАЗМЕР_DX_УЧАСТКА_ПАМЯТИ_DI; // Рассчитываем Максимальный адрес | |
add eDx,edi ; | |
;----------------; | |
Call ВОЗВРАЩАЕТ_АДРЕС_DI_0БАЙТА_СТРОКИ_DI;// Перемещаемся в конец строки | |
cmp eDx,edi ; // Можно ли дописать ? | |
JBE .НЕЛЬЗЯ ; // Если больше допустимого нельзя | |
;----------------; | |
.МОЖНО: | |
;----------------; | |
mov [eDI],AL ; // Записываем символ вместо 0 конца строки | |
inc eDI ; // Увеличиваем указатель на читаемый символ | |
mov [eDI],byte 0 ; // Дописываем ноль в конец строки | |
mov al,1 ; | |
test al,al ; // JNZ Значит добавилося | |
jmp .ВЫХОД ; // Поф на Скорость ПОтом понятность вжнее | |
;----------------; | |
.НЕЛЬЗЯ: | |
;----------------; | |
mov al,0 ; | |
test al,al ; // JZ Значит НЕ добавилося | |
;----------------; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ДОБ_AL_В_СТРО_SI:;--------------------- | |
ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_SI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
mov Di,Si; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI | |
pop di; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
mov Di,Si; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI | |
pop di; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
mov eDi,eSi; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI | |
pop edi; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
СОЗДАТЬ_CX_КОПИЮ_СТРОКИ_DX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
push ax; | |
mov di,dx; | |
call РАЗМЕР_AX_УЧАСТКА_ПАМЯТИ_DI | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_AX_БАЙТ; | |
mov cx,di; | |
call ЗАПИСАТЬ_СТРОКУ_DX_В_СТРОКУ_CX | |
pop ax; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
push ax; | |
mov di,dx; | |
call РАЗМЕР_AX_УЧАСТКА_ПАМЯТИ_DI | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_AX_БАЙТ; | |
mov cx,di; | |
call ЗАПИСАТЬ_СТРОКУ_DX_В_СТРОКУ_CX | |
pop ax; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
push eax; | |
mov edi,edx; | |
call РАЗМЕР_AX_УЧАСТКА_ПАМЯТИ_DI | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_AX_БАЙТ; | |
mov ecx,edi; | |
call ЗАПИСАТЬ_СТРОКУ_DX_В_СТРОКУ_CX | |
pop eax; | |
pop edi; | |
ret; | |
END IF;} | |
;} | |
СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_AX_БАЙТ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov di,ax; | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov di,ax; | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov edi,eax; | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI; | |
ret; | |
END IF ;} | |
;==============================================================================} | |
СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_DI_БАЙТ :;{ | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI; | |
ret; | |
;==============================================================================} | |
СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_1024_БАЙТ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov di,1024; | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov di,1024; | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov edi,1024; | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI; | |
ret; | |
END IF;} | |
;==============================================================================} | |
СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_1024_БАЙТ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di | |
mov di,1024; | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI; | |
mov BX,DI; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di | |
mov di,1024; | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI; | |
mov BX,DI; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi | |
mov edi,1024; | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI; | |
mov eBX,eDI; | |
pop edi; | |
ret; | |
END IF;} | |
;==============================================================================} | |
СОЗДАТЬ_СТРОКУ_SI_ДЛИНОЙ_1024_БАЙТ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_16_БАЙТ; | |
mov si,di; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_16_БАЙТ; | |
mov si,di; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_16_БАЙТ; | |
mov esi,edi; | |
pop edi; | |
ret; | |
END IF;} | |
;==============================================================================} | |
СОЗ_СТР_DI_16:;------------------------ | |
СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_16_БАЙТ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
mov di,16; | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI; | |
test di,di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
mov di,16; | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI; | |
test di,di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
mov edi,16; | |
call ВЫДЕЛИТЬ_УЧАСТОК_ПАМЯТИ_DI_РАЗ_DI; | |
test edi,edi; | |
ret; | |
END IF;} | |
;==============================================================================} | |
СОЗДАТЬ_СТРОКУ_DX_ДЛИНОЙ_16_БАЙТ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_16_БАЙТ; | |
mov DX,di; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_16_БАЙТ; | |
mov DX,di; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_16_БАЙТ; | |
mov eDX,edi; | |
pop edi; | |
ret; | |
END IF;} | |
;==============================================================================} | |
СОЗДАТЬ_СТРОКУ_BX_ДЛИНОЙ_16_БАЙТ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_16_БАЙТ; | |
mov BX,di; | |
pop di; | |
ret; | |
End IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_16_БАЙТ; | |
mov BX,di; | |
pop di; | |
ret; | |
End IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_16_БАЙТ; | |
mov eBX,edi; | |
pop edi; | |
ret; | |
End IF;} | |
;==============================================================================} | |
СОЗДАТЬ_СТРОКУ_SI_ДЛИНОЙ_16_БАЙТ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_16_БАЙТ; | |
mov SI,di; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_16_БАЙТ; | |
mov SI,di; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
call СОЗДАТЬ_СТРОКУ_DI_ДЛИНОЙ_16_БАЙТ; | |
mov eSI,edi; | |
pop edi; | |
ret; | |
END IF;} | |
;==============================================================================} | |
УДАЛИТЬ_СТРОКУ_DI :;{ | |
call ОСВОБОЖДЕНИЕ_УЧАСТКА_ПАМЯТИ_DI; | |
ret; | |
;==============================================================================} | |
УДАЛИТЬ_СТРОКУ_SI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,SI; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,SI; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,eSI; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
УДАЛИТЬ_СТРОКУ_AX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,ax; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,ax; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,eax; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
УДАЛИТЬ_СТРОКУ_DX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,Dx; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,Dx; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,eDx; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
УДАЛИТЬ_СТРОКУ_CX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,Cx; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,Cx; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,eCx; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
УДАЛИТЬ_СТРОКУ_BX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,bx; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,bx; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,ebx; | |
call УДАЛИТЬ_СТРОКУ_DI; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЗАПИСАТЬ_СТРОКУ_AX_В_СТРОКУ_SI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,ax; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,ax; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,eax; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЗАПИСАТЬ_СТРОКУ_CX_В_СТРОКУ_DX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,Cx; | |
mov si,Dx; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,Cx; | |
mov si,Dx; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,eCx; | |
mov esi,eDx; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЗАПИСАТЬ_СТРОКУ_CX_В_СТРОКУ_AX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,Cx; | |
mov si,ax; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,Cx; | |
mov si,ax; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,eCx; | |
mov esi,eax; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЗАПИСАТЬ_СТРОКУ_DX_В_СТРОКУ_CX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,dx; | |
mov si,cx; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,dx; | |
mov si,cx; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,edx; | |
mov esi,ecx; | |
call ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЗАПИСАТЬ_СТРОКУ_DI_В_СТРОКУ_SI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;----------------- | |
mov CX,DI ;// Запоминаем адрес строки DI в CX | |
CALL ВОЗАРАЩАЕТ_В_DI_ДЛИНУ_СТРОКИ_DI;// ПОлучаем длину строки DI | |
mov AX,DI ;// Записываем длину строки DI В AX | |
mov DI,CX ;// Востаналвиаем адерс строки DI | |
;----------------- | |
.ЦИКЛ: | |
test ax,ax ;// Проверяем длину строки | |
JZ .КЦИКЛ ;// Если счетчик равн нулю выход; | |
mov CL,[DI] ;// Читаем символ из строки DI | |
mov [SI],CL ;// Записываем символ в строку SI | |
inc DI ;// Увеличиваем указатель строки DI | |
INC SI ;// Увеличиваем указатель строки SI | |
DEC AX ;// Уменьшаем счетчик количества скопированых букв | |
JMP .ЦИКЛ ; | |
.КЦИКЛ: | |
mov Byte [SI],0 ; | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;----------------- | |
mov CX,DI ;// Запоминаем адрес строки DI в CX | |
CALL ВОЗАРАЩАЕТ_В_DI_ДЛИНУ_СТРОКИ_DI;// ПОлучаем длину строки DI | |
mov AX,DI ;// Записываем длину строки DI В AX | |
mov DI,CX ;// Востаналвиаем адерс строки DI | |
;----------------- | |
.ЦИКЛ: | |
test ax,ax ;// Проверяем длину строки | |
JZ .КЦИКЛ ;// Если счетчик равн нулю выход; | |
mov CL,[DI] ;// Читаем символ из строки DI | |
mov [SI],CL ;// Записываем символ в строку SI | |
inc DI ;// Увеличиваем указатель строки DI | |
INC SI ;// Увеличиваем указатель строки SI | |
DEC AX ;// Уменьшаем счетчик количества скопированых букв | |
JMP .ЦИКЛ ; | |
.КЦИКЛ: | |
mov Byte [SI],0 ; | |
popad ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;----------------- | |
mov ECX,EDI ;// Запоминаем адрес строки DI в CX | |
CALL ВОЗАРАЩАЕТ_В_DI_ДЛИНУ_СТРОКИ_DI;// ПОлучаем длину строки DI | |
mov EAX,EDI ;// Записываем длину строки DI В AX | |
mov EDI,ECX ;// Востаналвиаем адерс строки DI | |
;----------------- | |
.ЦИКЛ: | |
test eax,eax ;// Проверяем длину строки | |
JZ .КЦИКЛ ;// Если счетчик равн нулю выход; | |
mov CL,[eDI] ;// Читаем символ из строки DI | |
mov [eSI],CL ;// Записываем символ в строку SI | |
inc eDI ;// Увеличиваем указатель строки DI | |
INC eSI ;// Увеличиваем указатель строки SI | |
DEC eAX ;// Уменьшаем счетчик количества скопированых букв | |
JMP .ЦИКЛ ; | |
.КЦИКЛ: | |
mov Byte [eSI],0 ; | |
popad ; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
ЕСЛИ_СТРОКА_AX_ЧИСЛО_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push si; | |
mov si,ax; | |
call ЕСЛИ_СТРОКА_SI_ЧИСЛО_ФЛАГ_Z_1; | |
pop si; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push si; | |
mov si,ax; | |
call ЕСЛИ_СТРОКА_SI_ЧИСЛО_ФЛАГ_Z_1; | |
pop si; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push esi; | |
mov esi,eax; | |
call ЕСЛИ_СТРОКА_SI_ЧИСЛО_ФЛАГ_Z_1; | |
pop esi; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
ЕСЛИ_СТРОКА_CX_ЧИСЛО_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push si; | |
mov si,Cx; | |
call ЕСЛИ_СТРОКА_SI_ЧИСЛО_ФЛАГ_Z_1; | |
pop si; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push si; | |
mov si,Cx; | |
call ЕСЛИ_СТРОКА_SI_ЧИСЛО_ФЛАГ_Z_1; | |
pop si; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push esi; | |
mov esi,eCx; | |
call ЕСЛИ_СТРОКА_SI_ЧИСЛО_ФЛАГ_Z_1; | |
pop esi; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЕСЛИ_СТРОКА_DX_ЧИСЛО_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push si; | |
mov si,Dx; | |
call ЕСЛИ_СТРОКА_SI_ЧИСЛО_ФЛАГ_Z_1; | |
pop si; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push si; | |
mov si,Dx; | |
call ЕСЛИ_СТРОКА_SI_ЧИСЛО_ФЛАГ_Z_1; | |
pop si; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push esi; | |
mov esi,eDx; | |
call ЕСЛИ_СТРОКА_SI_ЧИСЛО_ФЛАГ_Z_1; | |
pop esi; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЕСЛИ_СТРОКА_SI_ЧИСЛО_ФЛАГ_Z_1 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
.ЦИКЛ: | |
mov al,[si]; | |
test al,al ; | |
jz .ЧИСЛО; | |
call ЕСЛИ_В_AL_ЦИФРА_ФЛАГ_Z_1 | |
jz .НЕ_ЧИСЛО; | |
inc si; | |
jmp .ЦИКЛ; | |
.НЕ_ЧИСЛО: | |
mov al,0; | |
test al,al; | |
jmp .ВЫХОД; | |
.ЧИСЛО: | |
mov al,1; | |
test al,al; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
.ЦИКЛ: | |
mov al,[si]; | |
test al,al ; | |
jz .ЧИСЛО; | |
call ЕСЛИ_В_AL_ЦИФРА_ФЛАГ_Z_1 | |
jz .НЕ_ЧИСЛО; | |
inc si; | |
jmp .ЦИКЛ; | |
.НЕ_ЧИСЛО: | |
mov al,0; | |
test al,al; | |
jmp .ВЫХОД; | |
.ЧИСЛО: | |
mov al,1; | |
test al,al; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
.ЦИКЛ: | |
mov al,[esi]; | |
test al,al ; | |
jz .ЧИСЛО; | |
call ЕСЛИ_В_AL_ЦИФРА_ФЛАГ_Z_1 | |
jz .НЕ_ЧИСЛО; | |
inc esi; | |
jmp .ЦИКЛ; | |
.НЕ_ЧИСЛО: | |
mov al,0; | |
test al,al; | |
jmp .ВЫХОД; | |
.ЧИСЛО: | |
mov al,1; | |
test al,al; | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
УДАЛИТЬ_БУКВУ_В_НАЧАЛЕ_СТРОКИ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov si,di ; | |
inc di ; | |
mov al,[si] ; | |
test al,al ; | |
jz .КЦИКЛ ; | |
.ЦИКЛ: mov al,[di] ; | |
mov [SI],Al ; | |
test al,al ; | |
jz .КЦИКЛ ; | |
inc di ; | |
inc si ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov si,di ; | |
inc di ; | |
mov al,[si] ; | |
jz .КЦИКЛ ; | |
.ЦИКЛ: mov al,[di] ; | |
mov [SI],Al ; | |
test al,al ; | |
jz .КЦИКЛ ; | |
inc di ; | |
inc si ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov esi,edi ; | |
inc edi ; | |
mov al,[esi] ; | |
jz .КЦИКЛ ; | |
.ЦИКЛ: mov al,[edi] ; | |
mov [eSI],Al ; | |
test al,al ; | |
jz .КЦИКЛ ; | |
inc edi ; | |
inc esi ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
END IF ;} | |
;} | |
УДАЛИТЬ_БУКВУ_В_КОНЦЕ_СТРОКИ_AX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
mov di,ax; | |
Call УДАЛИТЬ_БУКВУ_В_КОНЦЕ_СТРОКИ;// Перемещаемся в конец строки | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
mov di,ax; | |
Call УДАЛИТЬ_БУКВУ_В_КОНЦЕ_СТРОКИ;// Перемещаемся в конец строки | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
mov edi,eax; | |
Call УДАЛИТЬ_БУКВУ_В_КОНЦЕ_СТРОКИ;// Перемещаемся в конец строки | |
pop edi ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
УДАЛИТЬ_БУКВУ_В_КОНЦЕ_СТРОКИ_SI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
mov di,si; | |
Call УДАЛИТЬ_БУКВУ_В_КОНЦЕ_СТРОКИ;// Перемещаемся в конец строки | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
mov di,si; | |
Call УДАЛИТЬ_БУКВУ_В_КОНЦЕ_СТРОКИ;// Перемещаемся в конец строки | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
mov edi,esi ; | |
Call УДАЛИТЬ_БУКВУ_В_КОНЦЕ_СТРОКИ;// Перемещаемся в конец строки | |
pop edi ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
УДАЛИТЬ_БУКВУ_В_КОНЦЕ_СТРОКИ :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di ; | |
Call ВОЗВРАЩАЕТ_АДРЕС_DI_0БАЙТА_СТРОКИ_DI;// Перемещаемся в конец строки | |
dec DI ;// перемещаемся на 1 символ назад | |
mov byte [DI],0 ;// Записываем символ 0 вместо последней буквы в строке | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di ; | |
Call ВОЗВРАЩАЕТ_АДРЕС_DI_0БАЙТА_СТРОКИ_DI;// Перемещаемся в конец строки | |
dec DI ;// перемещаемся на 1 символ назад | |
mov byte [DI],0 ;// Записываем символ 0 вместо последней буквы в строке | |
pop di ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi ; | |
Call ВОЗВРАЩАЕТ_АДРЕС_DI_0БАЙТА_СТРОКИ_DI;// Перемещаемся в конец строки | |
dec eDI ;// перемещаемся на 1 символ назад | |
mov byte [eDI],0 ;// Записываем символ 0 вместо последней буквы в строке | |
pop edi ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ВЕРНУТЬ_КОНЕЦ_СТРОКИ_SI_В_SI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push cx ; | |
.ЦИКЛ: mov cl,[si]; | |
test cl,cl ;// Если конец строки то выход | |
JZ .КЦИКЛ ; | |
inc sI ;// Увеличиывкем указатель на читаемый символ | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
pop cx ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push cx ; | |
.ЦИКЛ: mov cl,[si]; | |
test cl,cl ;// Если конец строки то выход | |
JZ .КЦИКЛ ; | |
inc sI ;// Увеличиывкем указатель на читаемый символ | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
pop cx ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push ecx ; | |
.ЦИКЛ: mov cl,[esi]; | |
test cl,cl ;// Если конец строки то выход | |
JZ .КЦИКЛ ; | |
inc esI ;// Увеличиывкем указатель на читаемый символ | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
pop ecx ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
СРАВНИТЬ_СТРОКИ_SI_DI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
.ЦИКЛ: mov al,[di] ; | |
mov ah,[si] ; | |
cmp al,ah ; | |
jnz .НЕРАВНО ; | |
TEST al,al ; | |
JZ .РАВНО ; | |
INC SI ; | |
INC DI ; | |
JMP .ЦИКЛ ; | |
.РАВНО: | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕРАВНО: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
.ЦИКЛ: mov al,[di] ; | |
mov ah,[si] ; | |
cmp al,ah ; | |
jnz .НЕРАВНО ; | |
TEST al,al ; | |
JZ .РАВНО ; | |
INC SI ; | |
INC DI ; | |
JMP .ЦИКЛ ; | |
.РАВНО: | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕРАВНО: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
.ЦИКЛ: mov al,[edi] ; | |
mov ah,[esi] ; | |
cmp al,ah ; | |
jnz .НЕРАВНО ; | |
TEST al,al ; | |
JZ .РАВНО ; | |
INC eSI ; | |
INC eDI ; | |
JMP .ЦИКЛ ; | |
.РАВНО: | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.НЕРАВНО: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;{ ОПИСАНИЕ | |
;} | |
;==============================================================================} | |
ВСТАВКА_СИМВОЛА_AL_ПО_АДРЕСУ_SI_ДО_0:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; Вставляет символ в строку позиция | |
mov cl,[si] ; | |
mov [si],al ; | |
.ЦИКЛ: inc si ; | |
mov al,[si] ; | |
mov [si],cl ; | |
mov cl,al ; | |
test cl,cl ; | |
jz .КЦИКЛА ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛА: inc si ; | |
mov byte[si],0 ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; Вставляет символ в строку позиция | |
mov cl,[si] ; | |
mov [si],al ; | |
.ЦИКЛ: inc si ; | |
mov al,[si] ; | |
mov [si],cl ; | |
mov cl,al ; | |
test cl,cl ; | |
jz .КЦИКЛА ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛА: inc si ; | |
mov byte[si],0 ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; Вставляет символ в строку позиция | |
mov cl,[esi] ; | |
mov [esi],al ; | |
.ЦИКЛ: inc esi ; | |
mov al,[esi] ; | |
mov [esi],cl ; | |
mov cl,al ; | |
test cl,cl ; | |
jz .КЦИКЛА ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛА: inc esi ; | |
mov byte[esi],0 ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
УДАЛЕНИЕ_ИЗ_АДРЕСА_SI_СИМВОЛА_ДО_0 :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; Удаляет символ из строки указатель на удаляемый символ SI | |
mov al,[si] ; | |
test al,al ; | |
JZ .КЦИКЛ ; | |
dec si ; | |
mov di,si ; | |
inc si ; | |
.ЦИКЛ: mov al,[si] ; | |
mov [di],al ; | |
inc si ; | |
inc di ; | |
test al,al ; | |
jnz .ЦИКЛ ; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; Удаляет символ из строки указатель на удаляемый символ SI | |
mov al,[si] ; | |
test al,al ; | |
JZ .КЦИКЛ ; | |
dec si ; | |
mov di,si ; | |
inc si ; | |
.ЦИКЛ: mov al,[si] ; | |
mov [di],al ; | |
inc si ; | |
inc di ; | |
test al,al ; | |
jnz .ЦИКЛ ; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; Удаляет символ из строки указатель на удаляемый символ SI | |
mov al,[esi] ; | |
test al,al ; | |
JZ .КЦИКЛ ; | |
dec esi ; | |
mov edi,esi ; | |
inc esi ; | |
.ЦИКЛ: mov al,[esi] ; | |
mov [edi],al ; | |
inc esi ; | |
inc edi ; | |
test al,al ; | |
jnz .ЦИКЛ ; | |
.КЦИКЛ: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
НАЙТИ_КОНЕЦ_СТРОКИ_С_АДРЕСА_SI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push cx; | |
.ЦИКЛ: mov cl,[si]; | |
test cl,cl ;// Если конец строки то выход | |
JZ .КЦИКЛ ; | |
inc sI ;// Увеличиывкем указатель на читаемый символ | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
pop cx; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push cx; | |
.ЦИКЛ: mov cl,[si]; | |
test cl,cl ;// Если конец строки то выход | |
JZ .КЦИКЛ ; | |
inc sI ;// Увеличиывкем указатель на читаемый символ | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
pop cx; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push ecx; | |
.ЦИКЛ: mov cl,[esi]; | |
test cl,cl ;// Если конец строки то выход | |
JZ .КЦИКЛ ; | |
inc esI ;// Увеличиывкем указатель на читаемый символ | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
pop ecx; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
ПОИСК_БУКВЫ_AL_В_СТРОКЕ_SI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
.ЦИКЛ: mov ah,[si]; | |
test ah,ah ; | |
jz .КЦИКЛ ; | |
cmp al,ah ; | |
jz .ЕСТЬ ; | |
inc SI ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ЕСТЬ: | |
mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
.ЦИКЛ: mov ah,[si]; | |
test ah,ah ; | |
jz .КЦИКЛ ; | |
cmp al,ah ; | |
jz .ЕСТЬ ; | |
inc SI ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ЕСТЬ: | |
mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
.ЦИКЛ: mov ah,[esi]; | |
test ah,ah ; | |
jz .КЦИКЛ ; | |
cmp al,ah ; | |
jz .ЕСТЬ ; | |
inc eSI ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ЕСТЬ: | |
mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ПОИСК_ДВОЙНОЙ_БУКВЫ_AX_В_СТРОКЕ_SI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
.ЦИКЛ: mov cx,[si]; | |
test cx,cx ; | |
jz .КЦИКЛ ; | |
test ch,ch ; | |
jz .КЦИКЛ ; | |
cmp ax,cx ; | |
jz .ЕСТЬ ; | |
inc SI ; | |
inc SI ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ЕСТЬ: | |
mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
.ЦИКЛ: mov cx,[si]; | |
test cx,cx ; | |
jz .КЦИКЛ ; | |
test ch,ch ; | |
jz .КЦИКЛ ; | |
cmp ax,cx ; | |
jz .ЕСТЬ ; | |
inc SI ; | |
inc SI ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ЕСТЬ: | |
mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
.ЦИКЛ: mov cx,[si]; | |
test cx,cx ; | |
jz .КЦИКЛ ; | |
test ch,ch ; | |
jz .КЦИКЛ ; | |
cmp ax,cx ; | |
jz .ЕСТЬ ; | |
inc SI ; | |
inc SI ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ЕСТЬ: | |
mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ПОИСК_ДВОЙНОЙ_БУКВЫ_AX_В_СТРОКЕ_SI_ШАГ2 :;{ Возвращает CX 2 цифру в BX Номер в списке | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov bx,1 ; | |
.ЦИКЛ: mov cx,[si]; | |
test cx,cx ; | |
jz .КЦИКЛ ; | |
test ch,ch ; | |
jz .КЦИКЛ ; | |
cmp ax,cx ; | |
jz .ЕСТЬ ; | |
inc SI ; | |
inc SI ; | |
inc SI ; | |
inc SI ; | |
inc bx ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ЕСТЬ: | |
inc SI ; | |
inc SI ; | |
mov cx,[si]; | |
call ВОЗВРАТИТЬ_CX; | |
call ВОЗВРАТИТЬ_BX; | |
mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov bx,1 ; | |
.ЦИКЛ: mov cx,[si]; | |
test cx,cx ; | |
jz .КЦИКЛ ; | |
test ch,ch ; | |
jz .КЦИКЛ ; | |
cmp ax,cx ; | |
jz .ЕСТЬ ; | |
inc SI ; | |
inc SI ; | |
inc SI ; | |
inc SI ; | |
inc bx ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ЕСТЬ: | |
inc SI ; | |
inc SI ; | |
mov cx,[si]; | |
call ВОЗВРАТИТЬ_CX; | |
call ВОЗВРАТИТЬ_BX; | |
mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov ebx,1 ; | |
.ЦИКЛ: mov cx,[si]; | |
test cx,cx ; | |
jz .КЦИКЛ ; | |
test ch,ch ; | |
jz .КЦИКЛ ; | |
cmp ax,cx ; | |
jz .ЕСТЬ ; | |
inc SI ; | |
inc SI ; | |
inc SI ; | |
inc SI ; | |
inc bx ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ЕСТЬ: | |
inc SI ; | |
inc SI ; | |
mov cx,[si]; | |
call ВОЗВРАТИТЬ_CX; | |
call ВОЗВРАТИТЬ_BX; | |
mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ПОИСК_AX_В_СТР_SI:;-------------------- | |
ПОИСК_ДВОЙНОЙ_ЦИФРЫ_AX_В_СТРОКЕ_SI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
.ЦИКЛ: mov cx,[si]; | |
test cx,cx ; | |
jz .КЦИКЛ ; | |
cmp ax,cx ; | |
jz .ЕСТЬ ; | |
inc SI ; | |
inc SI ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ЕСТЬ: | |
mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
.ЦИКЛ: mov cx,[si]; | |
test cx,cx ; | |
jz .КЦИКЛ ; | |
cmp ax,cx ; | |
jz .ЕСТЬ ; | |
inc SI ; | |
inc SI ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ЕСТЬ: | |
mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
.ЦИКЛ: mov cx,[esi]; | |
test cx,cx ; | |
jz .КЦИКЛ ; | |
cmp ax,cx ; | |
jz .ЕСТЬ ; | |
inc eSI ; | |
inc eSI ; | |
jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
.ЕСТЬ: | |
mov al,1 ; | |
test al,al ; | |
.ВЫХОД: | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ВОЗАРАЩАЕТ_В_DI_ДЛИНУ_СТРОКИ_DI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
mov ax,DI; | |
Call ВОЗВРАЩАЕТ_АДРЕС_DI_0БАЙТА_СТРОКИ_DI;// Перемещаемся в конец строки | |
sub DI,ax; | |
test di,di; | |
pop ax ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
mov ax,DI; | |
Call ВОЗВРАЩАЕТ_АДРЕС_DI_0БАЙТА_СТРОКИ_DI;// Перемещаемся в конец строки | |
sub DI,ax; | |
test di,di; | |
pop ax ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
mov eax,eDI; | |
Call ВОЗВРАЩАЕТ_АДРЕС_DI_0БАЙТА_СТРОКИ_DI;// Перемещаемся в конец строки | |
sub eDI,eax; | |
test edi,edi; | |
pop eax ; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
ДЛИНА_СТРОКИ_DX_В_CX: ;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
mov di,dx; | |
call ВОЗАРАЩАЕТ_В_CX_ДЛИНУ_СТРОКИ_DI; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
mov di,dx; | |
call ВОЗАРАЩАЕТ_В_CX_ДЛИНУ_СТРОКИ_DI; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eDi; | |
mov edi,edx; | |
call ВОЗАРАЩАЕТ_В_CX_ДЛИНУ_СТРОКИ_DI; | |
pop edi; | |
ret; | |
END IF;} | |
;} | |
ДЛИНА_СТРОКИ_AX_В_CX: ;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
mov di,ax; | |
call ВОЗАРАЩАЕТ_В_CX_ДЛИНУ_СТРОКИ_DI; | |
pop di; | |
ret; | |
END iF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
mov di,ax; | |
call ВОЗАРАЩАЕТ_В_CX_ДЛИНУ_СТРОКИ_DI; | |
pop di; | |
ret; | |
END iF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
mov edi,eax; | |
call ВОЗАРАЩАЕТ_В_CX_ДЛИНУ_СТРОКИ_DI; | |
pop edi; | |
ret; | |
END iF;} | |
;} | |
ВОЗАРАЩАЕТ_В_CX_ДЛИНУ_СТРОКИ_DI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
push di; | |
mov ax,DI; | |
Call ВОЗВРАЩАЕТ_АДРЕС_DI_0БАЙТА_СТРОКИ_DI;// Перемещаемся в конец строки | |
sub DI,ax; | |
mov cx,di; | |
test cx,cx; | |
pop di ; | |
pop ax ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
push di; | |
mov ax,DI; | |
Call ВОЗВРАЩАЕТ_АДРЕС_DI_0БАЙТА_СТРОКИ_DI;// Перемещаемся в конец строки | |
sub DI,ax; | |
mov cx,di; | |
test cx,cx; | |
pop di ; | |
pop ax ; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
push edi; | |
mov eax,eDI; | |
Call ВОЗВРАЩАЕТ_АДРЕС_DI_0БАЙТА_СТРОКИ_DI;// Перемещаемся в конец строки | |
sub eDI,eax; | |
mov ecx,edi; | |
test ecx,ecx; | |
pop edi ; | |
pop eax ; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
ВОЗВРАЩАЕТ_АДРЕС_DI_0БАЙТА_СТРОКИ_DI:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push cx; | |
.ЦИКЛ: mov cl,[di]; | |
test cl,cl ;// Если конец строки то выход | |
JZ .КЦИКЛ ; | |
inc DI ;// Увеличиывкем указатель на читаемый символ | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
pop cx; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push cx; | |
.ЦИКЛ: mov cl,[di]; | |
test cl,cl ;// Если конец строки то выход | |
JZ .КЦИКЛ ; | |
inc DI ;// Увеличиывкем указатель на читаемый символ | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
pop cx; | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push ecx; | |
.ЦИКЛ: mov cl,[edi]; | |
test cl,cl ;// Если конец строки то выход | |
JZ .КЦИКЛ ; | |
inc eDI ;// Увеличиывкем указатель на читаемый символ | |
Jmp .ЦИКЛ ; | |
.КЦИКЛ: | |
pop ecx; | |
ret ; | |
END IF;} | |
;==============================================================================} | |
ЧИТ_СЛОВО_С_SI_В_DX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ЧИТАЕТ_СЛОВО_С_АДР_SI_ВОЗ_СЛОВО_DI; | |
mov DX,DI ; | |
call ВОЗВРАТИТЬ_DX ; // Возврвщает адрес на строку | |
test dx,dx ; // Содержащию прочитаное слово | |
popad ; // Если прочитать ек удалося JZ | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ЧИТАЕТ_СЛОВО_С_АДР_SI_ВОЗ_СЛОВО_DI; | |
mov DX,DI ; | |
call ВОЗВРАТИТЬ_DX ; // Возврвщает адрес на строку | |
test dx,dx ; // Содержащию прочитаное слово | |
popad ; // Если прочитать ек удалося JZ | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ЧИТАЕТ_СЛОВО_С_АДР_SI_ВОЗ_СЛОВО_DI; | |
mov EDX,EDI ; | |
call ВОЗВРАТИТЬ_DX ; // Возврвщает адрес на строку | |
test Edx,Edx ; // Содержащию прочитаное слово | |
popad ; // Если прочитать ек удалося JZ | |
ret ; | |
END IF;} | |
;} | |
ЧИТАЕТ_СЛОВО_С_АДР_SI_ВОЗ_СЛОВО_DI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; { ОПИСАНИЕ | |
;------------------------------------------------------------------- | |
; SI - Указатель на символ с котрого нужно попытаться прочитать | |
; DI - Возвращаемое прочитаное слово в случае неудачи 0 | |
; Длина слова максимально 16 байт | |
;------------------------------------------------------------------} | |
;---------------------; // Красота )))))) | |
mov DI,0 ; // ПО умолчанию резульатт 0 | |
;---------------------; | |
test si,si ; // А почему бы тут не устроить проверку на ноль ? | |
jz .ВЫХОД ; // Если у читаемого символа адрес 0 выход | |
;---------------------; | |
mov al,[si] ; | |
call AL_ЭТО_БУКВА ; // Проверяет являеться ли символ буквой | |
jz .ВЫХОД ; // Если не буква то выход | |
;---------------------; | |
call СОЗ_СТР_DI_16 ; // Создаем строку с ответом DI длиной 16 | |
jz .ВЫХОД ; // Если создать строку не удалося выход | |
;---------------------; | |
.ЦИКЛ: | |
;---------------------; | |
mov al,[si] ; | |
call AL_ЭТО_БУКВА ; // ПРоверяем являеться ли символ буквой | |
jz .КЦИКЛ ; | |
;---------------------; | |
call ДОБ_AL_В_СТРО_DI ; // Добавляем буку AL в конец строки DI | |
;---------------------; | |
inc SI ; // Увеличиваем читемый символ | |
;---------------------; | |
jmp .ЦИКЛ ; | |
;---------------------; | |
.КЦИКЛ: | |
.ВЫХОД: | |
;---------------------; | |
call ВОЗВРАТИТЬ_DI ; | |
test di,di ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; { ОПИСАНИЕ | |
;------------------------------------------------------------------- | |
; SI - Указатель на символ с котрого нужно попытаться прочитать | |
; DI - Возвращаемое прочитаное слово в случае неудачи 0 | |
; Длина слова максимально 16 байт | |
;------------------------------------------------------------------} | |
;---------------------; // Красота )))))) | |
mov DI,0 ; // ПО умолчанию резульатт 0 | |
;---------------------; | |
test si,si ; // А почему бы тут не устроить проверку на ноль ? | |
jz .ВЫХОД ; // Если у читаемого символа адрес 0 выход | |
;---------------------; | |
mov al,[si] ; | |
call AL_ЭТО_БУКВА ; // Проверяет являеться ли символ буквой | |
jz .ВЫХОД ; // Если не буква то выход | |
;---------------------; | |
call СОЗ_СТР_DI_16 ; // Создаем строку с ответом DI длиной 16 | |
jz .ВЫХОД ; // Если создать строку не удалося выход | |
;---------------------; | |
.ЦИКЛ: | |
;---------------------; | |
mov al,[si] ; | |
call AL_ЭТО_БУКВА ; // ПРоверяем являеться ли символ буквой | |
jz .КЦИКЛ ; | |
;---------------------; | |
call ДОБ_AL_В_СТРО_DI ; // Добавляем буку AL в конец строки DI | |
;---------------------; | |
inc SI ; // Увеличиваем читемый символ | |
;---------------------; | |
jmp .ЦИКЛ ; | |
;---------------------; | |
.КЦИКЛ: | |
.ВЫХОД: | |
;---------------------; | |
call ВОЗВРАТИТЬ_DI ; | |
test di,di ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; { ОПИСАНИЕ | |
;------------------------------------------------------------------- | |
; SI - Указатель на символ с котрого нужно попытаться прочитать | |
; DI - Возвращаемое прочитаное слово в случае неудачи 0 | |
; Длина слова максимально 16 байт | |
;------------------------------------------------------------------} | |
;---------------------; // Красота )))))) | |
mov EDI,0 ; // ПО умолчанию резульатт 0 | |
;---------------------; | |
test Esi,Esi ; // А почему бы тут не устроить проверку на ноль ? | |
jz .ВЫХОД ; // Если у читаемого символа адрес 0 выход | |
;---------------------; | |
mov al,[Esi] ; | |
call AL_ЭТО_БУКВА ; // Проверяет являеться ли символ буквой | |
jz .ВЫХОД ; // Если не буква то выход | |
;---------------------; | |
call СОЗ_СТР_DI_16 ; // Создаем строку с ответом DI длиной 16 | |
jz .ВЫХОД ; // Если создать строку не удалося выход | |
;---------------------; | |
.ЦИКЛ: | |
;---------------------; | |
mov al,[Esi] ; | |
call AL_ЭТО_БУКВА ; // ПРоверяем являеться ли символ буквой | |
jz .КЦИКЛ ; | |
;---------------------; | |
call ДОБ_AL_В_СТРО_DI ; // Добавляем буку AL в конец строки DI | |
;---------------------; | |
inc ESI ; // Увеличиваем читемый символ | |
;---------------------; | |
jmp .ЦИКЛ ; | |
;---------------------; | |
.КЦИКЛ: | |
.ВЫХОД: | |
;---------------------; | |
call ВОЗВРАТИТЬ_DI ; | |
test Edi,Edi ; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЧИТ_ЧИСЛО_С_SI_В_DX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ЧИТАЕТ_ЧИСЛО_С_АДР_SI_ВОЗ_СЛОВО_DI; | |
mov DX,DI ; | |
call ВОЗВРАТИТЬ_DX ; // Возврвщает адрес на строку | |
test dx,dx ; // Содержащию прочитаное ЧИСЛО | |
popad ; // Если прочитать ек удалося JZ | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ЧИТАЕТ_ЧИСЛО_С_АДР_SI_ВОЗ_СЛОВО_DI; | |
mov DX,DI ; | |
call ВОЗВРАТИТЬ_DX ; // Возврвщает адрес на строку | |
test dx,dx ; // Содержащию прочитаное ЧИСЛО | |
popad ; // Если прочитать ек удалося JZ | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ЧИТАЕТ_ЧИСЛО_С_АДР_SI_ВОЗ_СЛОВО_DI; | |
mov EDX,EDI ; | |
call ВОЗВРАТИТЬ_DX ; // Возврвщает адрес на строку | |
test Edx,Edx ; // Содержащию прочитаное ЧИСЛО | |
popad ; // Если прочитать ек удалося JZ | |
ret ; | |
END IF ;} | |
;} | |
ЧИТАЕТ_ЧИСЛО_С_АДР_SI_ВОЗ_СЛОВО_DI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; { ОПИСАНИЕ | |
;------------------------------------------------------------------- | |
; SI - Указатель на символ с котрого нужно попытаться прочитать | |
; DI - Возвращаемое прочитаное слово в случае неудачи 0 | |
; Длина слова максимально 16 байт | |
;------------------------------------------------------------------} | |
;---------------------; // Красота )))))) | |
mov DI,0 ; // ПО умолчанию резульатт 0 | |
;---------------------; | |
test si,si ; // А почему бы тут не устроить проверку на ноль ? | |
jz .ВЫХОД ; // Если у читаемого символа адрес 0 выход | |
;---------------------; | |
mov al,[si] ; | |
call AL_ЭТО_ЦИФРА ; // Проверяет являеться ли символ буквой | |
jz .ВЫХОД ; // Если не буква то выход | |
;---------------------; | |
call СОЗ_СТР_DI_16 ; // Создаем строку с ответом DI длиной 16 | |
jz .ВЫХОД ; // Если создать строку не удалося выход | |
;---------------------; | |
.ЦИКЛ: | |
;---------------------; | |
mov al,[si] ; | |
call AL_ЭТО_ЦИФРА ; // ПРоверяем являеться ли символ буквой | |
jz .КЦИКЛ ; | |
;---------------------; | |
call ДОБ_AL_В_СТРО_DI ; // Добавляем буку AL в конец строки DI | |
;---------------------; | |
inc SI ; // Увеличиваем читемый символ | |
;---------------------; | |
jmp .ЦИКЛ ; | |
;---------------------; | |
.КЦИКЛ: | |
.ВЫХОД: | |
;---------------------; | |
call ВОЗВРАТИТЬ_DI ; | |
test di,di ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; { ОПИСАНИЕ | |
;------------------------------------------------------------------- | |
; SI - Указатель на символ с котрого нужно попытаться прочитать | |
; DI - Возвращаемое прочитаное слово в случае неудачи 0 | |
; Длина слова максимально 16 байт | |
;------------------------------------------------------------------} | |
;---------------------; // Красота )))))) | |
mov DI,0 ; // ПО умолчанию резульатт 0 | |
;---------------------; | |
test si,si ; // А почему бы тут не устроить проверку на ноль ? | |
jz .ВЫХОД ; // Если у читаемого символа адрес 0 выход | |
;---------------------; | |
mov al,[si] ; | |
call AL_ЭТО_ЦИФРА ; // Проверяет являеться ли символ буквой | |
jz .ВЫХОД ; // Если не буква то выход | |
;---------------------; | |
call СОЗ_СТР_DI_16 ; // Создаем строку с ответом DI длиной 16 | |
jz .ВЫХОД ; // Если создать строку не удалося выход | |
;---------------------; | |
.ЦИКЛ: | |
;---------------------; | |
mov al,[si] ; | |
call AL_ЭТО_ЦИФРА ; // ПРоверяем являеться ли символ буквой | |
jz .КЦИКЛ ; | |
;---------------------; | |
call ДОБ_AL_В_СТРО_DI ; // Добавляем буку AL в конец строки DI | |
;---------------------; | |
inc SI ; // Увеличиваем читемый символ | |
;---------------------; | |
jmp .ЦИКЛ ; | |
;---------------------; | |
.КЦИКЛ: | |
.ВЫХОД: | |
;---------------------; | |
call ВОЗВРАТИТЬ_DI ; | |
test di,di ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; { ОПИСАНИЕ | |
;------------------------------------------------------------------- | |
; SI - Указатель на символ с котрого нужно попытаться прочитать | |
; DI - Возвращаемое прочитаное слово в случае неудачи 0 | |
; Длина слова максимально 16 байт | |
;------------------------------------------------------------------} | |
;---------------------; // Красота )))))) | |
mov EDI,0 ; // ПО умолчанию резульатт 0 | |
;---------------------; | |
test Esi,Esi ; // А почему бы тут не устроить проверку на ноль ? | |
jz .ВЫХОД ; // Если у читаемого символа адрес 0 выход | |
;---------------------; | |
mov al,[Esi] ; | |
call AL_ЭТО_ЦИФРА ; // Проверяет являеться ли символ буквой | |
jz .ВЫХОД ; // Если не буква то выход | |
;---------------------; | |
call СОЗ_СТР_DI_16 ; // Создаем строку с ответом DI длиной 16 | |
jz .ВЫХОД ; // Если создать строку не удалося выход | |
;---------------------; | |
.ЦИКЛ: | |
;---------------------; | |
mov al,[Esi] ; | |
call AL_ЭТО_ЦИФРА ; // ПРоверяем являеться ли символ буквой | |
jz .КЦИКЛ ; | |
;---------------------; | |
call ДОБ_AL_В_СТРО_DI ; // Добавляем буку AL в конец строки DI | |
;---------------------; | |
inc ESI ; // Увеличиваем читемый символ | |
;---------------------; | |
jmp .ЦИКЛ ; | |
;---------------------; | |
.КЦИКЛ: | |
.ВЫХОД: | |
;---------------------; | |
call ВОЗВРАТИТЬ_DI ; | |
test edi,edi ; | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
ЧИТ_ЗНАК_С_SI_В_DX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ЧИТАЕТ_ЗНАК_С_АДР_SI_ВОЗ_СЛОВО_DI ; | |
mov DX,DI ; | |
call ВОЗВРАТИТЬ_DX ; // Возврвщает адрес на строку | |
test dx,dx ; // Содержащию прочитаное ЗНАК | |
popad ; // Если прочитать ек удалося JZ | |
ret ; | |
ENd IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ЧИТАЕТ_ЗНАК_С_АДР_SI_ВОЗ_СЛОВО_DI ; | |
mov DX,DI ; | |
call ВОЗВРАТИТЬ_DX ; // Возврвщает адрес на строку | |
test dx,dx ; // Содержащию прочитаное ЗНАК | |
popad ; // Если прочитать ек удалося JZ | |
ret ; | |
ENd IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ЧИТАЕТ_ЗНАК_С_АДР_SI_ВОЗ_СЛОВО_DI ; | |
mov EDX,EDI ; | |
call ВОЗВРАТИТЬ_DX ; // Возврвщает адрес на строку | |
test Edx,Edx ; // Содержащию прочитаное ЗНАК | |
popad ; // Если прочитать ек удалося JZ | |
ret ; | |
ENd IF ;} | |
;} | |
ЧИТАЕТ_ЗНАК_С_АДР_SI_ВОЗ_СЛОВО_DI :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
call СОЗ_СТР_DI_16; // Создаем строку с ответом DI | |
mov cx,si ; // Запоминаем то место с котрого начали читать слово | |
mov ax,[si] ; | |
mov si,.Т_ЗНАК2 ; | |
call ПОИСК_ДВОЙНОЙ_БУКВЫ_AX_В_СТРОКЕ_SI | |
jnz .ЗНАК2 ; | |
mov si,.Т_ЗНАК1 ; | |
call ПОИСК_БУКВЫ_AL_В_СТРОКЕ_SI; | |
jnz .ЗНАК1 ; | |
call УДАЛИТЬ_СТРОКУ_DI; // Чтение не удалося | |
mov di,0 ; | |
JMP .ВЫХОД ; | |
;---------------------; | |
.ЗНАК1: ;---------------------; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI; // Чтение Удалося | |
jmp .ВЫХОД ; | |
.ЗНАК2: ;---------------------; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI; // Чтение Удалося | |
mov al,ah ; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI; // Чтение Удалося | |
;---------------------; | |
.ВЫХОД: | |
test di,di ; | |
pop si ; | |
push di ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
call СОЗ_СТР_DI_16; // Создаем строку с ответом DI | |
mov cx,si ; // Запоминаем то место с котрого начали читать слово | |
mov ax,[si] ; | |
mov si,.Т_ЗНАК2 ; | |
call ПОИСК_ДВОЙНОЙ_БУКВЫ_AX_В_СТРОКЕ_SI | |
jnz .ЗНАК2 ; | |
mov si,.Т_ЗНАК1 ; | |
call ПОИСК_БУКВЫ_AL_В_СТРОКЕ_SI; | |
jnz .ЗНАК1 ; | |
call УДАЛИТЬ_СТРОКУ_DI; // Чтение не удалося | |
mov di,0 ; | |
JMP .ВЫХОД ; | |
;---------------------; | |
.ЗНАК1: ;---------------------; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI; // Чтение Удалося | |
jmp .ВЫХОД ; | |
.ЗНАК2: ;---------------------; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI; // Чтение Удалося | |
mov al,ah ; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI; // Чтение Удалося | |
;---------------------; | |
.ВЫХОД: | |
test di,di ; | |
pop si ; | |
push di ; | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
call СОЗ_СТР_DI_16; // Создаем строку с ответом DI | |
mov ecx,esi ; // Запоминаем то место с котрого начали читать слово | |
mov ax,[esi] ; | |
mov esi,.Т_ЗНАК2 ; | |
call ПОИСК_ДВОЙНОЙ_БУКВЫ_AX_В_СТРОКЕ_SI | |
jnz .ЗНАК2 ; | |
mov esi,.Т_ЗНАК1 ; | |
call ПОИСК_БУКВЫ_AL_В_СТРОКЕ_SI; | |
jnz .ЗНАК1 ; | |
call УДАЛИТЬ_СТРОКУ_DI; // Чтение не удалося | |
mov edi,0 ; | |
jmp .ВЫХОД ; | |
;---------------------; | |
.ЗНАК1: ;---------------------; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI; // Чтение Удалося | |
jmp .ВЫХОД ; | |
.ЗНАК2: ;---------------------; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI; // Чтение Удалося | |
mov al,ah ; | |
call ДОБАВИТЬ_БУКВУ_AL_В_КОНЕЦ_СТРОКИ_DI; // Чтение Удалося | |
;---------------------; | |
.ВЫХОД: | |
test edi,edi ; | |
pop esi ; | |
push edi ; | |
popad ; | |
ret ; | |
END IF ;} | |
.Т_ЗНАК1: DB '+-*/{}()=<>',0; | |
.Т_ЗНАК2: DB ':===<=>=<>!=<<>>>&&||',0,0; | |
;==============================================================================} | |
ЧИТ_КАВЫЧКУ_С_SI_В_DX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
call ЧИТАЕТ_КАВЫЧКУ_С_АДР_SI_ВОЗ_СЛОВО_DI ; | |
mov DX,DI ; | |
call ВОЗВРАТИТЬ_DX ; // Возврвщает адрес на строку | |
test dx,dx ; // Содержащию прочитаное ЗНАК | |
popad ; // Если прочитать ек удалося JZ | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
call ЧИТАЕТ_КАВЫЧКУ_С_АДР_SI_ВОЗ_СЛОВО_DI ; | |
mov DX,DI ; | |
call ВОЗВРАТИТЬ_DX ; // Возврвщает адрес на строку | |
test dx,dx ; // Содержащию прочитаное ЗНАК | |
popad ; // Если прочитать ек удалося JZ | |
ret ; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
call ЧИТАЕТ_КАВЫЧКУ_С_АДР_SI_ВОЗ_СЛОВО_DI ; | |
mov EDX,EDI ; | |
call ВОЗВРАТИТЬ_DX ; // Возврвщает адрес на строку | |
test Edx,Edx ; // Содержащию прочитаное ЗНАК | |
popad ; // Если прочитать ек удалося JZ | |
ret ; | |
END IF;} | |
;} | |
ЧИТАЕТ_КАВЫЧКУ_С_АДР_SI_ВОЗ_СЛОВО_DI:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,0 ; // ПО умолчанию DI 0 адрес проч слова | |
;----------------------; | |
mov al,[si] ; | |
call AL_ЭТО_КАВЫЧКА ; // Если Это кавычка то Читать | |
jz .ВЫХОД ; // Если это не кавычка то выход | |
;----------------------; | |
call СОЗ_СТР_DI_16 ; | |
inc si | |
;----------------------; | |
.ЦИКЛ: | |
;----------------------; | |
mov al,[si] ; | |
call AL_ЭТО_КАВЫЧКА ; // Если Это кавычка то выход | |
jnz .КЦИКЛА ; | |
test al,al ; // Если Это 0 то выход | |
jz .КЦИКЛА ; | |
;----------------------; | |
call ДОБ_AL_В_СТРО_DI ; // Добавляем буку AL в конец строки DI | |
inc SI ; // Увеличиваем читемый символ | |
jmp .ЦИКЛ ; | |
;----------------------; | |
.КЦИКЛА: | |
.ВЫХОД: | |
CALL ВОЗВРАТИТЬ_DI ; | |
test di,di ; // Если не удалося прочитать JZ | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,0 ; // ПО умолчанию DI 0 адрес проч слова | |
;----------------------; | |
mov al,[si] ; | |
call AL_ЭТО_КАВЫЧКА ; // Если Это кавычка то Читать | |
jz .ВЫХОД ; // Если это не кавычка то выход | |
;----------------------; | |
call СОЗ_СТР_DI_16 ; | |
inc si | |
;----------------------; | |
.ЦИКЛ: | |
;----------------------; | |
mov al,[si] ; | |
call AL_ЭТО_КАВЫЧКА ; // Если Это кавычка то выход | |
jnz .КЦИКЛА ; | |
test al,al ; // Если Это 0 то выход | |
jz .КЦИКЛА ; | |
;----------------------; | |
call ДОБ_AL_В_СТРО_DI ; // Добавляем буку AL в конец строки DI | |
inc SI ; // Увеличиваем читемый символ | |
jmp .ЦИКЛ ; | |
;----------------------; | |
.КЦИКЛА: | |
.ВЫХОД: | |
CALL ВОЗВРАТИТЬ_DI ; | |
test di,di ; // Если не удалося прочитать JZ | |
popad ; | |
ret ; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,0 ; // ПО умолчанию DI 0 адрес проч слова | |
;----------------------; | |
mov al,[esi] ; | |
call AL_ЭТО_КАВЫЧКА ; // Если Это кавычка то Читать | |
jz .ВЫХОД ; // Если это не кавычка то выход | |
;----------------------; | |
call СОЗ_СТР_DI_16 ; | |
inc esi | |
;----------------------; | |
.ЦИКЛ: | |
;----------------------; | |
mov al,[esi] ; | |
call AL_ЭТО_КАВЫЧКА ; // Если Это кавычка то выход | |
jnz .КЦИКЛА ; | |
test al,al ; // Если Это 0 то выход | |
jz .КЦИКЛА ; | |
;----------------------; | |
call ДОБ_AL_В_СТРО_DI ; // Добавляем буку AL в конец строки DI | |
inc eSI ; // Увеличиваем читемый символ | |
jmp .ЦИКЛ ; | |
;----------------------; | |
.КЦИКЛА: | |
.ВЫХОД: | |
CALL ВОЗВРАТИТЬ_DI ; | |
test edi,edi ; // Если не удалося прочитать JZ | |
popad ; | |
ret ; | |
END IF ;} | |
;==============================================================================} | |
СТРОКА_AX_ОЧИСТКА:;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov si,ax; | |
mov [si],byte 0; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov si,ax; | |
mov [si],byte 0; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov Esi,Eax; | |
mov [Esi],byte 0; | |
popad; | |
ret; | |
END IF;} | |
;} | |
;---} | |
;---{ ФУНКЦИИ ДЛЯ РАБОТЫ С БУКВАМИ . | |
ЕСЛИ_В_AL_НЕ_СИМВОЛ_ФЛАГ_Z_0:;{ ПРоверяет являеться ли символ AL Буквой или (){}если это буква устанавливает флаг Z | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
mov si,.ДОПЗНАК; | |
call ПОИСК_БУКВЫ_AL_В_СТРОКЕ_SI; | |
jnz .ЭТО_БУК ; | |
.КМБУК: | |
;------------------; | |
cmp al,'z' ; // Кнопка МАленькие буквы | |
ja .КББУК ; | |
cmp al,'a' ; // Кнопка МАленькие буквы | |
jb .КББУК ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.КББУК: | |
;------------------; | |
cmp al,'Z' ; // Кнопка МАленькие буквы | |
ja .ДАЛЕЕ ; | |
cmp al,'A' ; // Кнопка МАленькие буквы | |
jb .ДАЛЕЕ ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.ДАЛЕЕ: | |
jmp .ЭТО_НЕ_БУКВА ; | |
;------------------; | |
.ЭТО_БУК: | |
;----------------; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ЭТО_НЕ_БУКВА: | |
;----------------; | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
mov si,.ДОПЗНАК; | |
call ПОИСК_БУКВЫ_AL_В_СТРОКЕ_SI; | |
jnz .ЭТО_БУК ; | |
.КМБУК: | |
;------------------; | |
cmp al,'z' ; // Кнопка МАленькие буквы | |
ja .КББУК ; | |
cmp al,'a' ; // Кнопка МАленькие буквы | |
jb .КББУК ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.КББУК: | |
;------------------; | |
cmp al,'Z' ; // Кнопка МАленькие буквы | |
ja .ДАЛЕЕ ; | |
cmp al,'A' ; // Кнопка МАленькие буквы | |
jb .ДАЛЕЕ ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.ДАЛЕЕ: | |
jmp .ЭТО_НЕ_БУКВА ; | |
;------------------; | |
.ЭТО_БУК: | |
;----------------; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ЭТО_НЕ_БУКВА: | |
;----------------; | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
mov Esi,.ДОПЗНАК; | |
call ПОИСК_БУКВЫ_AL_В_СТРОКЕ_SI; | |
jnz .ЭТО_БУК ; | |
.КМБУК: | |
;------------------; | |
cmp al,'z' ; // Кнопка МАленькие буквы | |
ja .КББУК ; | |
cmp al,'a' ; // Кнопка МАленькие буквы | |
jb .КББУК ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.КББУК: | |
;------------------; | |
cmp al,'Z' ; // Кнопка МАленькие буквы | |
ja .ДАЛЕЕ ; | |
cmp al,'A' ; // Кнопка МАленькие буквы | |
jb .ДАЛЕЕ ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.ДАЛЕЕ: | |
jmp .ЭТО_НЕ_БУКВА ; | |
;------------------; | |
.ЭТО_БУК: | |
;----------------; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ЭТО_НЕ_БУКВА: | |
;----------------; | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF;} | |
.ДОПЗНАК: DB ' <>?,./[]{};:`~()+-=_""0123456789',39,0; | |
;==============================================================================} | |
ПРЕОБРАЗУЕТ_АНГ_БУК_AL_В_РУС:;{ Преобразет Анл букву в руску | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push si; | |
push cx; | |
mov cx,ax; | |
mov ch,cl; | |
mov ah,0; | |
cmp al,32 | |
jb .ВЫХОД; | |
cmp al,127 | |
ja .ВЫХОД; | |
sub al,32 | |
mov si,ax; | |
mov si,ax ; | |
add si,.ТАБ02; | |
mov cl,[si] ; | |
cmp cl,' ' ; | |
jz .ВЫХОД2 ; | |
mov al,cl ; | |
jmp .ВЫХОД ; | |
.ВЫХОД2: mov al,ch ; | |
.ВЫХОД: | |
mov ah,ch; | |
pop cx; | |
pop si; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push si; | |
push cx; | |
mov cx,ax; | |
mov ch,cl; | |
mov ah,0; | |
cmp al,32 | |
jb .ВЫХОД; | |
cmp al,127 | |
ja .ВЫХОД; | |
sub al,32 | |
mov si,ax; | |
mov si,ax ; | |
add si,.ТАБ02; | |
mov cl,[si] ; | |
cmp cl,' ' ; | |
jz .ВЫХОД2 ; | |
mov al,cl ; | |
jmp .ВЫХОД ; | |
.ВЫХОД2: mov al,ch ; | |
.ВЫХОД: | |
mov ah,ch; | |
pop cx; | |
pop si; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push esi; | |
push ecx; | |
mov ecx,eax; | |
mov ch,cl; | |
mov ah,0; | |
cmp al,32 | |
jb .ВЫХОД; | |
cmp al,127 | |
ja .ВЫХОД; | |
sub al,32 | |
mov esi,eax; | |
mov esi,eax; | |
add esi,.ТАБ02; | |
mov cl,[esi] ; | |
cmp cl,' ' ; | |
jz .ВЫХОД2 ; | |
mov al,cl ; | |
jmp .ВЫХОД ; | |
.ВЫХОД2: mov al,ch ; | |
.ВЫХОД: | |
mov ah,ch; | |
pop ecx; | |
pop esi; | |
ret; | |
END IF;} | |
.ТАБ02:DB ' Э э б ю ЖжБ Ю '; | |
.ТАБ03:DB ' ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯx ъ '; | |
.ТАБ04:DB 'ёфисвуапршолдьтщзйкыегмцчняX ЪЁ '; | |
;==============================================================================} | |
ПРЕОБРАЗУЕТ_МАЛ_БУК_AL_В_БОЛ:;{ Преобразет все буквы в большие | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push si; | |
cmp al,97 ; | |
jb .ДАЛЕЕ; | |
cmp al,122; | |
ja .ДАЛЕЕ; | |
sub al,32; | |
jmp .ВЫХОД; | |
.ДАЛЕЕ: | |
cmp al,160 ; | |
jb .ДАЛЕЕ2; | |
cmp al,175; | |
ja .ДАЛЕЕ2; | |
sub al,32; | |
jmp .ВЫХОД; | |
.ДАЛЕЕ2: | |
cmp al,224 ; | |
jb .ДАЛЕЕ3; | |
cmp al,239; | |
ja .ДАЛЕЕ3; | |
sub al,80; | |
jmp .ВЫХОД; | |
.ДАЛЕЕ3: cmp al,241; | |
jnz .ДАЛЕЕ4; | |
dec al; | |
.ДАЛЕЕ4: | |
.ВЫХОД: | |
pop si; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push si; | |
cmp al,97 ; | |
jb .ДАЛЕЕ; | |
cmp al,122; | |
ja .ДАЛЕЕ; | |
sub al,32; | |
jmp .ВЫХОД; | |
.ДАЛЕЕ: | |
cmp al,160 ; | |
jb .ДАЛЕЕ2; | |
cmp al,175; | |
ja .ДАЛЕЕ2; | |
sub al,32; | |
jmp .ВЫХОД; | |
.ДАЛЕЕ2: | |
cmp al,224 ; | |
jb .ДАЛЕЕ3; | |
cmp al,239; | |
ja .ДАЛЕЕ3; | |
sub al,80; | |
jmp .ВЫХОД; | |
.ДАЛЕЕ3: cmp al,241; | |
jnz .ДАЛЕЕ4; | |
dec al; | |
.ДАЛЕЕ4: | |
.ВЫХОД: | |
pop si; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push esi; | |
cmp al,97 ; | |
jb .ДАЛЕЕ; | |
cmp al,122; | |
ja .ДАЛЕЕ; | |
sub al,32; | |
jmp .ВЫХОД; | |
.ДАЛЕЕ: | |
cmp al,160 ; | |
jb .ДАЛЕЕ2; | |
cmp al,175; | |
ja .ДАЛЕЕ2; | |
sub al,32; | |
jmp .ВЫХОД; | |
.ДАЛЕЕ2: | |
cmp al,224 ; | |
jb .ДАЛЕЕ3; | |
cmp al,239; | |
ja .ДАЛЕЕ3; | |
sub al,80; | |
jmp .ВЫХОД; | |
.ДАЛЕЕ3: cmp al,241; | |
jnz .ДАЛЕЕ4; | |
dec al; | |
.ДАЛЕЕ4: | |
.ВЫХОД: | |
pop esi; | |
ret; | |
END IF;} | |
;==============================================================================} | |
AL_ЭТО_КАВЫЧКА :;{ Если AL Это кавычка или 0 | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push dx ; | |
mov dl,0 ; | |
;-------------; | |
cmp al,34 ; // Если это кавычка то ВЫХОД " | |
jz .ЭТО_КАВ ; | |
cmp al,39 ; // Если это кавычка то ВЫХОД ' | |
jz .ЭТО_КАВ ; | |
jmp .ВЫХОД ; | |
;-------------; | |
.ЭТО_КАВ: mov dl,1 ; | |
.ВЫХОД: test dl,dl ; | |
;-------------; | |
pop dx ; | |
ret ; | |
ENd IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push dx ; | |
mov dl,0 ; | |
;-------------; | |
cmp al,34 ; // Если это кавычка то ВЫХОД " | |
jz .ЭТО_КАВ ; | |
cmp al,39 ; // Если это кавычка то ВЫХОД ' | |
jz .ЭТО_КАВ ; | |
jmp .ВЫХОД ; | |
;-------------; | |
.ЭТО_КАВ: mov dl,1 ; | |
.ВЫХОД: test dl,dl ; | |
;-------------; | |
pop dx ; | |
ret ; | |
ENd IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edx ; | |
mov dl,0 ; | |
;-------------; | |
cmp al,34 ; // Если это кавычка то ВЫХОД " | |
jz .ЭТО_КАВ ; | |
cmp al,39 ; // Если это кавычка то ВЫХОД ' | |
jz .ЭТО_КАВ ; | |
jmp .ВЫХОД ; | |
;-------------; | |
.ЭТО_КАВ: mov dl,1 ; | |
.ВЫХОД: test dl,dl ; | |
;-------------; | |
pop edx ; | |
ret ; | |
ENd IF ;} | |
;} | |
AL_ЭТО_БУКВА:;------------------------------------------------- | |
ЕСЛИ_В_AL_НЕ_БУКВА_ФЛАГ_Z_0 :;{ БУКВЫ это a-z A-Z а-я А-Я | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad ; | |
.МАЛ_АНГ_БУК: | |
;------------------; | |
cmp al,'z' ; // Кнопка МАленькие буквы | |
ja .БОЛ_АНГ_БУК ; | |
cmp al,'a' ; // Кнопка МАленькие буквы | |
jb .БОЛ_АНГ_БУК ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.БОЛ_АНГ_БУК: | |
;------------------; | |
cmp al,'Z' ; // Кнопка МАленькие буквы | |
ja .БОЛ_РУС_БУК ; | |
cmp al,'A' ; // Кнопка МАленькие буквы | |
jb .БОЛ_РУС_БУК ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.БОЛ_РУС_БУК: | |
;------------------; | |
cmp al,'Я' ; // Кнопка МАленькие буквы | |
ja .МАЛ_РУС_БУК1 ; | |
cmp al,'А' ; // Кнопка МАленькие буквы | |
jb .МАЛ_РУС_БУК1 ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.МАЛ_РУС_БУК1: | |
;------------------; | |
cmp al,'п' ; // Кнопка МАленькие буквы | |
ja .МАЛ_РУС_БУК2 ; | |
cmp al,'а' ; // Кнопка МАленькие буквы | |
jb .МАЛ_РУС_БУК2 ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.МАЛ_РУС_БУК2: | |
;------------------; | |
cmp al,'я' ; // Кнопка МАленькие буквы | |
ja .ЁЁЁЁЁ ; | |
cmp al,'р' ; // Кнопка МАленькие буквы | |
jb .ЁЁЁЁЁ ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.ЁЁЁЁЁ: | |
;------------------; | |
cmp al,'ё' ; // Кнопка МАленькие буквы | |
jNZ .БУК_ ; | |
cmp al,'Ё' ; // Кнопка МАленькие буквы | |
jNz .БУК_ ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.БУК_: | |
;------------------; | |
cmp al,'_' ; // Кнопка МАленькие буквы | |
jNZ .ДАЛЕЕ ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.ДАЛЕЕ: | |
jmp .ЭТО_НЕ_БУКВА ; | |
;------------------; | |
.ЭТО_БУК: | |
;----------------; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ЭТО_НЕ_БУКВА: | |
;----------------; | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad ; | |
.МАЛ_АНГ_БУК: | |
;------------------; | |
cmp al,'z' ; // Кнопка МАленькие буквы | |
ja .БОЛ_АНГ_БУК ; | |
cmp al,'a' ; // Кнопка МАленькие буквы | |
jb .БОЛ_АНГ_БУК ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.БОЛ_АНГ_БУК: | |
;------------------; | |
cmp al,'Z' ; // Кнопка МАленькие буквы | |
ja .БОЛ_РУС_БУК ; | |
cmp al,'A' ; // Кнопка МАленькие буквы | |
jb .БОЛ_РУС_БУК ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.БОЛ_РУС_БУК: | |
;------------------; | |
cmp al,'Я' ; // Кнопка МАленькие буквы | |
ja .МАЛ_РУС_БУК1 ; | |
cmp al,'А' ; // Кнопка МАленькие буквы | |
jb .МАЛ_РУС_БУК1 ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.МАЛ_РУС_БУК1: | |
;------------------; | |
cmp al,'п' ; // Кнопка МАленькие буквы | |
ja .МАЛ_РУС_БУК2 ; | |
cmp al,'а' ; // Кнопка МАленькие буквы | |
jb .МАЛ_РУС_БУК2 ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.МАЛ_РУС_БУК2: | |
;------------------; | |
cmp al,'я' ; // Кнопка МАленькие буквы | |
ja .ЁЁЁЁЁ ; | |
cmp al,'р' ; // Кнопка МАленькие буквы | |
jb .ЁЁЁЁЁ ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.ЁЁЁЁЁ: | |
;------------------; | |
cmp al,'ё' ; // Кнопка МАленькие буквы | |
jNZ .БУК_ ; | |
cmp al,'Ё' ; // Кнопка МАленькие буквы | |
jNz .БУК_ ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.БУК_: | |
;------------------; | |
cmp al,'_' ; // Кнопка МАленькие буквы | |
jNZ .ДАЛЕЕ ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.ДАЛЕЕ: | |
jmp .ЭТО_НЕ_БУКВА ; | |
;------------------; | |
.ЭТО_БУК: | |
;----------------; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ЭТО_НЕ_БУКВА: | |
;----------------; | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad ; | |
.МАЛ_АНГ_БУК: | |
;------------------; | |
cmp al,'z' ; // Кнопка МАленькие буквы | |
ja .БОЛ_АНГ_БУК ; | |
cmp al,'a' ; // Кнопка МАленькие буквы | |
jb .БОЛ_АНГ_БУК ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.БОЛ_АНГ_БУК: | |
;------------------; | |
cmp al,'Z' ; // Кнопка МАленькие буквы | |
ja .БОЛ_РУС_БУК ; | |
cmp al,'A' ; // Кнопка МАленькие буквы | |
jb .БОЛ_РУС_БУК ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.БОЛ_РУС_БУК: | |
;------------------; | |
cmp al,'Я' ; // Кнопка МАленькие буквы | |
ja .МАЛ_РУС_БУК1 ; | |
cmp al,'А' ; // Кнопка МАленькие буквы | |
jb .МАЛ_РУС_БУК1 ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.МАЛ_РУС_БУК1: | |
;------------------; | |
cmp al,'п' ; // Кнопка МАленькие буквы | |
ja .МАЛ_РУС_БУК2 ; | |
cmp al,'а' ; // Кнопка МАленькие буквы | |
jb .МАЛ_РУС_БУК2 ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.МАЛ_РУС_БУК2: | |
;------------------; | |
cmp al,'я' ; // Кнопка МАленькие буквы | |
ja .ЁЁЁЁЁ ; | |
cmp al,'р' ; // Кнопка МАленькие буквы | |
jb .ЁЁЁЁЁ ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.ЁЁЁЁЁ: | |
;------------------; | |
cmp al,'ё' ; // Кнопка МАленькие буквы | |
jNZ .БУК_ ; | |
cmp al,'Ё' ; // Кнопка МАленькие буквы | |
jNz .БУК_ ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.БУК_: | |
;------------------; | |
cmp al,'_' ; // Кнопка МАленькие буквы | |
jNZ .ДАЛЕЕ ; | |
jmp .ЭТО_БУК ; | |
;------------------; | |
.ДАЛЕЕ: | |
jmp .ЭТО_НЕ_БУКВА ; | |
;------------------; | |
.ЭТО_БУК: | |
;----------------; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ЭТО_НЕ_БУКВА: | |
;----------------; | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
;==============================================================================} | |
AL_ЭТО_ЦИФРА:;------------------------------------------------- | |
ЕСЛИ_В_AL_ЦИФРА_ФЛАГ_Z_1 :;{ ПРоверяет являеться ли символ AL Буквой если это буква устанавливает флаг Z | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
;----------------; | |
cmp al,'9' ; // Если Больше '9' Это не фифра | |
ja .ЭТО_НЕ_ЦИФ ; | |
cmp al,'0' ; // Если меньше '0' Это не фифра | |
jb .ЭТО_НЕ_ЦИФ ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ЭТО_НЕ_ЦИФ: | |
;----------------; | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
;----------------; | |
cmp al,'9' ; // Если Больше '9' Это не фифра | |
ja .ЭТО_НЕ_ЦИФ ; | |
cmp al,'0' ; // Если меньше '0' Это не фифра | |
jb .ЭТО_НЕ_ЦИФ ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ЭТО_НЕ_ЦИФ: | |
;----------------; | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
;----------------; | |
cmp al,'9' ; // Если Больше '9' Это не фифра | |
ja .ЭТО_НЕ_ЦИФ ; | |
cmp al,'0' ; // Если меньше '0' Это не фифра | |
jb .ЭТО_НЕ_ЦИФ ; | |
mov al,1 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ЭТО_НЕ_ЦИФ: | |
;----------------; | |
mov al,0 ; | |
test al,al ; | |
jmp .ВЫХОД ; | |
;----------------- | |
.ВЫХОД: | |
popad; | |
ret; | |
END IF ;} | |
;==============================================================================} | |
;---} | |
;---{ ФУНКЦИИ ДЛЯ РАБОТЫ С ЭКРАНОМ . | |
ЧИСЛОAX:;{ Вывод содержимого регистра AX как число на экран | |
pushad; | |
call ЭКРАН_ВЫВОД_ПРОБЕЛА; | |
call ЭКРАН_ВЫВОД_ЧИСЛА; | |
call ЭКРАН_ВЫВОД_ПРОБЕЛА; | |
popad; | |
ret; | |
;=====================} | |
ЧИСЛОBX:;{ Вывод содержимого регистра BX как число на экран | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
mov ax,bx; | |
call ЧИСЛОAX; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
mov ax,bx; | |
call ЧИСЛОAX; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
mov eax,ebx; | |
call ЧИСЛОAX; | |
pop eax; | |
ret; | |
END IF;} | |
;=====================} | |
ЧИСЛОCX:;{ Вывод содержимого регистра CX как число на экран | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
mov ax,cx; | |
call ЧИСЛОAX; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
mov ax,cx; | |
call ЧИСЛОAX; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
mov eax,ecx; | |
call ЧИСЛОAX; | |
pop eax; | |
ret; | |
END IF;} | |
;=====================} | |
ЧИСЛОDX:;{ Вывод содержимого регистра DX как число на экран | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
mov ax,dx; | |
call ЧИСЛОAX; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
mov ax,dx; | |
call ЧИСЛОAX; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
mov eax,edx; | |
call ЧИСЛОAX; | |
pop eax; | |
ret; | |
END IF;} | |
;=====================} | |
ЧИСЛОDI:;{ Вывод содержимого регистра DI как число на экран | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
mov ax,di; | |
call ЧИСЛОAX; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
mov ax,di; | |
call ЧИСЛОAX; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
mov eax,edi; | |
call ЧИСЛОAX; | |
pop eax; | |
ret; | |
END IF;} | |
;=====================} | |
ЧИСЛОSI:;{ Вывод содержимого регистра SI как число на экран | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push ax; | |
mov ax,Si; | |
call ЧИСЛОAX; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push ax; | |
mov ax,Si; | |
call ЧИСЛОAX; | |
pop ax; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push eax; | |
mov eax,eSi; | |
call ЧИСЛОAX; | |
pop eax; | |
ret; | |
END IF;} | |
;=====================} | |
СТРОКАAX:;{ Вывод строки адрес котрой в AX на экран | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
mov di,ax; | |
call СТРОКАDI; | |
pop di; | |
ret; | |
ENd IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
mov di,ax; | |
call СТРОКАDI; | |
pop di; | |
ret; | |
ENd IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
mov edi,eax; | |
call СТРОКАDI; | |
pop edi; | |
ret; | |
ENd IF;} | |
;=====================} | |
СТРОКАBX:;{ Вывод строки адрес котрой в BX на экран | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
mov di,bx; | |
call СТРОКАDI; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
mov di,bx; | |
call СТРОКАDI; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
mov edi,ebx; | |
call СТРОКАDI; | |
pop edi; | |
ret; | |
END IF;} | |
;=====================} | |
СТРОКАCX:;{ Вывод строки адрес котрой в CX на экран | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
mov di,cx; | |
call СТРОКАDI; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
mov di,cx; | |
call СТРОКАDI; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
mov edi,ecx; | |
call СТРОКАDI; | |
pop edi; | |
ret; | |
END IF;} | |
;=====================} | |
СТРОКАDX:;{ Вывод строки адрес котрой в DX на экран | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
mov di,dx; | |
call СТРОКАDI; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
mov di,dx; | |
call СТРОКАDI; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
mov edi,edx; | |
call СТРОКАDI; | |
pop edi; | |
ret; | |
END IF;} | |
;=====================} | |
СТРОКАDI:;{ Вывод строки адрес котрой в SI на экран | |
pushad; | |
call ЭКРАН_ВЫВОД_ПРОБЕЛА; | |
call ЭКРАН_ВЫВОД_СТРОКИ; | |
call ЭКРАН_ВЫВОД_ПРОБЕЛА; | |
popad; | |
ret; | |
;=====================} | |
СТРОКАSI:;{ Вывод строки адрес котрой в DI на экран | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
push di; | |
mov di,si; | |
call СТРОКАDI; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
push di; | |
mov di,si; | |
call СТРОКАDI; | |
pop di; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
push edi; | |
mov edi,esi; | |
call СТРОКАDI; | |
pop edi; | |
ret; | |
END IF;} | |
;=====================} | |
ВЫВОД_СЛОВА_РАВНО :;{ Функция печати слова РАВНО | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
mov di,.ТЕКС_РАВНО; | |
call ЭКРАН_ВЫВОД_СТРОКИ; | |
popad | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad | |
mov di,.ТЕКС_РАВНО; | |
call ЭКРАН_ВЫВОД_СТРОКИ; | |
popad | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad | |
mov edi,.ТЕКС_РАВНО; | |
call ЭКРАН_ВЫВОД_СТРОКИ; | |
popad | |
ret; | |
END IF;} | |
.ТЕКС_РАВНО: db 'РАВНО',0,0; | |
;==============================================================================} | |
ВЫВОД_СЛОВА_НЕРАВНО :;{ Функция печати слова НЕРАВНО | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
mov di,.ТЕКС_НЕРАВНО; | |
call ЭКРАН_ВЫВОД_СТРОКИ; | |
popad | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad | |
mov di,.ТЕКС_НЕРАВНО; | |
call ЭКРАН_ВЫВОД_СТРОКИ; | |
popad | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad | |
mov edi,.ТЕКС_НЕРАВНО; | |
call ЭКРАН_ВЫВОД_СТРОКИ; | |
popad | |
ret; | |
END IF;} | |
.ТЕКС_НЕРАВНО: db 'НЕРАВНО',0,0; | |
;==============================================================================} | |
ЭКРАН_ВЫВОД_СТРОКИ_AX :;{ | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad; | |
mov di,ax; | |
call ЭКРАН_ВЫВОД_СТРОКИ; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T16) ;{ | |
pushad; | |
mov di,ax; | |
call ЭКРАН_ВЫВОД_СТРОКИ; | |
popad; | |
ret; | |
END IF;} | |
IF (ПЛАТФОРМА = T32) ;{ | |
pushad; | |
mov edi,eax; | |
call ЭКРАН_ВЫВОД_СТРОКИ; | |
popad; | |
ret; | |
END IF;} | |
;==============================================================================} | |
ЭКРАН_ВЫВОД_ПРОВЕРКА :;{ Функция печати слова ПРОВЕРКА | |
IF (ПЛАТФОРМА = ДОС) ;{ | |
pushad | |
mov d |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment