Навигация
Главная
Поиск
Форум
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
Бип из системно... 63660
Организация зап... 60377
Invision Power ... 59830
Приложение «Про... 59597
Оператор выбора... 58602
Модуль Forms 58122
Подключение Mic... 57634
Создание отчето... 57538
ТЕХНОЛОГИИ ДОСТ... 53831
Программируемая... 51910
Пример работы с... 49882
Имитационное мо... 49273
21 ошибка прогр... 44053
Реклама
Сейчас на сайте
Гостей: 13
На сайте нет зарегистрированных пользователей

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

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

Реклама



Подписывайся на 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 Комментариев · 1266 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Приемы программир...
Паскаль и Дельфи....
База каталогов ( ...
Progressbar
AboutSystem
SMLPack v1.0
Редактор анимаций
Exe in exe
DiZsubmit
Сапёр
EditNew
Globus VCL Extent...
DCMintry
ScrollCredit
Разработка клиент...
Стелтинг Стивен, ...
Delphi 2005 Учимс...
Х. М. Дейтел, П. ...
VFW
RAS

Топ загрузок
Приложение Клие... 100338
Delphi 7 Enterp... 80486
Converter AMR<-... 20029
Borland C++Buil... 10867
GPSS World Stud... 9940
Borland Delphi ... 7898
Turbo Pascal fo... 6922
Visual Studio 2... 4931
Калькулятор [Ис... 4177
FreeSMS v1.3.1 3492
Случайные статьи
Определение вторич...
'iглавный офис кот...
Информация о топол...
4.3. Смысл верифик...
Сведения, которые ...
Работа со Jpeg-изо...
Статические элементы
Уход за компьютеро...
Стратегия
Частные клиники Ка...
Обработка исключит...
Загрузить в указат...
Строка соединения
Теперь займемся ус...
Формат инфографиче...
Эротическое белье ...
Параметры шаблонов
Кроме того, разреш...
анонимной учетной ...
Работа со списками...
ИЗУЧЕНИЕ ПРОГРАММН...
Удаление лишнего и...
Политики Accompli
Основная структура...
Документ FacebookWork
Статистика



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


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