日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

8086匯編計數(shù)循環(huán):LOOP指令與CX寄存器調(diào)試指南

8086匯編計數(shù)循環(huán):LOOP指令與CX寄存器調(diào)試指南 匯編這門語言有個挺有意思的地方越是基礎(chǔ)的指令越容易在實際調(diào)試時把人卡住。循環(huán)和CX 寄存器就是典型例子。看教程五分鐘就能背下LOOP指令的語義但真正上手寫程序第一次跑出來的結(jié)果十有八九是錯的——要么死循環(huán)要么循環(huán)次數(shù)差一要么程序跑得好好的突然跳飛了。這篇內(nèi)容圍繞 8086 實模式下的計數(shù)循環(huán)展開把LOOP系列指令、CX 計數(shù)器的隱含用途、位移量的計算方式、嵌套循環(huán)的保護(hù)方案、DEBUG 單步驗證的方法以及塊復(fù)制和循環(huán)展開的效率取舍一路講透。剛接觸匯編、正在做課程設(shè)計或者想搞明白為什么我的循環(huán)多跑了一次的讀者可以直接照著復(fù)現(xiàn)已經(jīng)能寫完整程序、但對指令編碼和標(biāo)志位影響沒細(xì)究過的同行也能從中找到一些平時容易忽略的細(xì)節(jié)。文中所有代碼都在 8086 指令集范圍內(nèi)用 MASM/TASM 風(fēng)格書寫配 DOSBox 或?qū)嶓w機都能跑。1. 先弄清楚 CX 在循環(huán)里到底扮演什么角色1.1 從一條 LOOP 指令說起LOOP這條指令短得離譜機器碼只有兩個字節(jié)格式是E2 cb其中cb是一個 8 位有符號位移量??伤鼉?nèi)部干的事并不簡單CPU 執(zhí)行到LOOP時會一口氣做完三步先把 CX 的內(nèi)容減一結(jié)果寫回 CX然后判斷 CX 是不是等于零如果不等于零就把 IP 加上那個 8 位位移量跳到目標(biāo)地址繼續(xù)執(zhí)行如果等于零就什么都不做順序執(zhí)行下一條指令。請注意順序是先減、后判這個順序決定了 CX 初值和實際循環(huán)次數(shù)之間的對應(yīng)關(guān)系。CX 裝 5循環(huán)體就執(zhí)行 5 次最后一次執(zhí)行完之后 CX 減到 0LOOP不再跳轉(zhuǎn)循環(huán)結(jié)束。這個關(guān)系看起來很直觀但正因為太直觀很多人寫代碼的時候默認(rèn)我傳進(jìn)來 0 就是一次都不循環(huán)結(jié)果程序在主頻只有幾兆赫茲的老機器上空轉(zhuǎn)六萬多次才停下來——這個問題后面會專門用一節(jié)講。把LOOP拆開它其實等價于這么兩條指令的組合DEC CX JNZ 標(biāo)號區(qū)別在于LOOP只占 2 字節(jié)而DEC CX加JNZ rel8要占 3 字節(jié)更重要的是LOOP不修改任何標(biāo)志位而DEC會實打?qū)嵉馗膭?ZF、SF、PF、AF、OF。這個差異在循環(huán)體依賴標(biāo)志位的場合是致命的后面 2.3 節(jié)會展開。1.2 CX 的四個兼職身份CX 在 8086 里被定名成計數(shù)寄存器這個名字不是隨便起的。除了LOOP系列指令默認(rèn)拿它當(dāng)循環(huán)計數(shù)器它至少還有三份兼職寫循環(huán)的時候很容易撞車。第一份兼職是移位次數(shù)。8086 的移位和循環(huán)移位指令SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR移位次數(shù)只允許兩種形式寫死常數(shù) 1或者用 CL 指定。注意是 CL也就是 CX 的低八位。這是硬件層面的限制8086 沒有提供立即數(shù)移位的編碼方式。所以只要你的循環(huán)體里出現(xiàn)了變量移位CX 的低字節(jié)就被動了如果不小心把計數(shù)器也放在 CX 上循環(huán)次數(shù)立刻失控。第二份兼職是串操作重復(fù)次數(shù)。REP、REPE、REPNE這些前綴指令本質(zhì)上就是以 CX 為次數(shù)、每執(zhí)行一次串操作自動減一的硬件循環(huán)。REP MOVSB干的事情和手寫一個LOOP加MOVSB一模一樣只是更快。第三份兼職是除法除數(shù)。DIV CX、IDIV CX會把 CX 當(dāng)除數(shù)用這在循環(huán)體里做整數(shù)運算時也得留個心眼。一份兼職撞上另一份循環(huán)就亂了。我見過最典型的翻車現(xiàn)場是循環(huán)體里調(diào)了個子程序子程序內(nèi)部為了字符串拷貝把 CX 設(shè)成了字符串長度返回之后外層的循環(huán)計數(shù)器已經(jīng)被改成別的數(shù)了外層循環(huán)要么提前結(jié)束要么多跑幾十次。提示寫循環(huán)之前先掃一遍循環(huán)體看看里面有沒有MOV CX、REP前綴、SHL AX, CL這類會碰到 CX 的指令。有的話要么換寄存器要么進(jìn)循環(huán)體之前壓棧保護(hù)。1.3 為什么不用 DX 或者 BX 來計數(shù)既然 CX 這么容易被別的指令搶走為什么不用 DX 或者 BX 當(dāng)計數(shù)器原因有三個都很實際。第一個是指令長度。LOOP是專門為 CX 設(shè)計的別的寄存器沒有對應(yīng)的單指令循環(huán)。你要是用 DX只能寫成DEC DX加JNZ 標(biāo)號三條字節(jié)起步循環(huán)體稍微長一點的程序字節(jié)數(shù)累積起來就是可觀的差異。在當(dāng)年內(nèi)存按 KB 計算的年代這個差異值得計較。第二個是可讀性約定。匯編代碼是給人看的不是只給機器看的。整個 8086 生態(tài)里CX 當(dāng)計數(shù)器、SI 當(dāng)源指針、DI 當(dāng)目標(biāo)指針、AX 當(dāng)累加器、BX 當(dāng)基址這是一套約定俗成的分工。你按這個分工寫別人接手一眼就知道每行在干嘛你偏要用 BX 計數(shù)看代碼的人每次都得回頭確認(rèn)一遍寄存器含義。第三個是和 REP 前綴的配合。如果你的循環(huán)體內(nèi)核其實是串操作直接用REP前綴比手寫LOOP快得多而REP只認(rèn) CX。用別的寄存器計數(shù)就沒法享受這個加速。當(dāng)然這不是死規(guī)矩。循環(huán)嵌套的時候 CX 只有一個內(nèi)層循環(huán)我通常就用 DI 或 BX 配合DEC、JNZ來寫省掉壓棧開銷。這個取舍后面 3.4 節(jié)會講。2. LOOP 家族的指令細(xì)節(jié)與位移計算2.1 LOOP / LOOPE / LOOPNE / JCXZ 的差別LOOP不是孤零零一條指令它有一個家族四條指令各有各的適用場景。把它們的判斷條件列清楚比背定義管用。指令機器碼執(zhí)行動作轉(zhuǎn)移條件典型用途LOOPE2 cbCX 減一CX ≠ 0固定次數(shù)的計數(shù)循環(huán)LOOPE同LOOPZE1 cbCX 減一CX ≠ 0 且 ZF 1查找循環(huán)找到即停LOOPNE同LOOPNZE0 cbCX 減一CX ≠ 0 且 ZF 0查找循環(huán)沒找到繼續(xù)JCXZE3 cb不改變 CXCX 0循環(huán)入口前的空次數(shù)判斷LOOPE和LOOPNE這兩個帶條件判斷的版本很適合寫在數(shù)組里找某個值這類邏輯。比如在一串字節(jié)里找第一個等于 0 的元素每輪比較完用CMP設(shè)置 ZF然后LOOPNE繼續(xù)找找到的時候 ZF 1循環(huán)因為條件不滿足而退出此時 CX 的值還能反推出元素的位置。這里有個容易被忽略的點LOOPE因為要同時看 ZF它的退出條件是或的關(guān)系——要么 CX 走到 0要么 ZF 不滿足任意一個成立就退出。這意味著循環(huán)結(jié)束后你必須再判斷一次到底是哪種情況退出的否則分不清找到了還是找完了沒找到。老手通常會在循環(huán)之后跟一條條件跳轉(zhuǎn)把兩種結(jié)局分開處理。JCXZ則是另一個角色。它不修改 CX也不影響標(biāo)志位只是單純地看 CX 是不是零。因為它不遞減 CX所以不能當(dāng)循環(huán)用只能放在循環(huán)前面防止次數(shù)為 0 卻還進(jìn)循環(huán)體的意外。2.2 位移量是怎么算出來的LOOP的位移字段只有一個字節(jié)是有符號數(shù)取值范圍 -128 到 127。這個數(shù)字不是標(biāo)號的絕對地址而是相對下一條指令的偏移。CPU 執(zhí)行LOOP時IP 已經(jīng)指向了LOOP的下一條指令所以用下一條指令的地址 位移量才是跳轉(zhuǎn)目標(biāo)。拿一段實際的代碼來算。假設(shè)代碼段起始偏移是 0000H0000 B9 06 00 MOV CX, 6 0003 BE 00 00 MOV SI, 0 0006 B8 00 00 MOV AX, 0 0009 03 04 ADD AX, [SI] 000B 46 INC SI 000C 46 INC SI 000D E2 FA LOOP 0009LOOP指令本身位于 000DH占兩個字節(jié)所以下一條指令的地址是 000FH。目標(biāo)是 0009H。位移量 0009H - 000FH -6用 8 位補碼表示就是 FAH。所以機器碼是E2 FA跟上面寫的對上了。反過來如果你在 DEBUG 里看到一條E2 F9怎么推目標(biāo)地址F9H 作為有符號數(shù)是 -7假設(shè)這條指令在 000EH下一條就是 0010H0010H - 7 0009H。目標(biāo)標(biāo)號在 0009H。這套計算沒什么技巧但必須會因為調(diào)試的時候沒有源代碼只有機器碼你得能從字節(jié)反推出跳轉(zhuǎn)目標(biāo)才能判斷跳飛了是跳到哪兒去了。至于 ±128 字節(jié)的限制這是 8 位位移字段的硬邊界跟標(biāo)號寫在哪沒關(guān)系。循環(huán)體寫長了LOOP就夠不著。這個坑后面 4.3 節(jié)有專門的改寫方案。注意不同匯編器對LOOP短跳轉(zhuǎn)越界的報錯措辭不一樣MASM 一般提示Jump out of rangeNASM 會說short jump out of range??吹竭@類報錯先量一下循環(huán)體長度基本就定位了。2.3 LOOP 不碰標(biāo)志位這件事有多重要前面提過LOOP和DEC CX加JNZ的等價性但有一處不等價標(biāo)志位。LOOP做的事情只有兩件CX 減一、判斷是否為零全程不動標(biāo)志寄存器。DEC CX則會更新 ZF、SF、PF、AF、OF。為什么不改標(biāo)志這么重要舉一個具體場景。循環(huán)體內(nèi)部做比較比較結(jié)果保存在 ZF 里然后循環(huán)結(jié)束——如果你用DEC CX / JNZ收尾DEC會先把 ZF 覆蓋掉你原來比較出來的結(jié)果就沒了。而用LOOP收尾ZF 原封不動出了循環(huán)還能接著JE、JNE這就是差別。再比如循環(huán)體里有CMP [SI], AL配合LOOPE做查找如果LOOPE換成DEC CX加JNZ那DEC在LOOPE的位置上會先動標(biāo)志LOOPE賴以判斷的 ZF 就不可靠了。這類 bug 特別隱蔽程序不一定崩但結(jié)果不對且很可能在不同機器上表現(xiàn)不一樣。所以我的經(jīng)驗是只要循環(huán)靠 CX 計數(shù)且循環(huán)體內(nèi)有依賴標(biāo)志位的比較運算一律優(yōu)先用LOOP收尾。只有在循環(huán)體超長導(dǎo)致LOOP夠不著或者需要換寄存器計數(shù)的時候才退而求其次用DEC加JNZ并且在循環(huán)出口處重新做一次判斷不要指望標(biāo)志位能活下來。3. 完整實操從求和程序到 DEBUG 單步驗證3.1 環(huán)境與源程序骨架這一節(jié)用一個數(shù)組求和的完整程序把前面講的點串起來。程序在 DOS 實模式下跑需要一個 8086 匯編器和 DOSBox 之類的兼容環(huán)境。我平時用的是 MASM 5.0 配合 DOSBox源文件后綴.asm編譯鏈接之后生成.exe用 DEBUG 加載調(diào)試。程序需求很樸素內(nèi)存里放六個 16 位整數(shù)用循環(huán)把它們加起來結(jié)果存到內(nèi)存變量里。選這個例子是因為它結(jié)構(gòu)干凈循環(huán)體只有兩條指令位移量小適合先把手感建立起來再上復(fù)雜的。DATA SEGMENT ARRAY DW 12, 34, 56, 78, 90, 11 COUNT EQU 6 TOTAL DW 0 DATA ENDS STACK1 SEGMENT STACK DW 64 DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK1 START: MOV AX, DATA MOV DS, AX MOV CX, COUNT ; 計數(shù)器初值 元素個數(shù) LEA SI, ARRAY ; SI 指向數(shù)組首地址 XOR AX, AX ; 累加器清零同時清掉 CF NEXT: ADD AX, [SI] ; 累加當(dāng)前元素 ADD SI, 2 ; 指向下一個字 LOOP NEXT ; CX 減一非零繼續(xù) MOV TOTAL, AX ; 結(jié)果落地 MOV AH, 4CH INT 21H ; 返回 DOS CODE ENDS END START程序骨架里有幾個細(xì)節(jié)值得掰開說。MOV AX, DATA / MOV DS, AX這兩行不能省也不能寫成MOV DS, DATA——8086 不允許直接把段地址立即數(shù)送進(jìn)段寄存器必須借道通用寄存器。這是實模式匯編的入門級坑第一節(jié)課基本都會踩一次。XOR AX, AX比MOV AX, 0短一個字節(jié)而且是公認(rèn)的清零慣用法。這里還順帶把 CF 清了為后面可能的進(jìn)位運算留下干凈狀態(tài)。ADD SI, 2這一行在純 8086 上會被匯編成81 C6 02 00四個字節(jié)。因為 8086 的加法立即數(shù)指令只有 16 位立即數(shù)的編碼形式80286 之后才引入了 8 位立即數(shù)的緊湊格式。如果你想讓代碼更短可以寫成兩條INC SI各占一字節(jié)省兩個字節(jié)但執(zhí)行時間反而更長——兩條指令的取指和譯碼開銷抵不過一次四字節(jié)指令。這個取舍在現(xiàn)代 CPU 上意義不大但在老機器上曾經(jīng)是值得爭論的話題。3.2 逐條拆解求和循環(huán)從NEXT標(biāo)號開始的循環(huán)體只有三條指令把執(zhí)行過程走一遍。初始狀態(tài)CX 6SI 指向 ARRAY 首地址AX 0。第一輪ADD AX, [SI]把 12 加進(jìn) AXAX 變成 12ADD SI, 2讓 SI 前進(jìn)兩個字LOOP把 CX 減到 5非零跳回NEXT。第二輪加 34AX 變成 46CX 減到 4繼續(xù)。依此類推第六輪加 11AX 得到最終的和 281然后 CX 減到 0LOOP不跳轉(zhuǎn)落到MOV TOTAL, AX。六個數(shù)字手算一遍12 34 46 56 102 78 180 90 270 11 281。程序跑出來的TOTAL應(yīng)該是 0121H因為 281 的十進(jìn)制轉(zhuǎn)十六進(jìn)制是 0119H——等一下281 256 25 100H 19H 119H。對0119H。這個數(shù)字在 DEBUG 里可以用D DS:0直接看數(shù)據(jù)段驗證。數(shù)組占 12 個字節(jié)TOTAL緊跟在后面偏移是 000CH值是19 01小端序低字節(jié)在前??吹竭@個序列程序就對了。有個地方容易出問題ADD SI, 2的步長必須和數(shù)據(jù)類型匹配。數(shù)組是DW定義的每個元素兩個字節(jié)所以步長是 2。如果定義成DB步長就得改成 1如果寫錯了讀到的是相鄰兩個字節(jié)拼起來的數(shù)結(jié)果會莫名其妙。這類錯誤在調(diào)試時表現(xiàn)為結(jié)果看著像個正常數(shù)但就是不對而且往往前幾個數(shù)還是對的后面才開始飄。提示累加類程序的經(jīng)典自檢方法是拿第一個元素單獨跑一次——把 COUNT 改成 1看結(jié)果是不是等于第一個元素。如果是說明尋址和累加邏輯沒問題再把 COUNT 改回去。這個手法能把邏輯錯和步長錯快速區(qū)分開。3.3 用 DEBUG 盯住 CX 的每一次變化代碼寫完編譯通過不等于程序是對的。匯編這門東西靜態(tài)看代碼只能發(fā)現(xiàn)語法錯誤邏輯錯誤全靠調(diào)試器抓。DEBUG 的三個命令足夠應(yīng)付絕大多數(shù)循環(huán)問題R看寄存器T單步G帶斷點運行。先用T命令走幾步看看 CX 的變化節(jié)奏-r AX0000 BX0000 CX0006 DX0000 SP0100 BP0000 SI0000 DI0000 DS0B2A ES0B2A SS0B37 CS0B2A IP0010 NV UP EI PL ZR NA PE NC 0B2A:0010 B90600 MOV CX,0006 -t AX0000 BX0000 CX0006 DX0000 SP0100 BP0000 SI0000 DI0000 0B2A:0013 BE0C00 MOV SI,000C -t -t AX0000 BX0000 CX0006 DX0000 SP0100 BP0000 SI000C DI0000 0B2A:0019 0304 ADD AX,[SI] -t AX000C BX0000 CX0006 DX0000 SP0100 BP0000 SI000C DI0000上面是示意輸出具體段值隨環(huán)境變化但觀察點很明確MOV CX, 6執(zhí)行后 CX 是 0006ADD AX,[SI]執(zhí)行后 AX 變成 000CH也就是十進(jìn)制的 12正好是第一個元素此時 CX 還是 0006因為還沒執(zhí)行到LOOP。繼續(xù)T到LOOP那條指令再走一步CX 就會變成 0005IP 跳回NEXT。真正高效的調(diào)試方式是G加斷點。在LOOP指令的地址上下斷點反復(fù)G每停一次看一次 CX能在一分鐘內(nèi)確認(rèn)循環(huán)次數(shù)對不對-g 001f AX002E BX0000 CX0006 DX0000 ... -g 001f AX005C BX0000 CX0005 DX0000 ...注意LOOP停在斷點上時CX 還沒被遞減所以第一次停在斷點看到的是 6第二次是 5。這個停在斷點上看到的是遞減前的值的細(xì)節(jié)第一次用斷點調(diào)試循環(huán)的人幾乎都會困惑一下。我在教別人調(diào)試循環(huán)的時候一般會讓他們做一件事把 CX 的每次變化抄在紙上六次一輪和手算的累加過程對一遍。聽起來笨但比對兩三遍之后對先減后判的理解就從概念變成肌肉記憶了。3.4 嵌套循環(huán)里 CX 的保護(hù)單層循環(huán)用 CX 天經(jīng)地義一進(jìn)嵌套就麻煩——CX 只有一個內(nèi)外兩層都要計數(shù)怎么辦三種方案各有適用場合。方案一壓棧保護(hù)。外層進(jìn)內(nèi)層之前PUSH CX內(nèi)層跑完P(guān)OP CX再執(zhí)行外層的LOOP。這是最直白、最不容易出錯的做法。MOV CX, 5 ; 外層次數(shù) OUTER: PUSH CX ; 保護(hù)外層計數(shù) MOV CX, 4 ; 內(nèi)層次數(shù) INNER: ; 內(nèi)層循環(huán)體 LOOP INNER POP CX ; 恢復(fù)外層計數(shù) LOOP OUTER壓棧的代價是兩次內(nèi)存訪問配上棧操作本身的指令開銷在緊湊的內(nèi)層循環(huán)里不算便宜。但它的好處是絕對可靠不用擔(dān)心內(nèi)層代碼有沒有動過 CX。方案二換寄存器。外層用 CX 走LOOP內(nèi)層用 DI 或 BX 配合DEC / JNZ兩個計數(shù)器互不干擾。MOV CX, 5 ; 外層 OUTER: MOV DI, 4 ; 內(nèi)層 INNER: ; 內(nèi)層循環(huán)體 DEC DI JNZ INNER LOOP OUTER省掉了壓棧彈棧但多了DEC的指令開銷而且DEC DI會修改標(biāo)志位。內(nèi)層循環(huán)依賴標(biāo)志位的場合要小心。方案三計數(shù)器放內(nèi)存。用一個DW變量當(dāng)內(nèi)層計數(shù)器DEC加JNZ直接操作內(nèi)存。速度最慢但寄存器壓力最小適合內(nèi)層循環(huán)體已經(jīng)把寄存器用得七七八八的情況。三種方案怎么選我的判斷標(biāo)準(zhǔn)是看內(nèi)層循環(huán)體的長度和調(diào)用頻率。內(nèi)層循環(huán)體短、跑得次數(shù)多選方案二內(nèi)層循環(huán)體長、邏輯復(fù)雜選方案一求穩(wěn)寄存器實在不夠用了才考慮方案三。嵌套層次超過兩層的時候建議直接把計數(shù)器都放內(nèi)存代碼可讀性比那點性能重要得多。三層嵌套的壓棧彈棧順序一旦寫錯出錯現(xiàn)場會非常難查——程序不崩只是結(jié)果不對而且只在特定輸入下才不對。4. 常見問題與排查技巧實錄4.1 初值給 0跑出 65536 次這是LOOP最經(jīng)典的坑沒有之一。CX 初值為 0 的時候LOOP并不是一次都不循環(huán)而是循環(huán) 65536 次。原因在先減后判這四個字。CX 等于 0執(zhí)行LOOP先減一0 - 1 在 16 位無符號數(shù)里等于 FFFFH也就是 65535不等于零于是跳轉(zhuǎn)。接下來每次減一要走 65535 次才能回到 0。加上第一次總共 65536 次。這個坑在兩種場景下最容易觸發(fā)。第一種循環(huán)次數(shù)來自外部輸入。比如從鍵盤讀一個數(shù)字當(dāng)循環(huán)次數(shù)用戶輸入 0程序就陷進(jìn)去了。這種情況下必須用JCXZ在循環(huán)入口前攔一道MOV CX, [COUNT] JCXZ DONE ; 次數(shù)為 0直接跳過 NEXT: ; 循環(huán)體 LOOP NEXT DONE:第二種循環(huán)次數(shù)是算出來的差值。比如從地址 A 到地址 B 復(fù)制數(shù)據(jù)長度等于 B 減 A。如果 B 和 A 相等長度是 0LOOP就開始空轉(zhuǎn)。這類運算的結(jié)果最好在進(jìn)循環(huán)之前用CMP CX, 0加JE判一下。注意JCXZ只是在入口判一次如果 CX 是在循環(huán)體內(nèi)部被改到 0它救不了你。所以這道防線只對初值為零有效。還有一種情況更隱蔽CX 的高位被別的東西污染了。比如你本來只想用 CL 存?zhèn)€值結(jié)果上面某條指令動了 CHCX 整體變成 0x0500 之類LOOP就會跑 1280 次。排查這類問題的方法是單步到LOOP之前用R命令看 CX 的完整 16 位值而不是只看低字節(jié)。4.2 循環(huán)體里偷吃 CX 的指令CX 被循環(huán)體內(nèi)部的指令改掉是第二大高頻問題。表現(xiàn)形式有兩種一是循環(huán)次數(shù)變多程序耗時明顯拉長二是循環(huán)次數(shù)變少結(jié)果只算了一部分。前面提過的三份兼職就是三大嫌疑人。REP前綴最狠。REP MOVSB、REP STOSB執(zhí)行完之后CX 一定變成 0。如果你的外層循環(huán)計數(shù)器也在 CX 上內(nèi)層一個REP就把外層歸零了外層循環(huán)立刻結(jié)束程序看起來跑完了但結(jié)果只處理了第一趟。變量移位次之。MOV CL, 3加SHL AX, CL這種寫法會把 CX 的低字節(jié)改掉。如果計數(shù)器只用 CL 的一部分且移位次數(shù)很小可能表現(xiàn)成循環(huán)多跑了幾次不容易第一時間發(fā)現(xiàn)。除法最隱蔽。DIV CX執(zhí)行之后CX 本身不變但整個運算把 AX 和 DX 都覆蓋了。如果你的累加器在 AX 上除完就沒了。雖然不直接改 CX但和 CX 相關(guān)的運算鏈一起被破壞癥狀同樣表現(xiàn)為數(shù)算錯了。排查這類問題我一般用二分法先把循環(huán)體里的指令注釋掉一半看 CX 是否穩(wěn)定穩(wěn)定就說明問題在被注釋的那一半然后繼續(xù)二分。比逐條讀代碼快得多。4.3 跳超出范圍LOOP 匯編不過循環(huán)體寫長了LOOP的 8 位位移字段裝不下匯編器直接報錯。這個錯誤很好認(rèn)換一種寫法就能過去NEXT: ; 很長的循環(huán)體 DEC CX JNZ NEXTJNZ用的是 8 位位移跟LOOP一樣有 ±128 的限制換成它不一定解決問題。要徹底擺脫距離限制得用JMP類的近跳轉(zhuǎn)配合條件判斷NEXT: ; 很長的循環(huán)體 DEC CX JZ EXIT JMP NEXT EXIT:JMP是近跳轉(zhuǎn)16 位位移能覆蓋整個段。缺點是每次循環(huán)多一條指令代碼可讀性也差一點。改寫的時候要留意標(biāo)志位。原來是LOOP不碰標(biāo)志換成DEC CX之后標(biāo)志被改了。如果循環(huán)體里最后一次比較的結(jié)果需要在循環(huán)外繼續(xù)用得在DEC之前先把結(jié)果保存進(jìn)變量或寄存器否則出了循環(huán)再判斷就是錯的。還有一種情況是循環(huán)體里嵌套了另一個LOOP內(nèi)外層加起來超了 128 字節(jié)但每一層單獨看都沒超。這時候匯編器可能只報外層有問題實際是內(nèi)外層共同的位移和超限。解決思路一樣把內(nèi)層改成DEC / JNZ先給外層騰出空間。4.4 問題速查表把上面這些踩過的坑整理成一張表出問題的時候按癥狀對號入座比從頭讀代碼快?,F(xiàn)象可能原因排查動作處理辦法程序卡住不動CX 初值為 0跑 65536 次在循環(huán)入口前看 CX入口加JCXZ或先判零循環(huán)次數(shù)比預(yù)期多CX 低字節(jié)被CL移位改掉單步到LOOP前看完整 CX換寄存器存移位次數(shù)循環(huán)提前結(jié)束循環(huán)體內(nèi)REP前綴消耗了 CX檢查循環(huán)體里的串操作PUSH CX/POP CX保護(hù)累加結(jié)果只算了一部分循環(huán)體內(nèi)子程序改了 CX檢查CALL前后 CX 值調(diào)用前壓棧返回后彈棧匯編報Jump out of range循環(huán)體超過 128 字節(jié)數(shù)一下標(biāo)號到LOOP的距離改DEC CXJNZ或JMP循環(huán)后條件判斷失效用了DEC收尾ZF 被覆蓋看循環(huán)末尾的指令改回LOOP或保存標(biāo)志嵌套循環(huán)內(nèi)層次數(shù)亂內(nèi)外層共用 CX 未保護(hù)看內(nèi)層入口有沒有PUSH CX壓?;驌Q寄存器數(shù)組求和結(jié)果偏差指針步長與元素寬度不匹配檢查ADD SI, n的 nDW用 2DB用 1這張表不是窮舉但覆蓋了我這些年實際遇到的八成場景。真正遇到表上沒寫的問題通用的排查順序是先看 CX 初值再看循環(huán)體里有沒有指令碰 CX最后看標(biāo)志位有沒有被意外覆蓋。這三步走完問題基本就浮出來了。5. 進(jìn)階塊復(fù)制、循環(huán)展開與 REP 前綴5.1 手寫塊復(fù)制循環(huán)數(shù)組求和是熱身塊復(fù)制才是循環(huán)真正的日常用途。需求簡單把源地址的一片數(shù)據(jù)搬到目標(biāo)地址。MOV CX, LENGTH ; 要搬的字節(jié)數(shù) LEA SI, SRC LEA DI, DST COPY: MOV AL, [SI] MOV [DI], AL INC SI INC DI LOOP COPY四條指令的循環(huán)體跑一次搬一個字節(jié)。這段代碼約十一個字節(jié)LOOP的位移量是 -9 左右在范圍內(nèi)能正常匯編。這里 SI 和 DI 的分工是約定俗成的SI 是源索引DI 是目標(biāo)索引很多串操作指令默認(rèn)就用這兩個寄存器?,F(xiàn)在手寫循環(huán)用它們后面換成REP MOVSB的時候也就是把整個循環(huán)體換成一條指令不用改寄存器約定。塊復(fù)制有個經(jīng)典陷阱源和目的區(qū)域重疊。如果目標(biāo)區(qū)域在源區(qū)域的低地址方向從前往后復(fù)制會把還沒讀的源數(shù)據(jù)覆蓋掉。這時候必須改成從高地址往低地址復(fù)制也就是指針先指向末尾每次減一。這個方向問題在內(nèi)存管理類的程序里出現(xiàn)頻率不低而且癥狀很怪——復(fù)制出來的數(shù)據(jù)有一部分是對的另一部分是錯的看著像隨機損壞。5.2 REP 前綴把 CX 交給硬件REP MOVSB這條指令把上面整個循環(huán)體壓縮成了一行而且速度更快原理就在 CX 身上。REP的本質(zhì)是一個硬件級的循環(huán)控制器。它做的事檢查 CX 是否為零為零就退出不為零就執(zhí)行一次后面的串操作指令CX 減一然后重新檢查。整個過程不需要 CPU 反復(fù)取指譯碼效率比軟件循環(huán)高出一截。CLD ; 方向標(biāo)志清零地址遞增 MOV CX, LENGTH LEA SI, SRC LEA DI, DST REP MOVSB四條有效指令替代了七條機器碼也短了。不過用REP有幾個前提條件必須滿足。第一方向標(biāo)志要明確。CLD是地址遞增STD是地址遞減。如果之前某個操作把 DF 設(shè)成了 1而你又沒清掉REP MOVSB就會從高地址往低地址搬結(jié)果和預(yù)期相反。我一般習(xí)慣在每條REP之前都寫一句CLD雖然多數(shù)時候是多余的但省得排查。第二SI 和 DI 的初值要落在正確的段里。MOVSB默認(rèn)用 DS:SI 做源、ES:DI 做目的ES 段寄存器必須提前設(shè)好否則會寫到一段莫名其妙的內(nèi)存里去。這一點跟手寫循環(huán)不一樣——手寫循環(huán)用MOV [DI], AL的時候DI 默認(rèn)也是走 DS除非顯式加段前綴。這個默認(rèn)段的前后差異是初學(xué)REP時最常撞的墻。第三CX 一定是次數(shù)。REP執(zhí)行完 CX 歸零做完之后想用原來的長度得提前備份。注意REP MOVSW一次搬一個字比MOVSB快一倍前提是長度是偶數(shù)、源和目標(biāo)地址都是字對齊的。長度是奇數(shù)的時候得單獨處理最后一個字節(jié)別圖省事。5.3 循環(huán)展開與效率取舍循環(huán)展開是老派優(yōu)化手段思路是把多次迭代的循環(huán)體并排寫出來減少循環(huán)控制指令的開銷。原來要執(zhí)行 N 次LOOP展開四次之后只執(zhí)行 N/4 次剩下的開銷就是四份循環(huán)體。MOV CX, LENGTH SHR CX, 1 ; 每次搬兩個字次數(shù)減半 LEA SI, SRC LEA DI, DST COPY: MOV AX, [SI] MOV [DI], AX ADD SI, 2 ADD DI, 2 LOOP COPY這個例子里循環(huán)體翻了一倍但控制指令的執(zhí)行次數(shù)減半。在老機器上循環(huán)控制指令的取指譯碼開銷占比不小這種改寫能有實實在在的速度提升。但現(xiàn)在要不要這么做得看具體場景?,F(xiàn)代處理器有分支預(yù)測和指令緩存LOOP這類短小的循環(huán)控制指令很可能被預(yù)測器提前處理掉展開帶來的收益未必明顯反過來代碼體積變大會擠占指令緩存在某些場景下反而更慢。所以我的原則是除非實測發(fā)現(xiàn)這個循環(huán)是熱點否則不主動展開??勺x性的損失是實打?qū)嵉氖找鎱s要打了問號。真要追求塊復(fù)制的極致性能現(xiàn)代的做法是用單指令多數(shù)據(jù)擴展一次搬十六個甚至六十四個字節(jié)那已經(jīng)是另一套指令體系了跟 8086 的LOOP不在一個層面上。就 8086 這個平臺本身而言這幾個方案的性能排序大致是REP MOVSW快于手寫MOVSW循環(huán)手寫MOVSW循環(huán)快于MOVSB循環(huán)LOOP收尾略快于DEC / JNZ收尾。差距在具體數(shù)字上不大但在緊密的內(nèi)層循環(huán)里累積起來能看出來。我自己在寫這類程序的時候習(xí)慣是先用最直白的LOOP版本把邏輯跑通確認(rèn)結(jié)果正確再考慮要不要換REP或者展開。順序不能反——先優(yōu)化后正確等于給自己挖坑出了錯都不知道是邏輯問題還是優(yōu)化引入的問題。實際動手寫下來我對LOOP和 CX 這套機制的體會是它們的設(shè)計非常經(jīng)濟(jì)一條兩字節(jié)的指令承擔(dān)了循環(huán)控制、計數(shù)遞減、條件判斷三件事代價是把計數(shù)器和一大堆指令綁在了一起。這個設(shè)計在資源緊張的年代是聰明的取舍放到今天就變成了要小心繞開的耦合。所以我現(xiàn)在寫匯編只要循環(huán)體超過五行就先把 CX 的使用情況在紙上畫一遍標(biāo)出哪些指令會碰它、哪些子程序可能動它畫完再動手。這個習(xí)慣幫我省掉的調(diào)試時間比任何優(yōu)化技巧都多。真要說有什么值得反復(fù)強調(diào)的那就是初值為零這一條——JCXZ多寫一行能省掉一下午。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
伊人视频| 色九色久| 蜜臀中文字幕| 99热婷婷| 久久精品高清无码一区| 理论久久婷婷网 8| 亚州五月| 日韩国产欧美伦理在线| 亚洲中文人妻色| 中国91AV| 免费看污网站| 最新亚洲人成网站在线影院| 99热婷婷| 亚洲毛片基地专区| 成人黑料社久久| 亚洲成人久久美女| 欧美天天综合| 五月婷色| 色五月av| 男人天堂站| 91亚洲色图| 日韩一级二级| 久久中文字幕在线观看| 最新欧美色网| 欧美综合网A| 每日更新AV| 黄久在线| 国产精品午夜高潮呻吟久久av| 人妻无码久久一区二区三区免费| 亚洲成a人v欧美综合天堂下载| 日韩成人精品| 欧美熟妇操操视频| 99婷婷| 中文字幕二区| 中文字幕123| 黑人中出21连凳花野真衣| 亚洲不卡av在线| 男人的天堂2019| 蜜色网色哟哟| 涩涩涩综合| 东北操逼| 992这里有精品| 精品三级在线专区| 国产九区| 性爱乱伦视频免费| 97久久精品不卡| 99热超碰| 黄色AAAAAAAAAAA大片| 丝袜综合| 免费看久久久性性| 大学生美女口爆| 视频在线观看一二三区| 乱论91| 色九九九九九九| 99视频只有精品| 欧美精品宗合| 97人人爱人人做人人乐| 亚洲?V无码专区在线电影| 999九九精品| 大香蕉黄色一区| 亚洲成人贴图| 97网站在线观看 | 中文字幕aⅴ在线视频| 国产情色第一第二页在线观看| 天天干人妻| 国产91乱伦| 亚洲激情在线| 日韩精品三级片长长久久| 男男H黄动漫啪啪无遮挡网站| 久久久精精精| 日韩精品高清资源在线| 性色av婷婷久久一区二区点复制| 日日超碰亚洲| 日本久久999| 91人妻尻屄视频| 国产精品九九九| 久久久久亚洲一区女同性恋中文字幕| 久久99操天天日| 精品成人亚洲午夜电影| 中文乱码字字幕在线第5页| 亚洲吊色| 九九成人| 久久99午夜精品一区人妻| 欧美性爱一区二区| 亚洲日韩美女丝袜美腿人妻视频| 午夜欧美J进J出白浆流出久久久 | 中文字幕91页| 思思久热在线精品66| 人妻天天爽| 中文字幕 人妻不满 在线视频| 日本三级A片网站com| 91丨九色丨东北熟女| 婷婷在线视频在线观看| 天天综合欧美| 加勒比综合a∨| 一区二区日韩欧美久久| 欧美另类精品xxxx| 久久日韩精品一区二区| 操老熟女AV| 日本一片一区| 91色五月俺来也| 亚洲精品 大香蕉| 乱色视频中文字幕| 狠狠色噜噜狠狠狠狠狠色综合久久| 欧美色青| 91精品微拍福利| 大色综合| 中文字幕三四区| 日韩少妇在线视频| 加勒比五月天| AV色五月天| 老女人老91妇女老热女| 97久久久久久久精| 色五月激情网| 狠狠操夜夜操蜜桃视频三区| 不卡啪啪视频| AV免费在线播放一区| 国产精品露脸在线观看| 91亚洲网站| 国产视频97| 中国91AV| 亚洲av夫妻操穴网| 91狠婷| 久草五月| 色爱三区| 久久香蕉影院| 男人的天堂欧美| 极品色社| 久久人妻视频| 欧美少妇一区二区三区| 富二代亚洲精品99| 亚洲 另类 丝袜 自拍 动漫| 日本一久是| 男生女生啊啊啊啊| 亚洲美女精品| 农村妇女精品一区二区| 久久鲁夜| 国产乱子伦一区二区三区在线观看| 九九人妻| 久久久亚洲熟妇熟女| 午夜性刺激视频免费观看| 欧美少妇色图| 操逼天美3区| 91成人精品在线播放| 日韩黄色成人性爱| 伊人五月天| 超碰超碰95| 内射中出日韩在线观看视频| 4虎在线视频| 白丝在线一区| 亚洲欧洲激情卡通另类文学四射小说网站| 九九九九9999| 久久爽爽精品| 鸥美中出| av绯色| 丰满的三级少妇欧美久久久| 天天操夜夜操| 午夜精品久久久久| 青青草玖玖爱| 中文字幕在线观| 尤物网站91| 色翁荡息又大又硬又粗又爽| 国产三区免费在线观看| 很很热性爱视频| 99色热| 亚洲人精品久久久喷水| 亚洲,欧美,综合网| 美女91AV| 亚洲一区二区三区四区视频| 97精品国产97久久久久久| 亚洲av热热色| 久久东京热成人| 日本影视久久免费| 无码人妻丰满热妇又大又粗| 五月天久久婷婷亚洲 | 人人透人人操| 亚洲综合码| 97操b| 久久久久白虎| 久久精品性| 骚逼高潮久久精品| 性爱AV天堂| 九九九九九九九九九国产精品 | 国产成人无码久久精品| 欧美97在线观看| 黑人与人妻| 欧美熟妇色| 精品国产一区二区三区香蕉欧美| 亚洲日韩人妻中文字幕一区| 日韩性爱电影一区| 爱啪精品一区| 亚洲高清无毛一区二区| 91网18| 96精品久久久久久久久| 欧美黄色手机在线观看| 色约约一区=区三区| 99热销国产这里有精品| 78精品在线| www久久精品| 欧美黄色大片在线观看| 午夜性| 欧美激情视频一区二区| 920日本午夜免费| 国产精品久久久久久久电影渣男| 91精品国产91久久福利| 精品一区二区三区蜜桃臀赵总| 后入式视频国产自| av在线一区二区三区| 国产九九久久久精品| 97就爱干| 日韩欧美经典在线观看| 色偷偷综合91久久噜噜| 国产精品久久久久久 百度| 久久曰曰| 亚洲国产一区二区入口| 91高跟美女在线播放| 日本国产亚洲一区在线观看| 青青草字幕AV| 秋霞蝌科网日本一区| 成人在线午夜视频一区| 亚洲少妇综合在线播放| 久操av在线| 午夜黄色免费在线观看| 日韩日韩日韩-国产乱码精品一区二区| 成人性爱av.com| 西西美女视频网| 婷婷10月天青娱乐| 欧美性天天影视| 超碰人妻久久| 精彩视频日韩| 精品一区二区成人| 少妇特黄一区二区三区| 久久久中文| 亚洲九九九| 91AV老熟女视频| 日本操逼视频不卡直接放| 欧美在线啊啊啊 | 色综合九九| 日本三级韩三级99久久| 极品少妇久久久| 91站街按摩店老熟女熟女| 凹凸 69堂 在线播放| 开心五月深爱五月| 久这精品中文在线观看视频| 无码欧美有限公司| 日本高清_区二区三区| 日本黄色XXX| 人妻熟女一区在| 国产精品久久久| 亚洲91网站| 九九热九九| 午夜AV污污污| 91是天天| 大香蕉丝袜一级片| 日韩性爱视频在线免费观看 | 最新日本中文字幕| 四虎在线免费视频| 欧美第一页性| 2018色综合天天操| 亚洲在线观看| 九九热超碰97亚洲最新香蕉| 亚洲精品中文字幕一区在线视频 | 久久女人一区二区三区| 乱伦熟妇一区二区| 香蕉av一区二区三区| 成功精品影院| 日本日逼高清| A级国产欧美激情在线| 色婷婷综合久久久久中文一区二区| 日本性爰一道本| 加勒比性爱成人在线| 97色婷婷| 手机在线人成免费视频| 性爱综合一区二区| 久久精品久久久久久久| 久久亚码| 日韩少妇丰满亚洲| 国产精品露脸在线观看| 天天爽入口| 91电影色诱| 操久久久久久| 亚州九九九精品视频| 久热99| 国产欧美一级在线观看| 精品免费视频国产一区| 大香蕉中文201| 日韩精品一区,二区 九九...老司机| 婷婷综合久久| 91黑人无码激情在线| 中文字幕丰满子伦无码专区在线视频最新 | 目产99999久久999| 久久久性爱视频| 熟妇人妻一区二区三区| 亚洲欧美在线观看2021| 人妻精品视频一区二区三区| 欧美日韩亚洲少妇寂寞影院正在播放| 97一本大道亚洲一区| 精品久久一区二区三区四区五区| 国产三级电影免费观看| 思思热影视| 亚州欧美综合| 射 色综合| 9118禁| 熟女熟妇一区二区三区视频| 九一国产精品| 大干人妻| 中文在线视频| 九九夜精品九九在线| 中文字幕日产av人| 色婷婷丁香五月天| 九九内射在线| 亚洲日韩一区电影| 99啪啪视频| 影音先锋中文字幕日本好一区二区| 国产精品一二三区18| 亚洲超碰97| 久久精品国产亚洲5555| 人妻一区二区三区视频 | av天堂精品久久| 亚洲精品少妇| 丰满人妻aA一区二区三区| 97操| 懂色AV蜜臀无码精品APP| 欧美偷拍区| 免费少妇一区二区| 蜜乳AV免费观看| 国产亚洲福利第一页丝袜| 久9re热视频这里只有精品| 午夜福利一区二区影院| 乱伦AVxx| 亚洲成人av色网| 97玖玖人妻| TS人妖另类精品视频系列| 亚洲网站一区二区在线| 999亚洲国产视频| 亚洲午夜福利视频| 98色网| 成人五月香网在线| 一牛一区二区三区久久| 2020中文字幕在线| 玖草在线视频| 尤物网站91| 噜噜噜在线视频| 亚洲精品日日夜夜52| 欧美性爱另类综合| 日韩国产十八禁| 天天做天天爱天天高潮| 999综合色| 91日产桃蜜| 日韩熟女无码| 91人妻最真实刺激绿帽| 日韩精品一区的| 99热| 内射卯月麻衣| 亚洲爽图| 国产精品亚洲一级av第二区| 欧苏综合色综合| 久久精品视频久久久| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 性爱网站一区二区| 噜噜噜狠狠色综合| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 亚洲综合有码| 日韩黄片视频试看| 天美传媒一二三区永久网站| 亚州综合图片| 亚洲精品久久久久毛片A片拉屎 | 国产女人与拘做受视频免费| 亚洲va综合va国产va中文| 日少妇亚洲版| 天天干电影| 国模无码一区二区三区在线| heyZO天然素人无码AⅤ专区| 99热这里只有精品8| 97综合国产精品高潮久久| 大香蕉人妻久久| 亚洲欧美在线观看无码| 一本一道人妻久久一区二区三区| 亚洲激情深爱文学小说网站| 99在线无码精品秘 入口黑人| 中文字幕高清20页视频| 亚洲和欧美裸体美女双飞视频| 天天干电影| 久久av成人无码免费| 伊人久久亚洲中文字幕| 97超碰美女| 婷婷99狠狠| 风骚少妇视频中文字幕| 影视综合无码少妇| 加勒比综合九九99视频在线播放| 天天综合亚洲综合| 夜夜操美女| 伊人影院中文字幕| 色婷婷一区二区三区久久| 黄色小视频日本txt| 极品久久久久久久久久久久久久| 亚洲欧美综合| 日韩av女优在线免费一区| 999久久久久久久久| 中国国产精品一区视频| 国产亚洲 中文欧美久久| 亚洲骚男同com| 亚洲欧综合另类无码一区| 一本正道久久熟女| 久久久久久99AV无码免费网站| 色婷婷五月天| 夜夜精品视频| 性欧美另类高清| 玖玖综合视频| 爱射综合| 97色综合中文网| 五月丁香成人网| 午夜经典| 国产精品天美传媒| 亚洲啪啪综合?v一区综合精品区| 久久久久久性爱视频| 国产无码成人无码| 性欧美另类高清| 欧洲在线性爱视频| 干B| 一级黄色牲爱A级片| 天天在线91| 丁香色色网| 91亚洲情色| 欧美少妇熟女| 久久性生大片免费观看性| 亚洲av总站| www亚洲免费| 国产日韩中文字幕欧美| 九九人人操| av激情亚洲五月天| 青青草伊人久久| 超碰在线观看av不卡| 97视频在线观看网站| av在线资源| 清纯唯美亚洲| 中文一区在线日| 韩国一级做A片免费的| 死我十八禁| 吻戏激情性巴克| 日韩激情电影中文字幕| 啊啊啊久久久视频| 97国产精品国| 嗯啊抽插大香蕉网页| 99热精品在线观看| 夜夜高潮夜夜爽高清视频一| 欧美日韩操操操| 91欧美网| 精品96久久| 丁香五月性| 黑人精品XXX一区一二区| 秋霞福利网| 欧美成人黄网色网站| 国产精品网址| 啊啊啊久久久视频| 91色五月俺来也| 久久婷婷亚洲| 色图综合网| 综合97久久| 91九色丨国产丨爆乳| 99久久精品无码一区二区| 中文字幕99999| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 欧美少妇色图| 91 手机在线播放 绯色| 骚日日av| 日韩午夜国产| 97超碰美国| 太久视频| 欧美一级AAAAAAA| 欧美啪啪啪91| 中文字幕精品亚洲熟女| 九九英色视频| 色噜噜综合网| 国产色精品午夜大片| 国产精品96| 久久久久久免费电影| 大香蕉九九| 美女极品一区二区三区| 狠狠久久手机视频精品| 97在线视频观看免费| 绑缚麻绳人妻寝取完整版| 男人亚洲91首页在线| 翔田千里av一区二区三区| 亚洲国产精品9999在线观看| 8x福利精品第一福利视频导航| 久久久久国色αv免费观看| 亚洲人在线| 久久久精品国产亚洲伊人| 日本黄 R色 成 人网站| 亚欧高清在线| 亚洲日韩成人性爱视频| 欧美操逼熟女| 国产精品自在自拍视频| 久草免费在线一区二区| 国产高清免费不卡av| 日本欧美韩国国产在线| 黄色视频60分钟| 免费视频一二三区| 亚洲加勒比| 日日躁狠狠躁天天躁精品| 男人天堂 天天射| 色制服丝袜夫妻av一区| 97一本大道亚洲一区| 91色色综合| 成人一道本免费视频| 亚洲丝袜天堂| 26uuu成人影片| 春色校园综合网| 久久精品国产亚洲AV先锋| 久久婷婷五月天| 成人小电影网站tex| 国产精品一区午夜福利| 亚洲蜜臀精品视频久久| 啪啪啪综合网| 欧美A片中文字幕| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 91麻豆天美国产欧美| 九月丁香| 国产13区| 久操在97| 黑人精品欧美一区二区蜜桃| 亚州性色| 免费αV在线视频| 26uuu欧美日韩| 亚洲古典另类欧美在线| 久久久中文| 久久婷婷色综合一区二区三区| 精品人妻一区二区免费蜜桃视频| 中文AV制服乱伦| 色在线亚洲视频www| 欧美v亚洲v日韩v最新在线二区| 色婷婷五月综合激情中文字幕| 福利伊人玖玖国产| 精品久久久久久亚洲| 国产精品2020| 天天综合网~91综合网| 亚洲视频精选| 中国一级特黄大片护士| 91三级理论片播放器| 久久人人看| 很黄很污的免费网站| SUV一区二区在线看| 激情另类激情| 妇女性内射冈站HDWWWCOM| 韩国午夜理伦三级好看| 久久久草成人网站久久久草成人久久久草久久久 | 丁香婷婷久久| 男生女生啊啊啊啊| 97超碰公开| 日韩一级欧美一级国产一级台湾| 殴美在线AⅤ| 玖玖97综合| 好爽免费视频,| 久久久免费懂色| 欧美加勒比| 91久久精品中文字幕| 天天看少妇| 亚洲91射| 亚洲乱伦图片视频| 丁香五月天婷婷姐| 人妻丝袜肏逼| 一级片视频啪啪| 99综合网| 亚洲日产专区婷婷| 青青操网| 麻豆这里只有精品| 国产精品乱码久久久久久久久久久久| 欧日韩一二三f区| 日韩精品一区二区高清 | 天天色欧美| 破苞ⅩXXX性无码动漫无码| 欧美内射少妇| 亚洲网站一区二区在线| 99这里有精品| 骚熟女AV网| 无码日韩人妻av一| 目产99999久久999| 大二网站亚洲| 久久久久精| 高精欧美色| 强奸乱伦动态污图免费| baiduhicn.com。| 秋霞一集毛片观看| 国产综合操逼高清| 欧美偷偷网| 视频黄色国产一级| 另类av天堂| 内射夫妻三片| 午夜成人爽爽爽爽A片李冰冰| 国产热RE99久久6国产精品首| 日韩精品高清资源在线| 东京太热男人的天堂久久久| 日韩性爱播放| 国产2.3.4区| 欧美日日操| 性色av一区二区| 精品国产乱码久久| 欧美成不卡网| 99久久亚洲精品无码毛片潘甜甜| 97 亚洲 日韩 欧美 在线| 午夜啊啊| 国内精品999| 成人怡红院| 狠狠躁AV| 伊人黄色片| 久久中出在线| 九月丁香婷婷色| 美日韩一二三区| 欧美性爱伊人| 亚洲伊人青青草| 不卡免费av在线播放| 欧美春色| 亚洲天堂女优在线| 人妻丰满熟妇一区二区三| 欧美综合色站| 小日子操bb在线看| 日本道日本道中文字幕日本道最新日本道在线观看 | 情侣开房子拍 日韩无码 女的很漂亮| 91色狼| 97网址www| 欧美日韩啪啪电影| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 国产女人高潮视频| 欧美亚洲综合色| 欧美天天搞| 久久综合日韩亚洲欧美| 日韩乱伦AⅤ| 国产精品一区二区在钱播放| 中文字幕久热视频在线| 97超碰这里只有精品| 黄页网站成人免费| 亚洲情色第一页| 欧美在线永久天堂| 久久久久密| 91精品人妻偷情| 中文久久96| 欧美躁死她一区二区| 2023天天操夜夜操| 国产99999久久精品| a天堂视频| 日日AAvv| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 99热18这里只有精品| 国产精品极品美女视频| 亚洲色交| 97伪v| 亚洲五月丁香花狠狠干一区二区三区 | 亚洲 欧美 精品专区 极品| 极品白嫩福利在线| 无码日韩网站| 欧美日韩黄片精品在线| 亚洲乱妇p22| 热热色国产一二区AV| 夜夜一区二区| 日本人人操人人操| 手机在线播放国产福利| 欧美一二三| 偷拍导航视频网站| 亚州综合AⅤ| 午夜免费视频1000| 北约熟女超碰| 日本一级特级毛片视频| 久久大香蕉97| 亚洲青青草| 国产不卡中文字幕免费avi| 日韩人妻少妇 一区二区三区| 欧美日韩操逼动图| 欧美少妇性爱网站| 精品久久久久久中文字幕三区| 我要色综合网| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 超碰av在线| 成人日韩3| 1人人看人人摸人人操| 丝袜美腿亚洲| 夜夜躁狠狠躁日日躁av| 欧美乱妇狂野欧美在线视频| 无码视频一区二区| 日han少妇无码| 熟妇最新先锋一二三区| 久久大香蕉手机高清视频| 九九热精品| 丁香婷婷久久 | 97视频免费播放| 欲色综合| 色老大| 久久久夜夜夜| 欧美翘臀视频网站一区二区三区| www.人人摸在线视频| 青草精品视频一日本久久久久网站| 丰满人妻一区| 超碰在线成人电影| 四季av一区二区凹凸精品小说| 亚洲色图欧美色图在线播放| 日本 情色 1区2区3区| 国产一| 国产精品动态一区二区三区四四| 热的中文 热的有码 热的国产| 60秒免费小视频| 久久久九九| 欧美日本视频一区| 性生活性生大爱77AV国产| 超碰人妻久久| 国产精品高潮久久久无码| 超碰午夜| 欧美呦呦性爱| 日韩亚洲中文字幕在线| A片 AV一级在线播放观看免费| 干婷婷综合网| 殴美,日韩国产伦精品| 欧美制服另类丝袜| 久久少妇视频| 四虎av在线| 91熟女丨91老女人| 日本αv| 中日亚韩免费视频| 97福利视频| 精品91摸| 超碰97玖玖爱| 欧美日韩国产精品久久色婷婷| 免费在线视频97| 一起草三级AV电影在线观看| 中日韩熟女| 色情综合网| 日本少妇va7777| 青青草好吊| 四虎永久在线精品免费网址| laoshunv91| 9久热这里只有精品| 人人么人人操| 96久久精品一二三区色欲| 欧美嗯啊……在线观看视频免费| 激情欧美日韩女同久久| 国产深喉| 被操高清无码视频| 国产呦精品一区二区三区下载| 男人兔费天堂| 肥臀熟女福利视频一区二区| 人妻天天爽夜夜爽2| 91精品91久久久久77777俄罗斯老妇姓x| 亚洲在线网站| 99热18| 亚洲AV无码久久精品蜜桃小说| 青青草影视蜜久久| 日本三级A片网站com| 超碰99热| 91天射| 明星性猛交ⅹxxx乱大交| 老司机射| 伊人久久大香蕉线AV五月天| 欧美97在线欧| 欧美亚洲日本视频久久久| 奸色色 男人天堂 天天射| 蜜臀va69| 欧美不卡二区| 亚洲色图欧美色图制服丝袜| 酒色综合网| 91丨熟女丨丰满熟女| 大香蕉 222| 国产丝袜一区二区三区| 日本欧美韩国国产在线| 夜夜嗨一区二区| 日韩精品人妻中文字幕不卡乱码| 人人干黄色| 玖玖97综合| 亚洲男人综合网| 激情五月天插| 色综合潮| 色婷婷日韩精品一区二区三区| 成人三一级一片aaa| 青青草伊人久久| 亚洲综合首页| 四月丁香婷婷| 色综合一区二区三区| 久久9视频| 久欲AV| 家庭乱伦网站国产| 大香蕉琪琪日本女优不卡| 免费观看性欧美一级| 国产精品久久久亚洲一区| 久热网| 丰满的三级少妇欧美久久久| 人妻熟女一区二区| 天天在线91| 久草视频在线视频在线视频在线观看| 青青草色情网站视频| 黄色人人| 少妇与黑人高潮在线| 亚洲欧美国产va在线播放频| 蜜桃视频精品一区二区三区| 免费在线看黄片av| 91网站18在线观看| 国产无吗在线播放| 日韩av熟女一区二区三区成人| 久久大黄片| 91在线色| 亚洲免费在线探花| 天天射夜夜| 你懂得91| 亚洲色图A| 看日韩美女二区三区免费操逼视频| 亚洲色阁| 热天堂一区二区| 国产综合日韩伦理| 东京热精品97综合网| 中国女人内射6XXXXX| 韩国三级三级BD在线| 免费观看国产不卡av| 麻豆国产成人精品| 曰韩精品视频一区二区| 久久精品国产97欧美精品亚洲 | av日韩在线观看电影| 精品9999| 9/A片 | 蜜桃臀一区二区三区久久| 破苞ⅩXXX性无码动漫无码| 99热线麻豆| 厕所偷拍在线| 操逼www.| 香港久久久| AV色天香在线| 亚洲国产精品9999在线观看| 亚洲AV在线资源| 中文字幕在线24| 欧美一区二区三区互相| 久久超碰av在线| 爱爱60秒免费视频| 亚洲色图尤物视频| 人妻免费观看| 亚洲色人妻综合| 午夜视频好爽啊| 久久久不卡| 超碰1024久久| 国产成人自拍视频在线| 成人精品无码| 天天在线91| 日韩女优在线| 国产综合操逼高清| 麻豆国产97在线| 日韩天天本| 五月天亚洲色图| 亚洲中文电影| 青青草视频这里只有精品| 青青免费在线视频一区| 97超碰伊人| 久久久111| 亚洲天堂,男人| 亚欧视频在线| 国产精品人妻一区二区| 亚洲精品久久久久久| 玖色AV| 日本人人操人人操| 午夜男女爽爽爽影院视频| 天天欧美| 中文字幕第23区| 熟妇视频一区二区三区在线观看| 亚洲人妻av| 亚洲精品国产专区在线观看| 麻豆一区二区三区在线看| 台湾大香蕉99热| 男人的天堂不卡一区二区 | 91夜色| 欧美激情 一区| 国产 大胆 对白| 又黄又爽在线观看视频| 国内自拍 日韩激情 99| 国内精品a| 亚洲欧美国产中文视频| 亚洲美女精品九九视频| 91熟女视频网| 97超碰这里只有精品| 欧美中文字幕一区 | 男女啪啪网站免费视频| 亚洲熟女av中文字幕| 亚洲91射| 天天内射| 骚女高跟AV在线| 鸥美精品一区二区久久婷婷| 色女99一级片在线观看| 女同在线视频一区| 99熟女| 思思热在线视频精品| 思思热免费视频观看| 人人玩人人添人人澡免费| 一级岛国大片| 麻豆国产精品午夜视频| 亚洲国产成人精品999| 日韩视频中文字幕| 亚洲国产熟妇综合色专区| 天海翼久久| 大香蕉欧美国产日韩高潮| 欧美78| 精品小视频在线| 97超级欧美| 国产AV天美| 欧美视频第二页| 91路www| 九九九九精品一区| 伊人伊人LD| 亚洲凸凹超碰成人| 91超碰碰在线| 激情文学小说一区二区| 色欲久久99精品久久| 久久久久女教师免费一区 | 欧美超碰在线| 天天欧美| 中文字幕欧美丝袜07资源| 天美传媒精品一区二区| 一道α片欧美| 亚洲好看强奸乱伦| 又粗又长又爽在线观看| www成人啪啪18秘 免费| 亚洲精品国产精品乱码不99| 精品人人插人人操| 久久久久久久人妻| 中文字幕二区日韩天堂 | 国产无码一二三区| 99爱视频| 亚洲免费精品一区| 一区二区三区色综合| 久久国产999| 十八禁电影伊人网| 天天久久| av毛片aaaaa免费看| 日本操嫩b网| 超碰精品在线| 国产乱弄免费在线视频。 | 免费综合亚洲中文| 欧美性猛交美女自慰91| 青青青青草av在线观看| 热热色色综合| 91丰满| 精品国产Av无码久久久亚洲| 亚洲成熟国产精品美女| 色综合五月天| 91久久堂| 国产精品丝袜在线| 一中国女人毛片水真多| 日韩丝袜二区| 天美av在线观看| 国产精品国产| 九七超碰| 久久香蕉国产线看观看猫咪av| 99热这里| 男人网站婷婷| 神马九九| 久久一区二区三区入口| 国产极品999| 国偷自 一区| 国产日韩手机视频在线| 国产成人精品亚洲日本| 国产SV一线| 婷婷午夜清品久久久久久久性色视频观| 最新国产精品| www.五月天| 欧美少妇高潮久久91| 欧美日韩97| 把腿张开老子CAO烂你| 青青国产精品在线| 久久久999国产精品| 日韩三级在线观看网站| AV九九| 久久噜| 久久天天艹| 95精品在线| 极品久久久久久久久久久久久久| 日韩三级伊人| 你懂得91| 欧美韩日精品资源| 中文乱码字字幕在线第5页| 日韩婷婷| 亚洲素人网| 狠狠超| 色婷亚洲五月在线观看| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 九九九九9999| 免费黄色视频网址| 伊人精品国产| 麻豆国产精品午夜视频| 9久综合网| 天天影视综合色| 黄片不用下载在线观看| 人妻酒店出差被中出免费在线播放| 精品无码久久久久久久久果冻糖心| 最新日韩黄片| 91啪9色| 久久精品| 长长久久88视频| 亚洲视频精选| 久操不卡视频| 超碰色美女| 國產尤物AV尤物在線觀看| 狠狠做深爱婷婷久久二区| 91在线精品一区二区三区| 久久午夜伦| 久久久久久加勒比| 欧美很很操视频| 久久这里只精品| 亚洲AV永久无码一区仙野| 日本 情色 1区2区3区| 色成人Www精品永久观看| 亚洲精品人伦一区二区| 2019久久久久久久久福利| 亚洲图片 激情小说| 99老司机精品视频在线观看| 午夜呻吟欧美| 囯产精品久久久久久久久久梁医生| 久久超碰爱| 91丝袜在线观看| 亚洲欧洲小说图片视频| V A在线| 96AV久久久| 天天插夜夜操| 欧美青青视频| 久久精品亚洲成a人天堂| 大干人妻| 亚洲色图大香| 亚洲色天| 91蜜臀熟女| 成人无遮挡毛片免费看| 自拍视频大全亚洲专媒视频/一区二区三区 | 超碰久久草| 国产白嫩漂亮KTV在线| 国产自偷| 伊人AAA| 日韩AV无码网站| 97精品国产手机| 人妻熟女av国产网站| 一级AAA片一区二区三区| 嗯嗯嗯啊啊啊在线免费观看| 懂色Av| 走光一区92下载| 国产精品久久久久久久久AV大片| 亚洲日韩欧美一区二区| 国产激情视频在线观看| 亚洲色交| 日韩欧美水蜜桃人妻| 免费在线观看国内色片网站网址| 97国产精品一区二区传媒公司| AV天堂丝袜| 人人插人人摸人人| 亚洲一区二区中文字幕| yazhousetuoumei| 国产熟女完整版中字| 国产日韩怡红院| 国产精品乱人伊人网| 色嗨嗨在线| 激情欧美97| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 一级乱伦网站| 色拍偷亚洲| 日本大片日本一区二区免费高清| 秋霞成人一级在线观看| 国产一区二区在线看| 97天天操天天干| 日本123区操B视频| 久久精品欧美一区二区三区不卡| 国产精品大屁股999| 色综合加勒比四四季| 99热这里只有精品地址| 欧美精品23| 欧美成人贴图| 国产精品久久久久久久久久久久久久久 | 九九九九精品视频| 小骚逼被操的爽不爽| 人妻丝袜无 码视频专区| 亚一综合久久久久久久久久| 蜜臀AV午夜精品久| 亚洲91射| 久久夜色一区二区| 亚洲天堂区| 亚洲97久久精品亚洲| 欧美Ⅴ性爱| 国产精品另类一区大香蕉| 日韩ab网| 免费夜夜爱黄色视频毛片| 亚洲午夜福利视频| 思思视频免费看网站| 亚洲天天操| 人人九九精| 久久久久斤小| 97超碰无码网| 青青操97| 国产免费一区二区在线A片视频| AV和黑人在线播放| 97亚洲精品| 99999国产| 蜜桃臀AV在线| 91男人天堂网| 老熟妇综合| 日本一区99| 欧美黄页在线| 日韩人妻精品久久久久| 无码在线亚洲| 久久久免费的精品| 国产一区二区成人av在线播放| 福利视频网站| 久区视频| 精品人妻15区| 九九九久| 精品在线78| 97se综合网| 天天摸天天碰天天添青青| 九九色综合| 日韩一级片在线看| 乱伦系列一区二区| 操逼操网| 去干网最新版| 性开放中文AV高清无码免费看| 无码日韩人妻av一| 强奸国产精品视频| 久久直播国产| 小日子操bb在线看| 老熟女乱子伦中文字幕一区二区| 波多野结衣AV无码一区| 久久久久久久久久va| 色综合一本| 欧美1区二区三区公司 | 黄色交缠性感爆操91国产精品免费一区二区三区 | 亚洲第一免费视频| 芊芊操逼视频无码| 亚洲国产一区二区入口| 小视频玖玖| 搡老女人老妇女AAA一VU麻豆| 久久久久久国产精品免费网站| 精品午夜福利国产一区二区在线观看| 青青青国产手线观看视频2| 欧美区亚洲区偷拍区| 黄色人人| 在线可观看的黄色网址| 伊人精品国产| 天天cao在线| 男人天堂2017| 国产又粗又大硬免费色网视频| 香港久久久| 精品人妻一区二区三区四区| 亚洲国产天堂| 91夜色| 亚洲精品一二牛牛| 男人的天堂午夜av| 国产欧美后入| 久久中文字幕女同性恋一区| 欧美桃色网| 久久大黄片| 欧美一区二区三区互相| 欧美亚洲日本视频久久久| 人人插人人搞人人操| 亚洲……91| 亚洲蜜臀懂色| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 天天插天天操| 97精品国产97久久久| 欧美伦乱爱| 国产suv精品一区二六| 丁香七月婷婷| 亚州综合在线| 国产精品999zyz| 艹我哪美一区无码| 久久人爽|