首页 > 编程知识 正文

汇编语言期末总结(64位汇编参数)

时间:2023-05-06 18:54:53 阅读:65766 作者:1628

在此,目录标题mov传送命令mov ptr lea直接读出有效地址值call,调用子程序ret函数,进行add加法sub减法mul乘法div除法inc自减法(increase ) dec自减法jmpcmpjnejeject

mov传送命令mov eax,ebx将ebx的内容作为eax中的mov eax, 传送到1001H,将1001H写入eax中mov ptr格式:move操作数1,将单位长度ptr[地址值]大括号内的计算结果的值作为存储器地址,取出中的值,接着写入操作数1,例如dword ptr[ebp - 1001H]格式:单位长度ptr[地址值]、操作数2 (例如: - mov dword ptr[ebp - 1001H] )、eax作用:ptr和[ 取出dword ptr[ebp - 1001H],取出ebp - 1001H地址内的内容,dword大小为2字节,存储在eax中。 []中计算的是地址,否则不知道从[]地址复制多长的数据到eax lea直接读取有效的地址值lea eax。 [1001H]lea起到将大括号内的值存储在寄存器中的作用,去除括号,分配给左寄存器,将[1001H]内的地址分配给eax,即将1001H分配给eax执行的结果。 eax=1001H等效于mov eax。 1001H可以运算lea的[]大括号,因此lea eax、[ebp - 10h]可以首先运算,将其结果代入eax。 起到直接运算地址并复制到eax的作用。 通常,向c z指针变量赋值通常在向c指针赋值时使用该指令。 例如//mov dword ptr[ebp-01h],3 int *p=a; //lea eax,[ebp-01h]首先将abp,01h的地址复制到eax。 这里不能使用mov eax,ebp-p1h是因为mov的操作数2不能直接运算。 无法进行运算,但[]表示运算//movdwordptr[

例如,对于call地址的值,在call语句执行之后,首先是eip(eip中存储有下一个cpu要执行的地址),并将EIP指向的地址推入堆栈中。 因为call执行后,EIP已经指向了call的下一个语句。 也就是说,将call的下一句命令推入占有。 此时esp ) )堆栈指针)指向esp

然后,程序跳转到该地址并执行子程序。 子程序的末尾有ret语句。 是回文。 返回跳至上一个call语句中的下一个语句

例如:

006C4E01 call 0067D4E0

006C4E06 push esi

相当于push 006C4E06

jmp 0067D4E0

在呼叫中遇到了ret

ret函数的返回与jmp指令相同,为跳跃。 区别在于,ret跳至函数执行结束后的指令。 函数调用结束时返回此指令,返回上一个call指令调用函数后的指令函数的返回值通常放置在eax中。 add加法例如为add eax,10,相当于eax=eax 10。 这等效于lea eax。 eax10 .注意,它不等效于mov eax,eax10。 加法运算只能写在[ ]大括号内,否则会有语法错误。

sub减法与add相反

sub eax,10相当于eax=eax - 10

mul乘法mul eax、ecx、4等于eax=ecx * 4。 用于排列结构,ecx每次变化都遵循一个要素

div除法运算与乘法运算相反

div eax、ecx、4相当于eax=ecx/4

inc自增加(increase )例如inc eax相当于eax,相当于lea eax、[eax 1]

dec的自我减少与inc相反,dec eax相当于eax,相当于lea eax、[ EAX-1 ]

jmp jmp地址无条件地跳转到有地址的机器命令cmp比较命令,比较结果后跟跳转命令jne、je等,进行跳转命令cmp op1、op2。 比较op1和op2是否相等,不相等则后续的jne跳,不想等则不跳。 jne jump not equal如果比较结果不相等则不跳

例如,如果:cmp eax、dwordPRT[ebp-10h]//EAX和后面的地址中的值的比较结果jne 01234567 //上的比较结果不相等,则能够跳转到01234567的地址je与上面的jne相反

将push放入堆栈中,将数值或寄存器推入堆栈中。每次push放入堆栈顶部。

例如push eax或push 0

pop堆栈与push相反,将堆栈顶部的值代入寄存器。取出堆栈顶部的数量。

例如,pop eax将堆栈顶的数量代入eax,删除堆栈顶的值。

堆栈下为高地址,堆栈上为低地址,推送为esp - 4 pop为esp 4

pushad一般在call调用的开头使用pushad,将寄存器按顺序推入堆栈,保存所有寄存器

popad通常在call调用的末尾使用popad,用于按顺序堆栈寄存器以恢复所有以前保存的寄存器

和都1首次成为1。 例如, and eax,eax相当于eax=1

or或有一个1就等于1,都是0才等于0。 例如,or eax、eax相当于eax=0

xor异或相同0、不同1,按每个比特进行比较

xor eax、ecx通过将eax和ecx用异或赋值给eax,通常用于清零和加密操作。 例如,xor eax、eax与赋予eax=0相同

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。