• 用中断例程完成loop指令的功能【安装中断例程,设置中断向量表】


    ;问题:用中断例程完成loop指令的功能

    ;应用举例:在屏幕中断显示80个'!'?

    1.asm

    ;安装中断例程

    assume cs:code
    
    code segment
    start:
      mov ax, cs
      mov ds, ax
      mov si, offset lp  ;ds:[si] 只指向源地址
      mov ax, 0
      mov es, ax
      mov di, 200h   ;es:[di] 指向目标地址
      mov cx, offset lpend - offset lp ;cx为传输长度
      cld    ;传输方向为正
      rep movsb  ;rep 为cx!=0 继续 拷贝[movsb]
      
      ;设置7ch中断例程的入口地址
      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
      
     
     ;7ch中断例程
     lp:
       push bp
       mov bp, sp
       dec cx
       jcxz lpert
       add ss:[bp+2], bx ;ss:[bp+2] 为 int 7ch 下一条指令的第一个字节 地址
           ;bx为 s标号 到 int 7ch 下一条指令的第一个字节 地址 的偏移地址
     lpert:
       pop bp
       iret
     lpend:
       nop
       
    code ends
    end start

    2.asm

    ;实现loop

    assume cs:code
    
    code segment
    start:
      mov ax, 0b800h
      mov es, ax
      mov di, 160*12
      mov bx, offset s - offset se  ;设置从标号se到s的转移位移
      mov cx, 80
      
     s:
      mov byte ptr es:[di], '!'
      mov byte ptr es:[di+1], 0ah
      add di, 2
      ;loop s
      int 7ch        ;如果(cx)!=0,转移到标号s处
     se:
      nop
      
      mov ax, 4c00h
      int 21h
    
    code ends
    end start
  • 相关阅读:
    Docker——WIN7 安装 Docker实战与入门
    TensorFlow——dropout和正则化的相关方法
    TensorFlow——学习率衰减的使用方法
    TensorFlow——MNIST手写数据集
    TensorFlow——分布式的TensorFlow运行环境
    类加载器
    死亡的对象
    spring boot整合kafka
    Java验证手机号
    类生命周期
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2871144.html
Copyright © 2020-2023  润新知