汇编语言(王爽)-实验十三(二)中断例程对loop功能实现的简单变通

发布时间:2017-3-30 8:46:51 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"汇编语言(王爽)-实验十三(二)中断例程对loop功能实现的简单变通",主要涉及到汇编语言(王爽)-实验十三(二)中断例程对loop功能实现的简单变通方面的内容,对于汇编语言(王爽)-实验十三(二)中断例程对loop功能实现的简单变通感兴趣的同学可以参考一下。

本章在用int 7ch实现loop指令功能时候,所用的参数为cx:循环次数,bx:loop指令的转移位移值。cx的值可以在调用程序里给出,而bx的值却需要用表达式表示,同时为了可以表达,也需要在中断调用指令后加一个无实际含义的"s1:nop"之类的指令,以使得可以将bx表达为"offset s-offset s1"。 其实,通过int 7ch实现loop的要点在于在循环未结束(即cx!=0)时将ip指向跳转目的偏移地址,即s处。因此,设置入口参数为bx=offset s. ;中断例程安装程序二 assume cs:code code segment start: mov ax,cs mov ds,ax mov si,offset do0 mov ax,0 mov es,ax mov di,200h mov cx,offset do0end-offset do0 cld rep movsb mov ax,0 mov ds,ax mov word ptr ds:[7ch*4],200h mov word ptr ds:2[7ch*4],0 mov ax,4c00H int 21H ;中断例程,功能为完成loop指令功能,例程安装于0:200处 ;入口参数:cx=循环次数,bx=循环指令入口地址 do0: push bp dec cx jcxz ok mov bp,sp mov [bp+2],bx ok:pop bp iret do0end: nop code ends end start ;应用程序以实验十三(二)为例: assume cs:code code segment start: mov ax,0b800h mov es,ax mov di,160*12 mov bx,offset s mov cx,80 s: mov byte ptr es:[di],'i' add di,2 int 7ch mov ax,4c00H int 21H code ends end start 当然,这里以位移量作为参数可以加深我们对loop指令含义的理解,loop实质为短转移,即jmp short #标记符;其实现转移的实质为通过位移量确定跳转目的地址。  

上一篇:hdoj 4706 Children's Day
下一篇:C语言字节对齐

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款