P280:在屏幕中间依次显示a~z, 显示过程中,按下ESC键后,改变显示颜色

P283:在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理

P293:以十六进制的形式显示给定的字节型数据

P295:计算sin(x) x=0 30 60 90 120 150 180


* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

第15章  P280:在屏幕中间依次显示a~z, 显示过程中,按下ESC键后,改变显示颜色

; DATE: 20190621
; DESCRIPTION: 在屏幕中间依次显示a~z, 显示过程中,按下ESC键后,改变显示颜色
;
; 已知:int 9为BIOS提供的一个中断例程,用来进行基本的键盘输入处理assume cs:codestack segmentdb 128 dup (0)
stack endsdata segmentdw 0, 0
data endscode segment
start:mov ax, stackmov ss, axmov sp, 128     ; ss:spmov ax, datamov ds, axmov ax, 0mov es, axpush es:[9*4]pop ds:[0]push es:[9*4+2] ; 使用栈,pop ds:[2]      ; 将原来的int 9中断例程的入口地址保存在ds:0、ds:0单元中cli     ; 设置IF标志位为0,不响应可屏蔽中断mov word ptr es:[9*4], offset int9mov es:[9*4+2], cs  ; 在中断向量表中设置新的int 9中断例程的入口地址sti     ; 设置IF标志位为1,恢复响应可屏蔽中断; ------ 在屏幕中间依次显示a~z ------ mov ax, 0b800Hmov es, axmov ah, 'a'
s:mov es:[160*12+40*2], ahcall delayinc ahcmp ah, 'z'jna smov ax, 0 mov es, ax push ds:[0]pop es:[9*4]push ds:[2]pop es:[9*4+2] ; 将中断向量表中int 9中断例程的入口恢复为原来的地址mov ax, 4c00Hint 21H; ------ 循环延时 ------
delay:push axpush dxmov dx, 02H ; 循环20000H次,根据自己机器的速度调整循环次数mov ax, 0
s1:sub ax, 1 sbb dx, 0cmp ax, 0 jne s1 cmp dx, 0 jne s1 pop dx pop ax ret; ------ 以下为新的 int 9 中断例程 ------
int9:push ax push bx push es in al, 60H ; 从端口60H读出键盘的输入pushf   ; 标志寄存器入栈; 进入中断例程后,IF和TF都已经置0,没必要再进行设置;pushf;pop bx ;and bh, 11111100B ; IF和TF为标志寄存器的第9位和第8位;push bx ;popf               ; IF=0, TF=0call dword ptr ds:[0]   ; 调用原来的int 9中断例程; call dword ptr: CS、IP入栈; (IP)=(ds)*16+0、(CS)=(ds)*16+2cmp al, 1   ; 按下ESC键产生的扫描码为1jne int9retmov ax, 0b800Hmov es, axinc byte ptr es:[160*12+40*2+1] ; 将属性值加1,改变颜色
int9ret:pop espop bxpop axiretcode ends
end start

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

第15章  P283:在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理

; DATE: 20190622
; DESCRIPTION: 在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理
;
; 已知:int 9为BIOS提供的一个中断例程,用来进行基本的键盘输入处理
assume cs:codestack segmentdb 128 dup (0)
stack endscode segment
start:mov ax, stackmov ss, axmov sp, 128         ; ss:sppush cspop dsmov si, offset int9 ; ds:si指向源地址mov ax, 0mov es, axmov di, 204H        ; es:di指向目的地址; 将新int 9中断例程安装在0:204开始处mov cx, offset int9end - offset int9 ; cx传输长度cld         ; 将DF标志位置0,即传输方向为正rep movsb   ; 从ds:si复制到es:di; 将原int 9中断例程的入口地址保存到0:200单元; 所以,程序二次执行将出错push es:[9*4]pop es:[200H]push es:[9*4+2]pop es:[202H]; 将新int 9中断例程的入口地址保存到中断向量表cli     ; 将IF标志位置0,不响应可屏蔽中断mov word ptr es:[9*4], 204Hmov word ptr es:[9*4+2], 0sti     ; 将IF标志位置1,响应可屏蔽中断mov ax, 4c00Hint 21Hint9:push axpush bxpush cxpush esin al, 60H  ; 从端口60H读出键盘的输入pushf       ; 标志寄存器入栈call dword ptr cs:[200H] ; 当此中断例程执行时(CS)=0cmp al, 3bH     ; F1键的扫描码为3bHjne int9ret; 改变当前屏幕的显示颜色,即从b800H开始的4000Bytes中的所有奇地址单元mov ax, 0b800Hmov es, axmov bx, 1mov cx, 2000
s:  inc byte ptr es:[bx]add bx, 2loop s int9ret:pop espop cxpop bxpop axiret
int9end:nop
code ends
end start    

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

第16章  P293:以十六进制的形式显示给定的字节型数据

; DATE: 20190622
; DESCRIPTION: 以十六进制的形式显示给定的字节型数据
;   用al传送要显示的数据
;   查表showbyte:jmp short show
table db '0123456789ABCDEF' ; 字符表show:push bxpush esmov ah, almov cl, 4shr ah, 4           ; 右移4位,ah中得到高4位的值and al, 00001111B   ; al为低4位的值mov bl, ahmov bh, 0mov ah, table[bx]   ; 用高4位的值作为table偏移,取得对应的字符mov bl, almov bh, 0mov al, table[bx]   ; 用低4位的值作为table偏移,取得对应的字符mov bx, 0b800H      ; 显示缓冲区mov es, bxmov es:[12*160+40*2], axpop espop bxret

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

第16章  P295:计算sin(x) x=0 30 60 90 120 150 180

; DATE: 20190622
; DESCRIPTION: 计算sin(x) x=0 30 60 90 120 150 180
;   用ax传送角度
;   查表showsin:jmp short show
table   dw ag0, ag30, ag60, ag90, ag120, ag150, ag180 ; 偏移地址表ag0     db '0', 0
ag30    db '0.5', 0
ag60    db '0.866', 0
ag90    db '1', 0
ag120   db '0.866', 0
ag150   db '0.5', 0
ag180   db '0', 0show:push bxpush espush dimov bx, 0b800Hmov es, bx; 用角度值/30作为table偏移,取得对应的偏移地址,放在bx中mov ah, 0mov bl, 30div blmov bl, almov bh, 0add bx, bxmov bx, table[bx]mov di, 12*160+40*2
shows:mov ah, cs:[bx]cmp ah, 0 je showretmov es:[di], ahinc bxadd di, 2jmp short shows
showret:pop dipop espop bxret

汇编语言-第三版-王爽-第15章 外中断-第16章 直接定址表相关推荐

  1. 读书笔记:汇编语言 第三版 王爽 清华出版社 前言 章一 章二 章三 章四 章五

    汇编语言 第三版 王爽 清华出版社文档记录创建 2020年8月9日15:21:11初稿完成 2020年9月5日15:38:22前言汇编语言,CPU提供的机器指令的助记符的集合不同处理器,机器指令可能不 ...

  2. 读书笔记:汇编语言 第三版 王爽 清华出版社 章十六 章十七 章十八

    第十六章 直接定址表16.1 描述了单位长度的标号地址标号,表征了位置的偏移地址label:数据标号,表征了一段内存空间的物理地址和长度,增强型地址标号段地址,数据标号所在段的关联段寄存器,assum ...

  3. 汇编语言-第三版-王爽-实验6、7、9、10、11、12、13、14、15

    实验6(p160).实验7(p173).实验9(p189).实验10(p206,p208, p209).实验11(p234).实验12(p251).p256(编写7cH中断例程完成loop指令功能). ...

  4. 读书笔记:汇编语言 第三版 王爽 清华出版社 章六 章七 章八 章九 章十

    第六章 包含多个段的程序6.0 概述合法地通过操作系统取得的空间都是安全的操作系统不会让多个程序之间发生空间冲突程序向操作系统获得空间的方法程序加载时分配在程序中定义各种段程序运行时分配通过指令向操作 ...

  5. 汇编语言-第三版-王爽-课程设计1

    课程设计1(p211). * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ...

  6. 汇编语言 第3版 王爽 检测点习题部分—答案及详细解析

    第一章 基础知识 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为()位. (2)1KB的存储器有() 个存储单元,存储单元的编号从()到() . (3)1KB的存储器可以存 ...

  7. 汇编语言 (第2版) 王爽 中文高清PDF版下载

    汇编语言 (第2版) 王爽 中文高清PDF版下载 转载于:https://www.cnblogs.com/gavinhughhu/archive/2009/12/10/1620783.html

  8. 汇编语言 第3版 王爽 检测点答案及详细解析

    第一章 基础知识 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位. (2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 . (3)1K ...

  9. 汇编语言 第3版 王爽 检测点习题部分—答案及详细解析 检测点3.2

    题目(1) : 补全下面的程序,使其可以将10000H- ~1000FH 中的8个字,逆序复制到 20000H~2000FH中.逆序复制的含义如图3.17所示(图中内存里的数据均为假设). 解答: p ...

最新文章

  1. 计算机网络第四章ppt谢希仁,计算机网络课件-谢希仁(第四章).ppt
  2. 为 protocol 中属性添加默认值
  3. jQuery插件ASP.NET应用之AjaxUpload
  4. EF 更新大量的数据时出现重复键错误
  5. bzoj1049[HAOI2006]数字序列
  6. 与机器学习算法有关的数据结构
  7. 6.IDA-重命名、注释
  8. 网络通信 public ip 和 private ip
  9. js获取css文件中的样式
  10. linux kvm虚拟化ha,基于RHEL6.3-KVM三节点虚拟机命令行搭建HA
  11. 在github上保存vscode的配置(后续重新安装vscode时,可以十分方便地从github上下载安装这个保存的配置)...
  12. 用php实现拍照,php中实现视频拍照
  13. 手把手教你开发微信小程序自定义底部导航栏
  14. OpenCV+Python学习笔记 : 图像灰度化处理
  15. LCP插件创建对等物理接口
  16. JTT1077-2016道路运输车辆卫星定位系统视频平台技术要求(企业监控平台功能-文字版)
  17. gatk过滤_详解GATK突变硬过滤 | 群体遗传专题
  18. ad中按钮开关的符号_电工必备基础知识及电路的符号字母大全
  19. SC-Lego-LOAM解析(上)
  20. 每个程序员都应该知道的GitHub Repos

热门文章

  1. “hackers and painters”读书笔记
  2. 推荐搜索 常用评价指标
  3. Orange与中兴通讯完成欧洲首个100% 5G通话
  4. 用友872服务器系统,用友ERP-U8V872 安装图解.doc
  5. android应用添加字体,android应用 修改字体
  6. 程序崩溃导致火卫一土壤火星探测器失败
  7. python progressbar
  8. 数控降压电源模块DCDC| 5A,LCD显示
  9. TheWorld 世界之窗浏览器 1.1RC7版
  10. 【期权定价实务】QuantLib关于行权日的设置