AT&T学习笔记汇编之控制指令

跳转

jmp label

call addresss

调用函数先将eip入栈,eip指向函数的地址

esp直接使用栈中的数据

push pop引用堆栈中的数据

程序通常把esp复制到ebp在使用ebp获取call指令之前传递给栈的信息。

function_label:

pushl %ebp

movl %esp , %ebp

<...normal code...>

movl %ebp , %esp

popl %ebp

ret

eflags

0 carry  借位 错位

11 overflow 溢出

2 prtity 奇偶校验

7 sign    符号

6 zero  0标识

跳转指令

ja jae  jb jbe

jc jcxz jecxz 进位跳转

je jg jge jl jle jna jnae jnb jnbe

jnc jne jng jnge jnl jnle

jno

jnp

jns

jnz

jo jp jpe jpo js jz

cmp op1 , op2

op2 - op1

jge grater

0标识

movl $30 , %eax

subl $30 , %eax

溢出标志

movl $1 , %eax

movb 0x7f , %bl

addb $10 , %bl

jo overhere

int $0x80

overhere:

movl $0 , %ebx

int $0x80

jz overhere

loop循环指令

loop address 直到ECX为0

loope/loopz  或者没有设置ZF标志

loopne/loopnz  或者设置了ZF标志

时间: 2024-08-08 17:59:34

AT&T学习笔记汇编之控制指令的相关文章

AT&amp;T学习笔记汇编之内核

内核组成: 内存管理 设备管理 文件系统管理 进程管理 内存管理: 虚拟内存 交换空间 页面(块) cat    /proc/meminfo ipcs    -m 设备管理: 硬件管理  内核模块(kernel module) unix文件:字符,块,网络 设备文件被创建为节点,内核唯一数字标识.(主次设备号).相似设备的 主设备号相同,次设备号用于标识主设备号相同的设备. 文件系统 进程管理 init第一个进程. 系统调用  /usr/include/asm/unistd.h ebx    第

学习笔记-汇编-双层循环

汇编中 循环的语法是 C语言中的循环 mov cs,N   //循环最大次数    <-----> int i=N; blockName: //循环开始 <----->  for(;i>0;i++){ //xxx...   //循环中的语句      <-----> //XXXX loop blockName //循环结束  <-----> } 另附上汇编示例代码 1 assume cs:code 2 code segment 3 start: 4 m

学习笔记-汇编-两个16位数字相加获得32位数字

使用的是MASM编译 在XP环境下 command内 debug 调试的 啥也不说 上代码!! assume cs:code,ds:data data segment dw 0fa12h,0fdffh data ends code segment start: mov ax,data mov ds,ax ;设置数据段 mov ax,0h ;清零 mov bx,0h ;清零 mov al,ds:[0] ;fa12低位 mov bl,ds:[2] ;fdff低位 add ax,bx ;两个8位数字相

AT&amp;T学习笔记汇编之高级特性

高级特性: SIMD    single instruction multiple  data 单指令多数据 SIMD扩展  Streaming SIMD Extension    (SSE) 流化扩展第二实现  SSE2 第三    SSE3 MMX   对整数执行SIMD操作 64位打包字节,字,双字整数, MMx  0-7    映射到FPU寄存器R0-7 使用FSAVE,FXSAVE指令将FPU寄存器保存到内存中,防止和浮点指令混淆. SSE主要对浮点数执行SIMD操作.128位打包的单

AT&amp;T学习笔记汇编之内联c语言

asm("assembly code"); ansi c将asm用于其它用途,用__asm__替换 在asm后面加上 volatile可以禁止编译器优化 asm volatile ("pusha \n\tpopa"); __asm__ __volatile__ ("pushl $1\n\t"); 扩展asm asm ("asm code" : output locate : input operands : changed r

AT&amp;T学习笔记汇编之函数

步骤 1定义需要的输入值 2定义对输入值执行的操作 3定义如何生成输出值以及如何把输出值传递给发出调用的程序. 定义输入值 使用寄存器 使用全局变量 使用堆栈 .type    func1,    @function func1: 返回主程序 把结果放在一个或者多个寄存器 把结果放在全局变量内存位置. .type area    , @function area: fldpi imull    %ebx    ,    %ebx movl    %ebx    ,    value filds 

AT&amp;T汇编学习笔记

AT&T汇编和intel汇编的区别 (1)在Intel格式中大多使用大写字母,而在AT&T格式中都是用小写字母. (2)在AT&T格式中,寄存器名要加上"%"作为前缀,而在intel格式中则不带前缀. (3)在AT&T的386汇编语言中,指令的源操作数与目标操作数的顺序与在intel的386汇编语言中正好相反.在intel格式中是目标在前,源在后:而在AT&T格式中则是源在前,目标在后.例如,将寄存器eax的内容送入ebx,在intel格式中为&

汇编入门学习笔记 (六)—— si、di,双重循环

疯狂的暑假学习之  汇编入门学习笔记 (六)-- si.di,双重循环 参考: <汇编语言> 王爽 第7章 1. and和or指令,与[bx+idata] and和or,就不多说了. [bx+idata] 这样写是可以的,某些情况下,比较方便. [bx+idata] 也可以写成 idata[bx] 直接见例子: 把'ABcde' 跟 'fGHig' 都改成大写(ASCII中大写字母与小写字母二进制中,只有第五位不同,大写字母是0,小写字母是1) assume cs:code,ds:data d

加壳学习笔记(二)-汇编基础

7.简单的汇编语法:   堆栈平衡  PUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数 POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPAADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,