博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编题目:编写包含多个功能子程序的中断例程
阅读量:6714 次
发布时间:2019-06-25

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

安装一个新的int  7ch中断例程,为显示输出提供如下的功能子程序。

(1)清屏。

(2)设置前景色。
(3)设置背景色。
(4)向上滚动一行

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

(二)对于2、3号功能,用al传递颜色值,(al)∈{0,1,2,3,4,5,6,7}。

代码如下:

;功能:安装一个新的int7ch中断例程,实现一个子程序 setScreen ,提供如下功能:; (1)清屏。; (2)设置前景色。; (3)设置背景色。; (4)向上滚动一行; 入口参数说明:; (1)每个子程序用 ah 寄存器传递功能号:; (2)对于2、3号功能,用al传送颜色值,assume cs:code,ds:data  data segment      err db '   ~~~~~ ah args is error! ~~~~~','$'    init dw 10 dup(0)  data ends    code segment    start:    mov ax,data    mov ds,ax    mov ax,0    mov es,ax    mov ax,es:[7ch*4]    mov init[0],ax    mov ax,es:[7ch*4+2]    mov init[1],ax        mov es:[7ch*4],offset setScreen    mov es:[7ch*4+2],cs                    mov ax,102h    int 7ch    ;call breakPoint    mov ax,201h    int 7ch    ;call breakPoint    mov ax,300h    int 7ch    ;call breakPoint    mov ax,0h    int 7ch    mov ax,400h    int 7ch            mov ax,0    mov es,ax    mov ax,data    mov ds,ax    mov ax,init[0]    mov es:[7ch*4],ax    mov ax,init[1]    mov es:[7ch*4+2],ax        ok: mov ax,4c00h    int 21h        setScreen:    jmp short setmain    list dw sub0,sub1,sub2,sub3        setmain:    cmp ah,3    ja subErr    mov bl,ah    mov bh,0    shl bx,1    call word ptr list[bx]    iret        sub0:    ;清屏    mov cx,0b800h    mov es,cx    mov cx,2000    mov bx,0    sub0s:    mov byte ptr es:[bx],' '    add bx,2    loop sub0s    ret        sub1:    ;设置前景色。    mov cx,0b800h    mov es,cx    mov cx,2000    mov bx,1    sub1s:    and byte ptr es:[bx],11111000b    or es:[bx],al    add bx,2    loop sub1s    ret        sub2:    ;设置背景色。    mov cx,0b800h    mov es,cx    mov cx,2000    mov bx,1    shl al,1    shl al,1    shl al,1    shl al,1    sub2s:    and byte ptr es:[bx],10001111b    or es:[bx],al    add bx,2    loop sub2s    ret        sub3:    ;向上滚动一行    mov cx,0b800h    mov es,cx    mov ds,cx    mov di,0    mov si,160    cli    mov cx,24    sub3s:    push cx    mov cx,160    rep movsb    pop cx    loop sub3s    mov cx,160    mov bx,0    sub3s1:    mov byte ptr es:3840[bx],' '    add bx,2    loop sub3s1    ret            subErr:    ;显示错误信息    mov ax,data    mov ds,ax    mov ah,9    mov dx,offset err    int 21h    jmp ok            breakPoint:    ;设置断点,用于调试    pushf    pop bx    or bh,3    push bx    popf    ret        code ends end start

 

转载地址:http://qtkmo.baihongyu.com/

你可能感兴趣的文章
【javascript】实现模板生成大量数据
查看>>
win32拖拽编程
查看>>
使用 LineBasedFrameDecoder 和 StringDecoder 解决半包粘包问题
查看>>
分布式缓存Redis使用心得
查看>>
【修真院“善良”系列之三】技术面试的时候该怎么样介绍自己?
查看>>
聊聊flink的EventTime
查看>>
TypeScript 类
查看>>
React 的几种条件渲染以及选择
查看>>
MongoDB查看执行计划
查看>>
Redis学习笔记二:使用Jedis简单操作reids数据库
查看>>
Netty NioEventLoop 启动过程源码分析
查看>>
机器学习在客户管理场景中的应用
查看>>
PHP导出数据到表格的实例
查看>>
php 后端实现JWT认证方法
查看>>
[深入理解Redis]读取RDB文件
查看>>
【java并发编程实战6】AQS之独占锁ReentrantLock实现
查看>>
Javascript中进行遍历操作的所有方法
查看>>
JS的原型链和继承
查看>>
python中pyquery无法获取标签名的dom节点
查看>>
面试官:请手写一个webpack4.0配置
查看>>