信息安全系统设计基础第四周学习总结
学习任务
1. 阅读教材,完成课后练习(书中有参考答案)
3.1-3.7中练习,重点:3.1,3.3,3.5,3.6,3.9,3.14,3.15,3.16,3.22,3.23,3.27,3.29,3.30,3.33,3.34
2. 考核:练习题把数据变换一下
3. 实验:需要动手的到实验楼中练习一下
4. 深化、实践题目,额外加分
学习过程
3.1历史观点(教材P103-P105)
1978的8086 29K个晶体管到2008的Corei7 781M个晶体管(每年增长38%,每26个月翻一番)
3.2程序编码(教材P105-P110)
提高优化级别会使最终程序运行得更快,但是编译时间可能会变长,用调试工具对代码调试会更困难。
3.2.1
ISA将程序的行为描述成好像每条指令是按顺序执行的。
gcc -S xxx.c -o xxx.s 获得汇编代码
反汇编器:objdump -d xxx
3.3数据格式(教材P111)
C声明 |
Intel数据类型 |
汇编代码后缀 |
大小 |
Char |
字节 |
b |
1 |
Short |
字 |
w |
2 |
Int |
双字 |
l |
4 |
Long int |
双字 |
l |
4 |
Long long int |
-- |
-- |
4 |
Char * |
双字 |
l |
4 |
float |
单精度 |
s |
4 |
Double |
双精度 |
l |
8 |
Long double |
扩展精度 |
t |
10/12 |
3.4访问信息
esi edi可以用来操纵数组,esp ebp用来操纵栈帧。
对于寄存器,特别是通用寄存器中的eax,ebx,ecx,edx,大家要理解32位的eax,16位的ax,8位的ah,al都是独立的,我们通过下面例子说明:
假定当前是32位x86机器,eax寄存器的值为0x8226,执行完addw
$0x8266, %ax指令后eax的值是多少?
解析:0x8226+0x826=0x1044c, ax是16位寄存器,出现溢出,最高位的1会丢掉,剩下0x44c,不要以为eax是32位的不会发生溢出.
(以上摘自教材学习指导)
操作数分类:立即数;寄存器;存储器
计算有效地址:Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s
3.4.2
MOV类中指令将源操作数复制到目的操作数,相当于赋值。源操作数指定是一个立即数,存储在寄存器中或者存储器中。目的操作数指定一个wei’zhi
MOVS高位用符号位扩展
MOVZ高位用零扩展