📄 a1.asm
字号:
;*************************************************************************
;A1:用汇编语言实现:通过键盘输入任意两点坐标,
;在屏幕上开一个窗口,并设定控制窗口的颜色,要求
;屏幕呈现颜色的变化。(huangyujie)
;*************************************************************************
datarea segment
num dw 4 dup(?)
mess1 db 13,10,'Enter win_ulr: $'
mess2 db 13,10,'Enter win_ulc: $'
mess3 db 13,10,'Enter win_lrr: $'
mess4 db 13,10,'Enter win_lrc: $'
merror db 13,10,'Enter number 1 to 8 to change color! $'
win_high dw ?
win_width dw ?
color db ?
datarea ends
;**********************************************************************
prognam segment
;------------------------------------------------------------------------------
main proc far
assume cs:prognam,ds:datarea
start:
push ds
sub ax,ax
push ax
mov ax,datarea
mov ds,ax
call input
mov ax,13h
int 10h
mov ax,0a000h
mov es,ax
cld
call screen_color
mov ax, num[4]
sub ax,num[0]
add ax,1
mov win_high,ax
mov ax, num[6]
sub ax,num[2]
add ax,1
mov win_width,ax
mov color,00h
change:
mov al,color
call draw_win
mov ah,8h
int 21h
cmp al,20h
je next
mov color,al
cmp al, 1bh ;ESC_key
je exit
jmp change
next: add color,1
jmp change
exit:
mov ax,3
int 10h
ret
main endp
;--------------------------------------------------------------------------------------
input proc near
mov si,0
get_char:
cmp si,0
jz x1
cmp si,2
jz y1
cmp si,4
jz x2
cmp si,6
jz y2
x1: lea dx,mess1
jmp enter
y1: lea dx,mess2
jmp enter
x2: lea dx,mess3
jmp enter
y2: lea dx,mess4
jmp enter
enter:
mov ah,09h
int 21h
call decibin
cmp dl,13
je store
add si,2
cmp si,8
jnz get_char
store:
mov num[si],bx
add si,2
cmp si,8
jnz get_char
ret
input endp
;------------------------------------------------------------------------------------
decibin proc near
mov bx,0
newchar:
mov ah,1
int 21h
mov dl,al
sub al,30h
cmp al,0
jl exit1
cmp al,9d
jg exit1
cbw
xchg ax,bx
mov cx,10d
mul cx
xchg ax,bx
add bx,ax
jmp newchar
exit1: ret
decibin endp
;------------------------------------------------------------------------------------
draw_win proc near
mov cx,num[2]
mov si, num[0]
push ax
mov ax,320
mul si
mov di,ax
add di,cx
pop ax
push di
mov bx,win_high ;r2-r1+1
win1:
mov cx,win_width ;c2-c1+1
rep stosb
pop di
add di,320
push di
dec bx
jnz win1
pop di
ret
draw_win endp
;-----------------------------------------------------------------------------------
screen_color proc near
mov ch,0
mov cl,0h
mov dh,0h
mov bx,0h
mov ax,1010h
mov dl,64
prog:
int 10h
inc ch
inc bx
dec dl
jnz prog
mov di,0
mov al,3fh
call band
ret
screen_color endp
;----------------------------------------------------------------------------------
band proc near
mov cx,64
loo1:
mov bx,960
loo2:
stosb
dec bx
jnz loo2
dec al
loop loo1
ret
band endp
;********************************************************************
prognam ends
;********************************************************************
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -