Добрый день! делаю лабу и в ней нужно вывести рамку с надписями, я написал часть (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;
сделай вывод параллельных сторон в цикле, т.е. верх и низ в одном цикле, левую и правую в другом.
Наконец-то добрался до своего компьютера, где установлен 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
огромное спасибо