1. 程式人生 > >彙編學習(三) X86彙編基礎(一)

彙編學習(三) 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 無條件跳轉 。該指令無需跟在比較指令後  

檢視原文:
http://zmrlinux.com/2016/05/18/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%ef%bc%88%e4%b8%89%ef%bc%89-x86%e6%b1%87%e7%bc%96%e5%9f%ba%e7%a1%80%ef%bc%88%e4%b8%80%ef%bc%89/