当前位置: 首页 > news >正文

《汇编语言》第13章 int指令——实验13 编写、应用中断例程

(1)编写并安装 int 7ch 中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处。

参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址。

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

;sy13_1.asmassume cs:code 
data segment db "welcome to masm! ",0
data endscode segment 
start:	mov dh,10mov dl,10mov cl,2 mov ax,data mov ds,ax mov si,0int 7ch mov ax,4c00h int 21h 
code ends
end start

int 7ch 中断程序

;sy13_1i.asm 实验13(1)的 int 7c中断例程
;功能:显示一个0结束的字符串,中断例程安装在0:200处
;参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址assume cs:code 
code segment 
start:			mov ax,cs mov ds,ax mov si,offset show_str 						;设置ds:si指向源地址mov ax,0mov es,ax mov di,200h 								;设置es:di指向目标地址mov cx,offset show_strend - offset show_str;设置cx为传输长度 cld											;设置传输方向为正rep movsb ;设置中断向量表 mov ax,0mov es,ax mov word ptr es:[7ch*4],200h mov word ptr es:[7ch*4+2],0mov ax,4c00hint 21h 
;名称:show_str 
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。 
;参数:(dh)=行号(取值范围0~24); 
;      (dl)=列号(取值范围0~79); 
;      (cl)=颜色; 
;      ds:si指向字符串的首地址。 
;返回:无。
show_str:		push ax push bxpush es push si mov ax,0b800h mov es,ax mov ax,160mul dh mov bx,ax 					;bx=160*dh mov ax,2mul dl 						;ax=dl*2 add bx,ax 					;mov bx,(160*dh+dl*2)设置es:bx指向显存首地址mov al,cl 					;把颜色cl赋值al mov cl,0
show0:			mov ch,ds:[si] jcxz show1 					;(ds:si)=0时,转到show1执行  mov es:[bx],ch mov es:[bx+1],al inc si 						;ds:si指向下一个字符地址add bx,2 					;es:bx指向下一个显存地址jmp show0 
show1:			pop si pop es pop bx pop ax iret mov ax,4c00hint 21h show_strend: nop 
code ends
end start

运行结果:

 

(2)编写并安装int 7ch中断例程,功能为完成loop指令的功能。参数:(cx)=循环次数,(bx)=位移。

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

在屏幕中间显示80个“!”。

;sy13_2.asm  assume cs:code 
code segment 
start:	mov ax,0b800hmov es,ax mov di,160*12mov bx,offset s - offset se 		;设置从标号 se到标号 s的转移位移mov cx,80s:	mov byte ptr es:[di],'!'add di,2 int 7ch 										;如果(cx)≠0,转移到标号s处se:	nop mov ax,4c00h int 21h 
code ends 
end start 

中断程序源码

;sy13_2.asm   实现13(2)的int 7ch中断程序assume cs:code 
code segment ;安装中断程序
start:	mov ax,cs mov ds,ax mov si,offset lp						;设置ds:si指向源地址mov ax,0mov es,ax mov di,200h 							;设置es:di指向目标地址mov cx,offset lpend - offset lp 		;设置cx为传输长度cld										;设置传输方向为正rep movsb ;设置中断向量表mov ax,0mov es,ax mov word ptr es:[7ch*4],200h mov word ptr es:[7ch*4+2],0mov ax,4c00h int 21h lp:	push bp mov bp,sp dec cxjcxz lpretadd ss:[bp+2],bx 	;功能实质是IP = offset se + (offset s - offset se) = offset s lpret:	pop bp iret 								;跳转到s标号处理mov ax,4c00h int 21h 
lpend:	nop code ends 
end start 

运行调试

进入7ch中断程序代码

执行中断代码,psw,cs,ip,bp相继入栈

iret指令执行完成后回到主程序

g 0018指令结束程序

 

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

;sy13_3.asm    (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 mov si,offset row mov cx,4 
ok:	    mov bh,0					;第0页mov dh,ds:[si]				;dh中放行号mov dl,0					;dl中放列号mov ah,2 					;置光标int 10h mov dx,ds:[bx]				;ds:dx指向字符串首地址mov ah,9					;在光标位置显示字符int 21h inc si 						;行号递增add bx,2					;指向下一字符串loop ok mov ax,4c00hint 21h 
code ends
end start 

运行结果:

 

完成后编译运行,体会其中的编程思想。

http://www.xdnf.cn/news/774505.html

相关文章:

  • Redis持久化机制详解:RDB与AOF的深度剖析
  • 麒麟信安安装谷歌浏览器
  • 计算机视觉---深度学习框架(Backbone、Neck、Head)
  • webpack和vite的区别
  • 技术博客:线程池的暗礁——Executors工厂类为何成为Java高并发系统的禁忌
  • 探秘Transformer系列之(35)--- 大模型量化基础
  • node-sass 报错
  • 第二章 AI大模型接入
  • jquery复习
  • MySQL指令个人笔记
  • 【笔记】在 MSYS2 MINGW64 环境中降级 NumPy 2.2.6 到 2.2.4
  • RocketMQ介绍与部署
  • 动中通天线跟踪性能指标的测试
  • 显示即战略:铁电液晶如何成为 “数字中国” 的 “像素基石”?
  • Python训练营打卡 Day43
  • 【数据集】不同情景下全球城市扩张(2050年)
  • 嵌入式开发之STM32学习笔记day16
  • 初识Linux指令(笔记2)
  • Python_day43
  • 408考研逐题详解:2009年第28题
  • MCP调研
  • 揭秘 CompletedFuture 的设计精髓(基础)
  • 打卡day43
  • 第12次09:展示收货地址和新增地址
  • 基于vue3-elemenyui的动态列案例
  • 【C语言入门级教学】assert断⾔和指针的使用
  • linux学习第18天(fork函数)
  • 代码随想录算法训练营第六天| 242.有效的字母异位词 、 349. 两个数组的交集 、 202. 快乐数 、1. 两数之和
  • Cesium使用primitive添加点线面(贴地)
  • 【文献阅读】Learning Transferable Visual Models From Natural Language Supervision