亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chapter 12 assembly language programming -- valvano.htm

?? Developing Embedded Software in C
?? HTM
?? 第 1 頁 / 共 2 頁
字號:
face="Times New Roman,Times">8-bit parameters are promoted to 16 
bits.</FONT></P></DIR>
<P>&nbsp;</P>
<P><FONT face="Times New Roman,Times">Chapter 10 presented </FONT><A 
href="http://www.ece.utexas.edu/~valvano/embed/chap10/chap10.htm#STACK">some 
examples</A><FONT face="Times New Roman,Times"> of the assembly code generated 
by the compiler when calling a function with parameters. If you are writing an 
assembly language function that is to be called from C, one method to get the 
parameter passing correct is to write a simple C function that simply passes the 
parameters. Compile this simple C function with your other C code, and observe 
the assembly language created by the compiler for the simple C function. Next 
draw a stack picture that exists at the start of the function. The C compiler 
will do some weird things within the function (like pushing register D on the 
stack, and shifting some 8 bit parameters around), which you do not have to 
duplicate. One difficulty with mixing the assembly with C is that when the 
compiler is upgraded, this compatibility matching must be redone.</FONT></P>
<P><B><I><FONT face=Helvetica,Arial><A name=DIRECTIVES></A>Assembler 
Directives</FONT></I></B></P>
<P><FONT face="Times New Roman,Times">An assembler directive (or pseudo-op) is 
not executed by the 6811/6812, but rather affect the assembler in certain ways. 
The assembly pseudo-ops supported by the ICC11 and ICC12 assembler are described 
in this section.</FONT></P>
<P><FONT face="Times New Roman,Times">The first set of directives affect where 
in memory the subsequent assembly lines will be stored. The <B>.org</B> 
pseudo-op takes an expression, and changes the memory storage location to the 
value of the expression. This directive can only be used within an absolute 
area. Example</FONT></P>
<P><FONT face="Times New Roman,Times">.org 0xF000 ; put subsequent object code 
at $F000</FONT></P>
<P><FONT face="Times New Roman,Times">The <B>.area</B> pseudo-op specifies into 
which segment the subsequent code will be loaded. </FONT></P>
<DIR>
<P><CODE>&nbsp;&nbsp;.area text&nbsp;&nbsp;&nbsp;; code in the ROM 
segment<BR>&nbsp;&nbsp;.area data&nbsp;&nbsp;&nbsp;; code in the initialized RAM 
segment<BR>&nbsp;&nbsp;.area idata&nbsp;&nbsp;; code in ROM used to initialize 
the data segment<BR>&nbsp;&nbsp;.area bss &nbsp;&nbsp; ; code in the 
uninitialized RAM 
segment<BR>&nbsp;&nbsp;.text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 
same as .area 
text<BR>&nbsp;&nbsp;.data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; same 
as .area data</CODE></P></DIR>
<P><FONT face="Times New Roman,Times">When writing assembly language programs, I 
suggest allocating variables in the <B>.area bss</B> segment and fixed 
constants/programs in the <B>.area text</B>. In other words, I suggest that you 
not use <B>.area data</B> and <B>.area idata</B> in your assembly programs. 
Other names can be used for segments. If the <B>(abs)</B> follows the name, the 
segment is considered absolute and can contain <B>.org</B> pseudo-ops. For 
example to set the reset vector in an assembly file, you could write</FONT></P>
<DIR>
<P><CODE>&nbsp;&nbsp;.area 
VectorSegment(abs)&nbsp;&nbsp;<BR>&nbsp;&nbsp;.org&nbsp;&nbsp;0xFFFE ; reset 
vector address<BR>&nbsp;&nbsp;.word&nbsp;Start&nbsp;&nbsp;; place to 
begin</CODE></P></DIR>
<P><FONT face="Times New Roman,Times">The next set of directives allocate space 
in memory. The <B>.blkb</B> pseudo-op will set aside a fixed number of 8-bit 
bytes without initialization. Similarly, the <B>.blkw</B> pseudo-op will set 
aside a fixed number of 16-bit words without initialization.</FONT></P>
<DIR>
<P><CODE>&nbsp;&nbsp;.blkb 10&nbsp;; reserve 10 bytes<BR>&nbsp;&nbsp;.blkw 
20&nbsp;; reserve 20 words</CODE></P></DIR>
<P><FONT face="Times New Roman,Times">The next three directives load specific 
data into memory. The <B>.byte</B> pseudo-op will set aside a fixed number of 
8-bit bytes and initialize the memory with the list of 8-bit bytes. The size of 
the allocated storage is determined by the number of data values in the list. 
The <B>.word</B> and <B>.ascii</B> pseudo-ops work in a similar way for 16-bit 
words and ASCII strings. The .asciz pseudo-op is similar to .ascii except that 
an extra byte is allocated and set to null (0). Examples include:</FONT></P>
<DIR>
<P><CODE>&nbsp;&nbsp;.byte 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; reserve 1 
byte initialized to 10<BR>&nbsp;&nbsp;.byte 1,2,3&nbsp;&nbsp;&nbsp;; reserve 3 
bytes initialized to 1,2,3<BR>&nbsp;&nbsp;.word 
20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; reserve 1 word initialized to 
20<BR>&nbsp;&nbsp;.word 10,200&nbsp;&nbsp;; reserve 2 words initialized to 
10,200<BR>&nbsp;&nbsp;.ascii "JWV"&nbsp;&nbsp;; reserve 3 bytes initialized to 
"J" "W" "V"<BR>&nbsp;&nbsp;.asciz "JWV"&nbsp;&nbsp;; reserve 4 bytes initialized 
to "J" "W" "V" 0</CODE></P></DIR>
<P><FONT face="Times New Roman,Times">Because the 6812 is more efficient when 
accessing 16 bit data from even addresses, sometimes we wish to skip a memory 
byte to force the subsequent code to loaded into an even or odd address. To do 
this we can use:</FONT></P>
<DIR>
<P><CODE>&nbsp;&nbsp;.even&nbsp;&nbsp;; force next code to be at an even 
address<BR>&nbsp;&nbsp;.odd&nbsp;&nbsp;&nbsp;; force next code to be at an odd 
address</CODE></P></DIR>
<P><FONT face="Times New Roman,Times">There are two ways to make an assembly 
language label global (accessible outside the file). The first way is to use 
double colons as in Listing 12-8. The second way is to use the .global 
pseudo-op:</FONT></P>
<DIR>
<P><CODE>&nbsp;&nbsp;.global Start&nbsp;&nbsp;; make this label 
global</CODE></P></DIR>
<P><FONT face="Times New Roman,Times">We can create assembly constants using the 
= pseudo-op. One application of this directive is defining symbolic names for 
the I/O ports. Instead of writing code list this:</FONT></P>
<DIR>
<P><CODE>; read a byte from the SCI port<BR>getchar::&nbsp;ldaa 0x00C4 
&nbsp;&nbsp;; wait for new character 
available<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bita 
#$20<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;getchar<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clra<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldab 
0x00C7&nbsp;&nbsp;&nbsp;; new character from 
SCI<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rts</CODE></P></DIR>
<ADDRESS>Listing 12-9: A subroutine that reads a character from the 6812 SCI0 
port</ADDRESS>
<P><FONT face="Times New Roman,Times">we can add symbols to make it more 
readable:</FONT></P>
<DIR>
<P><CODE>; read a byte from the SCI 
port<BR>SC0SR1=0x00C4<BR>SC0DRL=0x00C7<BR>RDRF=0x20<BR>getchar::&nbsp;ldaa 
SC0SR1 &nbsp;&nbsp;; wait for new character 
available<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bita 
#RDRF<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;getchar<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clra<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldab 
SC0DRL&nbsp;&nbsp;&nbsp;; new character from 
SCI<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rts</CODE></P></DIR>
<ADDRESS>Listing 12-10: A better subroutine that reads a character from the 6812 
SCI0 port</ADDRESS>
<P><FONT face="Times New Roman,Times">NOTE: the assembly directive <B>=</B>is 
not a macro substitute. Rather the expression is evaluated once, and the number 
value is used in place of the symbol.</FONT></P>
<P><FONT face="Times New Roman,Times">Conditional assembly can be implemented 
using the<B> .if &lt;exp&gt; .else .endif </B>construction. If the &lt;exp&gt; 
is true (not zero) then the assembly code up to the <B>.else</B> is included. If 
the &lt;exp&gt; is false (0) then the assembly code between the<B> .else </B>and 
<B>.endif </B>will be included. For example</FONT></P>
<DIR>
<P><CODE>IS6812=1 ; means it is a 6812<BR>.if 
IS6812<BR>SCSR=0x00C4<BR>SCDR=0x00C7<BR>.else<BR>SCSR=0x102E<BR>SCDR=0x102F<BR>.endif<BR>RDRF=0x20<BR>getchar::&nbsp;ldaa 
SCSR &nbsp;&nbsp;; wait for new character 
available<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bita 
#RDRF<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;getchar<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clra<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldab 
SCDR&nbsp;&nbsp;&nbsp;; new character from 
SCI<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rts</CODE></P></DIR>
<ADDRESS>Listing 12-11: A flexible subroutine that reads a character from the 
6811 or 6812 SCI port</ADDRESS>
<P><FONT face="Times New Roman,Times">The last pseudo-op is used to include 
other assembly files. For example</FONT></P>
<DIR>
<P><CODE>; read a byte from the SCI port<BR>.include 
"HC12.S"<BR>getchar::&nbsp;ldaa SC0SR1 &nbsp;&nbsp;; wait for new character 
available<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bita 
#RDRF<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;getchar<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clra<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldab 
SC0DRL&nbsp;&nbsp;&nbsp;; new character from 
SCI<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rts</CODE></P></DIR>
<ADDRESS>Listing 12-12: The .include pseudo-op allows you to divide software 
into separate files</ADDRESS>
<P>&nbsp;</P>
<P><B><I><FONT face=Helvetica,Arial><A name=OPTIMIZE></A>How to use assembly to 
optimize a C function</FONT></I></B></P>
<P><FONT face="Times New Roman,Times">In almost all situations when faced with a 
time-critical constraint it would be better to solve the problem other ways than 
to convert C code to assembly. Those alternative ways include using a faster CPU 
clock speed, upgrading to a more efficient compiler, and upgrading to a more 
powerful processor. On the other hand, some times we need to write and link 
assembly functions. One good reason to code in assembly is to take advantage of 
computer-specific operations. The enabling and disabling of interrupts is an 
example of an important operation that can not be performed in standard C. 
Another example is the use of specialize functions on the 6812 like fuzzy logic 
and table look-up. Although you could develop fuzzy logic control system in 
standard C, there are compelling speed advantages to implementing the core fuzzy 
logic controller in assembly. </FONT></P>
<P><FONT face="Times New Roman,Times">In this example we will optimize the<B> 
add3()</B> function presented previously in Chapter 10. The assembly generated 
by ICC11 and ICC12 for this example was discussed <A 
href="http://www.ece.utexas.edu/~valvano/embed/chap10/chap10.htm#STACK">back in 
Chapter 10</A>. The C code from Listing 10-8 is repeated:</FONT></P>
<DIR>
<P><CODE>int x1;<BR>static int x2;<BR>const int x3=1000;<BR>int add3(int z1, int 
z2, int z3){ int 
y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;y=z1+z2+z3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return(y);}<BR>void 
main(void){ int 
y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;x1=1000;<BR>&nbsp;&nbsp;&nbsp;&nbsp;x2=1000;<BR>&nbsp;&nbsp;&nbsp;&nbsp;y=add3(x1,x2,x3);</CODE></P></DIR>
<ADDRESS>Listing 10-8: Example function call with local variables</ADDRESS>
<P><FONT face="Times New Roman,Times">The assembly output (Listing 10-10) 
generated by the ImageCraft ICC12 version 5.1 is also repeated.</FONT></P>
<DIR>
<P><CODE>&nbsp;&nbsp;&nbsp;&nbsp;.area text<BR>_x3:: .word 
1000<BR>&nbsp;&nbsp;&nbsp;&nbsp;.area text<BR>; y -&gt; -2,x<BR>; z3 -&gt; 
8,x<BR>; z2 -&gt; 6,x<BR>; z1 -&gt; 2,x<BR>_add3:: 
pshd<BR>&nbsp;&nbsp;&nbsp;&nbsp;pshx<BR>&nbsp;&nbsp;&nbsp;&nbsp;tfr 
s,x<BR>&nbsp;&nbsp;&nbsp;&nbsp;leas -2,sp<BR>&nbsp;&nbsp;&nbsp;&nbsp;ldd 
2,x<BR>&nbsp;&nbsp;&nbsp;&nbsp;addd 6,x<BR>&nbsp;&nbsp;&nbsp;&nbsp;addd 
8,x<BR>&nbsp;&nbsp;&nbsp;&nbsp;std -2,x<BR>&nbsp;&nbsp;&nbsp;&nbsp;ldd 
-2,x<BR>&nbsp;&nbsp;&nbsp;&nbsp;tfr 
x,s<BR>&nbsp;&nbsp;&nbsp;&nbsp;pulx<BR>&nbsp;&nbsp;&nbsp;&nbsp;leas 
2,sp<BR>&nbsp;&nbsp;&nbsp;&nbsp;rts<BR>; y -&gt; -2,x<BR>_main:: 
pshx<BR>&nbsp;&nbsp;&nbsp;&nbsp;tfr s,x<BR>&nbsp;&nbsp;&nbsp;&nbsp;leas 
-8,sp<BR>&nbsp;&nbsp;&nbsp;&nbsp;movw #1000,_x1<BR>&nbsp;&nbsp;&nbsp;&nbsp;movw 
#1000,_x2<BR>&nbsp;&nbsp;&nbsp;&nbsp;movw 
_x3,2,sp<BR>&nbsp;&nbsp;&nbsp;&nbsp;movw _x2,0,sp<BR>&nbsp;&nbsp;&nbsp;&nbsp;ldd 
_x1<BR>&nbsp;&nbsp;&nbsp;&nbsp;jsr _add3<BR>&nbsp;&nbsp;&nbsp;&nbsp;std 
-4,x<BR>&nbsp;&nbsp;&nbsp;&nbsp;tfr d,y<BR>&nbsp;&nbsp;&nbsp;&nbsp;sty 
-2,x<BR>&nbsp;&nbsp;&nbsp;&nbsp;tfr 
x,s<BR>&nbsp;&nbsp;&nbsp;&nbsp;pulx<BR>&nbsp;&nbsp;&nbsp;&nbsp;rts<BR>.area 
bss<BR>_x2:&nbsp;&nbsp;&nbsp;.blkb 2<BR>_x1::&nbsp;&nbsp;.blkb 
2</CODE></P></DIR>
<ADDRESS>Listing 10-10: ICC12 assembly of function call with local 
variables</ADDRESS>
<P><FONT face="Times New Roman,Times">Next we draw a stack picture at the point 
of the first instruction of the function<B> add3()</B>.</FONT></P>
<P><FONT face="Times New Roman,Times"><IMG height=187 
src="Chapter 12 Assembly Language Programming -- Valvano.files/add3stk.gif" 
width=250></FONT></P>
<ADDRESS>Figure 12-1 Stack frame at the start of add3()</ADDRESS>
<P><FONT face="Times New Roman,Times">The next step in optimization is to copy 
and paste the ICC11/ICC12 compiler code from the *.s file into a new assembly 
file. We will name the file add3.s. Using the stack frame picture as our guide, 
we optimize the function. One possible optimization is shown below. Notice that 
I created a new local variable stack binding based on SP instead of Reg X. 
</FONT></P>
<DIR>
<P><CODE>; ****filename is add3.s *******<BR>; z3 -&gt; 4,sp<BR>; z2 -&gt; 
2,sp<BR>; z1 in Reg D<BR>_add3:: addd 2,sp&nbsp;&nbsp;&nbsp;&nbsp;; 
z1+z2<BR>&nbsp;&nbsp;&nbsp;&nbsp;addd 
4,sp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 
z1+z2+z3<BR>&nbsp;&nbsp;&nbsp;&nbsp;rts</CODE></P></DIR>
<ADDRESS>Listing 12-13 Optimized add3 function</ADDRESS>
<P><FONT face="Times New Roman,Times">Now this new function is linked into the 
original program.</FONT></P>
<DIR>
<P><CODE>int x1;<BR>static int x2;<BR>const int x3=1000;<BR>asm(".include 
'add3.s' ");<BR>int add3(int, int, int);<BR>void main(void){ int 
y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;x1=1000;<BR>&nbsp;&nbsp;&nbsp;&nbsp;x2=1000;<BR>&nbsp;&nbsp;&nbsp;&nbsp;y=add3(x1,x2,x3);</CODE></P></DIR>
<ADDRESS>Listing 12-14: Use of the new optimized function</ADDRESS>
<P><FONT face="Times New Roman,Times">Embedding the assembly function 
(<B>add3</B>) into C seems to work with or without the<B> int 
add3(int,int,int);</B> prototype.</FONT></P>
<P><FONT face="Times New Roman,Times">For more information about assembly 
language programming see the Motorola Microcomputer Manuals and the help system 
of the application <B>TExaS</B> that is included with the book <U>Embedded 
Microcomputer Systems: Real Time Interfacing</U> by Jonathan W. Valvano 
published by Brooks-Cole.</FONT></P>
<P><FONT face="Times New Roman,Times">Go to <A 
href="http://www.ece.utexas.edu/~valvano/embed/app1/app1.htm">Appendix 1 on 
Adapt812 board</A> Return to <A 
href="http://www.ece.utexas.edu/~valvano/embed/toc1.htm">Table of 
Contents</A></FONT></P></BODY></HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人免费视频一区| gogogo免费视频观看亚洲一| 免费在线欧美视频| 老鸭窝一区二区久久精品| 国产v综合v亚洲欧| 一本色道久久加勒比精品 | 精品国产免费一区二区三区香蕉| 亚洲精品在线三区| 国产精品日韩成人| 午夜精品福利在线| 国产成人在线观看免费网站| 在线观看中文字幕不卡| 久久影院电视剧免费观看| 精品久久久久久久人人人人传媒| 久久午夜色播影院免费高清| 国产视频一区二区在线| 国产精品久久久久桃色tv| 亚洲人一二三区| 91九色最新地址| 成人国产视频在线观看| 欧美一区二区三区免费大片| 久久精品视频在线看| 久久久青草青青国产亚洲免观| 97精品久久久午夜一区二区三区| 99r精品视频| aaa欧美大片| 在线视频综合导航| 欧美一区二区三区公司| 在线不卡中文字幕| 国产精品视频在线看| 亚洲精品写真福利| 日本va欧美va精品发布| 国产精品主播直播| 91搞黄在线观看| 亚洲精品一区二区三区香蕉 | 国产一区二区三区综合| 国产精品一区二区你懂的| 成年人网站91| 国产日产欧美精品一区二区三区| 亚洲视频一区在线| 国产精品色婷婷久久58| 国产欧美日韩精品a在线观看| 综合分类小说区另类春色亚洲小说欧美| 国产精品传媒入口麻豆| 欧美艳星brazzers| 91精品国产91久久久久久最新毛片| 色噜噜偷拍精品综合在线| 欧美电影免费观看高清完整版在| 综合婷婷亚洲小说| 久久精品99久久久| 欧美性生活一区| 亚洲国产精品国自产拍av| 日韩电影免费一区| 不卡视频在线看| 精品999久久久| 麻豆91小视频| 久久日韩精品一区二区五区| 国产三级精品三级在线专区| 同产精品九九九| 欧美日韩一级视频| 午夜欧美电影在线观看| 日日夜夜免费精品| 99国产精品久| www国产精品av| 日韩一区欧美二区| 色婷婷国产精品| 国产精品国产自产拍在线| 国模一区二区三区白浆| 欧美电影一区二区| 亚洲综合激情网| 91麻豆福利精品推荐| 日本一区二区三区在线观看| 韩国精品免费视频| 91精品国产欧美一区二区18| 一区二区高清免费观看影视大全| av中文字幕不卡| 中文字幕制服丝袜成人av| 成人伦理片在线| 国产婷婷一区二区| 国产美女精品在线| 精品理论电影在线观看| 美女mm1313爽爽久久久蜜臀| 337p亚洲精品色噜噜| 午夜一区二区三区视频| 欧美视频自拍偷拍| 亚洲国产裸拍裸体视频在线观看乱了 | 青青草精品视频| 色综合久久88色综合天天6| 国产精品国产三级国产a | 国产精品美女一区二区三区| 国产一区二区日韩精品| 欧美精品一区二区三区很污很色的| 欧美aaa在线| 日韩欧美国产一区二区在线播放| 日本欧美一区二区三区乱码| 91精品国产一区二区| 日韩不卡免费视频| 日韩欧美中文字幕一区| 日本欧洲一区二区| 精品美女被调教视频大全网站| 美日韩一区二区| 欧美肥妇毛茸茸| 日韩精品国产欧美| 日韩一区二区三区在线| 久久99热国产| 国产丝袜欧美中文另类| 成人免费视频caoporn| 亚洲欧洲日产国产综合网| 色综合天天综合网天天狠天天| 亚洲伊人伊色伊影伊综合网| 欧美美女bb生活片| 蜜臀av一区二区| 久久久久久久久久久久电影 | 91精品办公室少妇高潮对白| 日韩精品免费视频人成| 2022国产精品视频| 成人18视频日本| 亚洲高清视频的网址| 日韩美女天天操| 成人久久18免费网站麻豆| 亚洲免费观看高清完整版在线观看 | 久久99久久99小草精品免视看| 久久色在线视频| 91蜜桃视频在线| 亚洲一区国产视频| 欧美精品在线观看播放| 狠狠色丁香婷综合久久| 国产精品成人网| 欧美三区免费完整视频在线观看| 蜜臀久久99精品久久久画质超高清 | 91精品国产91久久久久久一区二区| 久久成人av少妇免费| 国产精品久久午夜夜伦鲁鲁| 欧美色图在线观看| 美女脱光内衣内裤视频久久影院| 中文av一区二区| 3atv在线一区二区三区| av影院午夜一区| 日本不卡一区二区| 国产日韩欧美电影| 欧美日韩久久一区| 风间由美一区二区三区在线观看 | 国产亚洲欧美一级| 欧美性大战久久久久久久| 精品无码三级在线观看视频| 亚洲卡通欧美制服中文| 精品久久人人做人人爽| 色一区在线观看| 国产精品综合网| 丝袜亚洲精品中文字幕一区| 精品国产精品网麻豆系列| av在线一区二区| 蜜芽一区二区三区| 国产精品伦理在线| 欧美影片第一页| 国产在线精品免费| 亚洲精品美国一| 中文字幕第一区| 欧美少妇性性性| 成人国产亚洲欧美成人综合网| 美女www一区二区| 亚洲自拍偷拍综合| 中文字幕乱码一区二区免费| 久久久亚洲精品石原莉奈| 日韩欧美在线综合网| 色94色欧美sute亚洲13| 国产成人一区在线| 久久99精品视频| 性做久久久久久免费观看| 亚洲欧洲性图库| 久久久久久毛片| 精品免费日韩av| 91精品婷婷国产综合久久竹菊| 国产福利精品导航| 亚洲小说欧美激情另类| 国产精品久久久久久户外露出| 精品国精品国产| 欧美午夜免费电影| 91在线云播放| 奇米精品一区二区三区在线观看 | 国产一区二区三区精品视频| 亚洲主播在线观看| 亚洲免费大片在线观看| 国产欧美精品区一区二区三区| 91精品午夜视频| 欧美日韩国产一级二级| 欧美日韩不卡视频| 精品视频一区二区三区免费| 欧美喷潮久久久xxxxx| 在线观看免费一区| 欧美午夜宅男影院| 日本韩国欧美一区| 91免费版在线| 欧美在线观看视频在线| 欧洲视频一区二区| 在线观看91精品国产入口| 欧美天堂一区二区三区| 欧美视频一二三区| 91精品国产综合久久香蕉的特点| 91丨九色丨尤物|