|
主题 : : 【实验16】 [已解决] |
回复[ 3次 ]
点击[ 1133次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-07-01 21:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
【测试程序】
1 assume cs:code
2 data segment
3 m1 db 'Clear full screen --------->(1)',0dh,0ah,'$'
4 m2 db 'Set foreground color------->(2)',0dh,0ah,'$'
5 m3 db 'Set bakcground color------->(3)',0dh,0ah,'$'
6 m4 db 'Scroll up one line--------->(4)',0dh,0ah,'$'
7 m5 db 'Please choice a number:','$'
8 m6 db '1,Red 2,Green 3,Bule:','$'
9 cr db 0dh,0ah,'$'
10 tmp db 0
11 msgaddr dw offset m1,offset m2,offset m3,offset m4,offset m5
12 data ends
13 code segment
14 start:
15 mov ax,data
16 mov ds,ax
17 mov bx,offset msgaddr
18 mov cx,5
19 s: mov dx,[bx]
20 mov ah,09h
21 int 21h
22 add bx,2
23 loop s
24 ;
25 mov ah,1
26 int 21h
27 mov tmp,al
28 ;
29 mov dx,offset cr
30 mov ah,9
31 int 21h
32
33 cmp tmp,'1'
34 je s1
35 cmp tmp,'4'
36 je s1
37 jmp do
38 s1: mov ah,tmp
39 sub ah,30h
40 int 7ch
41 jmp done
42 ;
43 do:
44 cmp tmp,'2'
45 je s2
46 cmp tmp,'3'
47 je s3
48 ;
49 s2: mov dx,offset m6
50 mov ah,9
51 int 21h
52 mov ah,1
53 int 21h
54 cmp al,'1'
55 je s21
56 cmp al,'2'
57 je s22
58 cmp al,'3'
59 je s23
60 s21: mov ah,tmp
61 sub ah,30h
62 mov al,4
63 int 7ch
64 jmp done
65 s22: mov ah,tmp
66 sub ah,30h
67 mov al,2
68 int 7ch
69 jmp done
70 s23: mov ah,tmp
71 sub ah,30h
72 mov al,1
73 int 7ch
74 jmp done
75 ;
76 s3: mov dx,offset m6
77 mov ah,9
78 int 21h
79 mov ah,1
80 int 21h
81 cmp al,'1'
82 je s31
83 cmp al,'2'
84 je s32
85 cmp al,'3'
86 je s33
87 s31: mov ah,tmp
88 sub ah,30h
89 mov al,40h
90 int 7ch
91 jmp done
92 s32: mov ah,tmp
93 sub ah,30h
94 mov al,20h
95 int 7ch
96 jmp done
97 s33: mov ah,tmp
98 sub ah,30h
99 mov al,10h
100 int 7ch
101 jmp done
102 ;
103 done: mov ah,4ch
104 int 21h
105 code ends
106 end start
=======================================================================================
【中断例程】
1 assume cs:code
2 code segment
3 start:
4 mov ax,cs
5 mov ds,ax
6 mov si,offset setdisp
7 mov ax,0
8 mov es,ax
9 mov di,200h
10 mov cx,offset setend-offset setdisp
11 cld
12 rep movsb
13 ;
14 mov ax,0
15 mov es,ax
16 mov word ptr es:[7ch*4],200h
17 mov word ptr es:[7ch*4+2],0
18 mov ah,4ch
19 int 21h
20 ;
21 setdisp:
22 cmp ah,1
23 je do1
24 cmp ah,2
25 je do2
26 cmp ah,3
27 je do3
28 cmp ah,4
29 je do4
30 jmp over
31 ;
32 do1: call sub1
33 jmp over
34 do2: call sub2
35 jmp over
36 do3: call sub3
37 jmp over
38 do4: call sub4
39 jmp over
40 ;;
41 sub1: push bx
42 push cx
43 push es
44 mov bx,0b800h
45 mov es,bx
46 mov bx,0
47 mov cx,4000
48 sub1s: mov byte ptr es:[bx],20h
49 add bx,2
50 loop sub1s
51 pop es
52 pop cx
53 pop bx
54 ret
55 ;;
56 sub2: push bx
57 push cx
58 push es
59 mov bx,0b800h
60 mov es,bx
61 mov bx,1
62 mov cx,4000
63 sub2s: and byte ptr es:[bx],0f8h
64 or es:[bx],al
65 add bx,2
66 loop sub2s
67 pop es
68 pop cx
69 pop bx
70 ret
71 ;
72 sub3: push bx
73 push cx
74 push es
75 mov bx,0b800h
76 mov es,bx
77 mov bx,1
78 mov cx,4000
79 sub3s: and byte ptr es:[bx],8fh
80 or es:[bx],al
81 add bx,2
82 loop sub3s
83 pop es
84 pop cx
85 pop bx
86 ret
87 ;
88 sub4: push cx
89 push si
90 push di
91 push es
92 push ds
93 mov si,0b800h
94 mov es,si
95 mov ds,si
96 mov si,160
97 mov di,0
98 cld
99 mov cx,24
100 sub4s: push cx
101 mov cx,160
102 rep movsb
103 pop cx
104 loop sub4s
105
106 mov cx,80
107 mov si,0
108 sub4s1: mov byte ptr [160*24+si],20h
109 add si,2
110 loop sub4s1
111 pop ds
112 pop es
113 pop di
114 pop si
115 pop cx
116 ret
117 ;
118 over: iret
119 setend: nop
120 ;
121 code ends
122 end start
123
=======================================================================================
截图:
d:\asm>lab16
Clear full screen --------->(1)
Set foreground color------->(2)
Set bakcground color------->(3)
Scroll up one line--------->(4)
Please choice a number:2
1,Red 2,Green 3,Bule:3
d:\asm> | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-07-01 21:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
另外, 书里297页中, sub3段有两句代码
mov cl,4
shl al,cl
这两句我感觉有问题, 去掉即可。因为al的值已经传递过来啦, 干嘛要shl四位呢? | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-07-17 18:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2010-07-16 21:42 |
mov cl,4
shl al,cl
这两句是必要的,因为(al)∈{0,1,2,3,4,5,6,7},
而背景色在属性字节的4、5、6位,
如果不左移那么设置将是前景色。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-07-25 15:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
此贴由 贴主 于 [ 2010-07-25 15:43 ] 结贴。 结贴原因:问题已解决 | | |
|