|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 你是空气 于 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:[si] ;(ax)=jmp short s1指令对应的机器码EBF6 理解了
mov cs:[di],ax ; jmp short s1覆盖s处指令2条nop指令 理解了
s0: jmp short s ; 这里不懂:程序的内存图在下面,我想问的是:根据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
|
|