IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> вывод рамки, упрощение кода
сообщение
Сообщение #1


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


Добрый день! делаю лабу и в ней нужно вывести рамку с надписями, я написал часть (2 часть анолагичная первой ток с другим названием и распаложена ниже). Дак вот посмотрел предидущий топик , там рамка попроще написана. Хотелось бы узнать как уменьшить мой код.
ЗЫ лекций небыло пока, делаю с методой и учебником(но без результата)
ЗЫ2 програма ждет нажатия символа и завершается ее работа.


.MODEL SMALL
.STACK 100h
.DATA
mes db 'laba 2 SP','$'
.CODE
metka:
mov ax,@data
mov ds,ax
;очистка екрана
mov AH,0
mov AL,1
int 10H
;прорисовка уголка рамки
mov ah,09
mov al,201
mov bh,0
mov bl,00011111b
mov cx,1
int 10h
;передвижение курсора на 1 позицию вперед
mov ah, 2
mov bh,0
mov dh,0
mov dl,1
int 10h
;прорисовка линии
mov ah,09
mov al,205
mov bh,0
mov bl,00011111b
mov cx,30
int 10h
;передвижение курсора на конец линии
mov ah, 2
mov bh,0
mov dh,0
mov dl,31
int 10h
;прорисовка уголка рамки
mov ah,09
mov al,187
mov bh,0
mov bl,00011111b
mov cx,1
int 10h
;передвижение курсора на новуюю линию
mov ah,2
mov bh,0
mov dh,1
mov dl,0
int 10h
;прорисовка колонки
mov ah,09
mov al,186
mov bh,0
mov bl,00011111b
mov cx,1
int 10h
;передвижение курсора на начало надписи
mov ah,2
mov bh,0
mov dh,1
mov dl,10
int 10h
;прорисовка надписи
mov ah,09
mov dx,offset mes
int 21h
;передвижение курсора на конец линии
mov ah, 2
mov bh,0
mov dh,1
mov dl,31
int 10h
;прорисовка колонки
mov ah,09
mov al,186
mov bh,0
mov bl,00011111b
mov cx,1
int 10h
;передвижение курсора на новуюю линию
mov ah,2
mov bh,0
mov dh,2
mov dl,0
int 10h
;прорисовка колонки
mov ah,09
mov al,204
mov bh,0
mov bl,00011000b
mov cx,1
int 10h
;передвижение курсора на 1 позицию вперед
mov ah,2
mov bh,0
mov dh,2
mov dl,1
int 10h
;прорисовка линии
mov ah,09
mov al,205
mov bh,0
mov bl,00011000b
mov cx,30
int 10h
;передвижение курсора на коннец строки
mov ah,2
mov bh,0
mov dh,2
mov dl,31
int 10h
;прорисовка колонки
mov ah,09
mov al,185
mov bh,0
mov bl,00011000b
mov cx,1
int 10h

mov ah,10h
int 16h

mov ah,4ch
int 21h
END metka;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


сделай вывод параллельных сторон в цикле, т.е. верх и низ в одном цикле, левую и правую в другом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
Хотелось бы узнать как уменьшить мой код.
Пишешь макрос (или процедуру, тут зависит от уровня владения ассемблером), выводящий символ, и 2 макроса, выводящих последовательность символов (вертикальную и горизонтальную линии). Тогда отрисовать рамку можно в 8 строк.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


Цитата
или процедуру, тут зависит от уровня владения ассемблером

увы, они пока маленькие. с макросами еще не работал

Сообщение отредактировано: amega -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


Цитата
Тогда отрисовать рамку можно в 8 строк.

можеш показать как, а то невиходит ни как
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Наконец-то добрался до своего компьютера, где установлен ASM... Вот это я имел в виду под использованием макросов:
.MODEL SMALL
.STACK 100h
.DATA
mes db 'laba 2 SP','$'

out_ch macro X
push cx
mov ah, 09h
mov al, X
mov bh, 0
mov bl, 00011111b
mov cx, 1
int 10h
pop cx
endm
vert_line macro X, sX, sY, L
local loop_1
mov cx, L
mov dh, sY
loop_1:
mov ah, 02h
mov bh, 0
mov dl, sX
int 10h
out_ch X
inc dh
loop loop_1
endm
horz_line macro X, sX, sY, L
local loop_2
mov cx, L
mov dl, sX
loop_2:
mov ah, 02h
mov bh, 0
mov dh, sY
int 10h
out_ch X
inc dl
loop loop_2
endm

.CODE
metka:
mov ax, @data
mov ds, ax

; очистка экрана
mov ah, 0
mov al, 1
int 10h


; прорисовка уголка рамки (левый верхний)
horz_line 201, 0, 0, 1 ;
; прорисовка верхней границы рамки
horz_line 205, 1, 0, 30 ;
; прорисовка уголка рамки (правый верхний)
horz_line 187, 31, 0, 1 ;
; прорисовка левой границы рамки
vert_line 186, 0, 1, 1
; прорисовка правой границы рамки
vert_line 186, 31, 1, 1 ;
; прорисовка угла (левый нижний)
horz_line 204, 0, 2, 1 ;
; прорисовка нижней границы рамки
horz_line 205, 1, 2, 30
; прорисовка угла (правый нижний)
horz_line 185, 31, 2, 1

; передвижение курсора на начало надписи
mov ah, 2
mov bh, 0
mov dh, 1
mov dl, 10
int 10h
; прорисовка надписи
mov ah, 09h
mov dx, offset mes
int 21h
mov ah, 10h
int 16h

mov ah, 4ch
int 21h
END metka
Что удобнее, каждый раз делать все вручную или пользоваться подобными средствами - решать тебе...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


огромное спасибо
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Levitra Bayer Comprar
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 6.12.2021 7:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name