汇编学习(三) X86汇编基础(一)
X86汇编杂记1
x86 基础知识
1.%eax %ebx %ecx %edi %esi 通用寄存器
2.%ebp %esp %eip %eflags 几个专有寄存器
$:使用立即寻址方式
我们对比8086寄存器可以发现,其X86 还是有很多8086的影子的。
int $0x80 中断,请求终止程序。
注释风格:
x86 : 以“#”开头
8086 :以“;”开头
一个小例子来自《深入理解程序设计使用Linux汇编语言》
.section .data data_items: .long 3,67,34,222,45,75,54,34,44,33,22,11,66,0 .section .text .globl _start _start: movl $0,%edi movl data_items(,%edi,4), %eax movl %eax ,%ebx start_loop: cmpl $0,%eax je loop_exit incl %edi movl data_items(,%edi,4) ,%eax cmpl %ebx,%eax jle start_loop movl %eax,%ebx jmp start_loop loop_exit: movl $1,%eax int $0x80
一个简单的寻找最大数的小例子。 我们从这个例子开始小结下基础知识 程序段: 在8086 汇编中,使用的是segment 段 的概念,X86使用section 节 的概念 这里有数据段,文本段。所以我们在X86汇编中“.”是一种标记,标记我们的段标识。 数据类型:.byte 每个存储位置占1个字节。数字范围0~255 .int 每个整型数字占用两个存储位置 即2字节 .long 长整型占用4个存储位置 即4字节 .ascii 存储字符 一些比较指令: je 若值相等则跳转 jg 若第二个值大与第一个值跳转 jge 若第二个值大与等与第一个值则跳转 jl 若第二个值小于第一个值则跳转 jle 若第二个值小于等与第一个值则跳转 jmp 无条件跳转 。该指令无需跟在比较指令后
还没有评论,来说两句吧...