补全编程,利用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处

posted on 2014-12-10 13:47  文森博客  阅读(330)  评论(0编辑  收藏  举报