| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1313 人关注过本帖
标题:王爽汇编之中断处理程序----------练技术
只看楼主 加入收藏
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
结帖率:100%
收藏
 问题点数:0 回复次数:4 
王爽汇编之中断处理程序----------练技术
越来越感觉汇编也不是那么难于理解!实验12 编写0号中断的处理程序很简单,书上全部都给出了代码,不过今天还是收获到win7下原来也有debug,我之前是从来都不知道的,虽然简单,但也有必要记录一下,此贴就把以后关于中断处理的程序全部贴在这里了!
图片附件: 游客没有浏览图片的权限,请 登录注册
程序代码:
assume cs:code

code segment
start:
    mov ax,cs
    mov ds,ax
    mov si,offset do0
    mov ax,0
    mov es,ax
    mov di,200h
    mov cx,offset do0end-offset do0
    cld
    rep movsb

    mov ax,0
    mov es,ax
    mov word ptr es:[0],200h
    mov word ptr es:[2],0

do0:    jmp short do0start
    db "overflow!"
    
do0start:
    mov ax,cx
    mov ds,ax
    mov si,202h

    mov ax,0b800h
    mov es,ax
    mov di,12*160+36*2

    mov cx,9
s:    mov al,[si]
    mov es:[di],al
    mov byte ptr es:[di+1],02
    inc si
    add di,2
    loop s

    mov ax,4c00h
    int 21h

do0end:    nop
code ends
end start
搜索更多相关主题的帖子: 记录 技术 
2014-06-09 12:36
funyh250
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:26
帖 子:290
专家分:1573
注 册:2013-12-25
收藏
得分:0 

学习是大事   吃喝拉撒睡是小事   其他的那都不是事
2014-06-09 13:26
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
收藏
得分:0 
中断其实和调用子程序差不多,安装中断之前先把中断程序当作一个单独的子程序运行一下
下面是实验13,编写并安装int 7ch中断例程
图片附件: 游客没有浏览图片的权限,请 登录注册
程序代码:
assume cs:code
data segment
    db "welcome to masm!",0
data ends

code segment
start:
    mov dh,10
    mov dl,10
    mov cl,2
    mov ax,data
    mov ds,ax
    mov si,0
    call int7c
    mov ah,0
    int 16h
    mov ax,4c00h
    int 21h
;-----------------------------------
int7c:
    push es
    push bx
    push cx
    push ax
    mov ax,0b800h
    mov es,ax

    mov al,dh
    mov ah,160
    mul ah
    mov bx,ax
    mov al,dl
    mov ah,2
    mul ah
    add bx,ax
    mov ch,0ffh
    mov ah,cl

s:
    mov al,[si]
    cmp al,0
    jz ok
    mov es:[bx],al
    mov es:[bx+1],ah
    add bx,2
    inc si
    loop s

ok:   

    pop ax
    pop bx
    pop cx
    pop es
    ret
;--------------------------------------
code ends
end start
然后把子程序拿出来,放到安装中断程序的里面
程序代码:
assume cs:code
code segment
start:
    mov ax,cs
    mov ds,ax
    mov si,offset int7c

    mov ax,0
    mov es,ax
    mov di,200h
    mov cx,offset int7cend-offset int7c
    cld
    rep movsb

    mov ax,0
    mov es,ax
    mov word ptr es:[4*7ch],200h
    mov word ptr es:[4*7ch+2],0
    mov ax,4c00h
    int 21h
;中断7ch,显示一个以0结束的字符串
;参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址
int7c:
    push es
    push bx
    push cx
    push ax
    mov ax,0b800h
    mov es,ax

    mov al,dh
    mov ah,160
    mul ah
    mov bx,ax
    mov al,dl
    mov ah,2
    mul ah
    add bx,ax
    mov ch,0ffh
    mov ah,cl

s:
    mov al,[si]
    cmp al,0
    jz ok
    mov es:[bx],al
    mov es:[bx+1],ah
    add bx,2
    inc si
    loop s

ok:   

    pop ax
    pop bx
    pop cx
    pop es
    iret
int7cend:nop
code ends
end start
运行上面的程序,安装完成7ch中断例程后,执行下面的程序测试中断是否安装成功
程序代码:
data segment
    db "welcome to masm!",0
data ends

code segment
start:
    mov dh,10
    mov dl,10
    mov cl,2
    mov ax,data
    mov ds,ax
    mov si,0
    int 7ch
    mov ah,0
    int 16h
    mov ax,4c00h
    int 21h
code ends
end start
图片附件: 游客没有浏览图片的权限,请 登录注册

2014-06-09 17:29
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
收藏
得分:0 
实验13中的第二个题目,int 7ch中断完成loop指令的功能,方法同楼上
程序代码:
assume cs:code
code segment
start:
    mov ax,0b800h
    mov es,ax
    mov di,160*12
    mov bx,offset s-offset se
    mov cx,80
s:   

    mov byte ptr es:[di],'!'
    add di,2
    call int7ch
se:
    mov ah,0
    int 16h
    mov ax,4c00h
    int 21h
;--------------------------------
int7ch:
    push bp
    mov bp,sp
    dec cx
    jcxz lpret
    add [bp+2],bx
lpret:
    pop bp
    ret
;--------------------------------
code ends
end start
图片附件: 游客没有浏览图片的权限,请 登录注册

安装中断的程序
程序代码:
assume cs:code
code segment
start:
    mov ax,cs
    mov ds,ax
    mov si,offset int7ch

    mov ax,0
    mov es,ax
    mov di,200h
    mov cx,offset int7cend-offset int7ch
    cld
    rep movsb

    mov ax,0
    mov es,ax
    mov word ptr es:[4*7ch],200h
    mov word ptr es:[4*7ch+2],0
    mov ax,4c00h
    int 21h
;中断7ch,完成loop指令的功能
;参数:(cx)=循环次数,(bx)=位移
    push bp
    mov bp,sp
    dec cx
    jcxz lpret
    add [bp+2],bx
lpret:
    pop bp
    iret
int7cend:nop
code ends
end start
测试中断功能的程序
程序代码:
assume cs:code
code segment
start:
    mov ax,0b800h
    mov es,ax
    mov di,160*12
    mov bx,offset s-offset se
    mov cx,80
s:   

    mov byte ptr es:[di],'!'
    add di,2
    int 7ch
se:
    mov ah,0
    int 16h
    mov ax,4c00h
    int 21h
code ends
end start
结果如下
图片附件: 游客没有浏览图片的权限,请 登录注册

2014-06-09 17:50
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
收藏
得分:0 
实验13最后一个题目,通过调用BIOS,dos中断显示四行英文诗
图片附件: 游客没有浏览图片的权限,请 登录注册
程序代码:
assume cs:code
code segment
    s1:    db 'Good,better,best,','$'
    s2:    db 'Never let it rest,','$'
    s3:    db 'Till good is better,','$'
    s4:    db 'And better,best,','$'
    s:    dw offset s1,offset s2,offset s3,offset s4
    row:    db    2,4,6,8

start:
    mov ax,cs
    mov ds,ax
    mov bx,offset s
    mov si,offset row
    mov cx,4
ok:
    mov bh,0    ;第0页
    mov dh,[si]    ;dh中放行号
    mov dl,0    ;dl中放列号
    mov ah,2    ;置光标
    int 10h

    mov dx,[bx]    ;ds:dx指向字符串的首地址
    mov ah,9
    int 21h        ;int 21h中断9号功能

    add bx,2
    inc si
    loop ok

    mov ax,4c00h
    int 21h
code ends
end start
2014-06-09 19:38
快速回复:王爽汇编之中断处理程序----------练技术
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022350 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved