汇编语言实验十三

本文介绍了如何在汇编语言中编写和应用中断例程,包括显示字符串、模拟loop指令以及屏幕显示操作。通过实验,读者能理解中断处理的过程,观察int和iret指令前后寄存器和内存的状态变化。实验内容涉及中断处理、屏幕输出和循环控制,加深了对汇编语言中断机制的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写、应用中断例程

一、 实验目的

  1. 学会自己编写不同功能的中断例程。
  2. 学习由int指令引发的中断。

二、实验内容或主要代码
1.编写并安装int 7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处。
参数: (dh)=行号, (dl)=列号, (cl)=颜色 ds:si指向字符串首地址
以上中断例程安装好后,对下面的程序进行单步跟踪,尤其注意int,iret指令执行前后cs,ip的和栈中的状态。
assume cs:code
data segment
db “welcome to masm!”,0
data ends
code segment

start: mov dh,10
mov dl,10
mov cl,2h
mov ax,data
mov ds,ax
mov si,0
int 7ch
mov ax,4c00h
int 21h
code ends
end start
2. 编写并安装int 7ch中断例程,功能为完成loop指令的功能。
参数:(cx)=循环次数,(bx)=位移。
以上中断例程安装好后,对下面的程序进行单步跟踪,尤其注意int,iret指令执行前后cs,ip的和栈中的状态。
在屏幕中间显示80个“!”
assume cs:code
code segment
start: 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], ‘!’
add di, 2
int 7cH

se: nop
mov ax, 4c00H
int 21H
code ends
end start
3. 下面的程序,分别在屏幕的第2、4、6、8行显示4句英文诗。
assume cs:code
code segment
s1: db ‘Good,better,best,’,’ ′ s 2 : d b ′ N e v e r l e t i t r e s t , ′ , ′ ' s2: db 'Never let it rest,',' s2:dbNeverletitrest,,
s3: db ‘Till good is better,’,’ ′ s 4 : d b ′ A n d b e t t e r , b e s t . ′ , ′ ' s4: db 'And better,best.',' s4:dbAndbetter,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
mov dh,[si]
mov dl,0
mov ah,2
int 10h
mov dx,[bx]
mov ah,9
int 21h
add bx,2
inc si
loop ok
mov ax,4c00h
int 21h
code ends
end start

三、 实验结果或截图

  1. assume cs:code
    data segment
    db 'welcome to masm! ',0
    data ends
    code segment

start:mov ax,cs
mov ds,ax
mov si,offset do7
mov ax,0
mov es,ax
mov di,200h
mov cx,offset do7end-offset do7
cld
rep movsb
mov word ptr es:[7ch4],200h
mov word ptr es:[7ch
4+2],0
mov ax,data
mov ds,ax
mov si,0
mov dh,12
mov dl,40
mov cl,2
int 7ch
mov ax,4c00h
int 21h

do7:push ax
push si
push es
push di
push dx
push cx
mov ax,0b800h
mov es,ax
mov al,0A0h
mul dh
mov di,ax
mov al,2
mul dl
add di,ax

show:mov al,ds:[si]
cmp al,0
je ok
mov es:[di],al
inc si
inc di
mov es:[di],cl
inc di
jmp short show

ok: pop cx
pop dx
pop di
pop es
pop si
pop ax
iret

do7end: nop
code ends
end start
在这里插入图片描述单步跟踪提所给程序:
在这里插入图片描述在这里插入图片描述2. assume cs:code
code segment
start: call loop_7c
mov ax,0b800h
mov es,ax
mov di,16012
mov bx,offset s-offset se
mov cx,80
s: mov byte ptr es:[di],’!’
add di,2
int 7ch
se: nop
mov ax,4c00h
int 21h
loop_7c:
mov ax,cs
mov ds,ax
lea si,strat_7c
mov ax,0
mov es,ax
mov di,200H
mov cx,offset end_7c-offset strat_7c
cld
rep movsb
mov ax,0
mov ds,ax
mov word ptr ds:[7cH
4],200H
mov word ptr ds:[7cH*4+2],0H
ret
strat_7c: cmp cx,0
jz ok
dec cx
pop ax
add ax,bx
push ax
iret
ok: iret
end_7c:
code ends
end start
在这里插入图片描述在这里插入图片描述单步跟踪题所给程序:
在这里插入图片描述在这里插入图片描述3.
在这里插入图片描述在这里插入图片描述在这里插入图片描述

四、 实验分析或体会
中断信息可以来自CPU的内部和外部,当CPU内部有需要处理的事情发生时,将产生需要马上处理的中断信息,引发中断过程。BIOS和DOS在所提供的中断例程中包含了许多的子程序,在编程时,可以用int指令直接调用BIOS和DOS提供的中断例程,来完成某些工作,使编程变得简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值