20155308 《信息安全系统设计基础》第五周学习总结
教材学习内容总结
- 机器级代码
指令集体系结构(ISA):机器级程序的格式和行为,定义了处理器状态、指令的格式以及每条指令对状态的影响
- 虚拟地址:使用的存储器地址
- 程序计数器(PC):指示下一条指令在存储器中的地址
- 寄存器文件:8个命名的位置,分别存储32位的值,可以存储地址或整数数据、
- 条件码寄存器:实现控制或数据流中的条件变化
- 浮点寄存器
- 代码示例
命令行中使用-s
得到汇编代码,使用-c
会编译并汇编
反汇编器:带-d
命令行标志的程序OBJDUMP
- 使用命令
gcc -Og -o p xxx1.c xxx2.c
编译 - 使用命令
gcc -Og -S xxx.c
产生汇编代码 gcc -Og -c xxx.c
产生目标代码文件,利用反汇编器命令
objump -d xxx.c
命令查看机器代码文件内容。
- 数据传送指令有四个变种:
- movb(传送字节)
- movw(传送字)
- movl(传送双字)
- movq(传送四字)
但是操作的数据大小不同:分别是1、2、4、8字节。
- 算数和逻辑操作,指令类add由四条加法指令组成:addb、addw、addl、addq,分别是字节加法、字加法、双字加法、四字加法。
教材学习中的问题和解决过程
-
问题1:练习题3.10.下面的函数是图3-11a中函数的一个变种,其中有些表达式用空格替代,填写C语言中缺失的部分。这个部分在P228页有答案,但是我自己又进行了方法的尝试,也能得到这个结论。
-
问题2:在做练习题3.29的时候,对这个文件需要进行改进
先进行源代码的编写
然后用while循环替代for循环,结果为
运行之后机器就会卡住了
然后我发现那个如果用continue就会产生问题。
所以继续进行第二项
就可以解决这个问题了。
代码调试中的问题和解决过程
无
代码托管
上周考试错题总结
-
错题1:编译驱动程序gcc -c 会调用(C)
A .预处理器
B .编译器
C .汇编器
D .链接器
-
理解:gcc采用as 作为其汇编器,编译及优化时需要调用汇编器。
GCC 编译全过程:http://blog.csdn.net/js_xj/article/details/6607362
-
错题2:main.c 调用了静态库libmath.a中的函数,编译main.c的命令是(CD)
A .gcc -static main.c ./libmath.a -o main
B .gcc -static main.c -L. -lmath -o main
C .gcc -static main.c -L. -llibmath.a -o main
D .gcc -static main.o ./libmath.a -o main
其他(感悟、思考等,可选)
这周学习了程序的机器级表示,首先复习了一些C语言的知识,包括循环等问题,决定自己虽然对C语言应用了很久,但是还是有一些小问题需要自己时刻注意。同时学习了这些机器代码,虽然应用性不是太高,但是读懂汇编代码才能更好的理解和学习计算机。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 2000行 | 30篇 | 800小时 | |
第五周 | 200/200 | 2/5 | 30/85 |
- 计划学习时间:30小时
- 实际学习时间:35小时
- 改进情况:这周我将前几章的只是进行了复习,并且做了一下第二章的测试,所以 用的时间比较长,但是感觉自己在复习的时候对以前不懂的知识了解的更深了,虽然自己用了很长时间,但是这种有复习的学习方法会对知识掌握的很好。