第一次没有仔细看就运行了一下程序感觉好奇怪为什么会这样呢?一个大大的问号。
后来我又好好看了一下,豁然开朗,就记录一下(希望可以帮到需要的人)
前面的写程序,编译,连接这些就不管了,默认都搞好了。
我们debug一下这个程序,可以看到所有语句的汇编语句和对应的机器码。
图中大部分的汇编语言我们都可以看的懂,大概的意思就是将cs:[si]中的内容放入到cs:[di]中,cs:[si]中的内容是EBF6,其实这个内容本身就是一个转移指令,相当于执行当前的指令往后退10个字节(因为F6是补码,它的真值为-10),现在两个nop中的内容为EBF6,当我们执行jmp short s(jmp 0008)语句时,相当于跳转到了nop中,继续执行跳转语句,相当于上面说执行当前的指令往后退10个字节,这时执行 movax,4c00h
int 21h,程序结束。
我在纸上写了一下汇编语言执行的顺序(不要嫌弃)
执行的具体步骤,在加深一下印象