实现一个新的int7ch中断,完成下列功能

1.        清理屏幕 2.        设置前景色 3.        设置背景色 4.        向上滚动一行

参数(1)用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动给一行

(2)对于1,2号功能,用al传送颜色值,al属于{0,1,2,3,4,5,6,7}

本文重点:因为要写入中断进程,故于中断进程中调用函数仍要根据相对地址来寻址!!

具体看代码 很详细

assume cs:code,ds:data,ss:stackdata segmentdb 128 dup(0)
data endsstack segment db 128 dup(0)
stack endscode segmentstart:    mov ax,stackmov ss,axmov sp,128(0)call cpy_new_int7CHcall set_new_int7CH    ;如果是int9的话要save 但这里不用mov ah,1mov al,4int 7chmov ax,4c00hint 21h;=========================================================
set_new_int7CH:mov bx,0mov es,bxclimov word ptr es:[7ch*4],7e00hmov word ptr es:[7ch*4+2],0stiret;===========================================================
new_int7CH: jmp newInt7CHTABLE      dw  OFFSET clear_screen      -  OFFSET new_int7CH+7e00h    ;因为代码是储存在7e00h初的 故要计算偏移地址dw     OFFSET set_back_screen   -  OFFSET new_int7CH+7e00hdw  OFFSET set_pre_screen    -  OFFSET new_int7CH+7e00hdw  OFFSET set_pre_screen    -  OFFSET new_int7ch+7e00hnewInt7CH:;call clear_screen;call set_pre_screen;call set_back_screen;call set_screen       ;把下面一行往直前复制 push axpush bxpush esmov bx,0mov es,bxmov bl,ahadd bx,bx    ;因其为word型add bx,OFFSET TABLE -OFFSET new_int7CH +7e00h     ;重点!!!!call word ptr es:[bx]pop espop bxpop axiret;=============================================
set_screen:push bxpush cxpush espush sipush dipush ds       mov bx,0b800h   mov es,bxmov ds,bxmov cx,80*24  ;八十个字形数据mov si,160mov di,0cldrep movsw  ;字型数据 ds:si 指向es :dimov bx,160*24   ;最后一行mov cx,80mov dx,0700hsetRowBlank:  mov es:[bx],dxadd bx,2loop setRowBlankpop dspop dipop sipop espop cxpop bxret;===============================================
set_back_screen:push axpush bxpush cxpush esmov bx,0b800hmov es,bxmov bx,1mov cl,4shl al,clmov cx,2000setBackScreen:    and byte ptr es:[bx],10001111bor es:[bx],aladd bx,2loop setBackScreenpop espop cxpop bxpop axret;==================================================
set_pre_screen:push axpush bxpush cxpush esmov bx,0b800hmov es,bxmov bx,1   ;颜色位置mov cx,2000setPreScreen:   and byte ptr es:[bx],11111000bor es:[bx],aladd bx,2loop setPreScreenpop espop cxpop bxpop axret
;=====================================================
clear_screen:   push bxpush espush cxpush dxmov bx,0b800hmov es,bxmov bx,0mov dx,0700h      mov cx,2000clearScreen: mov es:[bx],dxadd bx,2loop clearScreenpop dxpop cxpop espop bxret       new_int7CH_end: nop;============================================================
cpy_new_int7CH:mov bx,csmov ds,bxmov si,OFFSET new_int7CHmov bx,0mov es,bxmov di,7e00hmov cx,OFFSET new_int7CH_end - OFFSET new_int7CHcldrep movsbretcode ends
end start

汇编语言王爽实验16相关推荐

  1. 汇编语言王爽-实验9

    王爽汇编语言实验9 实验要求 参考资料 代码 assume cs:codedata segmentdb 'welcome to masm'db 02h, 24h, 71j data endscode ...

  2. 汇编语言---王爽 (实验 8)分析一个奇怪的程序

    简介 : 分析下面的程序 , 在运行前思考 , 这个程序可以正常返回吗 ? 运行后再思考 , 为什么是这种结果 ? 通过这个程序加深对相关内容的理解 assume cs:code code segme ...

  3. 汇编语言王爽 实验第四章

    实验一 :创建第一个源程序 在asm文件夹中创建一个名为t2的记事本 编写源文件,其次将其格式修改为asm文件 用masm t2;进行编译生成obj文件 然后用link t2;进行连接生成exe文件 ...

  4. 汇编语言王爽 实验12

    都在代码里面了 ​ assume cs:code,ds:data,ss:stackdata segmentdb 128 dup(0) ;一般把中断输出的字符 写道 0000:0200 -0000:03 ...

  5. 汇编语言 王爽 第四版 实验5

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 实验5 编写.调试具有多个段的程序 1 编译连接下面程序,用debug加载.跟踪,回答问题. assume cs:code,ds:data, ...

  6. 【汇编语言 王爽】实验14代码

    实验需求如下: 编程,以"年/月/日 时:分:秒"的格式显示时间 注意:CMOS RAM中储存着系统的配置信息,除了保存时间信息的单元外,不要向其他单元写入内容,否则将引起一些系统 ...

  7. 汇编语言 王爽 第四版 实验1

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 文章目录 实验1 查看CPU和内存,用机器指令和汇编指令编程 1 开始执行命令: 2 指令 过程 3 4 实验1 查看CPU和内存,用机器指 ...

  8. 汇编语言 王爽 第四版 第二章 检测点2.2

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 检测点2.2 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 0010H 到 1000FH . 最小肯定是偏移地址为0, ...

  9. 汇编语言 王爽 第四版 第六章 检测点6.1

    汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 检测点6.1 1 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序: assume cs:codesg cod ...

  10. 汇编语言 王爽第二版 总结

    汇编语言 王爽第二版 总结,所以内容都是8086的 summary asssembly ,汇编总结 why: 最初始的编程语言就是使用打孔机,打出来的0 1 代码,然后把卡片插入到电脑中运行然后 看输 ...

最新文章

  1. 类似c 的语言,类似C的脚本语言 little-lang
  2. 下载恶意pcap包的网站
  3. poj2002 STL set
  4. 看奥运之二:现场看男子体操团体决赛
  5. 一个技术管理者的苦逼【技术管理漫谈】
  6. 什么是copyonwrite容器
  7. 开源协议的几种类型认识
  8. php纯真ip调用,使用php调用纯真IP数据库信息的解析组件
  9. Axure RP 9 原型图的绘制及交互
  10. 计算机二进制计算过程
  11. delphi android 截屏,Delphi 截图\截屏
  12. python全栈开发中级班全程笔记(第三模块、第一章(多态、封装、反射、内置方法、元类、作业))...
  13. 国产芯片---超高速、高输出电流,电压反馈放大器MS8241兼容替代LM7171
  14. 炫云全新支持优化渲染质量了
  15. 蓝牙音箱CE FCC是强制的吗
  16. Wex5修改Tomcat端口
  17. python人物抠图算法_Python实现AI自动抠图实例解析
  18. 【Linux】mysql命令行查看表结构,字段等信息
  19. win7系统屏蔽全/半角切换问题
  20. 使用Databricks作为分析平台

热门文章

  1. 数据库实时同步技术解决方案
  2. Java Lambda
  3. 如何学习Android系统源码
  4. 冒泡排序-C语言版(带图详细)
  5. Eclipse主题切换
  6. python中常用库_Python运维中20个常用的库和模块,总有一个用的到~
  7. Python-C语言语法解析:pycparser模块
  8. SpringBoot项目启动报错
  9. SQL Server 查询分析工具
  10. js实现bin2hex和hex2bin