有介绍 i386 汇编中各类指令对标志寄存器影响的书或博客吗?
- 0次
- 2021-07-01 17:43:06
- idczone
最近在看《深入了解计算机系统》,讲到汇编那一章,发现书上对各类指令对标志寄存器的影响讲的不细致,所以来问问大家有没有这方面的书或资料介绍一下。
在做习题的时候发现有的知识点书上没讲到, google 也没找到~~
这就像老师上课讲加法考试却考你乘法。
这个很复杂吗?标志寄存器表示的是上一条指令的结果的属性,所有算术指令都会修改标志寄存器
看下这个,我不知道第 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
intel x86 架构手册,没有比这个更权威的了
http://www.intel.cn/content/www/cn/zh/processors/architectures-software-developer-manuals.html
shrl 可能在 2B 卷
现在底层也不用汇编写?
http://programminggroundup.blogspot.com/2007/01/appendix-b-common-x86-instructions.html
你这里 %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;
}
这个明显应该自己去查 Intel 的手册啊
intel 手册和 amd 手册交叉看吧,有时候感觉 amd 讲的更紧凑一点