微机显示程序设计(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机实验报告
(1)
实验程序:
title draw--program to draw on screen with
read_c equ 0
key_rom equ 16h
up equ 48h
down equ 50h
right equ 4dh
left equ 4bh
block equ 0dbh
esc1 equ 1bh
video segment at 0b800h
wd_buff label word
v_buff db 25*80*2 dup(?)
video ends
pro_nam segment
main proc far
assume cs:pro_nam,es:video
start:
push ds
sub ax,ax
push ax
mov ax,video
mov es,ax
mov cx,80*25
mov bx,0
clear:
mov es:[wd_buff+bx],0700h
inc bx
inc bx
loop clear
mov ch,12d
mov cl,40d
get_char:
mov ah,read_c
int key_rom
cmp al,esc1
jz exit
mov al,ah
cmp al,up
jnz not_up
dec ch
not_up:
cmp al,down
jnz not_down
inc ch
not_down:
cmp al,right
jnz not_right
inc cl
not_right:
cmp al,left
jnz lite_it
dec cl
lite_it:
mov al,160d
mul ch
mov bl,cl
rol bl,1
mov bh,0
add bx,ax
mov al,block
mov es:[v_buff+bx],al
jmp get_char
exit:
ret
main endp
pro_nam ends
end start
思考题:
1、显示器是如何定义窗口的大小的?
答:显示器是根据显存的单元数,v_buff db 25*80*2 dup(?),定义窗口大小的。
2、在文本方式下,什么是属性值?
答:block equ 0dbh是定义的属性值,v_bluff+bx+1,是放每个单元(一共25*80个)属性值的地方,即每个单元的高字节。
3、光标轨迹运行到边界后,为什么光标会闪烁和改变颜色?若要光标不变,应如何修改程序?
答:光标移位所使用的语句是循环移位,当光标由边界移到另一边边界时方块字符的属性值发生错位相乘,所以光标会闪烁和改变颜色。若要光标不变,应将循环移位ROL改为逻辑移位SHL。
(2)
实验程序:
stack segment
dw 64 dup(?)
stack ends
code segment
assume cs:code,ss:stack
start:
mov cx,001ah
mov bl,41h
mov ah,02h
a1: mov dl,bl
int 21h
inc bl
push cx
a2: loop a2
pop cx
dec cx
jnz a1
mov ah,4ch
int 21h
code ends
end start
结果:
修改程序:
stack SEGMENT
DW 64 DUP(?)
stack ENDS
code SEGMENT
ASSUME CS:code,SS:stack start:
MOV CX,0008h
a0: PUSH CX
MOV BL,31h
MOV CX,0009h
MOV AH,02h
a1: MOV DL,BL
INT 21h
INC BL
PUSH CX
a2: LOOP a2
POP CX
DEC CX
JNZ a1
MOV AH,02h
MOV DL,20h
INT 21h
POP CX
DEC CX
JNZ a0
MOV AH,4ch
INT 21h
code ENDS
END start
结果: