美文网首页
作业总结

作业总结

作者: 小咕咕coco | 来源:发表于2019-05-23 10:33 被阅读0次
  • .section .data label: .int 2,3,5

    1. int是32位
    2. label的值是地址,movl $label, %eax
  • .section .text .glbal _start _start:

  • 寄存器

    1. %eax+5: 用addl $5, %eax,就是在eax中的值上+5,代表字节序列的那个址上+5
    2. 4(%eax): 括号代表取eax中的地址中的值,在其上面+4。所以如果要更新指向的int数组位置的话,就要+4了
    3. 通用寄存器有6个,abcd,esi,edi
  • sa,sh,移位指令

  • lea(和mov的区别是,lea不解引用),nop

  • 64位系统给的栈地址是48位,很高,截到esp中用会有段错误

  • 如果用64位

    1. 每次的push都是8字节
    2. rsp,rbp,rax,rdi
    3. rax放调用号,syscall唤起中断
    4. write调用号是1,rdi放写入文件号,rsi放字符串地址,rdx放长度
    5. exit调用号为60,返回值放rdi
  • hw5作业文件里有很多技巧,可以复习

  • 函数传参

    1. 6个寄存器可以用,但是中间mov的时候可能会需要寄存器中转
    2. 64位除了abcd,di,si,bp,sp八个之外,还有8~15 8个寄存器可以用
    3. 用标号分清内外循环,弄清寄存器的功能
  • 条件跳转

    1. test,按位与;com,a-b,或者-立即数
    2. 有符号数:jg,jl,jge,jle;无符号数:ja,jb,jae,jbe
  • 32位/64位

    1. .code32,按32位编译
    2. 栈交流只能服从64位,push %rax,或者 .code32下用 pushl %eax,但是还是会编译成64位
  • 过程调用
    1. 调用者push参数,call,被调用者切换栈帧(ebp压栈,后切为esp),也可以不切,直接用调用函数的栈帧
    2. 记好参数的顺序和位置
  • 插入排序
    1. 维护子序列,遍历,找位置插入,n^2
    2. 外层循环和内层循环各自的变量用不同的寄存器保存,内层循环不能碰外层的寄存器,就像不能修改外层的变量一样
    3. mov指令可能要用到中间寄存器

相关文章

网友评论

      本文标题:作业总结

      本文链接:https://www.haomeiwen.com/subject/xpfvzqtx.html