Помощь - Поиск - Пользователи - Календарь
Полная версия: вывод рамки
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
amega
Добрый день! делаю лабу и в ней нужно вывести рамку с надписями, я написал часть (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;

Client
сделай вывод параллельных сторон в цикле, т.е. верх и низ в одном цикле, левую и правую в другом.
volvo
Цитата
Хотелось бы узнать как уменьшить мой код.
Пишешь макрос (или процедуру, тут зависит от уровня владения ассемблером), выводящий символ, и 2 макроса, выводящих последовательность символов (вертикальную и горизонтальную линии). Тогда отрисовать рамку можно в 8 строк.
amega
Цитата
или процедуру, тут зависит от уровня владения ассемблером

увы, они пока маленькие. с макросами еще не работал
amega
Цитата
Тогда отрисовать рамку можно в 8 строк.

можеш показать как, а то невиходит ни как
volvo
Наконец-то добрался до своего компьютера, где установлен 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
Что удобнее, каждый раз делать все вручную или пользоваться подобными средствами - решать тебе...
amega
огромное спасибо
prednisolone side effects in tod
Levitra Bayer Comprar
how does plaquenil work for auto
Levitra Sus Efectos Secundarios
best place to buy generic cialis
Amoxil Clav Tablets
how long does it take for propec
Acheter Kamagra Site Fiable
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.