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

  • 相关阅读:
    来谈谈JAVA面向对象
    手把手的SpringBoot教程,SpringBoot创建web项目(一)
    【Java框架型项目从入门到装逼】第十五节
    印章文字识别
    《图像处理实例》之 曲线之间距离求解
    机器学习常用模块
    Ubutu16.04+Cuda9.2/9.0+Cudnn7.12/7.05+TensorFlow-gpu-1.8/1.6
    滑动平均模型原理+源码分析
    AlexNet实践
    TensorFlow NormLization
  • 原文地址:https://www.cnblogs.com/tsembrace/p/3267175.html
Copyright © 2011-2022 走看看