《汇编语言》第13章 -int指令 检测点答案,实验13

检测点13.1

(1)用7ch中断例程实现loop功能中所能进行的最大转移位移是多少?
例子中进行的是段内近转移,我们明白它的机理之后可以发现
既然能用栈来修改IP,那当然可以用栈来修改CS,于是当仅修改IP时,最大位移是[-32768~32767]进行段内近转移;当同时修改CS和IP时,进行段间远转移。

(2)用7ch中断例程完成jmp short ptr s指令的功能。
如果不知道此指令功能,请参考转移指令的原理一节
应用的代码,王老师已经写好了,我们只需要写一下实现此指令功能的中断例程即可。与loop指令的中断例程相似,只需要设置一下IP即可,如下:

jnp:
push bp
mov bp,sp
add [bp+2],bx
pop bp
iret

检测点13.2

(1)我觉得错误,如果CPU不去执行BIOS中得硬件系统检测和初始化程序,操作系统就无法取得控制权。
(2)我觉得错误,int 19h是在OS控制计算机之前就要调用的,DOS不可以提供。

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

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

以下,为我的代码:

assume cs:code
code segment
"""
安装ch程序
"""
mov ax,cs
mov ds,ax
mov si,offset in7c				;源地址

mov ax,0
mov es,ax
mov di,200h						;目的地址

cld								;正方向

mov cx,offset in7cend-offset in7c	
								;长度
rep movsb						;开始传送

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

in7c:
push ax
push bx
push cx
push dx
push si
push di
push ds
push es

mov ax,0b800h
mov es,ax
mov al,160
mul dh				
mov bx,ax
mov al,2
mul dl
mov di,ax				;使es:[bx].[di]指向显存特定位置

mov ah,cl				;先将cl保存
mostart:

mov cl,ds:[si]
mov ch,0
jcxz ok							;判断是否结束

mov al,ds:[si]
mov es:[bx].[di],al
mov es:[bx].[di+1],ah
inc si							
add di,2						;传送字符串到显存

jmp short mostart

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

in7cend:
nop


code ends
end start

结果如下:
在这里插入图片描述debu跟踪:
在这里插入图片描述
我们发现在int之后,cs:ip直接指向了7ch号中断例程代码处;栈顶位置后移了3个字。即在执行int 指令后,把flag,cs,ip先入栈保存,之后根据中断向量表跳转到中断例程处。

(2)用7ch中断例程完成loop指令的功能。
安装程序和上题一致,只需更改一下in7c的功能即可。
而且在文中,王老师也给过详细介绍,此处不在注释。
如下:

in7c:
push bp
mov bp,sp
dec cx
jcxz ok
add [bp+6],bx
ok:
pop bp
iret

结果如下:
在这里插入图片描述debug中的结果与上题一致。在这里插入图片描述(3)补全程序
补全如下:

mov dh,ds:[si]
mov dx,ds:[bx]
inc si
add bx,2

程序可以看成4部分组成,第一部分定义数据,第二部分完成初始化,第三部分用一个循环完成在显存上显示(10号中断的2号子程序,21h号中断的9号子程序),第四部分完成程序返回(21号中断的4ch号子程序)

在这里插入图片描述


还是学习思想啊!!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值