你是空气 发表于 2016-8-28 13:10:13

实验8为什么能正常结束

本帖最后由 你是空气 于 2016-8-29 09:44 编辑

实验8最后为什么程序能走完?我看到这一步看不懂了:

assume cs:codesg
codesg segment
    mov ax,4c00h
    int 21h
start: mov ax,0         ;ax=0理解了
    s: nop                ;占一字节,机器码90 理解了
       nop               ;占一字节,机器码90 理解了
       mov di,offset s   ;(di)=s偏移地址 理解了
       mov si,offset s2   ; (si)=s2偏移地址 理解了
       mov ax,cs:      ;(ax)=jmp short s1指令对应的机器码EBF6 理解了
       mov cs:,ax   ; jmp short s1覆盖s处指令2条nop指令 理解了
   s0: jmp shorts ; 这里不懂:程序的内存图在下面,我想问的是:根据s标号地址-ip自增后的地址=-16
   s1: mov ax,0                        ;也就是8h-18h=-16D,最后ip加上这个-16等于8,于是跳到s标号处执行被替换的jmp short s1指令对吗?然后继续执行的时,
       int 21h                        ;根据si的标号减去ip的值,也就是20h-A=10啊,偏移地址是10,怎么能到的0呢?
       mov ax,0                        ;
   s2: jmp short s1      
       nop
codesg ends
end start

你是空气 发表于 2016-8-28 13:15:53

而且,标号地址减去IP得到偏移地址;然后IP再加上这个偏移地址有什么意义?这和不减有什么区别?小甲鱼第九章1视频,我没看懂,因为那个图里的便宜地址变0他没有解释,直接就变FA了,一会儿再看看吧。求帮忙解决上面的问题

你是空气 发表于 2016-8-29 09:43:41

我明白了,看了下一节视频就懂了,感谢小甲鱼
页: [1]
查看完整版本: 实验8为什么能正常结束