zoukankan      html  css  js  c++  java
  • 20145327 《信息安全系统设计基础》第五周学习总结

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

    教材学习内容总结

    程序编码
    编译代码:gcc =O1 -o p p1.c p2.c
    实际上gcc命令调用了一系列程序,将源代码转化成可执行代码。

    机器级代码
    指令集体系结构ISA:定义了处理器状态、指令的格式,每条指令对状态的影响。

    数据格式
    char b-字节
    short w-字
    int l-双字

    数据传送指令:
    MOV S,D

    movb 传送字节
    movw 传送字
    movl 传送双字
    (上述gcc生成的汇编代码指令都有一个字符后缀,表明操作数的大小)

    加载有效地址:实际是将有效地址写入目的操作数,目的操作数必须是寄存器。

    一元操作:只有一个操作数,可以是寄存器也可是存储器位置。

    INC 加1
    DEC 减1
    NEG 取负
    NOT 取补
    二元操作:源操作数是第一个,可以是立即数、寄存器、存储器 目的操作数是第二个,可以是寄存器、存储器 两个不能同时为存储器。
    ADD 加
    SUB 减
    IMUL 乘
    XOR 异或
    OR 或
    AND 与
    使用规则: 第二个操作数 操作符 第一个操作数
    移位:了解源操作数和目的操作数
    SAL 左移
    SHL 左移(等同于SAL)
    SAR 算术右移
    SHR 逻辑右移
    源操作数:移位量——立即数或CL
    目的操作数:要移位的数值——寄存器或存储器

    do-while循环

    do
    body-statement
    while(test-expr);
    循环体body-statement至少执行一次。

    loop:
    body-statement
    t = test-expr;
    if(t)
    goto loop;
    即先执行循环体语句,再执行判断。

    2.while循环

    while (test-expr)
    body-statement
    GCC的方法是,使用条件分支,表示省略循环体的第一次执行:

    if(!test-expr)
    goto done;
    do
    body-statement
    while(test-expr);
    done:
    than

    t = test-expr;
    if(!t)
    goto done:
    loop:
    body-statement
    t = test-expr;
    if(t)
    goto loop;
    done:

    switch语句

    switch语句可以根据一个整数索引值进行多重分支。处理具有多种可能结果的测试时,这种语句特别有用。它们不仅提高了代码的可读性,而且使用跳转表这个数据结构使用实现更加高效。跳转表是一个数组,表项i是一个代码段的地址,这个代码段实现当switch索引值等于i时程序应该执行的动作。程序代码用于索引值来执行一个跳转表内的数组引用,确定跳转指令的目标。和使用一组很长的
    if-else相比,使用跳转表的优点是执行switch语句的时间与switch的case数量无关。GCC根据switch语句中case的数量和case中值的稀少程序来翻译开关语句。当case数据比较多(例如4个以上),并且值的范围跨度比较小时,就会使用跳转表。

    1.寄存器的使用
    调用者——%eax、%edx、%ecx
    被调用者——%ebx%esi%edi

    寄存器%ebp-帧指针

    寄存器%esp-栈指针

    数据传送指令:

    move指令:将源操作符的值复制到目的操作数中。源操作数指定的值是一个立即数,存储在寄存器中或者存储器中。目的操作数指定一个位置,要么是一个寄存器,要么是一个存储器地址。。传送指令的链各个操作数不能都指向存储器位置。这些指令的寄存器操作数,对于movl来说,可以是8个32位寄存器(%eax%ebp),对于movw来说,可以是8个16位寄存器(%ax%bp),movb可以使单字节寄存器元素(%ah%bh,%al%bl)。

    汇编中可以用条件测试和跳转组合起来实现循环的效果,但是大多数汇编器中都要先将其他形式的循环转换成do-while格式。

    课后作业中的问题和解决过程

    本周代码托管截图

    代码托管

    其他(感悟、思考等,可选)

    感觉汇编挺有趣神奇的

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 100/100 2/2 10/10
    第二周 100/200 1/3 20/30
    第三周 80/280 1/4 15/45
    第五周 100/380 1/5 15/60

    参考资料

  • 相关阅读:
    autorun.inf删除方法
    Re_Write序列号
    最常用的正则表达式
    SQL聚合使用GROUP BY
    Ext.Net的Window控件的简单使用
    SQL统计查询一个表中的记录,然后减法运算
    C#金额转换为汉字大写
    Ext.Net的Button按钮的使用
    C# 参考之方法参数关键字:params、ref及out 引用
    C#连接ACCESS 2007数据库
  • 原文地址:https://www.cnblogs.com/20145327gc/p/5960354.html
Copyright © 2011-2022 走看看