王爽汇编(第三版)第12章实验12

这个实验其实没有什么好说的,把前面的几个地方稍微改下,就可以了。

不过为了让自己印象深刻些,我还是讲一下。

解析:要求:是使得在除法溢出发生时,在屏幕中间显示字符串“divide error!”总共占13个字符(空格什么的都算上去)

,然后返回到dos。

下面我给出代码,代码有注释。

assume cs:code
code segment
start:   mov ax,cs
         mov ds,ax
		 mov si,offset do0   ;获取do0位置的偏移地址
		 mov ax,0
		 mov es,ax
		 mov di,200h
		 mov cx,offset do0end-offset do0 ;获取循环次数
		 cld                          ;df设置成0,防止引发单步中断
		 rep movsb                    ;循环将do0~do0end的指令写入到0:0200~
         
		 mov ax,0
		 mov es,ax
		 mov word ptr es:[0*4],200h     ;将偏移值地址写入0:0
		 mov word ptr es:[0*4+2],0      ;将段地址写入0:0002

		 mov ax,4c00h
		 int 21h

		do0:jmp short dostart
		    db"divide error!"
		dostart:mov ax,cs
		        mov ds,ax
				mov si,202h       ;jmp short dostart 占两个字节

				mov ax,0b800h      ;字母开头要加0
				mov es,ax
				mov di,12*160+36*2     ;13行第37列

				mov cx,13
             s: mov al,[si]
			    mov es:[di],al
				mov byte ptr es:[di+1],02h  ;这里为了让字体突出些,我把字的属性改成绿色黑底
				inc si
				add di,2
				loop s

				mov ax,4c00h
				int 21h
        do0end:nop
code ends
end start

debug运行下

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值