汇编笔记整理

来源:互联网 发布:mac 10.11.6 双系统 编辑:程序博客网 时间:2024/05/21 17:01

AT&T:

.section .data

value_ascii:

.ascii"without null"

value_asciz:

.asciz"with null"

value_float:

.float0.0

value_single:

.single0.0

value_double:

.double0.0

value_byte:

.byte0

value_short:

.short0

value_int:

.int0

value_long:

.long0

// 8字节整数

value_quad:

.quad0

// 16字节整数

value_octa:

.octa0


.section .bss

.comm value_comm100

.lcomm value_lcomm100


.section .text

.globl _start

_start:

movl $0, %ebx

movl $1, %eax

int $0x80



INTEL:

.data

var1 BYTE 10h

var2 SBYTE -14

var3 WORD 2000h

var4 SWORD +2345

var5 DWORD 12345678h

var6 SDWORD -2342423

var7 FWORD 0 //48位整数

var8 QWORD 1234567812345678h //64位整数

var9 TBYTE 1000000000123456789Ah//80位整数

var10 REAL4 -1.25 //32位短实数

var11 REAL8 3.2E+100 //64位短实数

var12 REAL10 -6.223424E-2343 //80位短实数


.code

main PROC

exit

main ENDP

END main


浮点数编码格式:

单精度:

31位:符号位 23~30位:指数位(需要减去127=2的8次方-1)0~22位:尾数位

双精度:

63位:符号位 52~62位:指数位(需要减去1023=2的10次方-1)0~51位:尾数位

扩展精度:

79位:符号位 64~78位:指数位(需要减去32767=2的15次方-1)0~51位:尾数位



内联汇编:

asm volatile ("汇编代码")

asm:ANSI C标准下不可使用,有别的含义,替代关键字为__asm__

volatile:表明不希望编译器对内联汇编代码进行优化。asm扩展格式下输出隐含在输入中时需要,防止编译器判断此代码段为没有输出的无效的代码段而进行优化删除。


扩展asm:

约束:

a:%eax,%ax,%al

b:%ebx,%bx,%bl

c:%ecx,%cx,%cl

d:%edx,%dx,%dl

S:%esi,%si

D: %edi,%di

r:通用寄存器

q:%eax %ebx %ecx %edx

A:%edx:%eax

f:浮点寄存器

t:%st0

u:%st1

m:内存位置

o:偏移内存位置

V:直接内存位置

i:立即整数值

n:值已知的立即整数值

g:任何

0:使用第一个命名寄存器

输出修饰符:

+:可以读取和写入操作数

=:只能写入操作数

%:如果必要,操作数可以和下一个操作数切换

&:在内联函数完成之前,可以删除或者重新使用操作数


0 0
原创粉丝点击