assume cs:code
code segment
mov ax,4c00h
int 21h
start:mov ax,0
s:nop
nop
mov di,offset s
mov si,offset s2
mov ax,cs:[si]
mov cs:[di],ax
s0:jmp short s
s1:mov ax,0
int 21h
mov ax,0
s2: jmp short s1
nop
code ends
end start
执行前:把s2的指令写入到s处 s2的指令为 跳转到s1 那么s的指令和s2是一样的,写入完
之后 执行s0 跳转到s s再跳转到s1。s1处并没发现 mov ax 4c00h这个指令,
__________________________________________________________
执行后:在moa cs:[di],ax之后 执行了 s0处的指令 但是 执行完了
在debug查看的时候发现 发现 s处的指令为jmp 0000。 为什么跳转到是程序的开始呢?
__________________________________________________________
首先程序执行开始时我分析的就不对, 先要认清一个概念, 跳转指令是根据距离标号位 位移来进行跳转的,不是根据标号
的ip偏移地址来跳转的,那么其实 把ip 为 s2中的机器指令复制到s里面 复制的是 s2 在内存单元中的指令,并不是直接把s2处汇编指令给复制下来的
那么复制的 只能是 s2到s1的位移,那么s2到s1的位移为-10(debug 查看可知)那么这串机器指令到了s处 ,向前位移10个字节 刚好指向的下一条指令就是mov ax,4c00h
- [游客] 兄弟,现在汇编网似乎不能登录了 加油阿 12/28 17:05
- [tom7370] 兄弟,都一个月了。。。 08/16 18:12
- [tom7370] 怎么没动静了? 08/05 17:18
- [tom7370] 自愧不如啊 07/18 17:22
- [tom7370] 你的学习进度比我快多了哩 我用了将近6个月才学完这本书。。。 不像网站上说的2个月。。。。 07/18 17:20
- [mr_crbn] 啊 我佛了 这个 缩进 我在notepad++ 缩进的好好的, 07/14 14:44
- [mr_crbn] 第3题的第五小题 用到了 [bx+32] 我是实际测试过了 可以用的 就用了 其实不用这种方法 07/12 19:25
- [tom7370] 加油! 07/12 12:03
- [tom7370] 你对第二问的理解似乎不对 题目的意思大概是要你写出指令的执行过程 07/06 09:00
- [mr_crbn] 非常感谢你,我理解的确实不对 我以为一个存储器的是有固定的存储单元,笔记已经改正了 06/30 17:45
- [tom7370] 你还真是牛逼,几天就搞完我几个星期搞完的东西。 07/04 22:33