zoukankan      html  css  js  c++  java
  • 汇编实验八(王爽)

    assume cs:code
    
    code segment
            mov ax,4c00h          #3
            int 21h               #2
    
    start:  mov ax,0              #3
        s:  nop                   #1
            nop                   #1
    
            mov di,offset s       #3  -> di=0008
            mov si,offset s2      #3  -> si=0020
            mov ax,cs:[si]        #3  ->(ax) = (cs*16+(si))
            mov cs:[di],ax        #3  ->(cs*16+(di)) = (ax)
    
       s0:  jmp short s           #2
       s1:  mov ax,0              #3
            int 21h               #2
            mov ax,0              #3
    
       s2:  jmp short s1          #2
            nop                   #1
    
    code ends
    
    end start

    分析这个程序是否能运行?

    结果是可以运行!我错了,我以为它不可以 ,没跟踪之前分析了半天也没弄出来。

    程序最初执行,执行到mov ax,cs:[si]这里时,ax寄存器内的值等于偏移地址为0020处的汇编机器码(jmp short s1),这个指令代表的是跳到偏移量为(是s1处的偏移地址-jmp指令后第一个指令的地址,算出为-10,补码为F6);执行到mov cs:[di],ax 后,偏移地址为0008处的指令被改为(jmp short s1),而这个指令实际代表的只与偏移量有关,即F6(EBF6);程序继续执行,执行完jmp short s后,跳转到标号s处(偏移地址为0008处)开始执行,此时,该处的指令已经改变为jmp到偏移量为F6(-10)的地方,一计算,发现就是偏移地址为0000处,程序最开始处,即mov ax,4c00h   int 21h,程序正常返回!

    最后的执行结果如下:

  • 相关阅读:
    集合框架之Map学习
    集合框架之Set学习
    解决word2016鼠标每点击一下就出现一个保存的圆圈
    装饰者模式
    IO的学习与使用
    Enumeration的学习
    在html页面中引入公共的头部和底部
    WEB-INF下资源访问问题
    给自己立一个flag
    elementui 日期选择值格式
  • 原文地址:https://www.cnblogs.com/jane315/p/12893518.html
Copyright © 2011-2022 走看看