《汇编语言》- 读书笔记 - 第13章-实验13编写、应用中断例程

news2024/11/18 17:36:58

《汇编语言》- 读书笔记 - 第13章-实验13编写、应用中断例程

  • 1. 编写并安装中断例程
    • 主程序
    • 运行效果
  • 2. 编写并安装 int 7ch 中断例程,功能为完成 loop 指令的功能。
  • 3. 下面的程序,分别在屏幕的第 2、4、6、8行显示4句英文诗,补全程序。

1. 编写并安装中断例程

需求编写并安装 int 7ch 中断例程,功能为显示一个用0结束的字符串,中断例程安装在 0:200 处。
参数(dh)=行号
(dl)=列号
(cl)=颜色
ds:si指向字符串首地址。
assume cs:code
code segment
 start:	; ---------------- 安装(复制数据) ----------------
		mov ax,cs
		mov ds,ax
		mov si,offset i7ch		;设置 ds:si 指向源地址
		
		mov ax,0
		mov es,ax
		mov di,200h				;设置 es:di 指向目的地址

		mov cx,offset i7chend -offset i7ch	;设置 cx为传输长度
		cld					;设置传输方向为正。movsb中si,di递增
		rep movsb			;重复复制数据次数由 cx 控制
		; ---------------- 安装(复制数据) ----------------
		
		; ----------------- 设置中断向量 -----------------
		mov ax,0
		mov es,ax						; 段地址 0
		mov word ptr es:[7ch*4],200h	; 设置【中断处理程序】的:偏移地址
		mov word ptr es:[7ch*4+2],0		; 设置【中断处理程序】的:段地址
		; ----------------- 设置中断向量 -----------------
	 
		mov ax, 4c00H		; 退出
		int 21H				; 触发33号中断
		
; =======================================================
; --------------------- 中断处理程序 --------------------
; 在指定位置,打印字符串。以 0 结束
; -------------------------------------------------------
; 参数:(dh)=行号
; 参数:(dl)=列号
; 参数:(cl)=颜色
; 参数:ds:si 指向字符串首地址。
; -------------------------------------------------------
	  i7ch:	push es			; 备份寄存器
			push di
			push dx
			push cx
			
			mov ax,0b800h	; 设置显存
			mov es,ax
			mov al,160		; 先算行偏移
			dec dh				; 行号从 0 开始,所以这里要先减1
			mul dh				; 行数 x 160算出行偏移
			mov di,ax			; 行偏移先存到 di
			mov al,2		; 再算列偏移
			dec dl				; 列号从 0 开始,所以这里要先减1
			mul dl				; 每列2* 列号
			add di,ax		;+= 算出目标字符串(显存)的开始位置
			mov ch,cl		; 文字属性放到 ch 去
			
	 sloop:	mov cl,[si]			; 取字符
	 		cmp cl,0			; 判断如果取到的是 0
			je ok				; 就跳出循环结束,否则继续
			mov es:[di],cx	; 字符写入显存
			inc si				; si 递增,源字符串指向下一字符
			add di,2			; di += 2,目标字符串指向下一字符
			jmp short sloop
			
		ok:	pop cx			; 还原寄存器
			pop dx
			pop di
			pop es
			iret 			; 返回原程序
   i7chend:	nop
; --------------------- 中断处理程序 --------------------
; =======================================================
code ends
end start

以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意观察int、iret 指令执行前后 CS、IP中的状态。

主程序

assume cs:code
data segment
	db 'Welcome to masm',0
data ends

code segment
 start:	mov dh,10			; dh 中放行号
		mov dl,10			; dl 中放列号
		mov cl,2			; 文字颜色属性
		mov ax,data 		; 设置数据段
		mOv ds,ax
		mov si,0			; 指向data开头字符
		int 7h
		
	ok:	mov ax,4c00h
		int 21h
code ends
end start

运行效果

在这里插入图片描述

int 前后iret 前后
在这里插入图片描述在这里插入图片描述

2. 编写并安装 int 7ch 中断例程,功能为完成 loop 指令的功能。

第13章-int 指令 - 13.3 已实现此功能。

3. 下面的程序,分别在屏幕的第 2、4、6、8行显示4句英文诗,补全程序。

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		; 取诗句偏移量,dw 类型每个元素2字节
		mov si,offset row	; 取行数偏移量,db 类型每个元素1字节
		mov cx,4
	ok:	mov bh,0			; 第几页显示
		mov dh,[si]			;(Y坐标)___________
		mov dl,0			;(X坐标)
		mov ah,2			; 10h中断2号子程序:设置光标位置
		int 10h				; BIOS中断:显示服务
		
		mov dx,[bx] 		; DS:DX 待输出字符的地址___________
		mov ah,9			; 21h中断9号子程序:显示字符串
		int 21h				; DOS中断
		inc si				; 下一个行数___________
		add bx,2			; 下一条诗句___________
		loop ok

		mov ax,4c00h
		int 21h
code ends
end start

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1475999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5G网络介绍

目录 一、网络部署模式 二、4/5G基站网元对标 三、4/5G系统架构对比 四、5G核心单元 五、边缘计算 六、轻量化(UPF下沉) 方案一:UPF下沉 方案二:UPF下沉 方案三:5GC下沉基础模式 方案四:…

亚信安慧AntDB开启超融合数据库新纪元

(一) 前言 据统计,在信息化时代的今天,人们一天所接触到的信息量,是古人一辈子所能接收到的信息量的总和。当今社会中除了信息量“多”以外,人们对信息处理的“效率”和“速度”的要求也越来越高。譬如&…

特征融合篇 | YOLOv8 引入通用高效层聚合网络 GELAN | YOLOv9 新模块

今天的深度学习方法专注于如何设计最合适的目标函数,以使模型的预测结果最接近真实情况。同时,必须设计一个合适的架构,以便为预测提供足够的信息。现有方法忽视了一个事实,即当输入数据经过逐层特征提取和空间转换时,会丢失大量信息。本文将深入探讨数据通过深度网络传输…

如果软件测试工程师们在面试的时候都说真话.....

俗话说面试造火箭,入职拧螺丝,许多入职大厂的朋友们都容易有这样的感受。 面试时,过五关、斩六将 几轮面试提出的问题一个比一个专业。 让人真切的感受到这份工作的重要性和挑战性 大家如果想下载我录制的一些软件测试学习视频、大厂面试资料…

BOOT电路

本质:BOOT电路本质上是单片机的引脚 作用:BOOT电路的作用是用于确定单片机的启动模式 使用方法:在单片机上电或者复位时给BOOT管脚设置为指定电平即可将单片机设置为指定启动模式。 原理:单片机上电或复位后会先启动内部晶振&a…

13.题目:编号511 灌溉

题目&#xff1a; ###本题主要考察枚举、模拟 #include<bits/stdc.h> using namespace std; const int N105; bool a[N][N],b[N][N]; int main(){int n,m;cin>>n>>m;int t;cin>>t;while(t--){int c,r;cin>>c>>r;a[c][r]1;}int k;cin>…

线性表——单链表的增删查改

本节复习链表的增删查改 首先&#xff0c; 链表不是连续的&#xff0c; 而是通过指针联系起来的。 如图&#xff1a; 这四个节点不是连续的内存空间&#xff0c; 但是彼此之间使用了一个指针来连接。 这就是链表。 现在我们来实现链表的增删查改。 目录 单链表的全部接口…

vue项目导出excel ,文件过大导致请求超时的处理方法

一、因为文件过大&#xff0c;请求时间较长&#xff0c;就会产生请求超时的情况&#xff0c;处理方式是可以分为三个接口&#xff0c;接口1用来获取id值&#xff0c;接口2利用id值发起请求&#xff0c;询问是否准备好下载&#xff0c;如果没准备好&#xff0c;则没隔一秒再次发…

搜维尔科技:OptiTrack 提供了性能最佳的动作捕捉平台

OptiTrack 动画 我们的 Prime 系列相机和 Motive 软件相结合&#xff0c;产生了世界上最大的捕获量、最精确的 3D 数据和有史以来最高的相机数量。OptiTrack 提供了性能最佳的动作捕捉平台&#xff0c;具有易于使用的制作工作流程以及运行世界上最大舞台所需的深度。 无与伦比…

Linux Centos7配置SSH免密登录

Linux Centos7配置SSH免密登录 配置SSH免密登录说明&#xff1a; 分两步 第一步、给Server A生成密钥对 第二步、给Server B授权 生成密钥对之后&#xff0c;我们可以看看它保存的目录下的文件。 接下来我们就要把Server A&#xff08;10.1.1.74&#xff09;的公钥拷贝到Se…

【踩坑】修复xrdp无法关闭Authentication Required验证窗口

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 问题如下&#xff0c;时不时出现&#xff0c;有时还怎么都关不掉&#xff0c;很烦&#xff1a; 解决方法一&#xff1a;命令行输入 dbus-send --typemethod_call --destorg.gnome.Shell /org/gnome/Shell org.gn…

ElasticSearch之找到乔丹的空中大灌篮电影

写在前面 本文看一个搜索的实际例子&#xff0c;找到篮球之神乔丹的电影Space Jam&#xff0c;即空中大灌篮。 正式开始之前先来看下要查询的目标文档&#xff0c;以及查询的text&#xff1a; 要查询的目标文档 {..."title": "Space Jam",..."ove…

加密与安全_深入了解哈希算法

文章目录 Pre概述哈希碰撞常用的哈希算法Codejava.security.MessageDigestMD5SHA-1SHA-256MessageDigest支持算法 哈希算法的用途彩虹表攻击基本原理攻击过程 防御彩虹表攻击基本原理用途 小结 Pre PKI - 01 散列(Hash)函数 概述 哈希算法&#xff08;Hash&#xff09;又称摘…

TikTok云手机可以运营多少个账号

在社交媒体平台上&#xff0c;尤其是像TikTok这样的热门应用中&#xff0c;账号运营已经成为了许多人的日常工作。而利用云手机技术&#xff0c;一台手机能够同时运营多个TikTok账号&#xff0c;为用户带来了更大的便利和灵活性。本文将探讨 TikTok云手机能够运营多少个账号&am…

【生成式AI】ChatGPT原理解析(1/3)- 对ChatGPT的常见误解

Hung-yi Lee 课件整理 文章目录 误解1误解2ChatGPT真正在做的事情-文字接龙 ChatGPT是在2022年12月7日上线的。 当时试用的感觉十分震撼。 误解1 我们想让chatGPT讲个笑话&#xff0c;可能会以为它是在一个笑话的集合里面随机地找一个笑话出来。 我们做一个测试就知道不是这样…

Linux课程四课---Linux开发环境的使用(vim编辑器的相关)

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

【Linux】协程简介

【Linux】协程简介 一、什么是协程&#xff1f;简介优点 二、为什么使用协程&#xff1f;三、协程的种类1、对称协程2、非对称协程 四、协程栈1、静态栈2、分段栈3、共享栈4、虚拟内存栈 五、协程调度1、栈式调度2、星切调度3、环切调度 六、常见协程库参考文献 一、什么是协程…

Spring Task的应用

介绍 Spring Task是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 定位&#xff1a; 定时任务框架 作用&#xff1a; 定时自动执行某段Java代码 应用场景&#xff1a; 引用卡每月还款提醒、银行贷款每月还款提醒、火车票售票系统处理未支…

SpringCloud(17)之SpringCloud Stream

一、Spring Cloud Stream介绍 Spring Cloud Stream是一个框架&#xff0c;用于构建与共享消息系统连接的高度可扩展的事件驱动微服务。该框架提供了一个灵活的编程模型&#xff0c;该模型建立在已经建立和熟悉的Spring习惯用法和最佳实践之上&#xff0c;包括对持久发布/子语义…