635924705 发表于 2021-2-8 18:46:53

汇编语言_实验8

【学习交流,共同进步】
assume cs:codesg

codesg segment            ;debug中的初始状态       ;执行到0016时的状态

      mov ax,4c00h         ;0000 mov ax,4c00         ;0000 mov ax,4c00
      int 21h                   ;0003 int 21                   ;0003 int 21

start:mov ax,0            ;0005 mov ax,0000         ;0005 mov ax,0000
       s: nop                     ;0008 nop                      ;0008 jmp 0000
         nop                  ;0009 nop            
         
         mov di,offset s    ;000a mov di,0008         ;000a mov di,0008
         mov si,offset s2   ;000d mov si,0020         ;000d mov si,0020
         mov ax,cs:   ;0010 cs:                         ;0010 cs:
                                    ;0011 mov ax,             ;0011 mov ax,
         mov cs:,ax   ;0013 cs:                         ;0013 cs:
                                    ;0014 mov ,ax             ;0014 mov ,ax
         
       s0:jmp short s         ;0016 jmp 0008                ;0016 jmp 0008
         
       s1:mov ax,0            ;0018 mov ax,0000            ;0018 mov ax,0000
         int 21h               ;001b int 21                      ;001b int 21
         mov ax,0            ;001d mov ax,0000         ;001d mov ax,0000
         
       s2:jmp short s1       ;0020 jmp 0018                ;0020 jmp 0018
         nop                  ;0022 nop                        ;0022 nop
            
codesg ends
end start
小甲鱼老师讲的很好了,但是可能因为我是倍速看的,做这个的时候,我是蒙蔽了一下子的。(没看后面的小甲鱼老师的讲解)因为我复制一个汇编指令换个地方,汇编指令自己就变了。woc,计算机有思维了吗?那肯定不是的。{:10_264:}
所以,我来讲一下我的思考。
我们可以看到debug里面jmp后面是指向具体的ip地址,而我们复制换了一个地方后,jmp后面的ip地址变了。
所以得出,机器码表示了向前或者向后的偏移地址,右边debug中的汇编指令是机器码的计算结果,也就是具体ip地址。
正是因为如此,就是因为我们复制一个代码时,复制的是机器码,汇编代码是由此处的机器码经过运算得到的,所以就算一样的机器码,在不同的地方,翻译出来的汇编指令也可能会不一样。
很绕口,大家意会一下,相信大家都懂。
页: [1]
查看完整版本: 汇编语言_实验8