[039][汇编语言]实验8 分析程序

实验8:分析一个奇怪的程序

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
EBF6.png
  • 1、代码会把 标号s2 之后的 jmp short s1 指令复制到 标号s: nop nop 这里,本质上复制的就是指令对应的机器码EBF6指令也是数据,指令就是数据
  • 2、机器码EBF6分两部分看EB表示跳转,F6表示位移量
  • 3、F6 是十进制数 负十 的补码形式,功能是 向低地址跳转十个内存单元
F6 H =  1111 0110 B
取反+1
=  0000 1001 B+1
=  0000 1010 B
=  10 D
  • 4、F6 如何而来?
jmp short s1
标号s1处的偏移地址 0018H
  减去
jmp指令后第一个字节的地址 0022H

0018H-0022H = F6H(保留2个字节)
  • 5、程序跳转到 mov ax,4c00h 开始执行,最终程序结束

你可能感兴趣的:([039][汇编语言]实验8 分析程序)