. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->直接定址表
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  【实验16】  [已解决] 回复[ 3次 ]   点击[ 1133次 ]  
masmaster
[帖 主]   [ 发表时间: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>
masmaster
[第1楼]   [ 回复时间:2010-07-01 21:05 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
另外, 书里297页中, sub3段有两句代码
mov cl,4
shl al,cl
这两句我感觉有问题, 去掉即可。因为al的值已经传递过来啦, 干嘛要shl四位呢?
weyoin
[第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位,
如果不左移那么设置将是前景色。
masmaster
[第3楼]   [ 回复时间:2010-07-25 15:43 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
此贴由 贴主 于 [ 2010-07-25 15:43 ] 结贴。 结贴原因:问题已解决
得分情况: 2楼(weyoin):4分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved