Привет! Помогите с программой нужно написать программу которая выводит рамку с псевдокодом в левом нижнем углу.
volvo
15.06.2009 21:50
А теперь, если можно. еще раз, только более доходчиво: что должно отображаться на экране? Рамка с каким псевдокодом? Ну, и про компилятор сразу: чем пользуешься? MASM/TASM/FASM/NASM/что-то еще?
Гость
15.06.2009 22:09
компилятор Tasm. Программа должна выводить пустую рамку в левом нижнем углу.
volvo
16.06.2009 10:11
Например, вот так:
datasegment
size_X dw 40
size_Y dw 10
dataendscodesegmentassumecs: code, ds: data
DrawFrame proc
push es
mov ax, 0b800h
mov es, ax; Начало видеопамяти
push ax
push bx
push dx
mov al, dh
mov bl, 160
mul bl
mov di, ax
xor dh, dh
add di, dx
pop dx
pop bx
pop ax
push di; в DI - смещение для символа, расположенного
; по координатам DH:DL
mov ah, 7 ; В AH - атрибуты цвета (серый на черном)
mov al, 201 ; Верхний левый угол...
stosw ; Заносим два байта (атрибут/символ)
mov al, 205 ; Верхняя линия
mov cx, size_X ; Ширина рамки
rep stosw
mov al, 187 ; Верхний правый угол
stosw
pop di
add di, 160 ; Переходим на следующий ряд
mov cx, size_Y ; CX - высота окна
next:
push cx
push di
mov al, 186 ; Левая рамка
stosw
mov al, 32 ; 32 = пробел
mov cx, size_X ; Внутри окно заполняем пробелами
rep stosw
mov al, 186 ; Правая рамка
stosw
pop di
add di, 160 ; Переходим на следующий ряд
pop cxloop next
; Все, что осталось сделать - отрисовать нижнюю границу рамки
mov al, 200
stosw
mov al, 205
mov cx, size_X
rep stosw
mov al, 188
stosw
pop es; Восстановим ES
ret; И выходим
DrawFrame endpstart:
mov ax, data
mov ds, ax
mov dh, 12 ; начинаем с 12 строки
mov dl, 0 ; (нулевой столбец)
call DrawFrame
mov ax, 4C00h
int 21h
codeendsendstart
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.