作者回复: 👍完全正确。
作者回复: 那要加油搞清楚啊。
作者回复: 👍这个关于CPU的控制器的译码器的部分我会在后续讲解CPU的部分讲到。
作者回复: 是得,笔误了。应该是 “如果比较得结果是True,也就是 r == 0,就把零标志码设置为1”
不然后面得jne跳转和这里也对不上。
作者回复: 是的,如果没有提供返回值,很多版本的编译器会隐式地生成一个return 0;的返回值,就会生成 mov eax, 0x0 的多出来的指令。我修改一下让文章更准确一点。
作者回复: aiter同学谢谢。我回复了,不过你这里的理解不太对,jle指令并不是和2做比较,而是判断标志位的,jle 和 jl 用的是不同的标志位,具体可以看看这个reference http://www.unixwiz.net/techtips/x86-jumps.html
作者回复: 👍多动手自己体会是王道。
作者回复: 👍
作者回复: Linuxer同学你说得对,这个就是main的返回值。
作者回复: 👍
作者回复: 👍加油
作者回复: 晴天~同学
你好,为什么不能只有一个呢?x86里一个CPU只有一个条件吗寄存器
作者回复: 可以写一些带switch...case的程序试一下,你会发现编译器是很聪明的
作者回复: hello同学你好,
上一讲里面,我们是拿MIPS这样比较简单的指令集来举例子的,里面的指令都是等长的。
这一讲里面,实际是在一台Intel CPU的Linux机器上的程序,Intel的指令集里面的每条指令的长度并不是都相等的。
作者回复: 👍感谢分享给大家
作者回复: cmp指令执行完成之后,会更新对应的标志位
而jle指令读取特定的标志位来决定是否跳转
使用什么指令是由编译器决定的
不同的跳转指令有时候可以实现相同的功能
不同的跳转指令读取的标志位可以参见
http://marin.jb.free.fr/jumps/
作者回复: 👍