Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 7
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Принадлежит ли точка пересечению двух окружностей на Turbo Pascal + Отче...
Программа тестирования и обучающая программа по математике на Turbo Pasc...
Моделирование работы ЭВМ на GPSS + Пояснительная записка

Большая Н из отрезков прямых

;bolchaja H ,sostaswlennoe is otrezkow prjam
;napisat programmu perem c pomochju klaw bukw/perekl megdu nimi s pom -tab
;bukw - H

format mz
begin:
mov ax,cs
mov ds,ax
mov es,ax

mov ax,0010h ;Функция выбора режима
int 10h ;Выбор режима ochistka ekrana

mov ah,3Ch ; создание файла в текущем каталоге
xor cx,cx ;обнуляем cx
mov dx,filename ; загрузка указателя на имя файла
int 21h ; создание файла res.txt

mov [fileDesc],ax


call drawLetter
call changeLetter
call drawLetter

checkKey:
xor bx,bx
xor dx,dx
mov ah,0
int 16h

cmp aH,80
je moveDown

cmp aH,77
je moveRight

cmp aH,72
je moveUp

cmp aH,75
je moveLeft

cmp al,9
jne exit ; если al не равно 9

call changeLetter
jmp checkKey

exit:


mov bx,[fileDesc]
mov ah,3Eh ;закрываем файл res.txt
int 21h

mov ax,4c00h ;Функция выхода
int 21h ;Выход

changeLetter:
push si
push di

mov di,dx1Array
mov si,dx1Array2
call exchangeDiSi

mov di,dx2Array
mov si,dx2Array2
call exchangeDiSi

mov di,cx1Array
mov si,cx1Array2
call exchangeDiSi

mov di,cx2Array
mov si,cx2Array2
call exchangeDiSi

pop di
pop si
ret


moveDown:
mov dx,[dx1Array+6] ;???????????????????????????

cmp dx,310
jl moveDown2

jmp checkKey
moveDown2:
push ax
push bx
push dx
push si
mov al,[currentColor] ;???????????????????????????
push ax
mov [currentColor],0

mov si, clearLetterString1
call writeStringLetterInFile

call drawLetter
pop ax
mov [currentColor],al ;???????????????????????????

mov bx,10
xor dx,dx
call changeCoordinates

call drawTwoLetters
pop si
pop dx
pop bx
pop ax
jmp checkKey


moveUp:
mov dx,[dx1Array]

cmp dx,0
ja moveUp2

jmp checkKey
moveUp2:
push ax
push bx
push dx
mov al,[currentColor]
push ax
mov [currentColor],0
mov si, clearLetterString1
call writeStringLetterInFile
call drawLetter
pop ax
mov [currentColor],al

mov bx,-10 ;???????????????????????????
xor dx,dx
call changeCoordinates

call drawTwoLetters
pop dx
pop bx
pop ax
jmp checkKey


moveRight:
mov dx,[cx1Array+2]

cmp dx,630 ;???????????????????????????
jb moveRight2

jmp checkKey

moveRight2:
push ax
push bx
push si
mov al,[currentColor]
push ax
mov [currentColor],0 ;???????????????????????????
mov si, clearLetterString1
call writeStringLetterInFile

call drawLetter
pop ax
mov [currentColor],al
mov dx,10
xor bx,bx
call changeCoordinates
call drawTwoLetters

pop si
pop bx
pop ax
jmp checkKey

moveLeft:
; mov si,dlArray1
mov dx,[cx1Array]

cmp dx,1
ja moveLeft2

jmp checkKey

moveLeft2:
push ax
push bx
mov al,[currentColor]
push ax
mov [currentColor],0

mov si, clearLetterString1
call writeStringLetterInFile

call drawLetter
pop ax
mov [currentColor],al

mov dx,-10
xor bx,bx
call changeCoordinates
call drawTwoLetters
pop bx
pop ax
jmp checkKey


changeCoordinates:
push cx
push di
push si
push dx
push bx
mov cx,[countLines]
mov di,bx
loopStart2:
mov bx,[countLines]
sub bx,cx
sal bx,1 ; сдвиг для ..... ;???????????????????????????
add [dx1Array+bx],di
add [cx1Array+bx],dx
loop loopStart2

mov cx,[countLines]
loopStart3:
mov bx,[countLines]
sub bx,cx
sal bx,1
add [dx2Array+bx],di ;???????????????????????????
add [cx2Array+bx],dx
loop loopStart3 ;???????????????????????????
pop bx
pop dx
pop si
pop di
pop cx
ret

drawLetter:
push ax
push bx
push cx
xor bx,bx
mov cx,[countLines]
loop1:

mov bx,[countLines]
sub bx,cx
sal bx,1 ;???????????????????????????

mov ax,[dx1Array+bx]
mov [dx1],ax

mov ax,[cx1Array+bx]
mov [cx1],ax

mov ax,[dx2Array+bx]
mov [dx2],ax

mov ax,[cx2Array+bx]
mov [cx2],ax
call drawLine
loop loop1
pop cx
pop bx
pop ax
ret


drawLine:
push cx
push bx
push ax

call setDelta
call setError

mov ax,[dx2]
mov [currentDx],ax ;???????????????????????????

mov ax,[cx2]
mov [currentCx],ax

call drawPoint

mov ax,[dx1]
mov [currentDx],ax

mov ax,[cx1]
mov [currentCx],ax

loopDrawLine: ;while
; mov ah,08
; int 21h
xor cx,cx ;обнуляем cx
mov ax,[currentDx]
mov bx,[dx2] ;???????????????????????????
cmp ax,bx
jne loopDrawLine2

mov ax,[currentCx]
mov bx,[cx2]
cmp ax,bx
je loopEnd

loopDrawLine2:
call drawPoint

mov ax,[errorDxCx]
sal ax,1
mov [error2],ax

mov bx,[deltaDx]
neg bx
cmp ax,bx
jle C1 ;???????????????????????????
mov cx,[errorDxCx] ;???????????????????????????
add cx,bx
mov [errorDxCx],cx
mov cx,[currentCx]
mov bx,[movCx]
add cx,bx
mov [currentCx],cx
jmp loopDrawLine

C1:
mov bx,[deltaCx]
cmp ax,bx
jnl loopDrawLine

C2:
mov cx,[errorDxCx]
add cx,bx
mov [errorDxCx],cx ;???????????????????????????
mov cx,[currentDx]
mov bx,[movDx]
add cx,bx
mov [currentDx],cx
jmp loopDrawLine

loopEnd:
pop ax
pop bx
pop cx
ret

setError:
push ax
push bx

mov ax,[deltaCx]
mov bx,[deltaDx]
sub ax,bx
mov [errorDxCx],ax

pop bx
pop ax
ret

setDelta:
push ax
push bx

;Куда двигаться
mov ax,[dx1]
mov bx,[dx2]

cmp ax,bx
jg A1 ;Если первая точка ниже второй

cmp ax,bx
jl A2 ;Если первая точка выше второй

mov [movDx],0
jmp A3

A3:
mov ax,[cx1]
mov bx,[cx2]
cmp ax,bx
jg B1 ;Если первая точка правее второй

cmp ax,bx
jl B2 ;Если первая точка левее второй

mov [movCx],0

jmp setDelta1

A1:
mov [movDx],-1
sub ax,bx
mov [deltaDx],ax
jmp A3

A2:
mov [movDx],1
sub bx,ax
mov [deltaDx],bx
jmp A3

B1:
mov [movCx],-1
sub ax,bx
mov [deltaCx],ax
jmp setDelta1
B2:
mov [movCx],1
sub bx,ax
mov [deltaCx],bx
jmp setDelta1
setDelta1:
pop bx
pop ax
ret

drawPoint:
push ax
push dx
push cx

call writePointInFile

mov ah,0ch
mov al,[currentColor]
mov dx,[currentDx]
mov cx,[currentCx]
int 10h

pop cx
pop dx
pop ax
ret

exchangeDiSi:
push di
push si
push ax
push bx
push cx

cld

mov cx,[countLines]
loopExchangeDiSiStart:


push cx
mov bx,[countLines] ;???????????????????????????
sub bx,cx
sal bx,1

mov ax,[di+bx] ;???????????????????????????
mov dx,[si+bx] ;???????????????????????????

mov [di+bx],dx
mov [si+bx],ax
pop cx
loop loopExchangeDiSiStart ;???????????????????????????

pop cx
pop bx
pop ax
pop si
pop di
ret

drawTwoLetters:
push si
push ax
push bx
push cx
push dx

mov [currentPos],0


mov si, firstLetterString
call writeStringLetterInFile ;???????????????????????????

call drawLetter
call changeLetter


mov si, secondLetterString
call writeStringLetterInFile

call drawLetter
call changeLetter


pop dx
pop cx
pop bx
pop ax
pop si
ret


wipeFileString:
push di
push ax
push cx

mov di,fileString
mov al,' '
mov cx,400 ;???????????????????????????
rep stosb

pop cx
pop ax
pop di
ret


writeStringLetterInFile:
push si
push di
push ax
push bx
push cx
push dx

call getEndOfFileString
mov cx,18
rep movsb
add [currentPos],18

mov cx,18 ;???????????????????????????
mov dx,fileString
mov ah,40h
mov bx,[fileDesc]
int 21h

mov [currentPos],0
call wipeFileString

pop dx
pop cx
pop bx
pop ax
pop di
pop si
ret

writePointInFile:
push di
push ax
push cx

call getEndOfFileString
mov cx, [currentDx]
call numberToFile

call getEndOfFileString
mov al,','
call writeCharToFileString

call getEndOfFileString
mov cx, [currentCx]
call numberToFile

call getEndOfFileString
mov al,13 ;???????????????????????????
call writeCharToFileString


call getEndOfFileString
mov al,10
call writeCharToFileString

mov cx,9
mov dx,fileString
mov ah,40h
mov bx,[fileDesc]
int 21h

mov [currentPos],0
call wipeFileString

pop cx
pop ax
pop di
ret

getEndOfFileString:
push bx
mov di,fileString ;???????????????????????????

xor bx,bx
mov bx,[currentPos] ;???????????????????????????
add di, bx

pop bx
ret


writeCharToFileString:
push di
stosb

inc [currentPos] ;???????????????????????????

pop di
ret


numberToFile:
push ax
push bx
push cx
push dx
push bp
push di

push cx ;Помещение в стек результа, что бы потом можно было восстановить

pop ax ;Извлекаем из стека в AX найденный результат
push -1 ;Помещаем с стек значение -1 для созранения признака конца числа

mov bp,10d ;Для дальнейшего деления на 10 (для перевода в десятичную систему счисления)

keepNumber:
xor dx,dx ;Обнуление регистра DX
div bp ;Деление на 10. DX:AX/BPж в AX -- целое, в DX -- остаток
push dx ;Поместим остаток от деления в стек (что бы потом цифру можно было извлечь и вывести на экран)
cmp ax,0 ;Проверка: является ли целое от деления нулем (оптимальнее or ax,ax)
jne keepNumber ;Если да, то достигнут конец числа

outputNumber:
pop dx ;Восстановим цифру из стека (т.к извлекается из стека, то число выводится с первой цифры)
cmp dx,-1 ;Сравнение извлеченного числа с -1
je endProg ;Если равно , значит достигнут конец и надо перейти на метку endProg (для выхода из
;программы){оптимальнее: or dx,dx jl endProg}
add dx,'0'
; mov [di],dl
; inc di

mov al,dl

call getEndOfFileString
call writeCharToFileString


jmp outputNumber ;Перейти на метку outputNumber для вывода дальнейших символов

endProg:
pop di
pop bp
pop dx
pop cx
pop bx
pop ax
ret



dx1Array dw 0, 0, 60, 30
cx1Array dw 0, 30, 30, 30

dx2Array dw 60, 60, 60, 30
cx2Array dw 0, 30, 30, 0

dx1Array2 dw 70,70,130, 100
cx1Array2 dw 0, 30, 30, 30

dx2Array2 dw 130,130, 130,100
cx2Array2 dw 0, 30, 30, 0

currentLetter db -1

dx1 dw 0
cx1 dw 0
dx2 dw 0
cx2 dw 0

currentDx dw 1
currentCx dw 10

movDx dw 0
movCx dw 0

deltaDx dw 0
deltaCx dw 0

errorDxCx dw 0
error2 dw 0

countLines dw 4
currentColor db 15

filename db 'file.txt',0
fileString db 400 dup(' ')
currentPos dw 0
up db 10,13,'UP',10,13
firstLetterString db 13,10,13,10,'---DRW: FL',13,10,13,10
secondLetterString db 13,10,13,10,'---DRW: SL',13,10,13,10
clearLetterString1 db 13,10,'------CLR: FL',13,10
clearLetterString2 db 13,10,'------CLR: SL',13,10

fileDesc dw 0




Опубликовал Kest May 12 2014 22:27:14 · 0 Комментариев · 3454 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
ScrollCredit
База данных: Книж...
Assembler. Учебни...
Добавление к ссы...
PHP 5 для "чайников"
WordReport
DemoEdit [Исходни...
Atb
Размещение элемен...
CoolDev TipsSyste...
Развивающийся фла...
Базы данных в Инт...
Советы по Delphi
Пример создания W...
Degisy Data Acces...
PHP 5 на примерах
Функции Visual Basic
Billenium Effects...
Cтатьи Королевств...
начисление процен...

Топ загрузок
Приложение Клие... 100793
Delphi 7 Enterp... 98016
Converter AMR<-... 20298
GPSS World Stud... 17059
Borland C++Buil... 14239
Borland Delphi ... 10374
Turbo Pascal fo... 7390
Калькулятор [Ис... 6080
Visual Studio 2... 5228
Microsoft SQL S... 3674
Случайные статьи
Меню
Строки - индикатор...
telling (X)
Именованные «конст...
Определение местоп...
Для чего маски VLS...
FTP-сервером, испо...
Время выполнения S...
Вывести все возмож...
Дополнительные вст...
Установка нового р...
Выделение памяти -...
Настройки почтовог...
Язык С: время жизни
Другие реализации ...
Шрифт
Обновление DataSet...
Яндекс учитывает с...
Получить цвет пикс...
Какие ещё варианты...
Основы
Сбрасывание объект...
Запрограммировать ...
Betcity: верификац...
Проектирование экр...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?