Навигация
Главная
Поиск
Форум
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
HACK F.A.Q 65535
Гостевая книга ... 65535
Содержание сайт... 65535
Вызов хранимых ... 65535
Эмулятор микроп... 65535
Бип из системно... 62604
Организация зап... 59784
Invision Power ... 59438
Приложение «Про... 58672
Оператор выбора... 57791
Модуль Forms 57725
Подключение Mic... 57068
Создание отчето... 57002
ТЕХНОЛОГИИ ДОСТ... 53293
Программируемая... 51065
Пример работы с... 49167
Имитационное мо... 48771
21 ошибка прогр... 43527
Реклама
Сейчас на сайте
Гостей: 4
На сайте нет зарегистрированных пользователей

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

Сравнение двух бинарных деревьев на Turbo Pascal + отчет
Файл записей с выводом обратного заголовка на Turbo Pascal
Компьютерный магазин на Turbo Pascal (База данных) + Пояснительная записка

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании

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

;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 13 2014 02:27:14 · 0 Комментариев · 1235 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
MP3 Архив v.2.0
Пример OpenGL гра...
Анекдоты с ostrie.ru
Swing. Эффектные...
Панель Наша Кнопка
ActiveX в Delphi
Еext Editor
Bitmap [для кнопок]
isoCanvas (Редакт...
GamesBase 3.0
Синтаксический ан...
Фундаментальные а...
Пример клиента ФТ...
Globus VCL Extent...
C++ Builder: Книг...
Blib [Исходник на...
PHP 5 для "чайников"
Delphi 6/7 базы д...
Интерактивный инт...
Запрет гостям ск...

Топ загрузок
Приложение Клие... 100333
Delphi 7 Enterp... 79811
Converter AMR<-... 20025
Borland C++Buil... 10823
GPSS World Stud... 9729
Borland Delphi ... 7846
Turbo Pascal fo... 6910
Visual Studio 2... 4926
Калькулятор [Ис... 4125
FreeSMS v1.3.1 3488
Случайные статьи
Direct Show и Delphi
Что подразумевает ...
Создание таблиц
Блог на мобильном ...
Таймер - компонент...
Система обозначени...
В данном примере н...
Установка последов...
Подписанное сообще...
Убедитесь, что вы ...
Нужно ли продвигат...
Данная книга
Печать
Секреты: принцип р...
Общность в поведении
Statement part too...
Хотя компьютеры, в...
Управление потоком...
Но может ли квадра...
Как поиметь ящик н...
Комментарии
Генерация кода по ...
Поддержка устаревш...
Пример создания пр...
Users And Computer...
Статистика



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


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