Решения задачи #4.
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 |