zoukankan      html  css  js  c++  java
  • 转移指令检测题9

    补全编程,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在DX中

    assume cs:code

    code segment

           start:mov ax,2000h

                   mov ds,ax

                   mov bx,0

                s: mov cl,[bx]

                   mov ch,0

                  inc cx            ;此处为要填写的空行   

                   inc bx

                   loop s

              ok:dec bx              ;dec指令的功能和inc相反,dec bx进行的操作为:(bx)=(bx)-1

                   mov dx,bx

                   mov ax,4c00h

                  int 21h

    code ends

    end start

    还有一个实验记录如下:

    assume cs:codesg

    codesg segment

               mov ax,4c00h

               int 21h

    start:   mov ax,0

         s:   nop

               nop

               mov di,offset s

               mov si,offset s2

               mov ax,cs:[si]

               mov cs:[di],ax

         s0:jmp short s

         s1:mov ax,0

              int 21h

              mov ax,0

         s2:jmp short s1

             nop

    codesg ends 

    end start

    单步调试结果如下:

    对应的机器码如下:

    上面是两张图,中间有重

    程序在跳到S处时,执行完指令后就跳到第一条指令去了。原因是jmp short s1对应的机器码中给出的位移值,而不是目的地址,从图中可以看出是F6,等于-10,即当前指令执行完成后IP+2然后-10,回到S1标号处,当把这条指令放到start的下一条语句时,它对应的机器指令指明,IP也应该-10,上移10个位置,所以就到了第一条指令mov ax 4c00h,而不是跳到s1处

  • 相关阅读:
    辞职信(转贴)
    去掉控件上显示聚焦框
    静态构造函数
    用Excel 公式求 金额的差额
    2020/2/6学习总结
    2020/2/3学习总结
    2020/2/7学习总结
    2020/1/31学习总结
    2020/2/5学习总结
    2020/2/4学习总结
  • 原文地址:https://www.cnblogs.com/919czzl/p/4155267.html
Copyright © 2011-2022 走看看