汇编网首页登录博客注册
sissim的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
友情链接

[2010-02-16 09:20] 实验13 (1)

程序如下:
        assume  cs:code
code    segment
start:  mov     ax,code
        mov     ds,ax
        mov     si,offset s
        mov     ax,0
        mov     es,ax
        mov     di,200h
        mov     cx,offset send-offset s
        cld
        rep     movsw

;以上为复制中断例程到0:200h

        mov     bx,7ch*4
        mov     es:[bx],word ptr 200h
        mov     es:[bx+2],word ptr 0

;以上为安装中断例程入口地址

        mov     ax,4c00h
        int     21h

s:      push    ax
        push    bx
        push    cx
        push    dx
        push    es
        push    si
        mov     ax,0b800h
        mov     es,ax
        mov     al,160
        dec     dh
        mul     dh
        mov     bx,ax
        mov     al,2
        dec     dl
        mul     dl
        add     bx,ax
;由行号列号计算出地址
        mov     al,cl
;将颜色存入al(后面判断是否结束循环,需要用到cl)
        xor     cx,cx
next:   mov     cl,[si]
;取得一个字符
        jcxz    over
;如果是0,则转到over,结束
        mov     es:[bx],cl
;向显存写字符
        mov     es:[bx+1],al
;向显存写颜色
        add     bx,2
        inc     si
;修改地址指针
        jmp     next
over:   pop     si
        pop     es
        pop     dx
        pop     bx
        pop     cx
        pop     ax
        iret
send:   nop

code    ends
        end     start

安装中断例程后,调试教材上的应用举例如下:
D:\masm>debug shy13_1t.exe
-u0 13
0B62:0000 B60A          MOV     DH,0A
0B62:0002 B20A          MOV     DL,0A
0B62:0004 B102          MOV     CL,02
0B62:0006 B8600B        MOV     AX,0B60
0B62:0009 8ED8          MOV     DS,AX
0B62:000B BE0000        MOV     SI,0000
0B62:000E CD7C          INT     7C
0B62:0010 B8004C        MOV     AX,4C00
0B62:0013 CD21          INT     21
-g b

AX=0B60  BX=0000  CX=0002  DX=0A0A  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B60  ES=0B50  SS=0B60  CS=0B62  IP=000B   NV UP EI PL NZ NA PO NC
0B62:000B BE0000        MOV     SI,0000
-t

AX=0B60  BX=0000  CX=0002  DX=0A0A  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B60  ES=0B50  SS=0B60  CS=0B62  IP=000E   NV UP EI PL NZ NA PO NC
0B62:000E CD7C          INT     7C
-d ss:fff0
0B60:FFF0  50 0B 0A 0A 02 00 60 0B-00 00 0E 00 62 0B 64 05   P.....`.....b.d.
-t

AX=0B60  BX=0000  CX=0002  DX=0A0A  SP=FFFA  BP=0000  SI=0000  DI=0000
DS=0B60  ES=0B50  SS=0B60  CS=0000  IP=0200   NV UP DI PL NZ NA PO NC
0000:0200 50            PUSH    AX
-d ss:fff0
0B60:FFF0  50 0B 0A 0A 02 00 60 0B-00 00 10 00 62 0B 02 32   P.....`.....b..2
-u
0000:0200 50            PUSH    AX
0000:0201 53            PUSH    BX
0000:0202 51            PUSH    CX
0000:0203 52            PUSH    DX
0000:0204 06            PUSH    ES
0000:0205 56            PUSH    SI
0000:0206 B800B8        MOV     AX,B800
0000:0209 8EC0          MOV     ES,AX
0000:020B B0A0          MOV     AL,A0
0000:020D FECE          DEC     DH
0000:020F F6E6          MUL     DH
0000:0211 8BD8          MOV     BX,AX
0000:0213 B002          MOV     AL,02
0000:0215 FECA          DEC     DL
0000:0217 F6E2          MUL     DL
0000:0219 03D8          ADD     BX,AX
0000:021B 8AC1          MOV     AL,CL
0000:021D 33C9          XOR     CX,CX
0000:021F 8A0C          MOV     CL,[SI]
-u
0000:0221 E30D          JCXZ    0230
0000:0223 26            ES:
0000:0224 880F          MOV     [BX],CL
0000:0226 26            ES:
0000:0227 884701        MOV     [BX+01],AL
0000:022A 83C302        ADD     BX,+02
0000:022D 46            INC     SI
0000:022E EBEF          JMP     021F
0000:0230 5E            POP     SI
0000:0231 07            POP     ES
0000:0232 5A            POP     DX
0000:0233 5B            POP     BX
0000:0234 59            POP     CX
0000:0235 58            POP     AX
0000:0236 CF            IRET
0000:0237 90            NOP
0000:0238 0000          ADD     [BX+SI],AL
0000:023A 0000          ADD     [BX+SI],AL
0000:023C 0000          ADD     [BX+SI],AL
0000:023E 0000          ADD     [BX+SI],AL
0000:0240 0000          ADD     [BX+SI],AL
-g 235

AX=0002  BX=0002  CX=0000  DX=0A0A  SP=FFF8  BP=0000  SI=0000  DI=0000
DS=0B60  ES=0B50  SS=0B60  CS=0000  IP=0235   NV UP DI PL NZ AC PO NC
0000:0235 58            POP     AX
注:此时,在屏幕的10行10列显示了绿色的字符串。
-t

AX=0B60  BX=0002  CX=0000  DX=0A0A  SP=FFFA  BP=0000  SI=0000  DI=0000
DS=0B60  ES=0B50  SS=0B60  CS=0000  IP=0236   NV UP DI PL NZ AC PO NC
0000:0236 CF            IRET
-d ss:fff0
0B60:FFF0  60 0B 00 00 36 02 00 00-64 05 10 00 62 0B 02 32   `...6...d...b..2
-t

AX=0B60  BX=0002  CX=0000  DX=0A0A  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B60  ES=0B50  SS=0B60  CS=0B62  IP=0010   NV UP EI PL NZ NA PO NC
0B62:0010 B8004C        MOV     AX,4C00
-q

D:\masm>

我想说的是,为什么这个可以单步执行到中断例程中?int指令也会把tf清0
评论次数(0)  |  浏览次数(603)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码