|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 leader4 于 2018-5-28 16:07 编辑
的确是越写越顺手了。这个实验也是无难度写出。然后稍微改了下手残导致的bug就正常运行了。
- ;编写安装int 7ch中断例程
- ;功能:显示一个用0结束的字符串。
- ;安装位置:0:200
- ;
- ;参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址。
- ;
- ;思路:第一部分:将代码写入0:200
- ; 第二部分:修改中断向量表
- ; 第三部分:功能代码
- ;
- ;
- assume cs:code
- code segment
- ;第一部分:
- start:
- mov ax,cs
- mov ds,ax
- mov si,offset char_show
- mov ax,0
- mov es,ax
- mov di,200h
- mov cx,offset char_showend-offset char_show
- 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
- ;第三部分:
- char_show:
- mov ax,0b800h
- mov es,ax
- mov al,160
- mul dh
- push ax
- mov al,2
- mul dl
- pop bx
- add ax,bx
- mov di,ax
- s:
- push cx
- mov ch,0
- mov cx,[si]
- jcxz ok
- pop cx
- mov ax,[si]
- mov es:[di],ax
- mov es:[di+1],cl
- inc si
- add di,2
- jmp short s
- ok:
- pop cx ;这一步很容易忘记的。。然后程序无法返回dos。。。
- iret
- char_showend:
- nop
- code ends
- end start
复制代码 |
|