• 2017-2018-1 20179226 《深入理解计算机系统》第3周学习总结


    教材学习知识点总结

    本章主要介绍了c语言和汇编的关系、栈的变化、指针数组、浮点代码等知识。

    3.1 程序编码

    1.机器级编程,两种抽象最重要,第一种是由指令集体系结构或指令集架构,第二种是**机器级程序使用的内存地址是虚拟地址。
    2.程序内存包含:机器代码、信息、运行时栈、内存块。

    3.2 数据格式

    1.32位数为“双字”,64位数为“四字”。
    2.数据传送指令有四个变种:movb(字节)、movw(字)、movl(双字)、movq(四字)

    3.3 访问信息

    1.一个CPU包含一组16个存储64位值的通用目的寄存器,这些寄存器用来存储整数数据和指针。
    2.不同的操作数可能性被分为三种类型:立即数、寄存器、内存引用。
    3.数据传送指令:mov类第一条指令将源值加载到寄存器中,第二条将该寄存器值写入目的位置。
    4.栈遵循“后进先出”的原则,push压栈,pop删除数据。

    3.4 算术和逻辑操作

    1.操作分为四种:加载有效地址、一元操作、二元操作和位移。
    2.加载有效地址:leaq
    3.一元操作:inc、dec、neg、not
    4.二元操作:add、sub、imul、xor、or、and
    5.位移:sal、shl、sar、shr

    3.5 控制

    1.条件码:CF(进位标志)、ZF(零标志)、SF(符号标志)、OF(溢出标志)
    2.设置条件码:cmp、test
    3.访问条件码:set
    4.跳转指令:jmp

    3.6 过程

    1.栈帧:需要的存储空间超出寄存器能够存放的大小时,就会在栈上分配空间。
    2.有n个整型参数,且n>6,要把参数16复制到对应的寄存器,把参数7n放到栈上,而参数7位于栈顶,所有数据大小都向8的倍数对齐。

    3.7 数组分配和访问

    1.数组元素i会被存放在地址为xA+Li的地方
    2.数组元素D[i][j]的内存地址为&D[i][j]=xD+L(C
    i+j)

    3.8 异质的数据结构

    1.c语言提供两种将不同类型的对象组合到一起创建数据类型的机制:结构、联合
    2.结构:用将关键字struct声明,将多个对象集合到一个单位中。
    3.联合:用关键字union声明,允许用几种不同的类型来引用一个对象。

    3.9 在机器级程序中将控制与数据结合起来

    1.每个指针对应一个类型、每个指针都有一个值、指针用‘&’运算符创建、*操作符用于间接引用指针、数组与指针紧密相连、将指针从一种类型强制转换成另一种类型、指针也可以指向函数。
    2.启动gdb:linux> gdb prog
    3.缓冲区溢出:在栈中分配某个字符数组来保存一个字符串,但是字符串长度超出了为数组分配的空间。
    4.对抗缓冲区溢出攻击:栈随机化、栈破坏检测、限制可执行代码区域。

    3.10 浮点代码

    1.浮点运算操作:vadd、vsub、vmul、vdiv、vmax、vmin、sqrt
    2.AVX浮点操作不能以立即数值作为操作数。
    3.浮点比较操作:ucomiss、ucomisd。

    教材学习中的问题和解决过程

    • 问题1:汇编中leaq和movq的区别是什么?
    • 问题1解决方案:mov是将数据从源操作传到目的操作数中,lea是将源操作数的地址传到目的操作数中,一个是数据,一个是地址。
    • 问题2:incq 16(%rax)中的16是什么意思?
    • 问题2解决方案:inc是目标操作数加一,16(%rax)是指寄存器rax的地址加16的意思么?
    • 问题3:下面这个除法的汇编代码中,%rdx是怎么存了余数?
    x in %rdi,y in %rsi,qp in %rdx,rp in %rcx
    movq %rdx,%r8
    movq %rdi,%rax
    cqto
    idivq %rsi
    movq %rax,(%r8)
    movq %rdx,(%rcx)
    ret
    
    • 问题3解决方案:不太理解,是跟高位低位有关么?
  • 相关阅读:
    2020杭电HDU-6863多校第八场Isomorphic Strings(Hash+学到的新东西)
    CodeForces 1395C-Boboniu and Bit Operations(位运算-暴力)
    洛谷P2585&ZJOI 2006-三色二叉树(树的染色-树形DP)
    洛谷P2016-战略游戏(树的最小点覆盖-树形DP)
    洛谷P2015-二叉苹果树(树形DP)
    洛谷P1352-没有上司的舞会(树形DP)
    CSUSTOJ 4004-你真的会吃零食吗?(打表)
    在线支付--支付宝
    使用rabbitmq rpc 模式
    在kubernetes 集群运行 odoo
  • 原文地址:https://www.cnblogs.com/9226ryf/p/8376449.html
Copyright © 2020-2023  润新知