1 mov

源操作数的值 给目标操作数
格式: mov dest, src
dest = [src]

如下图:
999999换算为十六进制是0x000f423f,
在mov eax, a后,
eax的值就变为了0x000f423f
在这里插入图片描述

2 lea

Load effective address——取有效地址
格式: lea dest, src
dest = src

如下图:
在lea eax, a后,
eax的值就变为了0x00FA898, 刚好是数组a的首地址
所以lea取的是 源操作数的地址
在这里插入图片描述
还有另一种格式: lea dest, [src], 效果是相同的, 都是取src这个变量的地址, 而不是值
在这里插入图片描述

#define __ asm __ asm asm 函数让系统执行汇编语句。 __ asm __常常与__volatile__一起出现。__volatile__限制编译器不能对下面的汇编语句进行优化处理。 分析下面语句 __ asm __(" mov b %3,%%dh\n\t" \ " mov b %2,%%dl\n\t" \ 接下来加号的问题就比较复杂了,方法字节码与原java代码反汇编出来的结果已经完全一致了,javap的参数都试过了一遍也搜不到"+",但是经过idea的反编译出来的显示效果就是不一样,为了探究这个问题,得顺着先去了解下idea的反编译手段,根据idea的注释“对照上面的反汇编字节码可以慢慢理清楚每个参数的含义,至于方法参数为何是这些,可以在源码注释中找到答案。这是一个非常简单的lambda表达式的方法,话不多说,我们开始编码。明显是错的,那么接下来我们把重要的那部分补充完整。最后附上javap的一些参数吧。 《汇编程序设计与计算机体系结构: 软件工程师教程》这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译。中文版是2019年出版的。个人感觉这本书真不错,书中介绍了三种汇编器GAS、N ASM 、M ASM 异同,全部示例代码都放在了GitHub上,包括x86和x86_64,并且给出了较多的网络参考资料链接。这里只摘记了M ASM 和N ASM ,测试代码仅支持Windows和Linux的x86_64。 9. 内联汇编与宏 9.2 内联汇编:是一种在高级语言中嵌入汇编代码的办法。还有一种办法也能 10h 就是“源地址”,只不过这里用了一个常数而不是地址; dword ptr [ebp-4] 就是“目的地址”。 其中,ebp你可以理解为一个指针,ebp-4则是向下4的偏移处(刚好就是nA的地址)。 dword ptr意思是把刚才那个偏移处解释为... ①CPU内部寄存器之间数据的任意传送(除了码段寄存器CS和 指令 指针IP以外)。 ②立即数传送至CPU内部的通用寄存器组(即AX、BX、CX、DX、BP、SP、SI、DI),给这些寄存器赋初值。 ③CPU内部寄存器(除了CS和IP以外)与存储器(所有寻址方式)之间的数据传送,可以实现一个字节或一个字的传送。 ... 寄存器,% 开头 取地址里面的值,偏移量(%寄存器)// 除了 lea 取地址 指令 )外, lea 就是取地址 load effecive address 整形操作通用后缀,后缀 [b w l q 1 2 4 8] byte word l… quadruple, 表示多少字节 浮点 指令 还有三个 [s d t 4 8 16] single double extended (修饰精 加载有效地址(load effective address) 指令 就是 lea ,他的 指令 形式就是从内存读取数据到寄存器,但是实际上他没有引用内存,而是将有效地址写入到目的的操作数,就像是C语言地址操作符&一样的功能,可以获取数据的地址。在实际使用中他有两种使用方式。 1. lea 指令 获取偏移地址  assume cs:code code segment start: mov byte pt... 高级语言经编译器编译生成后,最终会生成机器语言,汇编 指令 与机器语言又是对应的。所以汇编 指令 与高级语言语言定义存在一定的关系。 如:CALL、RET组合相当于方法调用。LOOP、LOOPE、LOOPZ、LOOPNE、LOOPNZ、JCXZ、JECXZ循环执行 指令 。INT、INTO、IRET中断,与并发执行和调试等有关。—————————————————————————————————... 一、数据传输 指令 ─────────────────────────────────────── 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送 指令 . MOV 传送字或字节. MOV SX 先符号扩展,再传送. MOV ZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. P 1、格式: LEA OPRD1,OPRD2  (本 指令 对标志位无影响)OPRD1 为目的操作数,可为任意一个16位的通用寄存器.除段寄存器外OPRD2 为源操作数,可为变量名、标号或地址表达式.除立即数外。2、示例: LEA BX,DATA1 LEA DX,BETA[BX+SI] LEA BX BX,[BP],[DI]3、操作数长度和地址长度不同时操作数长(16)小于地址长(32),取低16位存目的寄存器...