.286 .model small .code mov ax, 0006h int 10h mov ax, 0b800h mov es, ax ;call draw_horizontal_line call draw_vertical_line xor ax, ax int 16h mov ax, 0003h int 10h mov ax, 4c00h int 21h draw_horizontal_line: push bp mov bp, sp sub sp, 7 mov word ptr [bp - 2], 05h; X start coord mov word ptr [bp - 4], 7Fh; Length of line mov byte ptr [bp - 5], 5Fh; Y start coord mov byte ptr [bp - 6], 00h; value of first byte mov byte ptr [bp - 7], 00h; value of last byte ;Cut length mov ax, word ptr [bp - 4] mov bx, word ptr [bp - 2] add ax, bx cmp ax, 280h jl less_than_width mov ax, 280h sub ax, bx mov word ptr [bp - 4], ax less_than_width: ;Compute last byte add ax, bx and al, 07h mov cl, al mov al, 0FFh shr al, cl not al mov byte ptr [bp - 7], al ;Compute first byte mov cx, word ptr [bp - 2] and cl, 07h mov al, 0FFh shr al, cl mov byte ptr [bp - 6], al ;Compute address mov al, byte ptr [bp - 5] shr al, 1 mov bl, 50h mul bl mov di, ax mov al, byte ptr [bp - 5] and al, 01h jz even_line add di, 02000h even_line: mov al, byte ptr [bp - 2] shr al, 3 xor ah, ah add di, ax ;Drawing! mov al, byte ptr [bp - 6] mov bl, byte ptr [bp - 4] cmp bl, 01h je draw_one_byte jl drawing_end jne draw_some_bytes draw_one_byte: mov bl, byte ptr [bp - 7] and al, bl stosb jmp drawing_end draw_some_bytes: mov bx, word ptr [bp - 4] drawing_loop: stosb mov al, 0FFh sub bx, 8 cmp bx, 0 jg drawing_loop mov al, byte ptr [bp - 7] stosb drawing_end: mov sp, bp pop bp ret draw_vertical_line: push bp mov bp, sp sub sp, 5 mov word ptr [bp - 2], 0FFh; X mov byte ptr [bp - 3], 00h; Y mov byte ptr [bp - 4], 8Fh; Len mov byte ptr [bp - 5], 00h; byte value mov word ptr [bp - 7], 00h; base address ;Byte value mov al, 80h mov bx, word ptr [bp - 2] mov cl, bl and cl, 07h shr al, cl mov byte ptr [bp - 5], al ;Byte address, X is in bx shr bx, 3 mov al, byte ptr [bp - 3] shr al, 1 mov cl, 50h mul cl add bx, ax mov word ptr [bp - 7], bx ;Cut len ;mov al, byte ptr [bp - 3] ;mov ah, byte ptr [bp - 4] ;add ah, al xor ax,ax xor bx,bx mov al, byte ptr [bp - 3] mov bl, byte ptr [bp - 4] add bx, ax cmp bx, 0C8h jle less_than_height xor ax, ax xor bx, bx mov al, byte ptr [bp - 3] mov bl, 0C8h sub bx, ax mov byte ptr [bp - 4], bl less_than_height: xor ax, ax mov al, byte ptr [bp - 5] xor cx,cx mov ch, 02h draw_loop: mov cl, byte ptr [bp - 4] shr cl, 1 mov di, word ptr [bp - 7] mov dl, ch and dl, 01h jz draw_half add di, 2000h draw_half: mov es:[di], al add di, 50h dec cl jnz draw_half dec ch jnz draw_loop mov sp, bp pop bp ret end