Навигация
Главная
Поиск
Форум
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
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 65535
ТЕХНОЛОГИИ ДОСТ... 63038
Имитационное мо... 58350
Реклама
Сейчас на сайте
Гостей: 5
На сайте нет зарегистрированных пользователей

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

Программа тестирования (тест) - вступительные экзамены (математика, физи...
Метод конечных разностей для интерполяции/экстраполяции на Delphi
Моделирование работы аэропорта на GPSS + Пояснительная записка

Реклама



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

ПОДПИСЫВАЙСЯ на канал о программировании
Площадь треугольника
format mz
;;;;;;;;;;;;;;;
macro print str,color {
local go
local exit

mov si,str
go:
mov al,[si]
cmp al,'$'
je exit

MOV AH,0eh;функция вывода на экран

mov bh,00;страница
mov bl,color;0dah;атрибут цвета

int 10h

inc si
jmp go
exit:
}




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;
;???????????????????????????
macro setcursor x,y{

mov dh,x
mov dl,y

mov ah,2
mov bx,0
int 10h
}
;;;;;;;;;;;;;;;;;;
begin:

mov ax,cs
mov ds,ax
;mov es,ax

mov ax,0004h ; ;???????????????????????????
int 10h ;





;call vvod_trg


;jmp exit
;gets 5,20

call print_menu


@@:
;9= tab
;27=esc
;0=del
;13=enter
;8 = backs..
mov ah,00;команда на ввод символа который будет помещен в AL
int 16h;

cmp al,9 ;
jne notab

mov al,[m_exit_cvet]
mov ah,[m_plosh_cvet]
xchg al,ah

mov [m_exit_cvet],al
mov [m_plosh_cvet],ah

mov ax,0004h ;;???????????????????????????
int 10h ;;???????????????????????????

call print_menu
notab:

cmp al,13
jne noenter
cmp [m_exit_cvet],1
je exit

;вызываем процедуру для ввода сторон треугольника
;call vvod_tr
call vvod_trg
mov ax,0004h ;
int 10h

call print_menu
noenter:





jmp @r
exit:

mov ax, 4c00h ;
int 21h
;==============
msg db 10, 56 dup (?) ;Set msg array
m_plosh db "Ploshad $"
m_plosh_cvet db 1

m_exit db " EXIT$"
m_exit_cvet db 3


menuCoor1 db " 10|15 coor1$"
menuCoor2 db " 07|05 coor2$"
menuCoor3 db " 17|05 coor3$"

menuRezult db " Rezult="

msgS db "$$$$$$$$$$$$$$$$$$$$$$"

menu_color db 1,3,3,3,3

x dw 10,7,17
y dw 15,5,5

endl db 10,13,'$'
temp db 0
;AB dw 0
;AC dw 0
S db "S=$"
;метод рисует меню
print_menu:
;сначало рисуем меню площядь
print m_plosh,[m_plosh_cvet]


;затем выход

print m_exit,[m_exit_cvet]

ret
;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;
strTodgt: ; строку в число, принимает строку в si , вывод в ах
;метод который переводит с строки в числовой формат
mov dx,0
;mov si,%1
@@: ;начало цикла
mov ax,0
mov cx,0
mov al,[si] ;???????????????????????????
cmp al,'$' ;???????????????????????????
je @f
sub al,30h ;для получения самой цифры по ее коду мы должны вычесть 30h,; вычитаем из содержимому регистра AL 30H(H значит, что число в 16-тиричной системе счисления)


mov cx,ax ;???????????????????????????
mov bx,10 ;???????????????????????????
mov ax,0 ;???????????????????????????
mov ax,dx ;???????????????????????????
mul bx ; ;???????????????????????????

add ax,cx

mov dx,ax
inc si

jmp @r
@@:
mov ax,dx

ret
;;;;;;;;;;;;;;;;;;;

dgtTostr: ;число в строку
;ax=число
;si=строка

mov dl,'$' ;???????????????????????????
push dx



vuv_chisla_s:
mov dx,0
mov bx,10
div bx


add dl,30h

push dx

cmp ax,0
jne vuv_chisla_s
; ;теперь числа вынимаеи из стека
gopop:
pop dx
mov [si],dl ;???????????????????????????
cmp dl,'$'
pushf
inc si ;???????????????????????????
popf
jne gopop

ret
;=====================




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
vvod_trg:
;вход в подменю
;рисуем 5 строк выход, 3 координа ввода и выход
;переключение между ними таб
setcursor 1,0

;menu_color db 1,3,3,3,3
mov [menu_color],1
mov [menu_color+1],3
mov [menu_color+2],3
mov [menu_color+3],3
mov [menu_color+4],3
call print_pod_menu
xor bx,bx
xor si,si; указатель строки
xor di,di
vcikl:
push bx
push si

mov ah,00;команда на ввод символа который будет помещен в AL
int 16h;

cmp al,27
jne @f
pop ax
pop ax
ret
@@:

cmp al,9
jne vnotab


call cls
setcursor 0,0
call print_menu
setcursor 1,0
call next_menu
call print_pod_menu

pop si
pop bx
inc bx
add si,15

cmp bx,4
jne @f
pusha
call vu4islitS;вычисляем площядь треугольника
popa
xor bx,bx
xor si,si

jmp vcikl

@@:

cmp bx,0
je @f
push bx
;вызываем обработцик ввода координат
push si

inc bx
call vvod_chisel

pop si
pop bx

cmp al,27
je vexit

@@:
jmp vcikl
;если выбрано меню то идем туда

vnotab:

pop si
pop bx

;проверим может нажали энтер
cmp al,13
jne @f
cmp bx,0
jne @f
ret
@@:
jmp vcikl
vexit:




ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cls:

mov ax,0600h
mov bh,00
mov cx,0000 ;верхняя левая позиция
mov dx,184fh
int 10h

ret
;====================================
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
next_str:
mov ah,9
mov dx,endl
int 21h
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
next_menu:
;увеличиваем цвета
;0=3 3=2 2=1
;pusha
xor ax,ax
mov ah,[menu_color+3]

mov al,[menu_color]
mov [menu_color],ah

mov ah,[menu_color+1]
mov [menu_color+1],al

mov al,[menu_color+2]
mov [menu_color+2],ah

mov ah,[menu_color+3]
mov [menu_color+3],al

;popa
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
print_pod_menu:
print m_exit,[menu_color]
call next_str
print menuCoor1,[menu_color+1]
call next_str
print menuCoor2,[menu_color+2]
call next_str
print menuCoor3,[menu_color+3]
call next_str
print menuRezult,[menu_color+4]

ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
vvod_chisel:
;выделяем площядь для вывода
;два числа вписуем в строку
;если пользователь не нажал на цифры то поле не меняем
;если нажал то обнуляем все
add di,2
cmp di,6
jl @f
xor di,di
@@:

sub si,15
add si,3
;ставим курсор
push bx
setcursor bl,3

;закрашиваем два символа
call set_color_did

;вводим занчения туда
pop bx
push bx
setcursor bl,3 ;???????????????????????????
mov [msg],'$'
mov [msg+1],'$' ;???????????????????????????
mov [msg+2],'$'
call get_didgit



cmp al,0 ;del
jne @f

mov [menuCoor1+si],'0'
mov [menuCoor1+si+1],'0'

mov [menuCoor1+si+3],'0'
mov [menuCoor1+si+4],'0'

; mov
pop bx ;очищяем стек
push bx
sub si,3
call vvod_chisel_pressDel
pop bx ;очищяем стек
push bx
setcursor bl,3
;цвет возврящяем прежний
call set_color_norm_did
pop bx
;востанавливаем si
add si,15
jmp vvod_chisel
@@:
;---------
cmp al,27
jne @f
pop bx ;очищяем стек
ret
@@:
;---------
cmp [msg],'$'
je @f
push si
mov si,msg
call strTodgt
mov word [x+di],ax ;???????????????????????????
pop si
@@:


pop bx
push bx
setcursor bl,3
;цвет возврящяем прежний
call set_color_norm_did
;начинаем заполнять У
pop bx
push bx
setcursor bl,6
call set_color_did

pop bx
push bx
setcursor bl,6 ;???????????????????????????
add si,3
mov [msg],'$'
mov [msg+1],'$' ;???????????????????????????
mov [msg+2],'$'

call get_didgit


cmp al,0 ;del
jne @f

mov [menuCoor1+si],'0'
mov [menuCoor1+si+1],'0'

mov [menuCoor1+si-2],'0'
mov [menuCoor1+si-3],'0'

; mov
pop bx ;очищяем стек
push bx
sub si,6
call vvod_chisel_pressDel
pop bx ;очищяем стек
push bx
setcursor bl,6
;цвет возврящяем прежний
call set_color_norm_did
pop bx
;востанавливаем si
add si,15
jmp vvod_chisel
@@:


cmp al,27
jne @f
pop bx ;очищяем стек
ret
@@:
;-------------
cmp [msg],'$'
je @f
mov si,msg
call strTodgt
mov word[y+di],ax
@@:


pop bx
push bx
setcursor bl,6
;цвет возврящяем прежний
call set_color_norm_did
pop bx


ret

vvod_chisel_pressDel:

mov [di+x],0
mov [di+y],0
;также обнуляем строки
;вернее выводим обнуленные
push si
mov ax,si
mov si,menuCoor1
add si,ax
setcursor bl,0
print si,3
pop si
cmp di,0
je @f
sub di,2
ret
@@:
mov di,4
ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;=======================================
set_color_did:




;и закрашиваем два символа вправо


mov ah,8
mov bx,0
int 10h


MOV AH,09h;функция вывода на экран
;mov al,' ';символ который выводим
mov bh,00;страница
mov bl,02h;атрибут цвета
mov cx,01;число повторений
int 10h

;смотрим положение курсора
mov ah,3
xor bx,bx
int 10h

inc dl
setcursor dh,dl

mov ah,8
mov bx,0
int 10h

;выделяем символы
;и только выделить а не стереть
MOV AH,09h;функция вывода на экран
;mov al,' ';символ который выводим
mov bh,00;страница
mov bl,02h;атрибут цвета
mov cx,01;число повторений
int 10h

ret
;========================================
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;========================================
get_didgit:
;водим два числа

mov ah,00
int 16h

cmp al,13 ;enter
je get_didgit_exit

cmp al,9 ;tab
je get_didgit_exit

cmp al,27 ;esc
je get_didgit_exit

cmp al,0 ;del
je get_didgit_exit

;одниляем два элемента
push ax
MOV AH,09h;функция вывода на экран
mov al,' ';символ который выводим
mov [menuCoor1+si+1],al
mov bh,00;страница
mov bl,02h;атрибут цвета
mov cx,02;число повторений
int 10h


pop ax


mov [menuCoor1+si],al
mov [msg],al

;вывели сивол
MOV AH,0eh;функция вывода на экран
mov bh,00;страница
mov bl,2;атрибут цвета

int 10h




mov ah,00
int 16h

cmp al,13 ;enter
je get_didgit_exit

cmp al,9 ;tab
je get_didgit_exit

cmp al,27 ;esc
je get_didgit_exit

cmp al,0 ;del
je get_didgit_exit

mov [msg+1],al
mov [menuCoor1+si+1],al ;???????????????????????????
;вывели сивол
MOV AH,0eh;функция вывода на экран
mov bh,00;страница
mov bl,2;атрибут цвета
int 10h



get_didgit_exit:

ret
;========================================
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;=======================================
set_color_norm_did:




;и закрашиваем два символа вправо


mov ah,8
mov bx,0
int 10h


MOV AH,09h;функция вывода на экран
;mov al,' ';символ который выводим
mov bh,00;страница
mov bl,01h;атрибут цвета
mov cx,01;число повторений
int 10h

;смотрим положение курсора
mov ah,3
xor bx,bx
int 10h

inc dl
setcursor dh,dl

mov ah,8
mov bx,0
int 10h

;выделяем символы
;и только выделить а не стереть
MOV AH,09h;функция вывода на экран
;mov al,' ';символ который выводим
mov bh,00;страница
mov bl,01h;атрибут цвета
mov cx,01;число повторений
int 10h

ret
;========================================
vu4islitS:
;сначало смотрим все занчения координат

xor ax,ax
xor dx,dx
;вычисляем площядь треугольника
mov ax,word[x]
mov bx,word[x+4]
sub ax,bx

mov cx, word[y+2]
mov dx, word[y+4]
sub cx,dx

imul cx

push ax

mov ax,word[x+2]
mov bx,word[x+4]
sub ax,bx

mov cx, word[y]
mov dx, word[y+4]
sub cx,dx


imul cx

mov bx,ax

pop ax


sub ax,bx

cmp ax,0
jge @f
neg ax
@@:

xor dx,dx
xor bx,bx
mov bx,2 ;???????????????????????????
div bx ;???????????????????????????

;
mov si,msgS

call dgtTostr


ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;------------------------------------------
;------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



Опубликовал Kest May 13 2014 02:31:13 · 0 Комментариев · 2063 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Scrrlcaptoin
Приемы программир...
API (Применение A...
JBlabel3D
IPAddresseEdit
Delphi 2005 для W...
Библиотека програ...
Прграммирование в...
Киллер окон
VksButton
BSButton
Пример работы с б...
С# для профессион...
C++ Стандартная б...
3D Тетрис [Исходн...
CodeGear RAD Stud...
Fig [Исходник на ...
JanReplace
Учебник по создан...
Программирование ...

Топ загрузок
Приложение Клие... 100480
Delphi 7 Enterp... 87871
Converter AMR<-... 20082
GPSS World Stud... 13515
Borland C++Buil... 12060
Borland Delphi ... 8671
Turbo Pascal fo... 7048
Visual Studio 2... 5005
Калькулятор [Ис... 4910
FreeSMS v1.3.1 3545
Случайные статьи
вычисление значени...
Типы float и int з...
Введение в MySQL (...
Фаза исследования
Спам-фильтр
Алгоритмы внутренн...
• обучающий персон...
Стандартные подпро...
Документация
будут соединяться ...
Переустановка пров...
Integer or real ex...
Управление перемещ...
Каковы шансы у про...
Есть ли польза от ...
Установка соединен...
Web Основы с LWP
Упражнения для язы...
Уровень централизации
Пространства имен ...
Модули в XHTML
Каковы шансы на ус...
МОДЕЛЬ С АКТИВНОЙ ...
10.6. Задачи
Как проиндексирова...
Статистика



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


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