zoukankan      html  css  js  c++  java
  • 实验十三(二)中断例程对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 #标记符;其实现转移的实质为通过位移量确定跳转目的地址。

  • 相关阅读:
    CAN器件
    团队赋能
    电子模拟开关
    名言出处
    危机管理
    隔离技术
    让CSS布局更加直观:box-sizing
    浅谈跨域以WebService对跨域的支持
    给初学者的20个CSS实用建议
    JS中eval处理JSON数据 为什么要加括号
  • 原文地址:https://www.cnblogs.com/tsembrace/p/3267175.html
Copyright © 2011-2022 走看看