汇编实验

汇编实验

最后一批有意思的练习题

写在前面

  • 终于完成了Intel x86汇编的习题(我认为应该写的)+基础知识,基本上花了3周左右(除去假期中间的咕咕咕极长时间),可喜可贺,也该开学了。
  • 不coding死路一条
  • 不要停下来啊(指学习)
  • 下一阶段的目标就是数学+算法+Python网络编程
  • 不学数学读研死路一条

什么,你说假期里的前端学习?咕咕咕
汇编代码咋高亮啊,好像不支持…

Read more
汇编基础

汇编基础

字符串和数组

如果可以有效的处理字符串和数组,就能掌握代码优化中的最常见情况。研究表明,绝大多数程序用90%的运行时间执行其10%的代码。毫无疑问,这10%通常发生在循环中,而循环正是处理字符串和数组所要求的结构。本节以编写高效代码为目的,阐释字符串和数组的处理技术

Read more
汇编基础

汇编基础

64位编程

之前介绍的一直都是32位的程序,64位和32位有很多相似的地方,但仍有许多的不同:
比如64位MASM 11.0不支持INVOKE伪指令,而且不需要在程序前写出.model,.stack,.386的

寄存器

64位模式下,操作数的默认大小是32位,并且有8个通用的寄存器。但是给每条指令加上REX(寄存器扩展)前缀后,操作数也可达64位。通用寄存器的数量也增加到了16个:32位模式下的寄存器再加上8个有标号的寄存器,R8~R15

  • 64位模式下,单条指令不能同时访问寄存器的高字节,如AH,BH,CH以及新寄存器的低字节DIL
  • 64模式下,32位的EFLAGS被64位的RFLAGS取代。这两个寄存器共享低32位,而RFLAGS的高32位是不使用的
  • 32位和64位拥有相同的状态标志位
Read more
汇编实验
汇编基础

汇编基础

高级语言接口

大多数程序员不会用汇编语言写大的程序,因为这相当的花费时间。反之,高级语言会隐藏一些细节,开发效率更高。汇编语言广泛用于配置硬件驱动器,以优化程序速度和代码量

通用规范

  • 调用规范(call convention)是指调用过程的底层细节。下面列出需要考虑的细节信息:

    • 调用过程需要保存哪些寄存器
    • 传递参数的方法:用寄存器,用堆栈,共享内存或其他方法
    • 主调程序调用过程时参数传递的顺序
    • 参数传值还是传引用
    • 过程调用后,如何恢复堆栈指针
    • 函数如何向主调程序返回结果
  • 命名规范与外部标识符
    当从其他语言程序中调用汇编过程时,外部标识符必须与命名规范兼容。外部标识符(external identifier)是放在模块目标文件中的名称,链接器使得这些名称能被其他程序模块使用。

  • 段名称
    汇编语言过程与高级语言程序连接时,段名称必须是兼容的。本章使用的简化段指令都与Microsoft C++编译器生成的段名称兼容

  • 内存模式
    主调程序与被调程过程使用的内存模式必须相同

Read more