zoukankan      html  css  js  c++  java
  • 汇编语言实验8

    assume cs:code

    code 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//把s2处的两个字节传到s处 即把jmp short s1传到s处

    s0:jmp short s

    s1:mov ax,0
    int 21h
    mov ax,0

     s2:jmp short s1
     nop

    code ends
    end start

    问题奇怪的是执行程序过程中 当执行到jmp short s处 dos显示 jmp 0008 只是没问题的 但再执行 即此时已经传过来的jmp short s1时

    dos显示 jmp 0000 有没有搞错? s1明明在下面好不好!

    解释:内部传过来的不是Jmp short s1而是其对应的ASCII码 而根据jmp short的内部转移机制 其ascii码代表的是其相对当下地址的转移地址(也是因为该原因 只能在一个字节内转移 且只需2个字节就能储存完(其中一个字节表示偏移量 一个表示jmp)) 故真正转移过来的代码 代表的意思是向上偏移8个字节(根据原来jmp short s1跳到s1算出的) 此时cp=8 故jmp 0000了

  • 相关阅读:
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
  • 原文地址:https://www.cnblogs.com/aloney/p/4496679.html
Copyright © 2011-2022 走看看