日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

linux汇编中的注释,Linux 汇编器:对照 GAS 和 NASM

發布時間:2023/12/9 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux汇编中的注释,Linux 汇编器:对照 GAS 和 NASM 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux 匯編器:對比 GAS 和 NASM

轉自 http://www.ibm.com/developerworks/cn/linux/l-gas-nasm.html#ibm-pcon

與其他語言不同,匯編語言

要求開發人員了解編程所用機器的處理器體系結構。匯編程序不可移植,維護和理解常常比較麻煩,通常包含大量代碼行。但是,在機器上執行的運行時二進制代碼在速度和大小方面有優勢。

對于在 Linux 上進行匯編級編程已經有許多參考資料,本文主要講解語法之間的差異,幫助您更輕松地在匯編形式之間進行轉換。本文源于我自己試圖改進這種轉換的嘗試。

本文使用一系列程序示例。每個程序演示一些特性,然后是對語法的討論和對比。盡管不可能討論 NASM 和 GAS

之間存在的每個差異,但是我試圖討論主要方面,給進一步研究提供一個基礎。那些已經熟悉 NASM 和 GAS

的讀者也可以在這里找到有用的內容,比如宏。

本文假設您至少基本了解匯編的術語,曾經用符合 Intel? 語法的匯編器編寫過程序,可能在 Linux 或 Windows 上使用過 NASM。本文并不講解如何在編輯器中輸入代碼,或者如何進行匯編和鏈接(但是下面的邊欄可以幫助您 快速回憶一下

)。您應該熟悉 Linux 操作系統(任何 Linux 發行版都可以;我使用的是 Red Hat 和 Slackware)和基本的 GNU 工具,比如 gcc 和 ld,還應該在 x86 機器上進行編程。

現在,我描述一下本文討論的范圍。

構建示例

匯編:

GAS:

as –o program.o program.s

NASM:

nasm –f elf –o program.o program.asm

鏈接(對于兩種匯編器通用):

ld –o program program.o

在使用外部 C 庫時的鏈接方法:

ld –-dynamic-linker /lib/ld-linux.so.2 –lc –o program program.o

本文討論:

NASM 和 GAS 之間的基本語法差異

常用的匯編級結構,比如變量、循環、標簽和宏

關于調用外部 C 例程和使用函數的信息

匯編助記符差異和使用方法

內存尋址方法

本文不討論:

處理器指令集

一種匯編器特有的各種宏形式和其他結構

NASM 或 GAS 特有的匯編器指令

不常用的特性,或者只在一種匯編器中出現的特性

更多信息請參考匯編器的官方手冊(參見 參考資料

中的鏈接),因為這些手冊是最完整的信息源。

基本結構

清單 1 給出一個非常簡單的程序,它的作用僅僅是使用退出碼 2 退出。這個小程序展示了 NASM 和 GAS 的匯編程序的基本結構。

清單 1. 一個使用退出碼 2 退出的程序

行號

NASM

GAS

001

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

; Text segment begins

section .text

global _start

; Program entry point

_start:

; Put the code number for system call

mov eax, 1

; Return value

mov ebx, 2

; Call the OS

int 80h

# Text segment begins

.section .text

.globl _start

# Program entry point

_start:

# Put the code number for system call

movl $1, %eax

/* Return value */

movl $2, %ebx

# Call the OS

int $0x80

現在解釋一下。

NASM 和 GAS 之間最大的差異之一是語法。GAS 使用 AT&T 語法,這是一種相當老的語法,由 GAS 和一些老式匯編器使用;NASM 使用 Intel 語法,大多數匯編器都支持它,包括 TASM 和 MASM。(GAS 的現代版本支持 .intel_syntax

指令,因此允許在 GAS 中使用 Intel 語法。)

下面是從 GAS 手冊總結出的一些主要差異:

AT&T 和 Intel 語法采用相反的源和目標操作數次序。例如:

Intel:mov eax, 4

AT&T:movl $4, %eax

在 AT&T 語法中,中間操作數前面加 $

;在 Intel 語法中,中間操作數不加前綴。例如:

Intel:push 4

AT&T:pushl $4

在 AT&T 語法中,寄存器操作數前面加 %

。在 Intel 語法中,它們不加前綴。

在 AT&T 語法中,內存操作數的大小由操作碼名稱的最后一個字符決定。操作碼后綴 b

、w

和 l

分別指定字節(8 位)、字(16 位)和長(32 位)內存引用。Intel 語法通過在內存操作數(而不是操作碼本身)前面加 byte ptr

、word ptr

和 dword ptr

來指定大小。所以:

Intel:mov al, byte ptr foo

AT&T:movb foo, %al

在 AT&T 語法中,中間形式長跳轉和調用是 lcall/ljmp $section, $offset

;Intel 語法是 call/jmp far section:offset

。在 AT&T 語法中,遠返回指令是 lret $stack-adjust

,而 Intel 使用 ret far stack-adjust

在這兩種匯編器中,寄存器的名稱是一樣的,但是因為尋址模式不同,使用它們的語法是不同的。另外,GAS 中的匯編器指令以 “.” 開頭,但是在 NASM 中不是。

.text

部分是處理器開始執行代碼的地方。global

(或者 GAS 中的 .globl

或 .global

)關鍵字用來讓一個符號對鏈接器可見,可以供其他鏈接對象模塊使用。在清單 1 的 NASM 部分中,global _start

讓 _start

符號成為可見的標識符,這樣鏈接器就知道跳轉到程序中的什么地方并開始執行。與 NASM 一樣,GAS 尋找這個 _start

標簽作為程序的默認進入點。在 GAS 和 NASM 中標簽都以冒號結尾。

中斷是一種通知操作系統需要它的服務的一種方法。第 16 行中的 int

指令執行這個工作。GAS 和 NASM 對中斷使用同樣的助記符。GAS 使用 0x

前綴指定十六進制數字,NASM 使用 h

后綴。因為在 GAS 中中間操作數帶 $

前綴,所以 80 hex 是 $0x80

int $0x80

(或 NASM 中的 80h

)用來向 Linux 請求一個服務。服務編碼放在 EAX 寄存器中。EAX 中存儲的值是 1(代表 Linux exit 系統調用),這請求程序退出。EBX 寄存器包含退出碼(在這個示例中是 2),也就是返回給操作系統的一個數字。(可以在命令提示下輸入 echo $?

來檢查這個數字。)

最后討論一下注釋。GAS 支持 C 風格(/* */

)、C++ 風格(//

)和 shell 風格(#

)的注釋。NASM 支持以 “;” 字符開頭的單行注釋。

回頁首

變量和內存訪問

本節首先給出一個示例程序,它尋找三個數字中的最大者。

清單 2. 尋找三個數字中最大者的程序

行號

NASM

GAS

001

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

017

018

019

020

021

022

023

024

025

026

027

028

029

030

031

; Data section begins

section .data

var1 dd 40

var2 dd 20

var3 dd 30

section .text

global _start

_start:

; Move the contents of variables

mov ecx, [var1]

cmp ecx, [var2]

jg check_third_var

mov ecx, [var2]

check_third_var:

cmp ecx, [var3]

jg _exit

mov ecx, [var3]

_exit:

mov eax, 1

mov ebx, ecx

int 80h

// Data section begins

.section .data

var1:

.int 40

var2:

.int 20

var3:

.int 30

.section .text

.globl _start

_start:

# move the contents of variables

movl (var1), %ecx

cmpl (var2), %ecx

jg check_third_var

movl (var2), %ecx

check_third_var:

cmpl (var3), %ecx

jg _exit

movl (var3), %ecx

_exit:

movl $1, %eax

movl %ecx, %ebx

int $0x80

在上面的內存變量聲明中可以看到幾點差異。NASM 分別使用 dd

、dw

和 db

指令聲明 32 位、16 位和 8 位數字,而 GAS 分別使用 .long

、.int

和 .byte

。GAS 還有其他指令,比如 .ascii

、.asciz

和 .string

。在 GAS 中,像聲明其他標簽一樣聲明變量(使用冒號),但是在 NASM 中,只需在內存分配指令(dd

、dw

等等)前面輸入變量名,后面加上變量的值。

清單 2 中的第 18 行演示內存直接尋址模式。NASM 使用方括號間接引用一個內存位置指向的地址值:[var1]

。GAS 使用圓括號間接引用同樣的值:(var1)

。本文后面討論其他尋址模式的使用方法。

回頁首

使用宏

清單 3 演示本節討論的概念;它接受用戶名作為輸入并返回一句問候語。

清單 3. 讀取字符串并向用戶顯示問候語的程序

行號

NASM

GAS

001

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

017

018

019

020

021

022

023

024

025

026

027

028

029

030

031

032

033

034

035

036

037

038

039

040

041

042

043

044

045

046

047

048

049

050

051

052

053

054

055

056

057

058

059

060

061

062

section .data

prompt_str db 'Enter your name: '

; $ is the location counter

STR_SIZE equ $ - prompt_str

greet_str db 'Hello '

GSTR_SIZE equ $ - greet_str

section .bss

; Reserve 32 bytes of memory

buff resb 32

; A macro with two parameters

; Implements the write system call

%macro write 2

mov eax, 4

mov ebx, 1

mov ecx, %1

mov edx, %2

int 80h

%endmacro

; Implements the read system call

%macro read 2

mov eax, 3

mov ebx, 0

mov ecx, %1

mov edx, %2

int 80h

%endmacro

section .text

global _start

_start:

write prompt_str, STR_SIZE

read buff, 32

; Read returns the length in eax

push eax

; Print the hello text

write greet_str, GSTR_SIZE

pop edx

; edx = length returned by read

write buff, edx

_exit:

mov eax, 1

mov ebx, 0

int 80h

.section .data

prompt_str:

.ascii "Enter Your Name: "

pstr_end:

.set STR_SIZE, pstr_end - prompt_str

greet_str:

.ascii "Hello "

gstr_end:

.set GSTR_SIZE, gstr_end - greet_str

.section .bss

// Reserve 32 bytes of memory

.lcomm buff, 32

// A macro with two parameters

// implements the write system call

.macro write str, str_size

movl $4, %eax

movl $1, %ebx

movl \str, %ecx

movl \str_size, %edx

int $0x80

.endm

// Implements the read system call

.macro read buff, buff_size

movl $3, %eax

movl $0, %ebx

movl \buff, %ecx

movl \buff_size, %edx

int $0x80

.endm

.section .text

.globl _start

_start:

write $prompt_str, $STR_SIZE

read $buff, $32

// Read returns the length in eax

pushl %eax

// Print the hello text

write $greet_str, $GSTR_SIZE

popl %edx

// edx = length returned by read

write $buff, %edx

_exit:

movl $1, %eax

movl $0, %ebx

int $0x80

本節要討論宏以及 NASM 和 GAS 對它們的支持。但是,在討論宏之前,先與其他幾個特性做一下比較。

清單 3 演示了未初始化內存的概念,這是用 .bss

部分指令(第 14

行)定義的。BSS 代表 “block storage segment” (原來是以一個符號開頭的塊),BSS

部分中保留的內存在程序啟動時初始化為零。BSS 部分中的對象只有一個名稱和大小,沒有值。與數據部分中不同,BSS

部分中聲明的變量并不實際占用空間。

NASM 使用 resb

、resw

和 resd

關鍵字在 BSS 部分中分配字節、字和雙字空間。GAS 使用 .lcomm

關鍵字分配字節級空間。請注意在這個程序的兩個版本中聲明變量名的方式。在 NASM 中,變量名前面加 resb

(或 resw

或 resd

)關鍵字,后面是要保留的空間量;在 GAS 中,變量名放在 .lcomm

關鍵字的后面,然后是一個逗號和要保留的空間量。

NASM:varname resb size

GAS:.lcomm varname, size

清單 3 還演示了位置計數器的概念(第 6 行)。

NASM 提供特殊的變量($

和 $$

變量)來操作位置計數器。在 GAS 中,無法操作位置計數器,必須使用標簽計算下一個存儲位置(數據、指令等等)。

例如,為了計算一個字符串的長度,在 NASM 中會使用以下指令:

prompt_str db 'Enter your name: '

STR_SIZE equ $ - prompt_str

; $ is the location counter

$

提供位置計數器的當前值,從這個位置計數器中減去標簽的值(所有變量名都是標簽),就會得出標簽的聲明和當前位置之間的字節數。equ

用來將變量 STR_SIZE 的值設置為后面的表達式。GAS 中使用的相似指令如下:

prompt_str:

.ascii "Enter Your Name: "

pstr_end:

.set STR_SIZE, pstr_end - prompt_str

末尾標簽(pstr_end

)給出下一個位置地址,減去啟始標簽地址就得出大小。還要注意,這里使用 .set

將變量 STR_SIZE 的值設置為逗號后面的表達式。也可以使用對應的 .equ

。在 NASM 中,沒有與 GAS 的 set

指令對應的指令。

正如前面提到的,清單 3 使用了宏(第 21 行)。在 NASM 和 GAS

中存在不同的宏技術,包括單行宏和宏重載,但是這里只關注基本類型。宏在匯編程序中的一個常見用途是提高代碼的清晰度。通過創建可重用的宏,可以避免重復

輸入相同的代碼段;這不但可以避免重復,而且可以減少代碼量,從而提高代碼的可讀性。

NASM 使用 %beginmacro

指令聲明宏,用 %endmacro

指令結束聲明。%beginmacro

指令后面是宏的名稱。宏名稱后面是一個數字,這是這個宏需要的宏參數數量。在 NASM 中,宏參數是從 1 開始連續編號的。也就是說,宏的第一個參數是 %1,第二個是 %2,第三個是 %3,以此類推。例如:

%beginmacro macroname 2

mov eax, %1

mov ebx, %2

%endmacro

這創建一個有兩個參數的宏,第一個參數是 %1

,第二個參數是 %2

。因此,對上面的宏的調用如下所示:

macroname 5, 6

還可以創建沒有參數的宏,在這種情況下不指定任何數字。

現在看看 GAS 如何使用宏。GAS 提供 .macro

和 .endm

指令來創建宏。.macro

指令后面跟著宏名稱,后面可以有參數,也可以沒有參數。在 GAS 中,宏參數是按名稱指定的。例如:

.macro macroname arg1, arg2

movl \arg1, %eax

movl \arg2, %ebx

.endm

當在宏中使用宏參數名稱時,在名稱前面加上一個反斜線。如果不這么做,鏈接器會把名稱當作標簽而不是參數,因此會報告錯誤。

函數、外部例程和堆棧

本節的示例程序在一個整數數組上實現選擇排序。

清單 4. 在整數數組上實現選擇排序

行號

NASM

GAS

001

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

017

018

019

020

021

022

023

024

025

026

027

028

029

030

031

032

033

034

035

036

037

038

039

040

041

042

043

044

045

046

047

048

049

050

051

052

053

054

055

056

057

058

059

060

061

062

063

064

065

066

067

068

069

070

071

072

073

074

075

076

077

078

079

080

081

082

083

084

085

086

087

088

089

090

091

092

093

094

095

096

097

098

099

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

section .data

array db

89, 10, 67, 1, 4, 27, 12, 34,

86, 3

ARRAY_SIZE equ $ - array

array_fmt db " %d", 0

usort_str db "unsorted array:", 0

sort_str db "sorted array:", 0

newline db 10, 0

section .text

extern puts

global _start

_start:

push usort_str

call puts

add esp, 4

push ARRAY_SIZE

push array

push array_fmt

call print_array10

add esp, 12

push ARRAY_SIZE

push array

call sort_routine20

; Adjust the stack pointer

add esp, 8

push sort_str

call puts

add esp, 4

push ARRAY_SIZE

push array

push array_fmt

call print_array10

add esp, 12

jmp _exit

extern printf

print_array10:

push ebp

mov ebp, esp

sub esp, 4

mov edx, [ebp + 8]

mov ebx, [ebp + 12]

mov ecx, [ebp + 16]

mov esi, 0

push_loop:

mov [ebp - 4], ecx

mov edx, [ebp + 8]

xor eax, eax

mov al, byte [ebx + esi]

push eax

push edx

call printf

add esp, 8

mov ecx, [ebp - 4]

inc esi

loop push_loop

push newline

call printf

add esp, 4

mov esp, ebp

pop ebp

ret

sort_routine20:

push ebp

mov ebp, esp

; Allocate a word of space in stack

sub esp, 4

; Get the address of the array

mov ebx, [ebp + 8]

; Store array size

mov ecx, [ebp + 12]

dec ecx

; Prepare for outer loop here

xor esi, esi

outer_loop:

; This stores the min index

mov [ebp - 4], esi

mov edi, esi

inc edi

inner_loop:

cmp edi, ARRAY_SIZE

jge swap_vars

xor al, al

mov edx, [ebp - 4]

mov al, byte [ebx + edx]

cmp byte [ebx + edi], al

jge check_next

mov [ebp - 4], edi

check_next:

inc edi

jmp inner_loop

swap_vars:

mov edi, [ebp - 4]

mov dl, byte [ebx + edi]

mov al, byte [ebx + esi]

mov byte [ebx + esi], dl

mov byte [ebx + edi], al

inc esi

loop outer_loop

mov esp, ebp

pop ebp

ret

_exit:

mov eax, 1

mov ebx, 0

int 80h

.section .data

array:

.byte 89, 10, 67, 1, 4, 27, 12,

34, 86, 3

array_end:

.equ ARRAY_SIZE, array_end - array

array_fmt:

.asciz " %d"

usort_str:

.asciz "unsorted array:"

sort_str:

.asciz "sorted array:"

newline:

.asciz "\n"

.section .text

.globl _start

_start:

pushl $usort_str

call puts

addl $4, %esp

pushl $ARRAY_SIZE

pushl $array

pushl $array_fmt

call print_array10

addl $12, %esp

pushl $ARRAY_SIZE

pushl $array

call sort_routine20

# Adjust the stack pointer

addl $8, %esp

pushl $sort_str

call puts

addl $4, %esp

pushl $ARRAY_SIZE

pushl $array

pushl $array_fmt

call print_array10

addl $12, %esp

jmp _exit

print_array10:

pushl %ebp

movl %esp, %ebp

subl $4, %esp

movl 8(%ebp), %edx

movl 12(%ebp), %ebx

movl 16(%ebp), %ecx

movl $0, %esi

push_loop:

movl %ecx, -4(%ebp)

movl 8(%ebp), %edx

xorl %eax, %eax

movb (%ebx, %esi, 1), %al

pushl %eax

pushl %edx

call printf

addl $8, %esp

movl -4(%ebp), %ecx

incl %esi

loop push_loop

pushl $newline

call printf

addl $4, %esp

movl %ebp, %esp

popl %ebp

ret

sort_routine20:

pushl %ebp

movl %esp, %ebp

# Allocate a word of space in stack

subl $4, %esp

# Get the address of the array

movl 8(%ebp), %ebx

# Store array size

movl 12(%ebp), %ecx

decl %ecx

# Prepare for outer loop here

xorl %esi, %esi

outer_loop:

# This stores the min index

movl %esi, -4(%ebp)

movl %esi, %edi

incl %edi

inner_loop:

cmpl $ARRAY_SIZE, %edi

jge swap_vars

xorb %al, %al

movl -4(%ebp), %edx

movb (%ebx, %edx, 1), %al

cmpb %al, (%ebx, %edi, 1)

jge check_next

movl %edi, -4(%ebp)

check_next:

incl %edi

jmp inner_loop

swap_vars:

movl -4(%ebp), %edi

movb (%ebx, %edi, 1), %dl

movb (%ebx, %esi, 1), %al

movb %dl, (%ebx, %esi, 1)

movb %al, (%ebx, %edi, 1)

incl %esi

loop outer_loop

movl %ebp, %esp

popl %ebp

ret

_exit:

movl $1, %eax

movl 0, %ebx

int $0x80

初看起來清單 4 似乎非常復雜,實際上它是非常簡單的。這個清單演示了函數、各種內存尋址方案、堆棧和庫函數的使用方法。這個程序對包含 10 個數字的數組進行排序,并使用外部 C 庫函數 puts

和 printf

輸出未排序數組和已排序數組的完整內容。為了實現模塊化和介紹函數的概念,排序例程本身實現為一個單獨的過程,數組輸出例程也是這樣。我們來逐一分析一下。

在聲明數據之后,這個程序首先執行對 puts

的調用(第 31 行)。puts

函數在控制臺上顯示一個字符串。它惟一的參數是要顯示的字符串的地址,通過將字符串的地址壓入堆棧(第 30 行),將這個參數傳遞給它。

在 NASM 中,任何不屬于我們的程序但是需要在鏈接時解析的標簽都必須預先定義,這就是 extern

關鍵字的作用(第 24 行)。GAS 沒有這樣的要求。在此之后,字符串的地址 usort_str

被壓入堆棧(第 30 行)。在 NASM 中,內存變量(比如 usort_str

)代表內存位置本身,所以 push usort_str

這樣的調用實際上是將地址壓入堆棧的頂部。但是在 GAS 中,變量 usort_str

必須加上前綴 $

,這樣它才會被當作地址。如果不加前綴 $

,那么會將內存變量代表的實際字節壓入堆棧,而不是地址。

因為在堆棧中壓入一個變量會讓堆棧指針移動一個雙字,所以給堆棧指針加 4(雙字的大小)(第 32 行)。

現在將三個參數壓入堆棧,并調用 print_array10

函數(第 37 行)。在 NASM 和 GAS 中聲明函數的方法是相同的。它們僅僅是通過 call

指令調用的標簽。

在調用函數之后,ESP 代表堆棧的頂部。esp + 4

代表返回地址,esp + 8

代表函數的第一個參數。在堆棧指針上加上雙字變量的大小(即 esp + 12

、esp + 16

等等),就可以訪問所有后續參數。

在函數內部,通過將 esp

復制到 ebp

(第 62 行)創建一個局部堆棧框架。和程序中的處理一樣,還可以為局部變量分配空間(第 63 行)。方法是從 esp

中減去所需的字節數。esp – 4

表示為一個局部變量分配 4 字節的空間,只要堆棧中有足夠的空間容納局部變量,就可以繼續分配。

清單 4 演示了基間接尋址模式(第 64 行),也就是首先取得一個基地址,然后在它上面加一個偏移量,從而到達最終的地址。在清單的 NASM 部分中,[ebp + 8]

和 [ebp – 4]

(第 71 行)就是基間接尋址模式的示例。在 GAS 中,尋址方法更簡單一些:4(%ebp)

和 -4(%ebp)

在 print_array10

例程中,在 push_loop

標簽后面可以看到另一種尋址模式(第 74 行)。在 NASM 和 GAS 中的表示方法如下:

NASM:mov al, byte [ebx + esi]

GAS:movb (%ebx, %esi, 1), %al

這種尋址模式稱為基索引尋址模式。這里有三項數據:一個是基地址,第二個是索引寄存器,第三個是乘數。因為不可能決定從一

個內存位置開始訪問的字節數,所以需要用一個方法計算訪問的內存量。NASM 使用字節操作符告訴匯編器要移動一個字節的數據。在 GAS

中,用一個乘數和助記符中的 b

、w

或 l

后綴(例如 movb

)來解決這個問題。初看上去 GAS 的語法似乎有點兒復雜。

GAS 中基索引尋址模式的一般形式如下:

%segment:ADDRESS (, index, multiplier)

%segment:(offset, index, multiplier)

%segment:ADDRESS(base, index, multiplier)

使用這個公式計算最終的地址:

ADDRESS or offset + base + index * multiplier.

因此,要想訪問一個字節,就使用乘數 1;對于字,乘數是 2;對于雙字,乘數是 4。當然,NASM 使用的語法比較簡單。上面的公式在 NASM 中表示為:

Segment:[ADDRESS or offset + index * multiplier]

為了訪問 1、2 或 4 字節的內存,在這個內存地址前面分別加上 byte

、word

或 dword

其他方面

清單 5 讀取命令行參數的列表,將它們存儲在內存中,然后輸出它們。

清單 5. 讀取命令行參數,將它們存儲在內存中,然后輸出它們

行號

NASM

GAS

001

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

017

018

019

020

021

022

023

024

025

026

027

028

029

030

031

032

033

034

035

036

037

038

039

040

041

042

043

044

045

046

047

048

049

050

051

052

053

054

055

056

057

058

059

060

061

section .data

; Command table to store at most

; 10 command line arguments

cmd_tbl:

%rep 10

dd 0

%endrep

section .text

global _start

_start:

; Set up the stack frame

mov ebp, esp

; Top of stack contains the

; number of command line arguments.

; The default value is 1

mov ecx, [ebp]

; Exit if arguments are more than 10

cmp ecx, 10

jg _exit

mov esi, 1

mov edi, 0

; Store the command line arguments

; in the command table

store_loop:

mov eax, [ebp + esi * 4]

mov [cmd_tbl + edi * 4], eax

inc esi

inc edi

loop store_loop

mov ecx, edi

mov esi, 0

extern puts

print_loop:

; Make some local space

sub esp, 4

; puts function corrupts ecx

mov [ebp - 4], ecx

mov eax, [cmd_tbl + esi * 4]

push eax

call puts

add esp, 4

mov ecx, [ebp - 4]

inc esi

loop print_loop

jmp _exit

_exit:

mov eax, 1

mov ebx, 0

int 80h

.section .data

// Command table to store at most

// 10 command line arguments

cmd_tbl:

.rept 10

.long 0

.endr

.section .text

.globl _start

_start:

// Set up the stack frame

movl %esp, %ebp

// Top of stack contains the

// number of command line arguments.

// The default value is 1

movl (%ebp), %ecx

// Exit if arguments are more than 10

cmpl $10, %ecx

jg _exit

movl $1, %esi

movl $0, %edi

// Store the command line arguments

// in the command table

store_loop:

movl (%ebp, %esi, 4), %eax

movl %eax, cmd_tbl( , %edi, 4)

incl %esi

incl %edi

loop store_loop

movl %edi, %ecx

movl $0, %esi

print_loop:

// Make some local space

subl $4, %esp

// puts functions corrupts ecx

movl %ecx, -4(%ebp)

movl cmd_tbl( , %esi, 4), %eax

pushl %eax

call puts

addl $4, %esp

movl -4(%ebp), %ecx

incl %esi

loop print_loop

jmp _exit

_exit:

movl $1, %eax

movl $0, %ebx

int $0x80

清單 5 演示在匯編程序中重復執行指令的方法。很自然,這種結構稱為重復結構。在 GAS 中,重復結構以 .rept

指令開頭(第 6 行)。用一個 .endr

指令結束這個指令(第 8 行)。.rept

后面是一個數字,它指定 .rept/.endr

結構中表達式重復執行的次數。這個結構中的任何指令都相當于編寫這個指令 count

次,每次重復占據單獨的一行。

例如,如果次數是 3:

.rept 3

movl $2, %eax

.endr

就相當于:

movl $2, %eax

movl $2, %eax

movl $2, %eax

在 NASM 中,在預處理器級使用相似的結構。它以 %rep

指令開頭,以 %endrep

結尾。%rep

指令后面是一個表達式(在 GAS 中 .rept

指令后面是一個數字):

%rep

nop

%endrep

在 NASM 中還有另一種結構,times

指令。與 %rep

相似,它也在匯編級起作用,后面也是一個表達式。例如,上面的 %rep

結構相當于:

times nop

以下代碼:

%rep 3

mov eax, 2

%endrep

相當于:

times 3 mov eax, 2

它們都相當于:

mov eax, 2

mov eax, 2

mov eax, 2

在清單 5 中,使用 .rept

(或 %rep

)指令為 10 個雙字創建內存數據區。然后,從堆棧一個個地訪問命令行參數,并將它們存儲在內存區中,直到命令表填滿。

在這兩種匯編器中,訪問命令行參數的方法是相似的。ESP(堆棧頂部)存儲傳遞給程序的命令行參數數量,默認值是 1(表示沒有命令行參數)。esp + 4

存儲第一個命令行參數,這總是從命令行調用的程序的名稱。esp + 8

、esp + 12

等存儲后續命令行參數。

還要注意清單 5 中從兩邊訪問內存命令表的方法。這里使用內存間接尋址模式(第 31 行)訪問命令表,還使用了 ESI(和 EDI)中的偏移量和一個乘數。因此,NASM 中的 [cmd_tbl + esi * 4]

相當于 GAS 中的 cmd_tbl(, %esi, 4)

結束語

盡管在這兩種匯編器之間存在實質性的差異,但是在這兩種形式之間進行轉換并不困難。您最初可能覺得 AT&T 語法難以理解,但是掌握了它之后,它其實和 Intel 語法同樣簡單。

總結

以上是生活随笔為你收集整理的linux汇编中的注释,Linux 汇编器:对照 GAS 和 NASM的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产午夜三级一区二区三桃花影视 | 日韩av手机在线观看 | 欧美激情奇米色 | 国产精品91一区 | 又黄又爽又刺激的视频 | 日韩欧美aaa | 中文字幕乱码日本亚洲一区二区 | 欧美日韩1区 | 久久爱影视i | 成年人在线观看视频免费 | 亚洲黄色片一级 | 欧美日韩国产高清视频 | 国产在线免费av | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 五月花丁香婷婷 | av成人在线看 | 精品久久久久久久久久久久久久久久久久 | 六月天综合网 | 黄色精品久久 | 亚洲精品ww | 亚洲国产福利视频 | 在线 高清 中文字幕 | 日日夜色 | 91免费高清在线观看 | 久产久精国产品 | 黄色毛片在线看 | 色吊丝在线永久观看最新版本 | 国产97av | 永久黄网站色视频免费观看w | 狠狠干夜夜 | 五月婷婷六月丁香 | 欧美日韩国产精品一区二区三区 | 日韩国产精品毛片 | 色欧美日韩 | 免费男女羞羞的视频网站中文字幕 | 国产精品剧情在线亚洲 | 国产一级黄色片免费看 | 91久久黄色 | 国产剧情一区在线 | 久草在线视频中文 | 国产中文字幕91 | 亚洲精品视频在线看 | 国产一区精品在线观看 | 三级av片 | 国产福利精品一区二区 | 免费在线一区二区 | 中文字幕中文字幕在线一区 | 国产精品免费在线播放 | 亚洲草视频 | 麻豆视频在线观看免费 | 亚洲91av| 欧美一级性生活 | 波多野结衣在线播放一区 | 色婷婷av一区 | 亚洲高清在线视频 | 手机看片久久 | 亚洲欧美在线综合 | www.国产毛片| 开心综合网 | 免费看色网站 | 国产视频一区二区在线播放 | 欧美精品国产精品 | 日韩精品国产一区 | 免费看久久 | 久久a视频| 欧美一级视频一区 | 色99网| 欧美日韩精品影院 | 91在线资源 | 国产亚洲精品久久久久久无几年桃 | 午夜视频在线瓜伦 | 超碰97公开 | 国产精品视频在线观看 | 国产精品无 | 久久不射电影网 | 最新久久久 | 久久国产热视频 | 黄色免费网站大全 | 18性欧美xxxⅹ性满足 | 日韩欧美一区二区三区视频 | 中文字幕高清有码 | 久久深爱网| 日韩欧美有码在线 | 天天综合网入口 | 一区二区三区手机在线观看 | 国产在线va | 亚洲 精品在线视频 | 99精品福利 | 午夜视频在线观看一区二区三区 | av大全在线播放 | 国内久久精品视频 | 免费中午字幕无吗 | 亚洲精品高清在线 | 亚洲精品乱码久久久久久蜜桃不爽 | 一区二区精品视频 | 欧美精品乱码99久久影院 | 亚洲成av人片在线观看香蕉 | 夜色成人网 | 亚洲码国产日韩欧美高潮在线播放 | 五月天色丁香 | 一级黄色片在线 | 久久久久久久久黄色 | 久久精品毛片基地 | 亚洲天堂网视频 | 99久久精品一区二区成人 | 99r国产精品 | 在线观看网站av | av在线之家电影网站 | 国产午夜精品免费一区二区三区视频 | 国产精品免费观看网站 | 99在线视频精品 | 在线看成人av | 成人在线视频免费看 | 欧美日韩中文字幕综合视频 | 黄色大全免费观看 | 欧美成人亚洲 | 欧美日韩精品在线播放 | 伊人超碰在线 | 精品国产一区二区三区在线 | 探花视频在线观看免费版 | 亚洲精品男人天堂 | 国产精品嫩草影院9 | 成人四虎影院 | 视频一区二区免费 | 日韩av男人的天堂 | 在线观看蜜桃视频 | 四虎国产精品免费 | 国产aa免费视频 | 久久噜噜少妇网站 | 日韩欧美精品一区 | 亚洲国产精品电影 | 亚洲精品黄网站 | 亚洲综合爱 | 日韩和的一区二在线 | 久久久精品在线观看 | 丁香六月久久综合狠狠色 | 日本一区二区免费在线观看 | 久久这里只有精品久久 | 五月婷在线播放 | 黄色网在线播放 | 中文字幕在线一二 | 国产高清视频在线 | 天天色天天操综合 | 日本久久久久久久久久久 | 日韩精品中文字幕av | 国内久久 | 丁香一区二区 | 国产精品高潮久久av | 日本在线视频一区二区三区 | 国产福利在线免费 | 999视频在线播放 | 亚洲午夜精品久久久 | 欧美日韩午夜 | 狠狠狠色丁香婷婷综合久久五月 | 蜜桃视频日本 | 99久热在线精品视频 | 亚洲一区视频免费观看 | a色网站| 国产四虎在线 | 毛片99| 蜜桃视频在线视频 | 亚洲国产中文字幕 | 成人理论电影 | 91麻豆精品91久久久久同性 | 久久久久久久久久伊人 | 91免费版在线观看 | 国产一级a毛片视频爆浆 | 成人高清在线观看 | 在线观看自拍 | 婷婷中文字幕在线观看 | 99精品视频在线观看播放 | 日韩高清在线看 | 久久久福利视频 | 久久在线播放 | 日本aaa在线观看 | 探花视频免费观看高清视频 | 天天操天天射天天爱 | 国产69精品久久久久99尤 | 欧美一级日韩三级 | 一区二区精品久久 | 国产精品一区专区欧美日韩 | 国产精品专区h在线观看 | 丰满少妇在线观看 | 成人免费大片黄在线播放 | 国内精品久久久久久久久久 | 99久久国产免费,99久久国产免费大片 | 日本中文字幕在线看 | 美女av免费 | 精品影院一区二区久久久 | 亚洲精品成人 | 欧美精品久久久久久久久老牛影院 | 国产黄色免费在线观看 | 在线观看中文字幕dvd播放 | 久久久久久影视 | 欧美日韩一区二区在线观看 | 婷婷精品国产欧美精品亚洲人人爽 | 国产日韩欧美在线观看视频 | 国产精品女同一区二区三区久久夜 | 永久精品视频 | 亚洲成aⅴ人片久久青草影院 | 日本91在线 | 中文亚洲欧美日韩 | 又黄又色又爽 | 欧美一级乱黄 | 亚洲午夜小视频 | 探花国产在线 | 激情综合色图 | 最新av在线免费观看 | 免费日韩 精品中文字幕视频在线 | 精品国产欧美一区二区三区不卡 | 国产一级久久久 | 久久精品毛片基地 | 91在线视频免费91 | 成人在线视频免费看 | 天天干天天搞天天射 | 天天曰天天曰 | 中文字幕二区在线观看 | 久久久免费观看视频 | 91九色成人蝌蚪首页 | 91精品国产自产在线观看 | 国产黄色片免费 | 亚洲日韩精品欧美一区二区 | 麻豆视频免费在线播放 | 久久综合成人网 | 天天色天天色天天色 | 日韩免费电影一区二区三区 | 日本福利视频在线 | 天天夜操 | 国产在线播放一区二区 | 久精品视频在线 | 一区二区三区在线视频111 | 欧美一级特黄aaaaaa大片在线观看 | 免费日韩 精品中文字幕视频在线 | 麻豆精品在线 | 国产一区福利在线 | 日韩欧美国产精品 | 国产在线播放观看 | 精品国产一区二区三区不卡 | 亚洲国产小视频在线观看 | 久久精品国产99国产 | 精品中文字幕视频 | 欧美一级大片在线观看 | 狠狠五月天 | 国产成人久久精品77777综合 | 中文欧美字幕免费 | 国产精品久久久毛片 | 国产精品一级在线 | 亚洲欧洲av在线 | 欧美视频网址 | 99精品热 | 中文字幕一区二区三区四区 | 99免费观看视频 | 久久亚洲成人网 | 日韩在线在线 | 97超碰资源网 | 综合影视| 狠狠干夜夜操 | av电影免费在线播放 | 久久免费资源 | 国产中年夫妇高潮精品视频 | www夜夜| 美女久久久久久久久久久 | 九九免费在线观看 | 色夜影院| 激情综合网五月激情 | 偷拍视频一区 | 手机av永久免费 | 国产精品成人久久 | 中文字幕av在线免费 | 国产玖玖精品视频 | 久久成人精品电影 | 亚洲午夜精品福利 | 91精彩视频 | 国产免费成人 | 免费在线观看不卡av | 麻花豆传媒mv在线观看网站 | 欧美性生活久久 | 2022中文字幕在线观看 | 婷婷色伊人| 欧美一区二区日韩一区二区 | 美女网站色免费 | 亚洲少妇久久 | 黄色软件视频网站 | 黄色成人毛片 | 五月激情站 | 麻豆视频免费入口 | 三级黄色理论片 | 伊人五月天婷婷 | 久草新在线 | 亚洲国产精彩中文乱码av | 日本中文字幕在线播放 | 日韩在线视频在线观看 | 免费在线观看日韩 | adc在线观看 | 亚洲国产精品成人精品 | 日韩视频中文 | 欧美巨大 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 久草视频2 | 久久成人综合视频 | 五月婷久 | 国内成人精品视频 | 激情导航| 久草免费在线视频 | 国产视频精品视频 | 视频成人免费 | 久久好看免费视频 | 亚洲日韩中文字幕 | 亚州日韩中文字幕 | 久久免费视频在线观看30 | 国产99一区二区 | 人人干人人搞 | 中文字幕在线观看资源 | 91精品久久久久久久99蜜桃 | 91超碰免费在线 | 国产精品久久一 | 人人干在线 | 我要色综合天天 | 成人免费共享视频 | 国产91丝袜在线播放动漫 | 91九色porny蝌蚪主页 | 亚洲伦理中文字幕 | 91麻豆精品国产91久久久久久 | 欧美日韩免费观看一区=区三区 | 日日干天夜夜 | 一区二区三区中文字幕在线观看 | 日韩精品免费一区二区在线观看 | 九月婷婷人人澡人人添人人爽 | 成年人免费在线观看网站 | 香蕉视频免费看 | 国产精品岛国久久久久久久久红粉 | 亚洲国产美女精品久久久久∴ | 在线国产一区 | 最近高清中文字幕在线国语5 | 天天视频亚洲 | 91在线免费观看国产 | 视频一区二区三区视频 | 国产一级大片在线观看 | 久久精品一 | 色视频在线 | 亚洲一区视频免费观看 | 狠狠黄| 伊人狠狠干 | 亚洲精品乱码久久久久久久久久 | 伊人永久| 亚洲综合欧美激情 | 日韩欧美精品一区二区 | 蜜臀av夜夜澡人人爽人人桃色 | 天天干天天搞天天射 | 亚洲成人黄色在线 | 国产精品丝袜久久久久久久不卡 | 一区二区精品在线观看 | 精品国产亚洲一区二区麻豆 | 亚洲男男gaygay无套同网址 | 国产99久久久国产精品免费看 | 国产婷婷色 | 懂色av一区二区三区蜜臀 | 一区二区三区在线免费观看 | 视频在线播放国产 | 91网免费观看 | 国产剧情久久 | 国产区高清在线 | 亚洲精品美女久久久 | 久久久影视 | 国产精品美女久久久久久网站 | 91麻豆精品国产91久久久久久久久 | 激情五月激情综合网 | 天天摸天天舔 | 久久久国产网站 | 久久综合五月天婷婷伊人 | 亚洲 欧美日韩 国产 中文 | 五月天激情视频 | 中文字幕在线观看的网站 | 日韩欧美精品一区二区 | a视频在线播放 | 亚洲 中文字幕av | 97av超碰| 国产精品久久久久久久久久免费 | 国产精品午夜久久 | av3级在线 | 99精品在线视频播放 | 久久伦理 | 中文字幕免费高清av | 久久九九九九 | 人人爱人人爽 | av东方在线 | 国产精品国内免费一区二区三区 | 久草在线资源视频 | 日本爱爱片 | 中文字幕精品久久 | 国产一级二级视频 | 91精品国自产在线观看欧美 | 欧美一级片播放 | 中文字幕在线看视频 | 日韩美女黄色片 | 精品成人a区在线观看 | 国产精品女 | 精品久久久久久久 | 可以免费观看的av片 | 日日干日日 | 97视频免费看 | 精品国产一二三四区 | 日韩免费三区 | 日韩区欠美精品av视频 | 在线成人性视频 | 中文有码在线视频 | 国产精品毛片久久久 | 成人三级网站在线观看 | 99免费在线视频观看 | 五月天激情婷婷 | 国产精品麻豆99久久久久久 | 久久高清 | 国产伦精品一区二区三区免费 | 西西444www大胆高清图片 | 国产精品亚洲精品 | 久久国产精品99久久久久久老狼 | 欧美日韩精品在线观看视频 | 欧美精品一级视频 | 日韩视频免费看 | 二区三区在线 | 麻豆首页| 日韩在线第一 | 伊人影院在线观看 | 国产五月 | 久久中文字幕在线视频 | 五月婷婷一区 | 91看片在线观看 | 伊人久久国产 | 91av精品 | 欧美一区二区三区激情视频 | 成年人黄色免费网站 | 天天射天天干天天操 | 亚洲成人免费在线观看 | 三级性生活视频 | 六月色丁香 | 国产亚洲aⅴaaaaaa毛片 | 丁香花中文在线免费观看 | 狠狠的操你 | 久久久18 | 欧美精品中文 | 天天弄天天干 | 欧美在线99 | 精品一区二区电影 | 国产在线毛片 | 亚洲欧美国产视频 | 欧美91成人网 | 一区二区观看 | 日黄网站 | 久久亚洲福利 | 国产精品三级视频 | 成人免费视频观看 | 碰超人人 | 密桃av在线 | 国产成人精品一区二区三区网站观看 | 国产午夜精品免费一区二区三区视频 | 在线看片91| 日韩免费三区 | 日韩av片免费在线观看 | 成人在线免费观看网站 | www.国产高清 | 国产成a人亚洲精v品在线观看 | 高清有码中文字幕 | 亚洲粉嫩av | 日韩精品一区二区三区第95 | 黄色aa久久 | 91成人黄色 | 国产性天天综合网 | 国产亚洲一区二区在线观看 | 六月丁香婷婷久久 | 中文字幕999| 成人a级大片 | 91最新在线观看 | 日操操| 超碰av在线播放 | 最近中文字幕高清字幕在线视频 | 91在线免费视频 | 成年人免费看av | 中文字幕在线观看第一区 | 国产最新网站 | 欧美少妇影院 | 国产在线观看地址 | 狂野欧美激情性xxxx | 久久国产精品影片 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 在线观看日本高清mv视频 | 亚洲动漫在线观看 | 中文在线亚洲 | 最新av电影网址 | 国产精品九九热 | 久久综合天天 | 久久久久久99精品 | 免费高清男女打扑克视频 | 99热在线免费观看 | 中文字幕在线成人 | 天天曰天天曰 | 视频 天天草 | 久久精精品视频 | 国产精品一码二码三码在线 | 超碰97中文 | 亚洲国产精品久久久 | 超碰在线观看av | 日本三级在线观看中文字 | 91网站在线视频 | 好看的国产精品视频 | 美女视频黄免费 | 日韩高清成人在线 | 精品资源在线 | 在线观看va| 日本xxxx.com| 久久久久女人精品毛片 | 久久视频这里有精品 | 91视频 - v11av | 国产九九在线 | 久久er99热精品一区二区 | 日韩网站在线播放 | 99riav1国产精品视频 | 一区二区欧美日韩 | 国产在线播放观看 | 日韩乱色精品一区二区 | 婷婷五月色综合 | 久久艹欧美 | 免费在线观看视频一区 | 夜夜躁狠狠躁日日躁 | 麻花天美星空视频 | 手机av观看| 久久国产精品一区二区 | 国产亚洲精品美女久久 | 欧美少妇xxxxxx | 久久高清国产视频 | 亚州av网站大全 | 国产97视频在线 | 六月丁香久久 | av在线等 | 人人干网 | 91在线国内视频 | 日韩在线视频网站 | 欧美一区二区日韩一区二区 | 国产美女主播精品一区二区三区 | 国产精品婷婷 | 丝袜一区在线 | 91观看视频 | 色综合天天爱 | 久久精品一二三 | 91精品婷婷国产综合久久蝌蚪 | 狠狠操导航| 91麻豆高清视频 | 色在线中文字幕 | 久久中文欧美 | 精品一区二区综合 | av电影免费观看 | 六月激情丁香 | 成年人免费观看国产 | 亚洲在线视频播放 | 美女久久久久久久久久久 | 天天色天天操综合 | 日韩欧美一区二区三区在线 | 日韩免费在线视频 | 亚洲精品视频在线观看免费视频 | 99免费国产 | 97免费视频在线 | 久草香蕉在线视频 | 亚洲天天摸日日摸天天欢 | 日韩中文字幕视频在线观看 | 久久永久免费 | 亚洲欧洲日韩在线观看 | 久草免费色站 | 日本狠狠色 | 日韩视频免费观看高清 | 韩国精品在线 | 国产精品成人一区二区三区吃奶 | 免费视频成人 | 99久热精品 | 亚洲国产成人高清精品 | 日韩综合精品 | 国产精品综合在线观看 | 久久久免费看视频 | 久久精品视频中文字幕 | 欧美成人亚洲 | 亚洲综合视频在线观看 | 香蕉国产91 | 婷婷激情影院 | 91毛片在线 | 日韩精品免费专区 | 亚洲经典视频在线观看 | av看片在线观看 | 天天弄天天干 | 日韩精品 在线视频 | 天天色天天上天天操 | 国产小视频在线观看免费 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 六月天综合网 | 国产成人91 | 在线观看一级片 | 日日爽天天操 | 日日夜夜天天人人 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 在线免费观看一区二区三区 | 国产福利免费在线观看 | 欧美日比视频 | 欧美国产精品久久久久久免费 | 婷婷国产在线观看 | www婷婷 | 少妇高潮流白浆在线观看 | 国产精品久久久久久久av电影 | 三级av网站| 国产69精品久久久久99 | 99色在线观看视频 | 九九视频网 | 国产九九九精品视频 | 国产一区在线播放 | 亚洲资源在线 | 久久涩涩网站 | 久久激情视频 久久 | 国产高清免费观看 | 国产精品video爽爽爽爽 | 久久激五月天综合精品 | 激情综合五月天 | 亚洲精品视频在线看 | 麻豆高清免费国产一区 | 久久首页 | 五月婷婷,六月丁香 | av无限看 | 亚洲理论在线观看 | 久久国产精品精品国产色婷婷 | www.日韩免费 | 日韩黄色免费电影 | 开心色婷婷 | 欧美污污网站 | 综合色久| 国产视频九色蝌蚪 | 日韩欧美一区二区三区在线观看 | 免费看毛片网站 | 最新中文字幕在线播放 | 精品久久久免费视频 | 成人av观看 | 91丨九色丨国产在线观看 | 九九九九九九精品任你躁 | 天天爱天天射天天干天天 | 97色在线观看 | 国产成人精品一区二 | 狠狠狠色丁香婷婷综合久久五月 | 国产特级毛片aaaaaa毛片 | 亚洲美女在线国产 | 四虎成人精品永久免费av | 日韩理论片中文字幕 | 亚洲国产精品500在线观看 | 四虎8848免费高清在线观看 | 黄色网免费| www在线观看国产 | 激情久久一区二区三区 | 色综合久久久久综合体桃花网 | 超碰人人干人人 | 天天爱天天操天天射 | 国产在线一区二区 | 在线国产一区二区三区 | 丁香av | 狠狠干天天射 | 99久久99| 久久99国产综合精品 | avwww在线| 岛国一区在线 | 免费在线观看日韩欧美 | 最新av电影网址 | 成人黄色大片在线观看 | 中文字幕在线影视资源 | 就要色综合 | 亚洲最大的av网站 | 91最新视频在线观看 | 天天色官网 | 一本色道久久综合亚洲二区三区 | 日日干综合 | 丁香婷婷激情国产高清秒播 | 日本三级吹潮在线 | 精品国产一区二区三区四区vr | 一级黄色片在线 | 国产黄色成人 | 欧美特一级| 玖玖精品在线 | 又黄又爽又刺激视频 | 成人av网页| 日本久久久精品视频 | 精品自拍av | 日韩免费一二三区 | 亚洲小视频在线观看 | 中文字幕 欧美性 | 麻豆av一区二区三区在线观看 | 国产资源 | 菠萝菠萝在线精品视频 | 夜夜躁日日躁狠狠久久88av | 最近最新中文字幕 | 亚洲精品在线视频网站 | 91中文字幕在线 | 99精品一区二区三区 | 在线观看一区 | 在线看污网站 | 97视频免费播放 | 狠狠色综合网站久久久久久久 | 天天插日日射 | wwwwwww色 | 国产字幕在线播放 | 日韩a级免费视频 | 国产香蕉97碰碰久久人人 | 欧美亚洲国产日韩 | 91成人精品视频 | 亚洲精品 在线视频 | 69久久夜色精品国产69 | 中文字幕色综合网 | 免费看片成人 | 久久99精品国产99久久 | 久久韩国免费视频 | 亚洲在线视频网站 | 色网站在线看 | 国产色在线视频 | 成人免费看片网址 | av综合网址 | 久久久久亚洲精品国产 | 免费在线国产黄色 | 干 操 插| 久久最新网址 | 成人一区电影 | 午夜久久久影院 | 亚洲精品五月天 | 操操操com | 国产99久久精品一区二区300 | 亚洲视频在线免费看 | 91九色丨porny丨丰满6 | 最近中文字幕mv | 51久久夜色精品国产麻豆 | 国产精品露脸在线 | 丁香花中文在线免费观看 | 亚洲永久精品在线观看 | 国产精品18久久久久久久久 | 五月婷婷激情网 | 99久热在线精品视频观看 | 日韩精品一区二区三区第95 | 粉嫩一二三区 | 在线精品视频免费播放 | 一区二区不卡高清 | 91麻豆精品国产91 | 免费三级大片 | 91精品专区| 久久热亚洲 | 成人精品视频久久久久 | 免费久久网 | a级免费观看 | 国产成人久久77777精品 | 欧美久久久久久久久久久久 | 久草在线播放视频 | 精油按摩av | 91精品久久久久久综合乱菊 | 亚洲久久视频 | 又黄又爽的视频在线观看网站 | 国产精品久久久久久一区二区三区 | 射射射av | 欧美成人播放 | 亚洲成人麻豆 | 中文字幕国产一区 | 国产中年夫妇高潮精品视频 | 色综合久| 欧美一区二区在线刺激视频 | 久久久激情视频 | 欧美乱淫视频 | 国产一二区免费视频 | av资源中文字幕 | 精品99免费视频 | 欧美成人精品在线 | 在线激情影院一区 | 四虎在线观看 | 成人影音av | 国产视频中文字幕在线观看 | 日韩av电影一区 | 一区二区三区在线免费观看 | 国产精品成人一区二区 | 在线观看日本韩国电影 | 狠狠色狠狠色合久久伊人 | 久久精品国产亚洲a | www.久久99| 日韩精品免费一区二区在线观看 | 色网影音先锋 | 99精品在线免费 | 最新日韩视频在线观看 | 免费国产在线观看 | 欧洲视频一区 | 国产明星视频三级a三级点| 美女精品国产 | 毛片随便看 | 国产精品久久久久高潮 | 亚洲麻豆精品 | 国产精品9999久久久久仙踪林 | 国产在线专区 | 91精品国产九九九久久久亚洲 | 午夜在线观看影院 | 国色天香第二季 | 日韩高清一二三区 | 日韩精品极品视频 | 狠狠色狠狠色终合网 | 91麻豆精品 | 91欧美在线 | 特级黄色视频毛片 | 国产精品久久久久久久久免费 | 啪啪小视频网站 | 天天夜夜操 | 18做爰免费视频网站 | 狠狠色丁香婷婷综合基地 | 日日夜夜国产 | 久久精品一级片 | 中文字幕中文字幕在线中文字幕三区 | 久草精品资源 | 成人久久视频 | 97福利在线 | 色香com.| 色九九影院 | 久久免费视频播放 | 亚洲国产视频网站 | 国产 字幕 制服 中文 在线 | 久久久99国产精品免费 | 精品一区二区综合 | 五月婷婷电影网 | 韩国一区二区三区在线观看 | 久久综合在线 | 国产精品美女网站 | 天天色天天射天天综合网 | 成人免费大片黄在线播放 | 国产亚洲在线 | 久久久精品网 | 国产在线a| 人人澡超碰碰 | 久久国产精品一区二区三区四区 | 日韩欧美69| 国产原创在线观看 | 国产69精品久久久久久久久久 | 国产电影一区二区三区四区 | 91成年人视频 | 亚洲视频1| 成人av片免费观看app下载 | 久久av在线 | 色视频在线免费 | 久久久久国产成人精品亚洲午夜 | 午夜影院一级片 | 国产午夜精品视频 | 亚洲午夜精品久久久久久久久 | 美国av片在线观看 | 97视频精品| 久久久国产99久久国产一 | 日韩欧美区 | 亚洲第二色 | 久草电影网 | 日韩欧美一区二区三区免费观看 | 国产在线视频资源 | 丰满少妇一级片 | 成年人黄色免费网站 | 久久精品国产一区二区 | 91精品一区国产高清在线gif | 久久久国产精品亚洲一区 | 天天干天天做天天操 | 亚洲精品一区二区网址 | 成人国产精品久久久久久亚洲 | 国产成人精品一区二区三区在线 | 日韩精品视频免费专区在线播放 | 狠狠网亚洲精品 | 中文字幕在线观看一区二区 | 国产丝袜一区二区三区 | 天天色天天射天天干 | 亚洲一区二区精品 | 亚洲狠狠干 | 99久久久| 伊人天堂网 | 国产精品精 | 久9在线| 成人久久久精品国产乱码一区二区 | 久久99精品久久只有精品 | 久久久久久久久久久久久国产精品 | 亚州av网站大全 | 国产成人三级一区二区在线观看一 | 91精品国自产拍天天拍 | 国产资源在线观看 | 国产一区二区精品91 | 91看片看淫黄大片 | 欧美日韩99| 国产丝袜美腿在线 | 99精品在线直播 | 久久激情五月婷婷 | 久久婷婷网 | 成人影音av | 天天操天天爽天天干 | 亚洲免费av片 | 色综合久久天天 | 蜜桃视频在线视频 | 免费高清影视 | 精品九九久久 | 午夜国产一区二区三区四区 | 樱空桃av| 成年人在线观看视频免费 | 精品专区一区二区 | 九九热精品视频在线观看 | 亚洲婷久久 | 97免费视频在线 | 欧洲精品视频一区 | 久福利 | 国产免费视频一区二区裸体 | 色a综合 | 婷婷在线色 | 精品久久久久国产 | 91在线porny国产在线看 | 国产日韩精品一区二区在线观看播放 | 精品国产一区二区三区四区在线观看 | 国产69熟 | 色婷婷综合久久久久 | 天天干天天拍天天操天天拍 | 国产精品18久久久久久久 | 在线视频1卡二卡三卡 | 2019天天干天天色 | www.久久久久 | a在线观看视频 | 午夜999 | 99综合久久| www.久久久.com| 国产精品video爽爽爽爽 | 黄色的视频网站 | 日韩动漫免费观看高清完整版在线观看 | 四虎影视精品永久在线观看 | 精品久久久一区二区 | 国产成人在线观看 | 在线观看国产区 | 91亚洲国产成人 | 欧美激情视频在线免费观看 | 色综合天天在线 | 日韩电影在线一区 | 中文字幕在线观看的网站 | 国产精品情侣视频 | 热久久最新地址 | 久草在线免费电影 | 久草在线最新免费 | 日韩亚洲国产中文字幕 | 久久刺激视频 | 成人h在线| 精品国产精品久久一区免费式 | 日韩av二区 | 超级av在线 | 国产精品欧美一区二区三区不卡 | 亚洲午夜在线视频 | 色婷婷免费视频 | 国产高清视频在线免费观看 | 免费a v在线| japanesexxxhd奶水| 精品毛片在线 | 狠狠狠色丁香婷婷综合激情 | 国产伦精品一区二区三区… | 久久这里有精品 | 国产精品久久久久影院日本 | 成人a在线观看高清电影 | 天天综合亚洲 | 日本黄色黄网站 | 欧美了一区在线观看 | 白丝av免费观看 | 91 在线视频播放 | 久久久久成人精品 | 天天操天天摸天天爽 | 国产人成精品一区二区三 | 国产在线观看你懂的 | 中文字幕乱码视频 | 少妇bbr搡bbb搡bbb | 久久大片 | 亚洲aⅴ久久精品 | 日日综合网 | 国产精品美女视频 | 国产日韩av在线 | 黄色精品免费 | 久久精品免费电影 | 久久99国产精品久久99 | www天天干com| 激情五月婷婷激情 | 99精品视频在线播放免费 | 97**国产露脸精品国产 | 亚洲黄色免费网站 | 日韩精品一区二区三区电影 | 久艹在线播放 | 日韩性片 | 一区二区三区在线播放 | 精品天堂av | 婷婷精品国产欧美精品亚洲人人爽 | 日韩视频一区二区三区在线播放免费观看 | 国内精品久久久精品电影院 | 欧美在线观看禁18 | 午夜精品一区二区三区免费视频 | 国产午夜精品在线 | 国产日韩亚洲 | 国产成人亚洲在线电影 | 97精品国产97久久久久久粉红 | 日日摸日日 | 欧美日韩在线观看一区 | 亚洲人成精品久久久久 | 四虎在线视频免费观看 | 国产黄色免费观看 | 久保带人 | 亚洲欧美成人综合 | 91精品国产欧美一区二区 | 国产日韩欧美在线观看 |