20155308 《信息安全系统设计基础》第五周学习总结

20155308 《信息安全系统设计基础》第五周学习总结

教材学习内容总结

  • 机器级代码

指令集体系结构(ISA):机器级程序的格式和行为,定义了处理器状态、指令的格式以及每条指令对状态的影响

  1. 虚拟地址:使用的存储器地址
  2. 程序计数器(PC):指示下一条指令在存储器中的地址
  3. 寄存器文件:8个命名的位置,分别存储32位的值,可以存储地址或整数数据、
  4. 条件码寄存器:实现控制或数据流中的条件变化
  5. 浮点寄存器
  • 代码示例

命令行中使用-s得到汇编代码,使用-c会编译并汇编

反汇编器:带-d命令行标志的程序OBJDUMP

  1. 使用命令
    gcc -Og -o p xxx1.c xxx2.c
    编译
  2. 使用命令
    gcc -Og -S xxx.c
    产生汇编代码
  3. gcc -Og -c xxx.c
    产生目标代码文件,利用反汇编器命令
    objump -d xxx.c
    命令查看机器代码文件内容。
  • 数据传送指令有四个变种:
  1. movb(传送字节)
  2. movw(传送字)
  3. movl(传送双字)
  4. 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小时
  • 改进情况:这周我将前几章的只是进行了复习,并且做了一下第二章的测试,所以 用的时间比较长,但是感觉自己在复习的时候对以前不懂的知识了解的更深了,虽然自己用了很长时间,但是这种有复习的学习方法会对知识掌握的很好。
原文地址:https://www.cnblogs.com/JIUSHA/p/7712118.html