最近在看《深入了解计算机系统》,讲到汇编那一章,发现书上对各类指令对标志寄存器的影响讲的不细致,所以来问问大家有没有这方面的书或资料介绍一下。
在做习题的时候发现有的知识点书上没讲到, google 也没找到~~
这就像老师上课讲加法考试却考你乘法。
在做习题的时候发现有的知识点书上没讲到, google 也没找到~~
这就像老师上课讲加法考试却考你乘法。
1
billlee Oct 15, 2016
这个很复杂吗?标志寄存器表示的是上一条指令的结果的属性,所有算术指令都会修改标志寄存器
|
2
likeunix OP @billlee 看下这个,我不知道第 7 行执行后标志寄存器发生了什么变化:
1 movl 8(%ebp),%edx 2 movl $0,%eax 3 testl %edx,%edx 4 je .L7 5 .L10: 6 xorl %edx,%eax 7 shrl %edx 8 jne .L10 9 .L7: 10 andl $1,%eax |
3
redsonic Oct 15, 2016 intel x86 架构手册,没有比这个更权威的了
http://www.intel.cn/content/www/cn/zh/processors/architectures-software-developer-manuals.html shrl 可能在 2B 卷 |
4
guanaco Oct 15, 2016
现在底层也不用汇编写?
|
5
pright Oct 15, 2016
|
6
billlee Oct 15, 2016 你这里 %edx 是个变量啊,就是在循环里面做右移,当结果不为 0 时, ZF 为 1, 执行 jne .L0, 循环
直到 %edx 为 0 的时候, ZF 为 0, jne .L0 不执行,退出循环 void f(uint32_t val) { uint32_t sum = 0; while (val != 0) { sum ^= val; val >>= 1; } sum &= 1; } |
7
raptor Oct 15, 2016
这个明显应该自己去查 Intel 的手册啊
|
8
bombless Oct 16, 2016 via Android
intel 手册和 amd 手册交叉看吧,有时候感觉 amd 讲的更紧凑一点
|