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 #标记符;其实现转移的实质为通过位移量确定跳转目的地址。

  • 相关阅读:
    如何查看RabbitMQ日志,Rabbitmq Trace日志的使用
    windows激活 RabbitMQ's Management Plugin(必须)
    UNET
    边缘检测
    Huber Loss
    深度学习之自编码器AutoEncoder(一)
    PU learning简介
    机器学习-稀疏矩阵的处理
    R语言入门-安装R和Rstuido软件
    归一化 (Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered)
  • 原文地址:https://www.cnblogs.com/tsembrace/p/3267175.html
Copyright © 2011-2022 走看看