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

编写、应用中断例程

  • 实验内容、程序清单及运行结果

编写、应用中断例程(课本实验13

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

assume cs:code

data segment

db 'welcome to masm!',0

data ends

code segment

start:

mov ax,cs

mov ds,ax

mov si,offset dp

mov ax,0

mov es,ax

mov di,200h

mov cx,offset dpend-offset dp ;安装中断例程

cld

rep movsb

mov word ptr es:[7ch*4],200h

mov word ptr es:[7ch*4+2],0 ;设置中断向量表

mov dh,10

mov dl,10

mov cl,2

mov ax,data

mov ds,ax ;测试int 7ch

mov si,0

int 7ch

mov ax,4c00h

int 21h

dp:

mov al,160

mul dh

add dl,dl

mov dh,0

add ax,dx

mov di,ax

mov ax,0b800h

mov es,ax

;中断例程

s:

mov al,ds:[si]

mov ah,0

cmp ax,0

je f

mov ah,cl

mov es:[di],ax

inc si

inc di

inc di

jmp s

f:

iret

dpend:nop

code ends

end start

运行结果:

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

参数:(cx)=循环次数,(bx)=位移

assume cs:code

code segment

start:

mov ax,cs

mov ds,ax

mov si,offset lp

mov ax,0

mov es,ax

mov di,200h

mov cx,offset lpend-offset lp ;安装中断例程

cld

rep movsb

mov word ptr es:[7ch*4],200h

mov word ptr es:[7ch*4+2],0 ;设置中断向量表

mov ax,0b800h

mov es,ax

mov di,160*12

mov bx,offset s-offset se

mov cx,80

s:

mov byte ptr es:[di],'!' ;测试int 7ch

add di,2

int 7ch

se:

nop

mov ax,4c00h

int 21h

lp:

push bp

dec cx

jcxz f

mov bp,sp

add [bp+2],bx ;中断例程

f:

pop bp

iret

lpend:nop

code ends

end start

运行结果;

(3)

assume cs:code

code segment

s1: db 'Good,better,best,','$'         ; 定义字符串s1,并以逗号结尾

s2: db 'Never let it rest,','$'         ; 定义字符串s2,并以逗号结尾

s3: db 'Till good is better,','$'       ; 定义字符串s3,并以逗号结尾

s4: db 'And better,best.','$'           ; 定义字符串s4,并以逗号结尾

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                       ; 将偏移地址表的起始地址加载到寄存器bx

mov si,offset row                     ; 将行数表的起始地址加载到寄存器si

mov cx,4                             ; 设置循环次数为4

ok: mov bh,0                           ; 重置高位寄存器bh为0

mov dh,[si]                          ; 将当前行数加载到寄存器dh

mov dl,0                             ; 重置低位寄存器dl为0

mov ah,2                             ; 设置功能号为2,用于设置光标位置

int 10h                             ; 调用BIOS中断10h以设置光标位置

mov dx,[bx]                         ; 将字符串地址加载到寄存器dx

mov ah,9                             ; 设置功能号为9,用于在屏幕上显示字符串

int 21h                             ; 调用DOS中断21h以显示字符串

inc si                              ; 递增si,指向下一个行数

add bx,2                            ; 增加bx的值,指向下一个字符串地址

loop ok                            ; 循环,直到cx减为0

mov ax,4c00h                        ; 设置终止程序的DOS功能号

int 21h                            ; 调用DOS中断21h以终止程序

code ends

end start


http://www.kler.cn/a/517868.html

相关文章:

  • 视频拼接,拼接时长版本
  • 数据分析系列--③RapidMiner算子说明及数据预处理
  • Android Studio安装配置
  • 【反悔堆】力扣1642. 可以到达的最远建筑
  • 工业相机 SDK 二次开发-VC6.0 程序示例
  • Zookeeper入门部署(单点与集群)
  • Django实现数据库的表间三种关系
  • 如何安装RAMS
  • Vue 3 项目结构及核心文件
  • ORB-SLAM2源码学习:Initializer.cc⑧: Initializer::CheckRT检验三角化结果
  • 解决no main manifest attribute错误
  • C++函数初识
  • 20250124 Flink中 窗口开始时间和結束時間
  • MySQL内存优化
  • 音频 PCM 格式 - raw data
  • 代码随想录day3
  • 速通Docker === Docker 镜像分层存储机制
  • 消息队列篇--通信协议篇--网络通信模型(OSI7层参考模型,TCP/IP分层模型)
  • C语言自定义数据类型详解(一)——结构体类型(上)
  • GPU算力平台|在GPU算力平台部署百川大模型(Baichuan2)的应用教程
  • ABB CC-Link IE FB协议与WTW Modbus TCP协议汽车涂装生产线的精准协作方案改造
  • ambari-2.8源码编译
  • 双北斗ntp网络时钟服务器、双北斗网络时钟同步系统、双北斗ntp协议时钟服务器
  • Adobe的AI生成3D数字人框架:从自拍到生动的3D化身
  • 复习动态规划入门
  • 龙蜥社区加入智算产业联盟,助力构建开放、包容、普惠的 AI 新生态