Помощь - Поиск - Пользователи - Календарь
Полная версия: Вывод на экран
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Assembler
ted
Привет! Помогите с программой нужно написать программу которая выводит рамку с псевдокодом в левом нижнем углу.
volvo
А теперь, если можно. еще раз, только более доходчиво: что должно отображаться на экране? Рамка с каким псевдокодом? Ну, и про компилятор сразу: чем пользуешься? MASM/TASM/FASM/NASM/что-то еще?
Гость
компилятор Tasm. Программа должна выводить пустую рамку в левом нижнем углу.
volvo
Например, вот так:
data segment

size_X dw 40
size_Y dw 10

data ends

code segment
	assume cs: 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 cx
	loop next
	
	; Все, что осталось сделать - отрисовать нижнюю границу рамки
	mov al, 200
	stosw
	mov al, 205
	mov cx, size_X
	rep stosw
	mov al, 188
	stosw
	
	pop es	; Восстановим ES
	ret	; И выходим
DrawFrame endp

start:
	mov  ax, data
	mov  ds, ax
	
	mov dh, 12	; начинаем с 12 строки
	mov dl, 0	; (нулевой столбец)
	
	call DrawFrame
	mov  ax, 4C00h
	int  21h
code ends
end start
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.