Правила - Рейтинг - Библиотека решений

Решения задачи #4.

1. Условие задачи

2. Решение by Ayl ( 33 байта).

3. Решение by Broken Sword (35 байт).

4. Решение by Eugene (44 байта).

5. Решение by Torax (49 байт).

6. Решение by Maverick (51 байт).

Условие задачи.

Дано:

AX - позиция окна сверху

BX - позиция окна слева

CX - ширина окна

DX - высота окна

Значения этих регистров могут быть любыми. 

Задание: Начертить окно в текстовом режиме, соблюдая данные в регистрах. Окно - это закрашенная область на экране, делать линии по границам окна не нужно. Так же следует очистить экран перед прорисовкой окна.

Решения задачи.

 by Ayl: размер 33 байта.

.Model TINY
.286
X     EQU 5    ; начальная позиция стpоки окна
Y     EQU 3    ; начальная позиция колонки окна
W     EQU 54   ; шиpина окна
H     EQU 13   ; высота окна
C     EQU 2fh  ; атpибут символов
.Code
.Startup
  mov  ax, 3   ; установим pежим (одновременно очистка экpана)
  int 10h
  ; начальная установка регистров согласно задаче
  mov  al, Y
  mov  bl, X
  mov  cl, W
  mov  dl, H
 
  ; вычислим кооpдинаты пpавого нижнего угла окна
  add  cl, bl  ; координата X (колонка)
  add  dl, al  ; кооpдината Y (стpока)
 
  ; сфоpмиpуем паpаметpы для вызова пpеpывания
  xchg dh, dl  ; стpока пpавого нижнего угла окна
  mov  dl, cl  ; колонка пpавого нижнего угла окна
  mov  cl, bl  ; колонка левого веpхнего угла окна
  mov  ch, al  ; стpока левого вехнего угла окна
 
  mov  bh, C   ; атpибут символов для заполнения
  mov  ax, 0600h ; функция очистки окна
  int 10h
  ret          ; все
end

by Broken Sword: размер 35 байт.

; tasm entry.asm
; tlink /x /3 /t entry.obj
; entry.com
; by Broken Sword [HI-TECH]
; size: 35 bytes

.model tiny
.386
.code 
org 100h
@@start:
mov AL,03h
int 10h

mov AL,10        ; top
mov BL,8         ; left
mov CL,10        ; width
mov DL,10        ; height

mov DH,AL        ; DH <- top
mov AL,DL        ; AL <- height
mov DL,BL        ; DL <- left
mov BL,55h       ; color
@@S1:
mov AH,2
int 10h          ; set cursor at DH, DL

mov AH,9
int 10h          ; out string

inc DH           ; next row
dec AL           ; last row?
jnz @@S1

ret 
end @@start

by Eugene: размер 44 байта.

;Составил Eugene
;задача: начертить окно в текстовом режиме
;AX - позиция окна сверху
;BX - позиция окна слева
;CX - ширина окна
;DX - высота окна
;способ компиляции:
;fasm 4.asm 4.com
;размер 44 байта
        org     100h
        mov     al, 03h ;установим режим 80x25
        int     10h     ;при этом экран очищается

        mov     ax, 4   ;позиция окна сверху
        mov     bx, 5   ;позиция окна слева
        mov     cx, 32  ;ширина окна
        mov     dx, 10  ;высота окна

;рисуем окно следующими функциями
;set cursor position
;int 10h ah=02h bh=page dl=column dh=row
;write char
;int 10h ah=0ah al=char bh=page cx=repeat count
;строим 1 цикл по dx

m1:
        pusha   ;сохраним все регистры
        shl     dx, 8   ;преобразуем dx к виду row:column
        add     dl, bl
        add     dh, al
        mov     ah, 02h
        xor     bh, bh
        int     10h     ;set cursor position
        mov     ax, 0adbh
        int     10h     ;write char
        popa            ;восстановим все регистры
        dec     dx
        jnz     m1      ;цикл по dx

        xor     ah, ah
        int     16h     ;ждём нажатия клавиши
        ret

by Torax: размер 49 байт.

.386
.model tiny
.code
org 100h

@@Start:
        mov ax, X
        mov bx, X
        mov cx, X
        mov dx, X
        push 0B800h
        pop es
       
        pusha
        mov cx, 4000
        rep stosb
        popa
       
        push bx
        mov bl, 160
        mul bl
        pop bx
       
        shl bx, 1
        add ax, bx
        mov di, ax
        xchg cx, dx
@@1:    pusha
        rep stosw
        popa
        add di, 160
        dec dx
        jnz  @@1
        ret
END @@Start            

by Maverick: размер 51 байт.

;Task #4
;Способ компиляции: 
;tasm 4.asm
;tlink /t 4.obj
;Автор: Maverick
;Размер: 51 байт
.model tiny
.286
.code
org 100h
start:
push 0b800h ;Очистка экрана
pop es
mov ch,20
mov ax,0720h
rep stosw

mov ax,1 ;Позиция окна по Y 
mov bx,2 ;Позиция окна по X 
mov cx,8 ;Ширина окна 
mov dx,3 ;Высота окна
xchg cx,dx ;Обмен регистров для 
mov ah,dl
mov dh,al
mov dl,bl
mov bl,ah

graf:
push cx
mov ah,2h ;Устоновим курсор
int 10h

mov ax,0adbh ;Выводим
mov cl,bl
int 10h
inc dh
pop cx
loop graf
ret
end start