请教一下汇编里面的“寄存器”是物理意义上的 CPU 里面的寄存器还是逻辑意义上的寄存器?如果是物理意义上的,那么,为什么多个程序同时操作同一个寄存器的时候,他们的数据不会冲突呢?
因为操作系统里面肯定有很多程序在运行的,在微观上,不同的指令应该是串行运行的。通过时间片来切换。
例如 A 程序要执行两个指令:CMP 判断寄存器 rdi 里面的数字是不是 0 ,如果不是 0 ,就用寄存器 rsp 里面的数除以 rdi 。
当 A 程序刚好 CMP 完成以后,时间片切换到 B 程序,此时 B 程序执行 mov 指令,把 0 放到了 rdi 寄存器里面,然后时间片再切换回 A 程序,那么这个时候 A 程序做除法不就会报错了吗?
为什么写汇编的人,似乎从来没有考虑过这种冲突?看起来就像是每个寄存器都是这个程序独占的一样。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.