博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编试验十二:编写0号中断的处理程序
阅读量:6354 次
发布时间:2019-06-22

本文共 1148 字,大约阅读时间需要 3 分钟。

要求:除法溢出的时候,在屏幕中心处显示overflow!

分析:

  • 0号中断,对应的中断入口地址中的程序可以不用修改,放到内存0:空余位置(空余位置一般是0000::0200~0000:02FF)于是,就将显示字符串的程序放到这里;
  • 用一个do0安装程序,将这个中断程序复制到内存0000:0200那里去;格式是:es:di 目的地址,ds:si源程序,cld复制方向,rep movsb 复制
  • 子程序(中断程序)中,显示的字符串,不能放到一个独立的代码段,而是放到一个中断程序本身里面,因为复制程序运行完后,内存释放,代码段中的内容可能改变;
  • 重新写一个程序故意除法溢出

效果:

 

Source Code:

assume cs:codecode segmentstart:    mov ax,cs    mov ds,ax    mov si,offset do0   ;ds:si指向源地址    mov ax,0    mov es,ax    mov di,200h         ;es:di指向目的地址    cld    rep movsb    mov ax,0    mov es,ax    mov word ptr es:[0*4],200h    mov word ptr es:[0*4+2],0    mov ax,4c00h    int 21h    do0: jmp short do0start        db "overflow!"    do0start:        mov ax,cs        mov ds,ax        mov si,202h     ;ds:si指向字符串,复制到0:200处        mov ax,0b800h        mov es,ax        mov di,12*160+36*2  ;显示位置        mov cx,9        s:            mov al,[si]            mov es:[di],al            inc si            add di,2            loop s        mov ax,4c00h        int 21h    do0end:nopcode endsend start
View Code
assume cs:codecode segmentstart:mov ax,1000hmov bh,1div bhcode endsend start
View Code

 

转载于:https://www.cnblogs.com/TreeDream/p/7045238.html

你可能感兴趣的文章
二维观察---文字的裁剪
查看>>
矩形覆盖
查看>>
ICMP
查看>>
界面设计模式(第2版)(全彩)
查看>>
解决VMware Workstation错误:未能锁定文件
查看>>
CentOS6 手动编译升级 gcc
查看>>
memcached的安装与开启脚本
查看>>
zabbix 邮件报警 -- sendmail
查看>>
JavaScript异步编程
查看>>
tcpdump用法小记
查看>>
MySQL基础安全注意细节
查看>>
Oracle随机函数—dbms_random
查看>>
pvr 批量转换
查看>>
linux命令basename使用方法
查看>>
windows下开发库路径解决方案
查看>>
linux迁移mysql数据目录
查看>>
脚本源码安装LNMP
查看>>
Percona Server安装
查看>>
函数为左边表达式
查看>>
2015.06.04 工作任务与心得
查看>>