内存地址 机器码 汇编指令
1000:0 b8 06 00 mov ax,6
1000:3 ff d0 call ax
1000:5 40 inc ax
1000:6 58 mov bp,sp
add ax,[bp]
对于mov ax,6来讲,就是让ax=6H。
我们知道,对于call 16位reg格式来说,相当于push ip;jmp 16位reg。
那么对于call ax来讲,首先ip在运行到这句话时指向1000:3,这个时候实际上还未进行push ip的工作,这时ip将跳转到下一语句1000:5上,也就是此时ip=5,在这时,才会进行push ip的工作,那么在堆栈里存储了5这个数。
之后要进行jmp ax,而ax在第一个语句里被赋值为6,因此jmp ax就是jmp到1000:6语句中,对应的语句是mov bp,sp;要知道sp其实就是当前堆栈ss:sp中的sp,那么此时sp=5,那么bp就被赋值为5。
最后执行ax+bp,就是5+6,换算成16进制是000BH。