王爽汇编语言 实验13 个人笔记

(1)要求:

编写并安装int 7ch 中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处。
参数: dh = 行号, dl = 列号,cl = 颜色,ds:si指向字符串首地址。

思路:

这里单纯的就是显示字符串,只需要编好显示子程序,再将子程序安装到0:200处,设置中断向量表即可。
dh* 160确定所在行的内存地址,dl* 2确定所在列
dh* 160 + dl* 2 就是要显示的字符串所要在的内存地址(前提是在B800h的基础上)

代码:

assume cs:code
code segment
start:   mov ax,cs
         mov ds,ax
		 mov si,offset show_str
		 mov ax,0
		 mov es,ax
		 mov di,200h
		 mov cx,offset show_strend-offset show_str
		 cld
		 rep movsb

		 mov ax,0
		 mov es,ax
		 mov word ptr es:[7ch*4],200h
		 mov word ptr es:[7ch*4+2],0

		 mov ax,4c00h
		 int 21h

show_str:push di
         push si
         push es
		 push cx
         mov ax,0b800h
         mov es,ax
		 mov al,160
		 mul dh          //确定行,将行地址赋给bx
		 mov bx,ax
		 mov al,2
		 mul dl          //确定列,将列地址赋给di
		 mov di,ax
s:		 mov ch,[si]   //判断是否到达字符串末尾,是的话跳出中断
		 cmp ch,0
		 je ok
		 mov es:[bx+di],ch
		 mov es:[bx+di+1],cl
		 add di,2
		 inc si
		 jmp short s
     
ok:      pop cx
		 pop es
		 pop si
		 pop di
		 iret
         mov ax,4c00h
         int 21h
show_strend:nop

code ends
end start

测试代码可观看王爽汇编语言第三版

结果展示:

在这里插入图片描述

(2)要求:

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

思路:

如果要完成loop指令,那需要实现:
(1)dec cx
(2) 转到标号处执行,此时需要位移bx(loop指令的下一条指令地 址 减去标号处地址) ,还有就是需要设置cs , ip ;
进入中断时,系统会自动进行push cs , push ip操作;党退出时可使用 iret(pop ip , pop cs)此时 cs 没有发生改变,我们只需要改变ip,让ip+bx 这样当中断执行结束时,就会直接跳转到标号处。因为这里需要访问栈内数据,所以用到了bp

代码:

assume cs:code
code segment
start:   mov ax,cs
         mov ds,ax
		 mov si,offset loops
		 mov ax,0
		 mov es,ax
		 mov di,200h
		 mov cx,offset loopend-offset loops
		 cld
		 rep movsb

		 mov ax,0
		 mov es,ax
		 mov word ptr es:[7ch*4],200h
		 mov word ptr es:[7ch*4+2],0

		 mov ax,4c00h
		 int 21h

loops:   push bp
         mov bp,sp     //先将当前栈顶保存
		 dec cx
		 jcxz lpret   //判断是否为0 ,为0的话退出中断
		 add [bp+2],bx   //[bp+2]保存的是ip,此时是为了赋值标号处的地址

lpret:   pop bp
         iret
loopend:nop

code ends
end

测试代码,可查看王爽汇编语言(第三版)

结果展示:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值