3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言8086笔记

發(fā)布時(shí)間:2024/8/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言8086笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(xué)到的知識(shí),很大的一部分會(huì)被忘卻,而被忘記的知識(shí)的影子卻保護(hù)你避免陷入很多的錯(cuò)覺。——伊頓公學(xué)校長威廉·考利

為什么要學(xué)習(xí)匯編語言?

  匯編語言是很多相關(guān)課程的重要基礎(chǔ),比如:操作系統(tǒng)、接口技術(shù)等。它是底層編程語言,是計(jì)算機(jī)系統(tǒng)提供給用戶最快最有效的語言,也是能對硬件直接編程的語言。因此,對空間和時(shí)間要求很高的程序,或需要直接控制硬件的程序,必須使用匯編語言進(jìn)行程序設(shè)計(jì)。

  • 程序員是個(gè)大江湖之我來自編譯門

匯編語言的特點(diǎn)

  • 面向機(jī)器的低級語言,與處理器密切相關(guān)。通常是為特定的計(jì)算機(jī)或計(jì)算機(jī)系列專門設(shè)計(jì)的。
  • 保持了機(jī)器語言的優(yōu)點(diǎn),具有直接簡捷的特點(diǎn)。
  • 可有效地訪問、控制計(jì)算機(jī)的各種硬件設(shè)備, 如磁盤、存儲(chǔ)器、CPU、I/O端口等。
  • 目標(biāo)代碼簡短,占用內(nèi)存少,執(zhí)行速度快,是高效的程序設(shè)計(jì)語言。
  • 經(jīng)常與高級語言配合使用,應(yīng)用十分廣泛。
  • 匯編語言的主要應(yīng)用場合

  • 要求執(zhí)行效率高、反應(yīng)快的領(lǐng)域,如:操作系統(tǒng)內(nèi)核,實(shí)時(shí)系統(tǒng)等;
  • 與硬件資源密切相關(guān)的軟件開發(fā),如:設(shè)備驅(qū)動(dòng)程序等;
  • 大型系統(tǒng)性能的瓶頸,或頻繁被使用的子程序或程序段;高級繪圖程序、視頻游戲程序一般是用匯編語言編寫的。
  • 受存儲(chǔ)容量限制的應(yīng)用領(lǐng)域,如:家用電器的計(jì)算機(jī)控制功能等。
  • 學(xué)習(xí)資源

  • 匯編網(wǎng)——王爽《匯編語言》論壇
  • 國家精品課程網(wǎng)——溫冬嬋《匯編語言》 錢曉捷《32位匯編語言程序設(shè)計(jì)》
  • 經(jīng)典匯編語言教程:匯編語言程序設(shè)計(jì)
  • BCD碼

      BCD碼(Binary Coded Decimal)是一種二-十進(jìn)制的編碼,它使用4位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù)。最常用的BCD碼是8421碼,又叫NBCD碼(Natural Binary Coded Decimal Code),由于4位二進(jìn)制數(shù)可表示16種狀態(tài),只取前10種狀態(tài)0000-1001來表示十進(jìn)制數(shù)碼0-9,從左到右每位二進(jìn)制數(shù)的權(quán)分別是8、4、2、1,因此又叫8421碼。
      例如:十進(jìn)制數(shù)1258對應(yīng)的BCD碼是0001001001011000;
    反之,BCD碼1001 1000 0111 0010對應(yīng)的十進(jìn)制數(shù)是9872。

      壓縮BCD碼:用一個(gè)字節(jié)表達(dá)兩位BCD碼,比如 0100 1001表示49。
      非壓縮BCD碼:將8位二進(jìn)制的高4位設(shè)置為0,僅用低4位表達(dá)一位BCD碼。比如00000100 00001001表示49。

    80x86微處理器

      80X86是美國Intel公司生產(chǎn)的微處理器系列。
      
      微處理器:把運(yùn)算器和控制器集成在一個(gè)芯片上,構(gòu)成的中央處理器(CPU)。
      
      微機(jī):即微計(jì)算機(jī)系統(tǒng),由微處理器配上存儲(chǔ)器、輸入輸出設(shè)備和系統(tǒng)軟件等構(gòu)成。各硬件用系統(tǒng)總線連接在一起。
      
      系統(tǒng)總線包括數(shù)據(jù)總線(DB)、地址總線(AB)和控制總線(CB)三組。

    基于微處理器的計(jì)算機(jī)系統(tǒng)構(gòu)成

    數(shù)據(jù)總線寬度

      數(shù)據(jù)總線寬度16位:決定了數(shù)據(jù)的傳輸速率。

    機(jī)器字長16位

      機(jī)器字長為16位:可表示數(shù)的范圍為0000~FFFFH(2^16 = 64K)

    地址總線寬度

      地址總線寬度為20位:尋址空間為2^20 = 1024KB = 1MB。

    8086總線的工作周期

      計(jì)算機(jī)是在時(shí)鐘控制下進(jìn)行工作的,若干個(gè)時(shí)鐘完成一個(gè)基本操作,一個(gè)基本操作就是一個(gè)總線周期,CPU有若干種典型操作,構(gòu)成相應(yīng)的總線周期。如存儲(chǔ)器的讀寫總線周期,I/O讀寫總線周期等。

      執(zhí)行一條指令的時(shí)間稱為指令周期,指令周期是由若干總線周期構(gòu)成。

      8086/8088的基本總線周期是由4個(gè)時(shí)鐘周期組成,在執(zhí)行WAIT指令或READY引腳輸入的狀態(tài)為低電平時(shí),都需要在T3T4之間插入1個(gè)或若干個(gè)等待時(shí)鐘周期Tw

    T1狀態(tài)

      CPU向多路復(fù)用總線上發(fā)送地址信息,指出要尋址的內(nèi)存單元地址或I/O端口地址。這期間CPU還要ALE(正向脈沖),在ALE下降沿將內(nèi)存單元地址或I/O端口地址打入地址鎖存器。

    T2狀態(tài)

      CPU從總線上撤銷有效地址,使地址總線低16位呈高阻狀態(tài),為數(shù)據(jù)傳輸做準(zhǔn)備。總線的高4位(A19A16)輸出總線周期的狀態(tài)信息,用于表示中斷允許狀態(tài)及正在使用的段寄存器名。

    T3狀態(tài)

      A19A16上的狀態(tài)信息不變,地址總線低16位上出現(xiàn)CPU要寫出的或準(zhǔn)備讀入的數(shù)據(jù)。若外設(shè)與內(nèi)存來不及與總線交換數(shù)據(jù),則應(yīng)通過CPU的READY信號,在T3前沿(下降沿)之前向CPU申請插入等待狀態(tài)TW,在T3TW前沿查詢READY信號,查到高電平則結(jié)束等待狀態(tài),進(jìn)入下一狀態(tài)。否則繼續(xù)插入等待。

    T4狀態(tài)之總線周期結(jié)束

      在一個(gè)總線周期之后,若不立即進(jìn)入下一個(gè)總線周期,即CPU不與內(nèi)存或外設(shè)交換數(shù)據(jù)或者指令隊(duì)列已滿,系統(tǒng)總線處于空閑狀態(tài),CPU執(zhí)行總線空閑周期,總線空閑周期一般由一個(gè)或多個(gè)時(shí)鐘周期組成。

    中央處理器

      CPU包含了三個(gè)部分:算術(shù)邏輯、控制邏輯、寄存器組。

    總線接口部件BIU (Bus Interface Unit)

      內(nèi)部設(shè)有四個(gè)段地址寄存器,一個(gè)指令指針寄存器IP,一個(gè)6字節(jié)指令隊(duì)列緩沖器,20位地址加法器和總線控制電路。

      主要功能:根據(jù)執(zhí)行部件EU的請求,負(fù)責(zé)從內(nèi)存單元中預(yù)取指令,并將它們送到指令隊(duì)列緩沖器暫存。即負(fù)責(zé)完成CPU與存儲(chǔ)器或I/O設(shè)備之間的數(shù)據(jù)傳送。

    執(zhí)行部件EU(Execution Unit)

      執(zhí)行部件中包含算術(shù)邏輯單元(ALU)、通用寄存器、狀態(tài)標(biāo)志寄存器、數(shù)據(jù)暫存寄存器和執(zhí)行部件的控制電路。
      
      主要功能:從BIU的指令隊(duì)列中取出指令代碼,經(jīng)指令譯碼器譯碼后執(zhí)行指令所規(guī)定的全部功能。執(zhí)行指令所得結(jié)果或執(zhí)行指令所需的數(shù)據(jù),都由EU向BIU發(fā)出命令,對存儲(chǔ)器或I/O接口進(jìn)行讀/寫操作。

    寄存器組

    數(shù)據(jù)寄存器

    名稱寄存器英文名寄存器說明
    AXAccumulator累加寄存器,常用于運(yùn)算;在乘除等指令中指定用來存放操作數(shù),另外,所有的I/O指令都使用這一寄存器與外界設(shè)備傳送數(shù)據(jù)。
    BXBase基址寄存器,常用于存放存儲(chǔ)單元地址。
    計(jì)算地址的時(shí)候用作基地址寄存器,用于擴(kuò)展尋址,起變址的作用。
    CXCount計(jì)數(shù)寄存器,一般作為循環(huán)操作等指令中的隱含計(jì)數(shù)器;常用于保存計(jì)算值,如在移位指令,循環(huán)(loop)和串處理指令中用作隱含的計(jì)數(shù)器。
    DXCount數(shù)據(jù)寄存器,常用來存放雙字?jǐn)?shù)據(jù)的高16位,或存放外設(shè)端口地址,比如雙字的乘除法。
    存放操作數(shù)和列表數(shù)據(jù),在某些I/O操作期間,用來,在乘除運(yùn)算中有專用。

    共同特點(diǎn)
      這四個(gè)十六位的寄存器可以分為:

    • 高8位:AH,BH, CH,DH;
    • 低8位:AL,BL,CL,DL。
      • 這兩組八位寄存器可以分別尋址,并單獨(dú)使用。

    指針寄存器

    寄存器名稱寄存器英文名寄存器說明
    SPStack Pointer堆棧指針寄存器。與SS(堆棧段寄存器)配合使用來確定堆棧段棧頂?shù)奈恢?#xff0c;也就是說SP用于存放棧頂?shù)钠频刂贰?/td>
    BPBase Pointer基址指針寄存器,可用作SS的一個(gè)相對基址位置(用于存放堆棧段中某一存儲(chǔ)單元的偏移地址。)

      說明:指針寄存器和變址寄存器只能按16位進(jìn)行存取操作,主要用來形成操作數(shù)的地址,用于堆棧操作和變址運(yùn)算中計(jì)算操作數(shù)的有效地址。

    變址寄存器

    寄存器名稱寄存器英文名寄存器說明
    SISource Index源變址寄存器可用來存放相對于DS段之源變址指針,也就是說,源操作數(shù)偏址存放在SI中。
    DIDestination Index目的變址寄存器,可用來存放相對于 ES段的目的變址指針,也就是說,目的操作數(shù)偏址存放在DI中。

    說明:

      SI和DI一般與數(shù)據(jù)段寄存器DS聯(lián)合使用,用來確定數(shù)據(jù)段中某一存儲(chǔ)單元的地址。這兩個(gè)變址寄存器有自動(dòng)增量和自動(dòng)減量的功能,所以用來變址是十分方便的。
      
      在串處理中,SI和DI作為隱含的源變址和目的變址寄存器,此時(shí)SI和DI聯(lián)用,DI和附加段寄存器ES聯(lián)用,分別達(dá)到了在數(shù)據(jù)段附加段尋址的目的。
      
      指針寄存器和變址寄存器只能按16位進(jìn)行存取操作,主要用來形成操作數(shù)的地址,用于堆棧操作和變址運(yùn)算中計(jì)算操作數(shù)的有效地址。

    指令指針I(yè)P(Instruction Pointer)

      指令指針I(yè)P是一個(gè)16位專用寄存器(指令指針寄存器),它指向當(dāng)前需要取出的指令字節(jié),當(dāng)BIU從內(nèi)存中取出一個(gè)指令字節(jié)后,IP就自動(dòng)加上指令長度的值,指向下一個(gè)指令字節(jié)。
      
      注意:IP指向的是指令地址的段內(nèi)地址偏移量,又稱偏移地址(Offset Address)或有效地址(EA,Effective Address),程序不能直接訪問IP。

      任意時(shí)刻,CPU將CS:IP指向的內(nèi)存單元中的內(nèi)容看作指令。

    標(biāo)志寄存器FR(Flag Register)

      8086有一個(gè)18位的標(biāo)志寄存器FR,在FR中有意義的有9位,其中6位是狀態(tài)位,3位是控制位

      標(biāo)志寄存器FR:

    條件標(biāo)志

      狀態(tài)信息是由中央處理機(jī)根據(jù)計(jì)算結(jié)果自動(dòng)設(shè)置的。


    標(biāo)志名稱說明
    OF溢出標(biāo)志位OF(overflow flag)用于反映有符號數(shù)加減運(yùn)算所得結(jié)果是否溢出。
    如果運(yùn)算結(jié)果超過當(dāng)前運(yùn)算位數(shù)所能表示的范圍,則稱為溢出溢出時(shí)OF=1,否則OF= 0。
    注意,這里所講的溢出,只是對有符號數(shù)運(yùn)算而言,對無符號數(shù)沒有意義。
    SF符號標(biāo)志SF(sign flag)用來反映運(yùn)算結(jié)果的符號位,它與運(yùn)算結(jié)果的最高位相同。在微機(jī)系統(tǒng)中,有符號數(shù)采用補(bǔ)碼表示法,所以,SF也就反映運(yùn)算結(jié)果的正負(fù)號。正數(shù)SF=0,負(fù)數(shù)SF為1。
    注意:SF是對有符號數(shù)運(yùn)算有意義的標(biāo)志位。
    ZF零標(biāo)志ZF(zero flag)用來反映運(yùn)算結(jié)果是否為0。如果運(yùn)算結(jié)果為0,則其值為1,否則其值為0。在判斷運(yùn)算結(jié)果是否為0時(shí),可使用此標(biāo)志位。
    AF輔助進(jìn)位標(biāo)志AF(auxiliary flag)記錄運(yùn)算時(shí)第3位(字節(jié)運(yùn)算)或第7位(字運(yùn)算)產(chǎn)生的進(jìn)位或借位值。例如,執(zhí)行加法指令時(shí)第3位有進(jìn)位時(shí)AF=1,否則AF=0。
    PF奇偶標(biāo)志PF(parity flag)用于反映運(yùn)算結(jié)果中“1”的個(gè)數(shù)的奇偶性。當(dāng)結(jié)果操作數(shù)中1的個(gè)數(shù)為偶數(shù)時(shí)PF=l,否則PF=0。
    CF進(jìn)位標(biāo)志CF(carry flag)主要用來反映運(yùn)算是否產(chǎn)生進(jìn)位或借位。當(dāng)最高有效位有進(jìn)位或借位時(shí)CF=1,否則置CF=0。
    注意:CF是對無符號數(shù)運(yùn)算有意義的標(biāo)志位

      無符號數(shù)比較示例:
      


    控制標(biāo)志

      控制標(biāo)志是系統(tǒng)程序或用戶程序根據(jù)需要用指令設(shè)置的。

    標(biāo)志名稱說明
    DF方向標(biāo)志DF(direction flag)位用來決定在串操作指令執(zhí)行時(shí)有關(guān)指針寄存器發(fā)生調(diào)整的方向。當(dāng)DF位為1時(shí),每次操作后使變址寄存器SI和DI減量;當(dāng)DF為0時(shí),則使SI和DI增量。
    IF中斷允許標(biāo)志IF(interrupt flag)位用來決定CPU是否響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請求。但不管該標(biāo)志為何值,CPU都必須響應(yīng)CPU外部的不可屏蔽中斷所發(fā)出的中斷請求,以及CPU內(nèi)部產(chǎn)生的中斷請求。具體規(guī)定如下:
    (1)當(dāng)IF=1時(shí),CPU可以響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請求;
    (2)當(dāng)IF=0時(shí),CPU不響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請求。
    總的來說:IF為1時(shí),開中斷,否則關(guān)中斷。
    TF跟蹤標(biāo)志TF(trap flag), 也叫做陷阱標(biāo)志。該標(biāo)志可用于程序調(diào)試。TF標(biāo)志沒有專門的指令來設(shè)置或清楚。
    (1)如果TF=1,則CPU處于單步執(zhí)行指令的工作方式,此時(shí)每執(zhí)行完一條指令,就顯示CPU內(nèi)各個(gè)寄存器的當(dāng)前值及CPU將要執(zhí)行的下一條指令。
    (2)如果TF=0,則處于連續(xù)工作模式。
    總的來說:TF=1時(shí),每條指令執(zhí)行完后產(chǎn)生陷井,TF=0時(shí),CPU正常工作不產(chǎn)生陷井。

    Debug中標(biāo)志位的符號表示

    標(biāo)志10
    OFOVNV
    DFDNUP
    IFEIDI
    SFNGPL
    ZFZRNZ
    AFACNA
    PFPEPO
    CFCYNC

    標(biāo)志寄存器FLAGS

      這是一個(gè)存放條件碼標(biāo)志、控制標(biāo)志和系統(tǒng)標(biāo)志的寄存器。

    段寄存器(Segment Register)

      為了運(yùn)用所有的內(nèi)存空間,8086設(shè)定了四個(gè)段寄存器,專門用來保存段地址:

    名稱全稱說明
    CS(Code Segment)代碼段寄存器代碼段存放當(dāng)前正在運(yùn)行的程序
    DS(Data Segment)數(shù)據(jù)段寄存器數(shù)據(jù)段存放當(dāng)前正在運(yùn)行程序所有的數(shù)據(jù),如果程序使用了串處理指令,則其操作數(shù)也會(huì)存放在數(shù)據(jù)段中。
    處理串的時(shí)候,DS默認(rèn)為源串。
    SS(Stack Segment)堆棧段寄存器定義了堆棧所在的區(qū)域。
    ES(Extra Segment)附加段寄存器這是一個(gè)輔助的數(shù)據(jù)區(qū),也是串處理指令的目的操作數(shù)存放區(qū)。
    處理串的時(shí)候,ES默認(rèn)為目的串。

    附錄

    • 寄存器介紹

    存儲(chǔ)器

      存儲(chǔ)器是計(jì)算機(jī)的記憶部件,用來存放程序和數(shù)據(jù)。按所在的位置,存儲(chǔ)器可以分成主存儲(chǔ)器和輔助存儲(chǔ)器。
      
      主存儲(chǔ)器存放當(dāng)前正在執(zhí)行的程序和使用的數(shù)據(jù),CPU可以直接存取,它由半導(dǎo)體存儲(chǔ)器芯片構(gòu)成,其成本高,容量小,但速度快。
      
      輔助存儲(chǔ)器可用來長期保存大量程序和數(shù)據(jù),CPU需要通過I/O接口訪問,它由磁盤或光盤構(gòu)成,其成本低,容量大,但速度較慢。

    存儲(chǔ)單元

      存儲(chǔ)器被劃分為若干個(gè)存儲(chǔ)單元,每個(gè)存儲(chǔ)單元有一個(gè)惟一的存儲(chǔ)器地址,從0開始順序編號,存儲(chǔ)單元的地址是無符號數(shù), n位二進(jìn)制數(shù)共能表示2^n個(gè)存儲(chǔ)單元的地址。

    類型

    Name全稱說明
    DBdefine byte定義字節(jié)類型變量,一個(gè)字節(jié)數(shù)據(jù)占1個(gè)字節(jié)單元,讀完一個(gè),偏移量加1
    BWdefine word定義字類型變量,一個(gè)字?jǐn)?shù)據(jù)占2個(gè)字節(jié)單元,讀完一個(gè),偏移量加2
    DDdefine double(word)定義雙字類型變量,一個(gè)雙字?jǐn)?shù)據(jù)占4個(gè)字節(jié)單元,讀完一個(gè),偏移量加4

    字地址

      字地址:一個(gè)字存放到存儲(chǔ)器要占用連續(xù)的兩個(gè)字節(jié)單元。字的低字節(jié)(低8位)存放在低地址中,高字節(jié)(高8位)存放在高地址中,字單元的地址用低地址表示。
      例如:34560H的字單元的內(nèi)容是1234H,而地址為78780H時(shí)字單元的內(nèi)容是3332H。記作:

    • (34560H)=1234H
    • (78780H)= 3332H

        同一個(gè)地址既可以看成字節(jié)單元,也可以看作是字單元、雙字單元、或者是4字單元的地址,這要根據(jù)使用情況而定。字單元地址可以是偶數(shù),也可以是奇數(shù)。但是,在8086和80286中,訪問存儲(chǔ)器(要求取數(shù)或者存數(shù))都是以字為單元進(jìn)行的,也就是說,機(jī)器是以偶地址訪問存儲(chǔ)器的。這樣,對于奇地址的字單元,要取一個(gè)字需要訪問二次存儲(chǔ)器,當(dāng)然,這樣做需要花費(fèi)較多的時(shí)間。

        存儲(chǔ)器有這樣一個(gè)特性:它的內(nèi)容取之不盡的。也就是說,從某個(gè)單元取出其內(nèi)容后,該單元仍然保持著原來的內(nèi)容不變,可以重復(fù)取出,只有存入新的信息后,原來保存的內(nèi)容就自動(dòng)丟失了。

    各類存儲(chǔ)器芯片

      從讀寫屬性上看分為兩類:

    • 隨機(jī)存儲(chǔ)器(RAM)和只讀存儲(chǔ)器(ROM)
    • 從功能和連接上分類:
      • 隨機(jī)存儲(chǔ)器RAM
      • 裝有BIOS的ROM
      • 接口卡上的RAM

      所有的物理存儲(chǔ)器被看作一個(gè)由若干存儲(chǔ)單元組成的邏輯存儲(chǔ)器;每個(gè)物理存儲(chǔ)器在這個(gè)邏輯存儲(chǔ)器中占有一個(gè)地址段,即一段地址空間;CPU在這段地址空間中讀寫數(shù)據(jù),實(shí)際上就是在相對應(yīng)的物理存儲(chǔ)器中讀寫數(shù)據(jù)。

    寄存器與存儲(chǔ)器的比較

    實(shí)模式存儲(chǔ)器尋址

      8086CPU的地址線是20位的,這樣最大可尋址空間應(yīng)為220=1MB,其物理地址范圍從00000H~FFFFFH。
      
      而8086CPU寄存器都是16位的,僅能表示地址范圍 0000H ~ FFFFH(64KB) 。那么,這1MB(2^20)空間如何用16位寄存器表達(dá)呢?
      
      根據(jù)要求可把1M字節(jié)地址空間劃成若干邏輯段。每個(gè)邏輯段必須滿足兩個(gè)條件:
      
      (1)邏輯段的起始地址(簡稱段首址)必須是16的倍數(shù)
      (2)邏輯段的最大長度為64K(2^6)。
      
      按照這兩個(gè)條件,1M字節(jié)地址空間最多可劃分成64K個(gè)邏輯段,最少也要?jiǎng)澐殖?6個(gè)邏輯段。邏輯段與邏輯段可以相連,也可以不連,還可以重疊。

    邏輯地址(LA)和物理地址(PA)

    物理地址

      就是存儲(chǔ)器的實(shí)際地址,它是指CPU和存儲(chǔ)器進(jìn)行數(shù)據(jù)交換時(shí)所使用的地址(20位)。

    邏輯地址

      是在程序中使用的地址(16位) ,它由段地址和偏移地址兩部分組成。邏輯地址的表示形式為“段地址∶偏移地址”。

    • 段地址:是指邏輯段在主存中的起始位置。
    • 段內(nèi)偏移地址:是指主存單元距離段首址的偏移量,簡稱偏移地址,用EA來表示,由于限定每段不超過64KB,所以偏移地址可以用16位數(shù)據(jù)表示。
    • 物理地址形成:物理地址用PA表示, 將邏輯地址中的段地址左移4位,加上偏移地址就得到20位物理地址。
      • 物理地址 = 段地址 x 16 + 偏移地址

    段的概念

    錯(cuò)誤認(rèn)識(shí):
      內(nèi)存被劃分成了一個(gè)一個(gè)的段,每一個(gè)段有一個(gè)段地址。
    正確認(rèn)識(shí):
      內(nèi)存并沒有分段,段的劃分來自于CPU,由于8086CPU用“(段地址×16)+偏移地址=物理地址”的方式給出內(nèi)存單元的物理地址,使得我們可以用分段的方式來管理內(nèi)存。

    8086PC工作過程的簡要描述

    • 1)從CS:IP指向內(nèi)存單元讀取指令,讀取的指令進(jìn)入指令緩沖器;
    • 2)IP = IP + 所讀取指令的長度,從而指向下一條指令;
    • 3)執(zhí)行指令。 轉(zhuǎn)到步驟 (1),重復(fù)這個(gè)過程。
    • 在 8086CPU 加電啟動(dòng)或復(fù)位后( 即 CPU剛開始工作時(shí))CS和IP被設(shè)置為CS=FFFFH,IP=0000H,即在8086PC機(jī)剛啟動(dòng)時(shí),CPU從內(nèi)存FFFF0H單元中讀取指令執(zhí)行,FFFF0H單元中的指令是8086PC機(jī)開機(jī)后執(zhí)行的第一條指令。

    匯編指令

    指令格式

    • ASMARM的專欄 - 淺談ARM 匯編中的標(biāo)號(Labels)

    1、雙操作數(shù)指令(二地址指令)

    • 格式:[標(biāo)號:] 操作符 DST,SRC [;注釋]
    • 操作規(guī)定:
      • 1)DST與SRC應(yīng)為同種操作類型且類型明確,即同為字節(jié)類型或字類型。
      • 2)DST不能是立即數(shù)。
      • 3)SRC和DST不能同時(shí)為存儲(chǔ)器操作數(shù)(mem) 。
      • 4)操作結(jié)束后,運(yùn)算結(jié)果存入DST中,SRC內(nèi)容不變。
    • 例如:
    MOV AX,BX ;將BX寄存器中的16位數(shù)送到AX寄存器。 MOV AX,BL ;這句話是錯(cuò)誤的

    2、單操作數(shù)指令(一地址指令)

    • 格式:[標(biāo)號:] 操作符 DST [;注釋]
    • 操作規(guī)定:
      • 1)DST類型必須明確即為字節(jié)類型或字類型,不能是模糊類型
      • 2)操作對象為目的操作數(shù),操作結(jié)束后結(jié)果存入DST中
      • 3)DST不能是立即數(shù),只能是寄存器操作數(shù)(reg) 或存儲(chǔ)器操作數(shù)(mem)。
    DEC CX ;將計(jì)數(shù)器CX的內(nèi)容減1 。

    3、無操作數(shù)指令(零地址指令)

    • 格式:[標(biāo)號:] 操作符 [;注釋]
    • 操作規(guī)定:指令中只有操作碼,不含操作數(shù),這種指令有兩種可能:
      • 1)無需任何操作數(shù)。如停機(jī)指令(HLT)、空操作指令(NOP)等。
      • 2)所需操作數(shù)是隱含指定的,操作時(shí)取固定操作數(shù)進(jìn)行操作。如進(jìn)位位置0(CLC)、方向標(biāo)志置0(CLD)。

    尋址方式

      定義:尋址方式是指尋找指令中操作數(shù)所在地址的方法
      常用的尋址方式有:立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、基址加變址、隱含尋址等
      尋找指令中所需要操作數(shù)存放地址的方式或者程序轉(zhuǎn)移時(shí)尋找轉(zhuǎn)移地址的方式稱為尋址方式,因而尋址方式有兩大類:一類是數(shù)據(jù)尋址方式,另一類是轉(zhuǎn)移地址尋址方式。
      由于80x86指令涉及四種操作數(shù):立即操作數(shù)(data)、寄存器操作數(shù)(reg)、存儲(chǔ)器操作數(shù)(mem)和隱含操作數(shù),因此,數(shù)據(jù)尋址方式又可對應(yīng)四種尋址方式,即:立即尋址、寄存器尋址、存儲(chǔ)器尋址和固定尋址。

    數(shù)據(jù)尋址方式-立即尋址

      操作數(shù)直接包含在指令中,它緊跟在指令操作碼后面,它作為指令存放在存儲(chǔ)器代碼段中,這種操作數(shù)稱為立即數(shù)。立即數(shù)可以是8位,也可以是16位。

    MOV AX,1234H ;(AX)=1234H

      立即尋址方式用來表示常數(shù),它常用于給寄存器或內(nèi)存單元賦初值。需要強(qiáng)調(diào)的是,立即尋址只能用于源操作數(shù),不能用于目的操作數(shù),且源操作數(shù)的長度應(yīng)該與目的操作數(shù)的長度一致。

      立即數(shù)可以為8位,也可以是16位;規(guī)定立即數(shù)只能是整數(shù),不能是小數(shù)、變量或者其他類型的數(shù)據(jù)。

    數(shù)據(jù)尋址方式-寄存器尋址

      操作數(shù)直接存放在由指令指明的寄存器中。在匯編指令中直接書寫寄存器名,16位寄存器操作數(shù)可以是AX、BX、CX、DX、SI、DI、BP、SP、DS、ES、SS、CS等;8位寄存器操作數(shù)只能是AH、AL、BH、BL、CH、CL、DH、DL。
      指令指針寄存器IP和標(biāo)志寄存器FLAGS一般不直接出現(xiàn)在程序中。
      此尋址方式由于存取操作數(shù)直接從CPU內(nèi)部寄存器中獲得,不需訪問存儲(chǔ)器,因而指令執(zhí)行的速度快。
       寄存器尋址既可用于源操作數(shù),又可用于目的操作數(shù),應(yīng)用頻率最高。
      注意:CS不能作為目的操作數(shù),因?yàn)镃S:IP控制著程序指令序列的執(zhí)行順序,不能在程序中由指令隨意改變。

    數(shù)據(jù)尋址方式-存儲(chǔ)器尋址

      存儲(chǔ)器尋址方式的操作數(shù)都是存放在除代碼段以外的存儲(chǔ)區(qū)中,一般是數(shù)據(jù)段、附加段、堆棧段中的存儲(chǔ)單元。指令中給出的是存儲(chǔ)單元的地址或產(chǎn)生存儲(chǔ)單元地址的表達(dá)式。
      在匯編語言源程序中,存儲(chǔ)單元地址是采用邏輯地址的形式表示的,即:段首址:段內(nèi)偏移地址。段首址存放在某個(gè)段寄存器中,段內(nèi)偏移地址即有效地址EA是由3個(gè)地址分量的某種組合求得,這3個(gè)地址分量是:位移量、基址(BX,BP)、變址(SI,DI) 。
      這3個(gè)地址分量的不同組合,使形成有效地址EA的方法不同,相應(yīng)有以下5種不同的存儲(chǔ)器操作數(shù)尋址方式:直接尋址、寄存器間接尋址、寄存器相對尋址、基址變址尋址、相對基址變址尋址。

    直接尋址方式

      直接尋址是最簡單的存儲(chǔ)器尋址,操作數(shù)的有效地址EA由指令直接給出,只包含位移量。它主要用于存取簡單變量。

    MOV AX, [2000H]

      EA=2000H, 假設(shè)(DS)=3000H, 那么PA=32000H

      對使用直接尋址方式需說明以下幾點(diǎn):

    • 操作數(shù)默認(rèn)隱含的段為數(shù)據(jù)段 DS
    • 若操作數(shù)在代碼段、堆棧段或附加段中,可使用段跨越前綴 。MOV AX, ES: [2000H]
    • 指令中操作數(shù)的EA既可以是一個(gè)數(shù)字地址,也可以是一個(gè)符號地址。當(dāng)EA是一個(gè)數(shù)字時(shí),一定要注意立即尋址方式與直接尋址方式的區(qū)別,直接尋址必須有[ ]符號。
    • 操作數(shù)地址可由變量(符號地址)表示, 但要注意變量的屬性。
    VALUE DB 10 MOV AH, VALUE MOV AX, VALUE MOV AX, WORD PTR VALUE

      直接尋址方式適合于處理存儲(chǔ)器的單個(gè)存儲(chǔ)單元。例如,要處理某個(gè)存放在存儲(chǔ)器里面的變量,可以使用直接尋址方式把變量先取到一個(gè)寄存器中,然后在進(jìn)一步處理。
      80x86中,為了使指令字不要太長,規(guī)定雙操作數(shù)指令的兩個(gè)操作數(shù)中,只能有一個(gè)使用存儲(chǔ)器尋址方式,這就是一個(gè)變量常常先要送到寄存器的原因了。
      

    寄存器間接尋址

      
      操作數(shù)的有效地址只包含基址寄存器或者變址寄存器內(nèi)容的一種成分。因此,有效地址就在某個(gè)寄存器中,而操作數(shù)則在存儲(chǔ)器中。
      操作數(shù)的有效地址EA存放在SI、DI、BX或BP之一中,而操作數(shù)在存儲(chǔ)器中。若用BX、SI或DI間接尋址時(shí),則操作數(shù)默認(rèn)在數(shù)據(jù)段中,用DS的內(nèi)容作為段首址,操作數(shù)的物理地址為:

      若指令中使用BP間接尋址時(shí),則用堆棧段SS的內(nèi)容作為段首址,操作數(shù)的物理地址為: PA=(SS)×16 +(BP)

    MOV AX, [BX] ;PA = 16d x (DS) + (BX) MOV AX, ES:[BX] ;PA = 16d x (ES) + (BX),在這里,ES稱為段跨越前綴 MOV AX, [BP] ;PA = 16d x (SS) + (BP)

    注意:

    • 8086不允許使用AX、CX、DX 來存放 EA,比如:MOV AX, [CX]就是錯(cuò)誤的。
    • SRC 和 DST 的字長一致,自動(dòng)適應(yīng)寄存器的長度。
    MOV DL, [ BX ] ; [BX]指示一個(gè)字節(jié)單元 MOV DX, [ BX ] ; [BX]指示一個(gè)字單元
    • 適用于數(shù)組、字符串、表格的處理(可以看成一個(gè)數(shù)組來使用),執(zhí)行完一條指令后,只需修改寄存器內(nèi)容就可以取出下一項(xiàng)處理。

    寄存器相對尋址方式

      寄存器相對尋址方式也可以稱為直接變址尋址方式
      操作數(shù)的有效地址EA是指令中指定的基址寄存器或變址寄存器的內(nèi)容與指令中給出的位移量之和,即

      操作數(shù)的物理地址為:

      若操作數(shù)不在默認(rèn)段中,則應(yīng)使用段跨越前綴明確指定。

    MOV AX, COUNT[SI] MOV AX, [COUNT+SI]
    • 適于數(shù)組、字符串、表格的處理。

    基址變址尋址

      操作數(shù)的有效地址EA是指令中的基址寄存器的內(nèi)容+變址寄存器的內(nèi)容。
      指令格式:
      

    MOV AX, [BX][DI] 等價(jià)于 MOV AX, [BX+DI]MOV AX, ES:[BX][SI]
    • 適于數(shù)組、字符串、表格的處理
    • 必須是一個(gè)基址寄存器和一個(gè)變址寄存器的組合

    相對基址變址尋址

      操作數(shù)的有效地址EA是指令中的基址寄存器的內(nèi)容、變址寄存器的內(nèi)容、位移量三個(gè)地址分量之和,即:
      
      相對基址加變址尋址方式有多種等價(jià)的書寫方式,書寫格式:[BX+SI+1000H]、1000H[BX+SI]、1000H[BX][SI]和1000H[SI][BX]等格式都是正確的,并且其尋址含義也是一致的,但格式:BX[1000H+SI]、SI[1000H+BX]等是錯(cuò)誤的,即所用寄存器不能在”[“,”]”之外,該限制對寄存器相對尋址方式的書寫也同樣起作用。

    MOV AX, MASK [BX] [SI] 或 MOV AX, MASK [BX+SI] 或 MOV AX, [MASK+BX+SI]

      這種尋址方式通常用于對二維數(shù)組的尋址。例如,存儲(chǔ)器中存放著由多個(gè)記錄組成的文件,則位移量可指向文件之首,基址寄存器指向某個(gè)記錄,變址寄存器則指向該記錄中的一個(gè)元素。這種尋址方式也為堆棧處理提供了方便,一般(BP)可指向棧頂,從棧頂?shù)綌?shù)組的首地址可以使用位移量來表示,變址寄存器可以用來訪問數(shù)組中的某個(gè)元素。

    附錄

      可以出現(xiàn)在[]中的內(nèi)容是有限制的,他們必須是下列中的一個(gè)(其中idata表示一個(gè)立即數(shù)):

    idata BX BP SI DI BX+SI BX+DI BP+SI BP+DI BX+idata BP+idata SI+idata DI+idata BX+SI+idata BX+DI+idata BP+SI+idata BP+DI+idata

      其中,使用到BP的默認(rèn)段寄存器為SS,其他未DS

    段寄存器的使用規(guī)定

    匯編語言源程序

    • 匯編源程序:由三部分組成:匯編指令、偽指令、其他標(biāo)號與符號。
      • 指令是能被計(jì)算機(jī)識(shí)別并執(zhí)行的二進(jìn)制代碼,它規(guī)定了計(jì)算機(jī)能完成的某一操作。
      • 偽指令是對匯編起某種控制作用的特殊命令,其格式與通常的操作指令一樣,并加在匯編程序的任何地方,但是他們并不產(chǎn)生機(jī)器指令
    • 一個(gè)匯編源程序是由多個(gè)段組成的,這些段被用來存放代碼、數(shù)據(jù)或當(dāng)作棧空間來使用。
    • 注意:一個(gè)有意義的匯編程序中至少要有一個(gè)段,這個(gè)段用來存放代碼。

    處理器選擇偽操作

    偽操作說明
    .8086選擇8086指令系統(tǒng)
    .286選擇80286指令系統(tǒng)
    .286 P選擇保護(hù)模式下的80286指令系統(tǒng)
    .386選擇80386指令系統(tǒng)
    .386 P選擇保護(hù)模式下的80386指令系統(tǒng)
    .486選擇80486指令系統(tǒng)
    .486 P選擇保護(hù)模式下的80486指令系統(tǒng)
    .586選擇80586指令系統(tǒng)
    .586 P選擇保護(hù)模式下的80586指令系統(tǒng)

      這類偽操作一般都是放在整個(gè)程序的最前面。如果不給出,則匯編程序一般認(rèn)為其默認(rèn)值為.8086。

    段定義偽操作

      在段定義時(shí),如果定位類型用戶未選擇,就表示是隱含類型,其隱含類型是PARA
      
      PARA屬定位類型,是對該段起始地址定位。一般,各個(gè)邏輯段的首地址在‘節(jié)’的整數(shù)邊界上(每16個(gè)存儲(chǔ)單元叫做一節(jié)),即每個(gè)邏輯段的起始地址是16的整數(shù)倍。對于PARA—指定定位段的起始地址必須在節(jié)的整數(shù)邊界。

      存儲(chǔ)器的物理地址是由段地址和偏移地址組合而成的,匯編程序在把源程序轉(zhuǎn)換為目標(biāo)程序的時(shí)候,必須確定標(biāo)號和變量(代碼段和數(shù)據(jù)段的符號地址)的偏移地址,并且需要把有關(guān)信息通過目標(biāo)模塊傳送給連接程序,以便連接程序把不同的段和模塊連接起來,形成一個(gè)可執(zhí)行的程序。
    明確段與寄存器的關(guān)系:assume cs:code, ds:data, es:extra

    data segment ; 定義數(shù)據(jù)段data ends ;---------------------------------------- extra segment ; 定義附加段… extra ends ;---------------------------------------- code segment ; 定義代碼段,其中的段寄存器名必須是CSESDSSS(對于386及其后繼機(jī)型還有FSGS)中的一個(gè)。assume cs:code, ds:data, es:extra start: ;----------------------程序開始的標(biāo)號mov ax, datamov ds, ax ; 段地址 -> 段寄存器…mov ax,4c00hint 21h code endsend start ;------------程序結(jié)束標(biāo)志

    說明:

    • 1)data為段名稱,也是段首地址,可自己定義
      • 功能:定義一個(gè)段,segment說明一個(gè)段開始,ends 說明一個(gè)段結(jié)束。一個(gè)段必須有一個(gè)名稱來標(biāo)識(shí),使用格式為:
        • 段名 segment
        • 段名 ends
    • 2)明確段和段寄存器的關(guān)系。assume只是說明關(guān)聯(lián)關(guān)系,并沒有對段寄存器賦值,除了CS(裝入程序時(shí)由CPU給出),其他段寄存器要在程序中設(shè)置。
    • 3)mov ax,4c00h和int 21h最后兩條指令所實(shí)現(xiàn)的功能是程序返回。
    • 4)程序結(jié)束標(biāo)志,格式:END [label],標(biāo)號label 指示程序開始執(zhí)行的起始地址。

    偽操作(偽指令)

      偽操作是匯編程序?qū)υ闯绦蜻M(jìn)行匯編時(shí)處理的操作,完成處理器選擇、存儲(chǔ)模式定義、數(shù)據(jù)定義、存儲(chǔ)器分配、指示程序開始結(jié)束等功能。

    • 處理器選擇偽操作;
      • 功能:告訴匯編程序應(yīng)該選擇哪一種指令系統(tǒng)。
        位置:一般放在整個(gè)程序的最前面,也可放在程序中所用指令的上一行。
        如不給出,則默認(rèn)為.8086。
    • 段定義偽操作;
    • 程序開始和結(jié)束偽操作;
      • Start
      • end Start
    • 數(shù)據(jù)定義及存儲(chǔ)器分配偽操作;
    • 表達(dá)式賦值偽操作;
    • 地址計(jì)數(shù)器與對準(zhǔn)偽操作;
    • 基數(shù)控制偽操作。

    數(shù)據(jù)定義和存儲(chǔ)器分配偽操作

    格式:[變量] 助記符 操作數(shù) [ , 操作數(shù) , … ] [ ; 注釋]

    • 助記符:DB DW DD DF DQ DT
    • 例:操作數(shù)可以是常數(shù)或表達(dá)式
      • DATA_BYTE DB 10,4,10H,?
      • DATA_WORD DW 100,100H,-5,?
      • 匯編程序在匯編期間在存儲(chǔ)器中存入數(shù)據(jù)

    • 操作數(shù)也可以是字符串
    ARRAY DB ‘HELLO’DB ‘AB’DW ‘AB’

    • 操作數(shù)也可以是地址
    PAR1 DW 100,200PAR2 DW 300,400 ADDR_TABLE DW PAR1,PAR2
    • 操作數(shù)字段還可以使用復(fù)制操作符DUP來復(fù)制操作數(shù)
      • repeat_count DUP(operand,……,operand)
      • repeat_count可以是一個(gè)表達(dá)式,它的值應(yīng)該是一個(gè)正整數(shù),用來指定括號中的操作數(shù)的重復(fù)次數(shù)。
    • 操作數(shù)?可以保留存儲(chǔ)空間,但是不存入數(shù)據(jù)。(僅僅申請一個(gè)存儲(chǔ)空間)
    VAR DB 100 DUP (?) ; 這里表示申請100個(gè)字單元大小的內(nèi)存空間,但是不進(jìn)行初始化DB 2 DUP (0,2 DUP(1,2),3) ; 把0,1,2,1,2,3按字單元存放2次。 OPER1 DB ?, ? OPER2 DW ?, ?……MOV OPER1, 0 ;字節(jié)指令MOV OPER2, 0 ;字指令OPER1 DB 1, 2 OPER2 DW 1234H, 5678H……MOV AX, OPER1+1 ×MOV AL, OPER2 × 類型不匹配MOV AX, WORD PTR OPER1+1MOV AL, BYTE PTR OPER2
    • (AX)=3402H (AL)=34H
    • 可以看出:同一個(gè)變量可以具有不同的類型屬性。

    LABEL 偽操作: name LABEL type

    • LABEL可以使同一個(gè)變量具有不同的類型屬性。
      變量名 LABEL 類型 or 標(biāo)號  LABEL 類型

      其中變量的數(shù)據(jù)類型可以是BYTE,WORD,DWORD,標(biāo)號的代碼類型可以是NEAR或FAR。
      
      數(shù)據(jù)定義及存儲(chǔ)器分配偽指令格式中的 “變量 “是操作數(shù)的符號地址,它是可有可無 的,它的作用與指令語句前的標(biāo)號相同,區(qū)別是變量后面不加冒號。如果語句中有變量,那么匯編程序?qū)⒉僮鲾?shù)的第一個(gè)字節(jié)的偏移地址賦于這個(gè)變量。

    BYTE_ARRAY LABEL BYTE WORD_ARRAY DW 50 DUP (?)tos LABEL WORD

    表達(dá)式賦值偽操作

      說明:有時(shí)程序中多次出現(xiàn)同一個(gè)表達(dá)式,為了方便起見,可以使用賦值偽操作給表達(dá)式賦予一個(gè)名字。、
      EQU是賦值偽指令。賦值語句僅在匯編源程序時(shí),作為替代符號用。不產(chǎn)生目標(biāo)代碼,也不占有存儲(chǔ)單元。
      此后,程序中凡是用到該表達(dá)式之處,都可以用表達(dá)式名來代替了。可見,EQU的引入提高了程序的可讀性,也使其更加易于修改。
      
      格式:表達(dá)式名 EQU 表達(dá)式
      
      功能:給表達(dá)式賦予一個(gè)名字,在程序中用表達(dá)式名代替該表達(dá)式。

    ALPHA EQU 9 BETA EQU ALPHA+18 BB EQU [BP+8]

      “ = ” 偽操作 (允許重復(fù)定義)

    …… EMP = 7 …… EMP = EMP+1 ……

      說明:EQU指令類似于C語言的#define宏,在編譯前被轉(zhuǎn)化。

    地址計(jì)數(shù)器與ORG偽操作

    地址計(jì)數(shù)器$

      
      地址計(jì)數(shù)器 $:保存當(dāng)前正在匯編的指令的偏移地址

    JNE $+6 ; 轉(zhuǎn)向地址是 JNE 的首址 +6 JMP $+2 ; 轉(zhuǎn)向下一條指令
    • $ 用在指令中時(shí),表示本條指令的第一個(gè)字節(jié)的地址;
    • $ 用在偽操作的參數(shù)字段時(shí)表示地址計(jì)數(shù)器的當(dāng)前值。
    • 例如:ARRAY DW 1, 2 , $+4 , 3 , 4 , $+4

      • 通過圖片可以看出,地址0078保存的數(shù)據(jù)為當(dāng)前地址加上4;
      • 地址007E是當(dāng)前地址加上4。

    ORG

      ORG 偽操作:用來設(shè)置當(dāng)前地址計(jì)數(shù)器的值。即:指定一個(gè)地址,后面的程序或數(shù)據(jù)從這個(gè)地址值開始分配。

    SEG1 SEGMENTORG 10VAR1 DW 1234HORG 20VAR2 DW 5678HORG $+8; 當(dāng)前地址加8VAR3 DW 1357H SEG1 ENDS

    EVEN

      EVEN偽操作使下一個(gè)變量或者指令開始于偶數(shù)字節(jié)地址。一個(gè)字的地址最好從偶地址開始,所以對于字?jǐn)?shù)組為了保證其從偶地址開始,可以在其前面使用EVEN偽操作來達(dá)到這一目的。

      EVEN ;使下一地址從偶地址開始

    A DB ‘morning’ EVEN ;使下一地址從偶地址開始 B DW 2 DUP (?)

    ALIGN

      ALIGN偽操作為保證雙字?jǐn)?shù)組邊界從4的倍數(shù)開始創(chuàng)造了條件:

    ALIGN 4 ; 保證下一個(gè)地址是4的倍數(shù) ALIGN 2 ; 與EVEN等價(jià)

    說明:

    • ALIGN boundary(boundary的值必須是2的冪)。

    基數(shù)控制偽操作

      匯編程序默認(rèn)的數(shù)是十進(jìn)制數(shù),因而除非專門指定,匯編程序把程序中出現(xiàn)的數(shù)均看作為十進(jìn)制數(shù)。為此,當(dāng)使用其他基數(shù)的時(shí)候,需要專門給以標(biāo)記:

    基數(shù)標(biāo)記
    二進(jìn)制B
    十進(jìn)制D
    十六進(jìn)制H
    八進(jìn)制O 或者 Q
    . RADIX 表達(dá)式 ; 規(guī)定無標(biāo)記數(shù)的基數(shù) MOV BX, 0FFH MOV BX, 178.RADIX 16 MOV BX, 0FF ;這里沒有標(biāo)記(不是0FFH),但是因?yàn)榍懊娑x了`.RADIX 16`,所以這里仍然表示16進(jìn)制的數(shù)。 MOV BX, 178D

    匯編語言程序格式

      匯編語言源程序中每個(gè)語句可以由四項(xiàng)組成,格式如下:
      

    [name] operation operand [; comment]

      其中

    • 名字(name)項(xiàng)是一個(gè)符號。
    • 操作(operation)項(xiàng)是一個(gè)操作碼的助記符,它可以是指令、偽操作或者宏指令名。
    • 操作數(shù)(operand)項(xiàng)是一個(gè)或多個(gè)表達(dá)式組成,它提供為執(zhí)行所要求的操作而需要的信息。
    • 注釋(comment)項(xiàng)是用來說明程序或者語句的功能。;為識(shí)別注釋項(xiàng)的開始。;也可以從一行的第一個(gè)字符開始,此時(shí)整行都是注釋,常用來說明下面一段程序的功能。

    名字項(xiàng)

    操作項(xiàng)

      操作數(shù)項(xiàng)由一個(gè)或者多個(gè)表達(dá)式組成,多個(gè)操作數(shù)項(xiàng)之間一般用逗號分開。
      操作數(shù)項(xiàng)可以是常數(shù),寄存器,標(biāo)號,變量或者由表達(dá)式組成。表達(dá)式是常數(shù),寄存器,標(biāo)號,變量與一些操作符相結(jié)合的序列,可以有數(shù)字表達(dá)式和地址表達(dá)式兩種。

    算術(shù)操作符

      
      算術(shù)操作符有+,-,*,/、MOD。其中MOD是指除法運(yùn)算后得到的余數(shù)。算術(shù)操作符可以用于數(shù)字或者地址表達(dá)式中,但當(dāng)它用于地址表達(dá)式的時(shí)候,只有其結(jié)果有明確的物理意義的時(shí)候才是有效的結(jié)果。例如:兩個(gè)地址相乘和相除是沒有意義的。在地址表達(dá)式中,可以使用+或者-,但也必須注意其物理意義,例如把兩個(gè)不同段的地址相加也是沒有意義的。經(jīng)常使用的是地址±數(shù)字量,它是有意義的,例如,SUM+1是指SUM字節(jié)單元的下一個(gè)字節(jié)單元的地址(注意:不是指SUM單元的內(nèi)容加1),而SUM-1則是指SUM字節(jié)單元的前一個(gè)字節(jié)單元的地址。

    邏輯與移位操作符

      邏輯操作符有AND,OR,XOR和NOT;移位操作符有SHL和SHR。他們都是按位操作的,只能用于數(shù)字表達(dá)式中。

    關(guān)系操作符

    名稱全稱說明
    EQEqual相等
    NENot equal不想等
    LTLess than小于
    GTGreat than大于
    LELess and equal小于或等于
    GEGreat and equal大于或等于

    說明:

    • 關(guān)系操作符的兩個(gè)操作數(shù)必須都是數(shù)字,或者同一段內(nèi)的兩個(gè)存儲(chǔ)器地址。
    • 計(jì)算結(jié)果應(yīng)為邏輯值,結(jié)果為真,表示為0FFFFH;結(jié)果為假的時(shí)候,則表示為0。

    數(shù)值回送操作符

      它主要有的TYPE,LENGTH,SIZE,OFFEST,SEG等等。這些操作符把一些特征或者存儲(chǔ)器地址的一部分作為數(shù)值回送。

    TYPE

      格式為:TYPE expression

      如果該表達(dá)式是變量,則匯編程序?qū)⒒厮妥兞康囊宰止?jié)數(shù)表示的類型:DB=1,DW=2,DD=4,DF=6,DQ=8,DT=10。如果表達(dá)式是標(biāo)號,則匯編程序?qū)⒒厮痛碓摌?biāo)號類型的數(shù)值:NEAR=-1,FAR=-2。如果表達(dá)式是常數(shù),則應(yīng)回送0

    操作數(shù)項(xiàng)(表達(dá)式)

    • (1) 算術(shù)操作符: +、- 、*、 /、Mod
    • (2) 邏輯操作符: AND、OR、XOR、NOT,移位操作符: SHL、SHR
    • (3) 關(guān)系操作符: EQ、NE、LT、LE、GT、GE
    • (4) 數(shù)值回送操作符: TYPE、 LENGTH、 SIZE 、OFFSET、SEG、
      • TYPE 變量 / 標(biāo)號 / 常數(shù)
      • DB、DW、DD、DF、DQ、DT、NEAR、FAR、常數(shù)
      • 1、2、4、6、8、10、-1、-2、0(與上面的變量對應(yīng))
    • (5) 屬性操作符: PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORD
      • PTR
        • 格式:<類型> PTR <符號名>
        • 功能是定義符號名為新類型。如,設(shè)內(nèi)存變量D1是字節(jié)屬性,把它的兩個(gè)字節(jié)內(nèi)容送到AX中。

    LENGTH

    • LENGTH 變量
      • 功能:回送由DUP定義的變量的單元數(shù),其它情況回送1
      • DR2 DW 10H DUP(0,2 DUP(2)),MOV CL,LENGTH DR2CL的值為10H
      • DR1 DB 10H,30H,MOV BL,LENGTH DR1BL的值為1。

    SIZE

    • SIZE
      • 變量功能:LENGTH * TYPE

    OFFSET和SEG

    • OFFSET / SEG 變量 / 標(biāo)號
      • 功能:回送變量或標(biāo)號的偏址 / 段址

    Debug

    • 匯編調(diào)試程序Debug使用

    • 使用DEBUG調(diào)試和運(yùn)行可執(zhí)行文件

      • 在初次使用DEBUG時(shí),可參照下列步驟進(jìn)行:
      • 1、調(diào)用DEBUG,裝入用戶程序
      • 2、U命令反匯編程序,記錄代碼段與數(shù)據(jù)段首地址
      • 3、R命令觀察寄存器初始狀態(tài)
      • 4、以單步工作方式T開始運(yùn)行程序 ,設(shè)置段寄存器的值。
      • 5、D觀察用戶程序數(shù)據(jù)段初始內(nèi)容
      • 6、繼續(xù)以單步工作方式運(yùn)行程序
      • 7.G連續(xù)工作方式運(yùn)行程序
      • 8.E或A修改程序和數(shù)據(jù)
      • 9.運(yùn)用斷點(diǎn)調(diào)試程序 G

    80x86指令系統(tǒng)

    空操作指令指令格式:NOP

      說明:NOP是英語“No Operation”的縮寫。NOP無操作數(shù),所以稱為“空操作”。

      執(zhí)行NOP指令只使程序計(jì)數(shù)器PC加1,所以占用一個(gè)機(jī)器周期。
      

    通用數(shù)據(jù)傳送指令

      數(shù)據(jù)傳送指令:MOV、XCHG、LEA、LDS、LES、PUSH、POP、PUSHF、POPF、CBW、CWD、CWDE。

    棧的基本操作

      8086CPU的入棧和出棧操作都是以為單位進(jìn)行的。

    push與pop指令的執(zhí)行過程

      PUSH指令每次只能壓入一個(gè)字(16位)。

    push ax (1)SP = SP–2; (2)將AX中的內(nèi)容送入SS:SP指向的內(nèi)存單元處。

    pop ax (1)將SS:SP指向的內(nèi)存單元處的數(shù)據(jù)送入ax中; (2)SP = SP+2。

    說明:

    • 每執(zhí)行一次PUSH,SP指針都會(huì)減1。

    MOV指令

      指令寫法:MOV DST,SRC
      執(zhí)行操作:(DST)<-(SRC)
      其中DST表示目的操作數(shù),SRC表示源操作數(shù)。可以在CPU內(nèi)部或者在存儲(chǔ)器之間傳送數(shù)據(jù)。
      說明:

    • SRC和DST的操作類型必須明確而且一致。
    • DST不能是立即數(shù),而且也不能是CS。
      • 數(shù)據(jù)傳送指令是不能把數(shù)據(jù)傳送給CS的,因?yàn)镃S是代碼段寄存器,CS如果被修改程序就無法執(zhí)行。
    • DST、SRC也不能同時(shí)是存儲(chǔ)器尋址。
    • DST、SRC也不能同時(shí)是段寄存器。
    • 立即數(shù)不能直接送段寄存器,必須通過寄存器(比如AX)送達(dá)段寄存器。
    • 指令的執(zhí)行不影響標(biāo)志位。
    • 立即數(shù)可以直接送到存儲(chǔ)器,但應(yīng)指定存儲(chǔ)器的類型。如:
      • mov byte ptr[di], 3
      • mov word ptr[si], 3000
      • mov dword ptr[bx], 0FFFFFFh

    XCHG指令

      指令格式: XCHG OPR1, OPR2
      功能: 將操作數(shù)地址中的內(nèi)容互換。
      執(zhí)行操作: (OPR1) <-> (OPR2)
      注意:

    • 指令的執(zhí)行并不影響標(biāo)志位。
    • 不允許使用段寄存器,不允許使用立即數(shù),不支持兩個(gè)存儲(chǔ)單元之間的數(shù)據(jù)交換。
    • 允許字或者字節(jié)操作。

    累加器專用傳送指令

    XLAT

      功能:將表格中的一個(gè)字節(jié)內(nèi)容送到AL累加器中。常用于將一種代碼轉(zhuǎn)換為另一種代碼。
      這條指令根據(jù)AL寄存器提供的位移量,將BX指使的字節(jié)表格中的代碼換存在AL中。(AL)<-((DS)*16+(BX)+(AL))
      說明:本指令并不影響標(biāo)志位。

    格式: XLAT TABLE ;TABLE為表格的起始地址) XLAT ;(AL)<-((BX)+(AL)) 執(zhí)行指令前要將TABLE先送入BX,將待查字節(jié)與在表格中距離表首地址位移量送AL。

    地址傳送指令

    指令全稱說明
    LEAload effective address有效地址送寄存器
    LDSload DS with pointer指針?biāo)图拇嫫骱虳S
    LESload ES with pointer指針?biāo)图拇嫫骱虴S
    LFSload FS with pointer指針?biāo)图拇嫫骱虵S
    LGSload GS with pointer指針?biāo)图拇嫫骱虶S
    LSSload SS with pointer指針?biāo)图拇嫫骱蚐S

    LEA

      功能:有效地址送寄存器。
      全稱:load effective address

    LEA BX,LIST ;------取LIST的偏移地址送BX MOV BX, OFFSET LIST ;------功能與LEA相同 LEA BX, [BX+SI] ;------取基址變址尋址的有效地址給BX

      MOV BX, OFFSET [BX+SI] ;——× 注意:OFFSET只能與簡單的符號地址相連。

    算術(shù)指令

      算術(shù)運(yùn)算指令會(huì)根據(jù)運(yùn)算結(jié)果影響狀態(tài)標(biāo)志,主要影響6個(gè)標(biāo)志位:ZF、CF、AF、SF、OF和PF。

    加法指令

    指令使用說明
    ADDADD DST,SRC功能:加法,將SRC和DST的值相加之后存放在DST中。
    執(zhí)行操作: (DST) <- (SRC) + (DST)
    ADCADC DST, SRC功能:帶進(jìn)位的加法指令,將SRC和DST的值和進(jìn)位標(biāo)志位(CF)相加之后存放在DST中。
    執(zhí)行操作:(DST) <- (SRC) + (DST) + CF
    INCINC OPR功能:加一指令。
    執(zhí)行操作:(OPR) <- (OPR) + 1

      說明:加法指令都會(huì)影響條件標(biāo)志位,但I(xiàn)NC指令不影響CF標(biāo)志。
      INC影響的條件標(biāo)志位包括:SF,ZF,OF,AF,PF。

    ADC指令的作用

      在執(zhí)行 adc 指令的時(shí)候加上的 CF 的值是由 adc指令前面的指令決定的,也就是說,關(guān)鍵在于所加上的CF值是被什么指令設(shè)置的。
      下面的指令和add ax , bx具有相同的結(jié)果:
      

    add al,bl adc ah,bh

      看來CPU提供 ADC指令的目的,就是來進(jìn)行加法的第二步運(yùn)算的。ADC指令和ADD指令相配合就可以對更大的數(shù)據(jù)進(jìn)行加法運(yùn)算。
      注意:有符號的雙精度數(shù)的溢出,應(yīng)根據(jù)ADC指令的OF位判斷,而作低位加法用的ADD指令的溢出是無意義的。
      用16位寄存器編寫程序:

    MOV AX, word ptr d1 ;由于d1是雙字類型,必須使用強(qiáng)制類型說明符。 MOV DX, word ptr d1+2 ;(DX,AX)構(gòu)成一個(gè)32位數(shù)據(jù) ADD AX, word ptr d2 ;低字相加,有可能會(huì)產(chǎn)生“進(jìn)位” ADC DX, word ptr d2+2 ;高字相加。 MOV word ptr d1, AX ;低字送給d1的低字 MOV word ptr d1+2, DX ;高字送給d1的高字

    說明:
      OF位可以用來表示帶符號數(shù)的溢出,CF位可以用來表示無符號數(shù)的溢出。
      條件標(biāo)志(或者稱呼為)位中最主要的是CF,ZF,SF,OF四位,分別表示了進(jìn)位、結(jié)果為零,符號和溢出的情況。
      執(zhí)行加法指令的時(shí)候,CF位是根據(jù)最高有效位是否向最高位的進(jìn)位來設(shè)置的。有進(jìn)位的時(shí)候CF=1,無進(jìn)位的時(shí)候CF=0。
      OF位則根據(jù)操作數(shù)的符號及其變化情況來設(shè)置的:若兩個(gè)操作數(shù)的符號相同,而結(jié)果的符號與之相反則OF=1,否則OF=0。

    • 注意區(qū)分OF是根據(jù)原先的符號位來判斷的。

      溢出位OF既然試試根據(jù)數(shù)的符號及其變化來設(shè)置的,當(dāng)然它是用來表示帶符號數(shù)的溢出的,從其設(shè)置條件來看結(jié)論也是明顯的。
      CF位可以用來表示無符號數(shù)的溢出。一方面,由于無符號數(shù)的最高有效位只有數(shù)值意義而無符號意義,所以該位產(chǎn)生的進(jìn)位應(yīng)該是結(jié)果的實(shí)際的進(jìn)位值,但是在有限數(shù)位的范圍內(nèi)就說明了結(jié)果的溢出情況;另一方面,它所保存的進(jìn)位值有時(shí)候還是有用的。例如。雙字長數(shù)運(yùn)算的時(shí)候,可以利用進(jìn)位值把低位字的進(jìn)位計(jì)入高位字中。

    加法的ASCII碼調(diào)整指令A(yù)AA

    • 功能:
      • 把AL中的和調(diào)整到非壓縮BCD碼格式 → AL
      • AH + 調(diào)整產(chǎn)生的進(jìn)位值 → AH
    • 影響標(biāo)志位:
      • CF=1,AF
    • 用途:
      • 適用于數(shù)字ASCⅡ碼的調(diào)整;
      • 也適用于一般的非壓縮BCD碼的十進(jìn)制調(diào)整
    • 調(diào)整原則:
      • ①若AL的低4位是在0~9之間,且AF=0,則無需調(diào)整
      • ②若AL的低4位是在0AH~0FH之間,或AF=1,則AL
      • 加6調(diào)整,AH+1→ AH,且使CF=1

    加法的十進(jìn)制調(diào)整指令DAA

    • 功能:
      • 把AL中的和調(diào)整到壓縮BCD碼格式→ AL
    • 影響標(biāo)志位:
      • CF、PF、AF、ZF、SF
    • 注:
      • ① DAA通常跟在ADD和ADC指令之后使用
      • ② 只能對AL中的運(yùn)算結(jié)果進(jìn)行BCD碼調(diào)整

    減法指令

    指令使用說明
    SUBSUB DST,SRC功能:減法,將SRC和DST的值相減之后存放在DST中。
    執(zhí)行操作: (DST) <- (SRC) + (DST)
    SBBSUB DST, SRC功能:帶借位減法指令,將SRC和DST的值和進(jìn)位標(biāo)志位(CF)相加之后存放在DST中。
    執(zhí)行操作:(DST) <- (SRC) + (DST) - CF
    CF為進(jìn)位位的值。
    DECDEC OPR功能:加一指令。
    執(zhí)行操作:(OPR) <- (OPR) + 1
    NEGNEG OPR功能:加一指令。
    執(zhí)行操作:(OPR) <- (OPR) + 1
    把操作數(shù)按位求反后末尾加1。
    CMPCMP OPR1, OPR2功能:加一指令。
    執(zhí)行操作: (OPR1) - (OPR2)
    執(zhí)行減法操作,不保存結(jié)果。往往根據(jù)比較發(fā)生轉(zhuǎn)移。

    說明:
      減法運(yùn)算的條件碼情況和加法類似。CF位說明無符號數(shù)相減的溢出,同時(shí)它又確實(shí)是被減數(shù)的最高有效位向高位的借位值。OF位則說明帶符號數(shù)的溢出。
      減法的CF值反映了無符號數(shù)運(yùn)算中的借位情況,因此當(dāng)作為無符號運(yùn)算時(shí),若減數(shù)>被減數(shù),此時(shí)有借位,則CF=1;否則CF=0。或者,也可以簡單地用二進(jìn)制減法的運(yùn)算中的最高有效位向高位的進(jìn)位的情況來判別:有進(jìn)位的時(shí)候CF=0,沒有進(jìn)位的時(shí)候CF=1。
      減法的OF位的設(shè)置方法為:若兩個(gè)數(shù)的符號相反,而結(jié)果的符號與減數(shù)相同則相同,則OF=1;除了上述情況外OF=0OF=1說明帶符號數(shù)的減法溢出,結(jié)果是錯(cuò)誤的。
      NEG指令的條件碼按照求補(bǔ)后的結(jié)果設(shè)置,只有當(dāng)操作數(shù)為0的時(shí)候,求補(bǔ)運(yùn)算的結(jié)果使得CF=0,其他情況都為CF=1。所以,只有當(dāng)字運(yùn)算時(shí)對-128求補(bǔ)的時(shí)候,以及字運(yùn)算的時(shí)候?qū)?32768求補(bǔ)以及雙字運(yùn)算的時(shí)候?qū)?2^31求補(bǔ)的情況下OF=1,其他則均為OF=0

    減法的ASCII碼調(diào)整指令A(yù)AS

    • 功能:
      • 把AL中的差調(diào)整到非壓縮BCD碼格式 → AL
      • AH - 調(diào)整產(chǎn)生的進(jìn)位值 → AH
    • 影響標(biāo)志位:
      • CF=1,AF
    • 用途:同AAA
    • 調(diào)整原則:
      • ①若AL的低4位是在0~9之間,且AF=0,則無需調(diào)整
      • ②若AL的低4位是在0AH~0FH之間,或AF=1,則減6調(diào)整,AH+1→ AH,且使CF=1

    減法的十進(jìn)制調(diào)整指令DAS

    • 功能:
      • 把AL中的差調(diào)整到壓縮BCD碼格式→ AL
    • 影響標(biāo)志位:
      • CF、PF、AF、ZF、SF
    • 注:
      • ① DAA通常跟在SUB和SBB指令之后使用
      • ② 只能對AL中的運(yùn)算結(jié)果進(jìn)行BCD碼調(diào)整

    乘法指令

    指令使用說明
    MUL無符號數(shù)乘法指令MUL SRC
    IMUL帶符號數(shù)乘法指令IMUL SRC
    類型說明
    字節(jié)操作數(shù)(AX) <- (AL) * (SRC)
    字操作數(shù)(DX, AX) <- (AX) * (SRC)

    注意:

    • AL (AX) 為隱含的乘數(shù)寄存器。
    • AX (DX,AX) 為隱含的乘積寄存器。 CPU會(huì)根據(jù)乘數(shù)是8位、16位,還是32位操作數(shù),來自動(dòng)選用被乘數(shù):AL、AX或EAX。
    • SRC不能為立即數(shù)。
    • 除CF和OF外,對條件標(biāo)志位無定義。
    • 當(dāng)乘積的高半部分不為0時(shí),CF=1,OF=1。

    乘法的ASCII碼調(diào)整指令A(yù)AM

    • 功能:
      • 把AL中的內(nèi)容調(diào)整到非壓縮BCD碼格式 → AX
    • 影響標(biāo)志位:
      • SF,ZF,PF
    • 調(diào)整原則:
      • 將AL中的內(nèi)容除以0AH,高八位放在AH中,低八位保存在AL中
    • 注:
      • 執(zhí)行AAM前必須執(zhí)行MUL指令把兩個(gè)非壓縮的BCD碼相乘(要求高4位為0),結(jié)果放在AL中

    除法指令

    指令使用說明
    DIV無符號數(shù)除法指令DIV SRC
    IDIV帶符號數(shù)除法指令IDIV SRC
    類型說明
    字節(jié)操作數(shù)(AL) <- (AX) / (SRC) 的商
    (AH) <- (AX) / (SRC) 的余數(shù)
    字操作數(shù)(AX) <- (DX, AX) / (SRC) 的商
    (DX) <- (DX, AX) / (SRC) 的余數(shù)

    注意:

    • AX (DX,AX) 為隱含的被除數(shù)寄存器。
    • AL (AX) 為隱含的商寄存器。
    • AH (DX) 為隱含的余數(shù)寄存器。
    • SRC不能為立即數(shù)。
    • 對所有條件標(biāo)志位均無定義。但是可能產(chǎn)生溢出
      • 執(zhí)行除法指令后,對AF,CF,OF,PF,SF,ZF標(biāo)志位的影響都不確定。


    除法的ASCII碼調(diào)整指令A(yù)AD

    • 功能:
      • 把AX中的被除數(shù)調(diào)整為二進(jìn)制 → AL
    • 影響標(biāo)志位:
      • SF,ZF,PF
    • 調(diào)整原則:
      • 若被除數(shù)是存放在AX中的兩位非壓縮BCD碼,調(diào)整為二進(jìn)制數(shù)
      • 若除數(shù)是一位非壓縮BCD碼,調(diào)整為二進(jìn)制數(shù)
    • 注:
      • 指令A(yù)AD放在DIV指令前

    標(biāo)志寄存器傳送指令

    指令全稱說明
    LAHFload AH with flags將標(biāo)志寄存器中的低八位送到AH中。
    SAHFstore AH into flags將AH寄存器的相應(yīng)位傳送到標(biāo)志寄存器的低8位。
    PUSHF/PUSHFDpush the flags or eflags標(biāo)志進(jìn)棧
    PUPF/POPFDpop the flags or eflags標(biāo)志出棧

    注意:

    • 這組指令中的LAHF和PUSHF/PUSHFD都不影響標(biāo)志位。SAHF和POPF/POPFD則由裝入的值來確定標(biāo)志位的值,但是POPFD指令不影響VM,RF,IOPF,VIF和VIP的值。

    • STC----是置進(jìn)位標(biāo)志指令,執(zhí)行的結(jié)果是將進(jìn)位標(biāo)志CF置1

    • CLC----是清進(jìn)位標(biāo)志指令,其執(zhí)行結(jié)果是置CF標(biāo)志為0

        讀取標(biāo)志指令LAHF

    類型轉(zhuǎn)換指令

    指令使用說明
    CBW字節(jié)轉(zhuǎn)換為字AL符號擴(kuò)展到AH中,形成AX中的字。即如果(AL)中的最高有效位是0,則(AH)=0;如(AL)的最高有效位為1,則(AH)=0FFH。
    執(zhí)行操作:
    若(AL)的最高有效位為0,則(AH)= 00H
    若(AL)的最高有效位為1,則(AH)= FFH
    CWD/CWDE字轉(zhuǎn)換為雙字AX符號擴(kuò)展 -> (DX,AX)雙字
    執(zhí)行操作:
    若(AX)的最高有效位為0,則(DX)= 0000H
    若(AX)的最高有效位為1,則(DX)= FFFFH
    CWQ雙字轉(zhuǎn)換為4字EAX的內(nèi)容符號擴(kuò)展到EDX,形成EDX:EAX中的4字。
    BSWAP字節(jié)交換指令格式:BASWAP r32。
    該指令只能用于486及其后繼機(jī)型。r32指32位寄存器。
    執(zhí)行的操作:使指令指定的32位寄存器的字節(jié)次序變反。具體的操作為:1、4字節(jié)互換,2

    注意:

    • 隱含對AL 或AX 進(jìn)行符號擴(kuò)展
    • 本組指令都不影響條件標(biāo)志位

    邏輯指令

    邏輯運(yùn)算指令

    指令全稱說明
    ANDand邏輯與
    格式:AND DST,SRC
    ORor邏輯或
    格式:OR DST,SRC
    NOTnot邏輯非
    格式:NOT DST,SRC
    XORexclusive or異或
    格式:XOR DST,SRC
    TESTtest作用:測試
    格式:TEST OPR1,OPR2
    執(zhí)行的操作:(OPR1)∧(OPR2)
    說明:兩個(gè)操作數(shù)相與的結(jié)果不保存,只是根據(jù)其特征置條件碼。

    注意:

    • 在以上的五種指令中,NOT不允許存放立即數(shù)。
    • 其他4條指令除非源操作數(shù)是立即數(shù),至少有一個(gè)操作數(shù)必須存放在寄存器中,另一個(gè)操作數(shù)則可以使用任意尋址方式。
    • NOT不影響標(biāo)志為。
    • 其他4種指令將使CF位和OF位為0,AF位無定義,而SF位、ZF位和PF位則根據(jù)運(yùn)算結(jié)果設(shè)置。
    • 這些指令對處理操作數(shù)的某些位很有用,例如可以屏蔽某些位(將這些位置0),或者使某些位置1或者測試某些位等等。

    AND

      要求屏蔽0、1兩位,可以用AND指令并設(shè)置常數(shù)0FCH。
      

    MOV AL,0BFH AND AL,0FCH

      這兩條指令的運(yùn)行結(jié)果使得(AL)=0BCH。因此,使用AND指令可以使得操作數(shù)的某些位被屏蔽。只需要把AND指令的源操作數(shù)設(shè)置成一個(gè)立即數(shù),并把需要屏蔽的位設(shè)置為0,這樣指令執(zhí)行的結(jié)果就可以把操作數(shù)的相應(yīng)位置0,其他位保持不變。

    OR

      要求第5位置1,可以使用OR指令。

    MOV AL,43H MOV AL,20H

      這兩條指令執(zhí)行了之后,(AL)=63 H。因此,用OR指令可以使得操作數(shù)的某些位置1,其他位保持不變。只需要把OR指令的源操作數(shù)設(shè)置為一個(gè)立即數(shù),并把需要置1的位設(shè)置為1,就可以達(dá)到目的了。

    TEST

      要測試操作數(shù)的某些位是否為0,可以使用TEST指令,同樣把TEST指令的源操作數(shù)設(shè)置成一個(gè)立即數(shù),其中需要測試的位應(yīng)該設(shè)置為1。
      

    MOV AL,40H TEST AL,0AFH

      這里要求測試第0,1,2,3,5,7位是否為0,根據(jù)測試的結(jié)果設(shè)置條件碼為CF=OF=0,SF=0,ZF=1,說明了所需要測試的位均為0。如果在這兩條指令之后跟一條件轉(zhuǎn)移指JNZ,結(jié)果如果不是0就轉(zhuǎn)移,結(jié)果如果是0就順序往下執(zhí)行,這樣就可以根據(jù)測試的情況產(chǎn)生不同的程序分支,轉(zhuǎn)向不同的處理方案了。

    NOT

      要測試操作數(shù)的某位是否為1,可以先把該操作數(shù)求反,然后使用TEST指令測試。如要測試AL寄存器中第2位是否為1,若為1則轉(zhuǎn)移到EXIT中去執(zhí)行,可以用下列指令序列:
      

    MOV DL,AL NOT DL TEST DL,0000 0100B JE EXIT

      如AL寄存器的內(nèi)容為0FH,為了避免破壞操作數(shù)的原始內(nèi)容,把它復(fù)制到了DL中去測試,執(zhí)行完TEST指令之后,結(jié)果為全0而有ZF=1,說明操作數(shù)的第2位為1引起的轉(zhuǎn)移到EXIT去執(zhí)行。

    XOR

      要是操作數(shù)的某些位變反,可以使用XOR指令,只要把源操作數(shù)的立即數(shù)字段的相應(yīng)位置設(shè)置為1就可以達(dá)到目的。如果求第0,1位變反,可以使用下面的指令:
      

    MOV AL,11H XOR AL,3

      則指令執(zhí)行后,(AL)=12H,達(dá)到了第0,1位變反而其他位不變的目的。
      XOR指令還可以用來測試某一個(gè)操作數(shù)是否與另外一個(gè)確定的操作數(shù)相等。這種操作在檢查地址是否匹配的時(shí)候是經(jīng)常使用的。
      

    XOR AX,042EH JZ MATCH

      這兩條指令是用來檢查AX的內(nèi)容是否等于042EH,若相等則轉(zhuǎn)移到MATCH去執(zhí)行匹配的情況需要做的工作,否則執(zhí)行JZ下面的程序。

    位測試并修改指令

      386及其后繼機(jī)型增加了本組指令。

    位掃描指令

      386及其后繼機(jī)型增加了本組指令。

    移位指令-這里編輯未完成

    指令全稱說明
    SHLshift logical left邏輯左移
    SALshift arithmetic left算術(shù)左移
    SHRshift logical right邏輯右移
    SARshift arithmetic right算術(shù)右移
    ROLrotat left循環(huán)左移
    RORrotat right循環(huán)右移
    RCLrotate left through carry帶進(jìn)位循環(huán)左移
    RCRrotate right through carry帶進(jìn)位循環(huán)右移
    SHLDshift left double雙精度左移
    SHRDshift right double雙精度右移

    注意:

    • OPR可用除立即數(shù)以外的任何尋址方式
    • 移位次數(shù)CNT=1,SHL OPR, 1
    • CNT>1,MOV CL, CNT,SHL OPR, CL
    • 條件標(biāo)志位:
      • CF = 移入的數(shù)值
      • OF = 1 CNT=1時(shí),最高有效位的值發(fā)生變化
      • OF = 0 CNT=1時(shí),最高有效位的值不變
    • 循環(huán)移位指令:
      • 不影響 SF、ZF、PF、AF
    • 移位指令:
      • 常用來作乘以2或除以2 的操作。
      • SAL:有符號數(shù)乘以2,SAR有符號數(shù)除以2;
      • SHL:無符號數(shù)乘以2,SHR: 無符號數(shù)除以2。
    移位指令移位填充方式
    邏輯左移右邊統(tǒng)一添0,移出來的那一位放進(jìn)CF
    算術(shù)左移右邊統(tǒng)一添0,移出來的那一位放進(jìn)CF
    邏輯右移左邊統(tǒng)一添0,移出來的那一位放進(jìn)CF
    算術(shù)右移左邊添加符號位上的數(shù),移出來的那一位放進(jìn)CF

      示例:1010101010,其中[]是添加的位
      邏輯左移一位:010101010[0]
      算術(shù)左移一位:010101010[0]
      邏輯右移一位:[0]101010101
      算術(shù)右移一位:[1]101010101

    控制轉(zhuǎn)移指令

      一般情況下指令都是順序逐條執(zhí)行的,但是實(shí)際上程序不可能全部順序執(zhí)行而經(jīng)常需要改變程序的執(zhí)行流程。

    無條件轉(zhuǎn)移指令JMP

    • 段內(nèi)直接短轉(zhuǎn)移:
      • JMP SHORT OPR
      • 執(zhí)行操作:(IP) ← (IP) + 8位位移量
      • short:表示實(shí)現(xiàn)的是段內(nèi)直接短轉(zhuǎn)移,即位移量為8位數(shù)據(jù),它對IP的修改范圍為 -128~127,也就是說,它向前轉(zhuǎn)移時(shí)可以最多越過128個(gè)字節(jié),向后轉(zhuǎn)移可以最多越過127個(gè)字節(jié)。
    • 段內(nèi)直接近轉(zhuǎn)移:(轉(zhuǎn)向的符號地址
      • JMP NEAR PTR OPR
      • 執(zhí)行操作:(IP) ← (IP) + 16位位移量
    • 段內(nèi)間接轉(zhuǎn)移:(除立即數(shù)以外的尋址方式
      • JMP WORD PTR OPR
      • 執(zhí)行操作: (IP) ← (EA)
    • 段間直接遠(yuǎn)轉(zhuǎn)移:(轉(zhuǎn)向的符號地址
      • JMP FAR PTR OPR
      • 執(zhí)行操作:
        • (IP) ← OPR 的段內(nèi)偏移地址
        • (CS) ← OPR 所在段的段地址
    • 段間間接轉(zhuǎn)移:(存儲(chǔ)器尋址方式
      • JMP DWORD PTR OPR
      • 執(zhí)行操作:
        • (IP) ← (EA)
        • (CS) ← (EA+2)

    注意:

    • 執(zhí)行JMP指令的時(shí)候,IP改變兩次。
      • 第一次是在讀取指令的時(shí)候,JMP指令被讀取放到了指令緩沖期中,這個(gè)時(shí)候IP改變了一次;之后,JMP指令執(zhí)行的時(shí)候進(jìn)行了跳轉(zhuǎn),IP又改變了一次。所以IP總共改變了兩次。

    條件轉(zhuǎn)移指令

      注意:只能使用段內(nèi)直接尋址的8 位位移量。
      
       1)根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移:

    格式全稱轉(zhuǎn)移條件說明
    JZ(JE) OPRjump if zero,or equalZF = 1結(jié)果為0(相等)則轉(zhuǎn)移
    JNZ(JNE) OPRjump if not zero, or not equalZF = 0不為0(不相等)轉(zhuǎn)移
    JS OPRjump if signSF = 1為負(fù)轉(zhuǎn)移
    JNS OPRjump if not signSF = 0為正轉(zhuǎn)移
    JO OPRjump if overflowOF = 1溢出轉(zhuǎn)移
    JNO OPRjump if not overflowOF = 0不溢出轉(zhuǎn)移
    JP OPRjump if parity, or parity evenPF = 1有偶數(shù)個(gè)1則轉(zhuǎn)移
    JNP OPRjump if not parity, or parity oddPF = 0有奇數(shù)個(gè)1 則轉(zhuǎn)移
    JC OPRjump if carryCF = 1有進(jìn)位轉(zhuǎn)移
    JNC OPRjump if not caryCF = 0無進(jìn)位轉(zhuǎn)移

      
       2)比較兩個(gè)無符號數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移的指令(與比較指令CMP 聯(lián)用)

    符號表示格式全稱轉(zhuǎn)移條件說明
    JB (JNAE,JC) OPRjump if belowCF = 1有借位,被減數(shù)小于減數(shù)則轉(zhuǎn)移
    JNB (JAE,JNC) OPRjump if not belowCF = 0沒有借位, 被減數(shù)大于或等于減數(shù)則轉(zhuǎn)移
    JNA (JBE) OPRjump if not above,
    jump if below of equal
    CF∨ZF = 1被減數(shù)小于或等于減數(shù)則轉(zhuǎn)移
    JA (JNBE) OPRjump if above,
    jump if not below or not equal
    CF ∨ ZF = 0被減數(shù)大于減數(shù)則轉(zhuǎn)移

    說明:

    • 適用于地址或雙精度數(shù)低位字的比較。

      無符號數(shù)比較示例:cmp ax,bx
      

      cmp指令對有符號數(shù)的比較:cmp ah, bh

    • 1、如果SF=1,而OF=0, (ah)<(bh)
      • OF=0,說明沒有溢出,邏輯上真正結(jié)果的正負(fù)=實(shí)際結(jié)果的正負(fù);SF=1表示實(shí)際結(jié)果為負(fù),所以邏輯上真正的結(jié)果為負(fù),所以(ah)<(bh)。
    • 2、如果SF=0,而OF=1 ,(ah)<(bh)
      • OF=1 ,說明有溢出,邏輯上真正結(jié)果的正負(fù)≠實(shí)際結(jié)果的正負(fù);SF=0表示由于溢出導(dǎo)致了實(shí)際結(jié)果非負(fù),那么邏輯上真正的結(jié)果必然為負(fù)。這樣,SF=0,OF = 1 ,說明了(ah)<(bh)。
    • 3、如果SF=0,而OF=0, (ah)≥(bh)
      • OF=0,說明沒有溢出,邏輯上真正結(jié)果的正負(fù)=實(shí)際結(jié)果的正負(fù);SF=0表示實(shí)際結(jié)果非負(fù),所以邏輯上真正的結(jié)果必然非負(fù)。所以(ah)≥(bh)。
    • 4、如果SF=1,而OF=1, (ah)>(bh)
      • OF=1 ,說明有溢出,邏輯上真正結(jié)果的正負(fù)≠實(shí)際結(jié)果的正負(fù); SF=1 表示由于溢出導(dǎo)致了實(shí)際結(jié)果為負(fù),那么邏輯上真正的結(jié)果必然為正。這樣,SF=1,OF = 1 ,說明了(ah)>(bh)。

      3)比較兩個(gè)帶符號數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移的指令

    符號表示格式全稱轉(zhuǎn)移條件說明
    JL (JNGE) OPRjump if lessSF?OF = 1小于,或者不大于或等于則轉(zhuǎn)移。
    JNL (JGE) OPRjump if not lessSF?OF = 0不小于,或者大于或等于則轉(zhuǎn)移。
    JNG (JLE ) OPRjump if not greater(SF?OF)∨ZF = 1不大于或者小于或等于則轉(zhuǎn)移。
    JG (JNLE) OPRjump if greater(SF?OF)∨ZF = 0大于或者不小于或等于則轉(zhuǎn)移。

    說明:

    • 適用于帶符號數(shù)的比較

         4)測試 CX 的值為 0 則轉(zhuǎn)移的指令

    格式全稱測試條件說明
    JCXZ OPRjump if CX register is zero(CX)=0CX寄存器的內(nèi)容為零則轉(zhuǎn)移。

    循環(huán)指令

    Loop

    // 計(jì)算0+1+2+3+4+5+6+7+8+9的值 int sum=0; for(int i=0;i<10;i++)sum=sum+i;

      相當(dāng)于:

    // 計(jì)算0+1+2+3+4+5+6+7+8+9的值mov ax,0; ax相當(dāng)于summov bx,0; bx相當(dāng)于imov cx,10;標(biāo)號s代表一個(gè)地址 s: add ax,bxinc bxloop s; 判斷

      指令的格式是:loop 標(biāo)號
      CPU 執(zhí)行l(wèi)oop指令的時(shí)候,要進(jìn)行兩步操作:
      ① (cx)=(cx)-1;
      ② 判斷cx中的值,不為零則轉(zhuǎn)至標(biāo)號處執(zhí)行程序,如果為零則向下執(zhí)行,退出循環(huán)。
      可見,cx中的值影響著loop指令的執(zhí)行結(jié)果。用loop指令來實(shí)現(xiàn)循環(huán)功能時(shí),cx 中要存放循環(huán)次數(shù)。
      一條循環(huán)指令LOOP AGAIN可以用修改循環(huán)計(jì)數(shù)和判斷轉(zhuǎn)移條件的兩條指令替代DEC CX,JNZ AGAIN。JNZ(或JNE)結(jié)果不為零(或不相等)則轉(zhuǎn)移,測試條件為ZF=0。
      我們可以總結(jié)出用cx和loop 指令相配合實(shí)現(xiàn)循環(huán)功能的三個(gè)要點(diǎn):

    • 1)在cx中要存放循環(huán)次數(shù);
    • 2)loop 指令中的標(biāo)號所標(biāo)識(shí)地址要在前面;
    • 3)要循環(huán)執(zhí)行的程序段,要寫在標(biāo)號和 loop 指令的中間。
    • 4)loop指令的執(zhí)行不影響條件碼標(biāo)志位。

    LOOP示例

    MOV CX,0 S: ADD AX,BX LOOP S

      以上指令序列執(zhí)行后ADD AX,BX指令被執(zhí)行了多少次?
      答案是:65536次。

      循環(huán) LOOP (loop)
      指令的匯編格式:LOOP label
      指令的基本功能:
      ①(CX)←(CX)-1
      ② 若(CX)≠0,則(IP)←(IP)當(dāng)前+位移量,否則循環(huán)結(jié)束。
      指令的特殊要求:循環(huán)指令都是短轉(zhuǎn)移格式的指令,也就是說,位移量是用8位帶符號數(shù)來表示的,轉(zhuǎn)向地址在相對于當(dāng)前IP值的-128 ~ +127字節(jié)范圍之內(nèi)。
     
      解析:LOOP指令是先執(zhí)行CX自減的功能,之后才進(jìn)行循環(huán)的。只要CX不為0,循環(huán)就不會(huì)終止。因此在上面中,第一次執(zhí)行的時(shí)候,CX自減為0FFFFH,這時(shí)CX就不為0的,循環(huán)不會(huì)被終止。由此,我們可以算出總共運(yùn)行了65536次。

    可提前結(jié)束的循環(huán)指令

    功能格式測試條件
    當(dāng)為0或相等時(shí)循環(huán)LOOPZ / LOOPE 標(biāo)號ZF=1且(CX)≠0
    不為0或不相等循環(huán)LOOPNZ / LOOPNE 標(biāo)號ZF=0且(CX)≠ 0

    執(zhí)行步驟:

    • 1) (CX) ← (CX) - 1;
    • 2) 檢查是否滿足測試條件,如滿足則實(shí)現(xiàn)循環(huán);不滿足則退出循環(huán)。

    注意:

    • CX 中存放循環(huán)次數(shù);
    • 與比較指令CMP聯(lián)合使用可提前退出循環(huán)。

    串處理指令

    串處理指令指令串重復(fù)前綴設(shè)置方向標(biāo)志指令
    串傳送MOVSB / MOVSWREPCLD
    存入串STOSB / STOSWREPE / REPZSTD
    從串取LODSB / LODSWREPNE / REPNZ
    串比較CMPSB / CMPSW
    串掃描SCASB / SCASW
    串輸入INSB / INSW
    串輸出OUTSB / OUTSW

    說明:

      字符串操作指令的實(shí)質(zhì)是對一片連續(xù)存儲(chǔ)單元進(jìn)行處理,這片存儲(chǔ)單元是由隱含指針DS:SI或ES:DI來指定的。

    REP

      與 REP 配合工作的MOVS / STOS / LODS / INS / OUTS。
      REP 重復(fù)串操作直到計(jì)數(shù)寄存器CX的內(nèi)容為0為止。
      執(zhí)行操作:

    • 1) 如 (CX)=0 則退出 REP,否則轉(zhuǎn)(2)
    • 2) (CX) <- (CX) -1
    • 3) 執(zhí)行 MOVS / STOS / LODS / INS / OUTS
    • 4) 重復(fù) (1) ~ (3)

    MOVS串傳送指令

      MOVS 串傳送指令:

    MOVS DST, SRC MOVSB ;(字節(jié)) MOVSW ;(字) MOVSD ;(雙字,計(jì)數(shù)器為ECX,386及后繼機(jī)型)

      例:MOVS ES: BYTE PTR [DI], DS: [SI]
      執(zhí)行操作:

    • 1) ((DI)) ← ((SI))
    • 2) 字節(jié)操作:(SI)←(SI)±1, (DI)←(DI)±1,字操作: (SI)←(SI)±2, (DI)←(DI)±2
      • (方向標(biāo)志 DF=0 時(shí)用 + ,DF=1 時(shí)用 - 。)

      REP MOVS:將數(shù)據(jù)段中的整串?dāng)?shù)據(jù)傳送到附加段中。源串(數(shù)據(jù)段)→ 目的串(附加段)
      執(zhí)行 REP MOVS 之前,應(yīng)先做好:

    • 1) 源串首地址(末地址)→ SI
    • 2) 目的串首地址(末地址)→ DI
    • 3) 串長度 → CX
    • 4) 建立方向標(biāo)志CLD ( STD )
      • CLD 使 DF=0,從前往后處理,地址自動(dòng)增量;
      • STD 使 DF=1 ,由后向前處理,地址自動(dòng)減量)

    代碼實(shí)例

    ; -------- 定義數(shù)據(jù)段 data segmentmess1 db ‘personal_computer’ data ends ; -------- 定義附加段 extra segmentmess2 db 17 dup (?) extra endscode segment assume cs:code,ds:data.es:extra mov ax, datamov ds,axmov ax, extramov es, ax; ------ 總共5條指令。lea si, mess1lea di, mess2mov cx, 17cldrep movsb … code ends

      反向的指令:

    lea si, mess1+16 lea di, mess2+16 mov cx, 17 std rep movsb

      為了在同一段內(nèi)處理數(shù)據(jù),可以在DS和ES中設(shè)置同樣的地址。

    data segmentmess1 db ‘personal_computer’mess2 db 17 dup (?) data endscode segmentmov ax, datamov ds, axmov es, axlea si, mess1lea di, mess2mov cx, 17cldrep movsb… code ends

    STOS存入指令

    STOS DST STOSB (字節(jié)) STOSW (字)

      執(zhí)行操作:
      字節(jié)操作:((DI))←(AL), (DI)←(DI)±1
      字操作:((DI))←(AX), (DI)←(DI)±2
      例:把 附加段 中mess2開始的 10 個(gè)字節(jié)緩沖區(qū)全部置為 20H

    lea di, mess2 mov al, 20H mov cx, 10 cld rep stosb

      或者:

    lea di, mess2 mov ax, 2020H mov cx, 5 cld rep stosw

    LODS從串取指令

    LODS SRC LODSB ;(字節(jié)) LODSW ;(字)

    執(zhí)行操作:

    • 字節(jié)操作:(AL)←((SI)), (SI)←(SI)±1
    • 字操作:(AX)←((SI)), (SI)←(SI)±2

    注意:

    • LODS 指令一般不與 REP 聯(lián)用;
    • 有時(shí)緩沖區(qū)中的一串字符需要逐次取出來測試,可使用本指令。

    INS 串輸入指令:

    INS DST, DX INSB ; (字節(jié)) INSW ;(字)

    執(zhí)行操作:
      字節(jié)操作:((DI))←((DX)), (DI)←(DI)±1
      字操作:((DI))←((DX)), (DI)←(DI)±2功能:把端口號在DX的I/O空間的字節(jié)、字或雙字傳送到附加段中的由DI所指向的存儲(chǔ)單元中,并根據(jù)DF的值和數(shù)據(jù)類型修改DI的內(nèi)容。

    ; 從0F03H端口輸入10個(gè)字符到mess1字節(jié)緩沖區(qū) lea di, mess1 mov dx, 0F03H mov cx, 10 cld rep insb

    OUTS 串輸出指令:

    OUTS DX , SRC OUTSB ;(字節(jié)) OUTSW ;(字)

    執(zhí)行操作:
      字節(jié)操作:((DX))←((SI)), (SI)←(SI)±1
      字操作:((DX))←((SI)), (SI)←(SI)±2
      功能:把由SI所指向的存儲(chǔ)單元中的字節(jié)、字或雙字傳送到端口號在DX的I/O端口中去,并根據(jù)DF的值和數(shù)據(jù)類型修改SI的內(nèi)容。

    ; -------- 把mess1字節(jié)緩沖區(qū)中的10個(gè)字符從0F03H端口輸出 lea si, mess1 mov dx, 0F03H mov cx, 10 cld rep outsb

    與 REPE / REPZ(REPNE / REPNZ)配合工作的
    CMPS 和 SCAS

    指令說明
    REPE / REPZ當(dāng)相等 /為零時(shí)重復(fù)串操作
    REPNE / REPNZ當(dāng)不相等 /不為零時(shí)重復(fù)串操作

    執(zhí)行操作:

    • 1) 如 (CX)=0 或 ZF=0 (ZF=1) 則退出串操作,否則轉(zhuǎn)2)
    • 2) (CX)←(CX) -1
    • 3) 執(zhí)行 CMPS / SCAS
    • 4) 重復(fù) (1) ~ (3)

    CMPS 串比較指令:

    CMPS SRC, DST CMPSB ;(字節(jié)) CMPSW ;(字)

    執(zhí)行操作:

    • 1) ((SI)) - ((DI))根據(jù)比較結(jié)果置條件標(biāo)志位:相等 ZF=1,不等 ZF=0
    • 2) 字節(jié)操作:(SI)←(SI)±1, (DI)←(DI)±1,字操作: (SI)←(SI)±2, (DI)←(DI)±2

        匯編語言中,CMP和CMPS都是比較指令,不同主要有:
        1、CMP比較指令是執(zhí)行兩個(gè)數(shù)的相減操作,包括有符號數(shù)。CMPS比較指令是執(zhí)行兩個(gè)字符串的相減操作,所有數(shù)據(jù)認(rèn)為是無符號數(shù)。
        2、CMP比較指令必須有兩個(gè)顯式操作數(shù)。CMPS比較指令可以有兩個(gè)顯式操作數(shù),也可以使用指令CMPSB或CMPSW分別表示字節(jié)串比較或字串比較而隱含操作數(shù)。
        3、使用CMP比較指令比較連續(xù)的數(shù)據(jù)時(shí),必須由程序改變其中一個(gè)操作數(shù)。使用CMPS比較指令比較連續(xù)的字符時(shí),對由SI尋址的源串中數(shù)據(jù)與由DI尋址的目的串中數(shù)據(jù)進(jìn)行比較,執(zhí)行完一條比較指令,SI,DI將自動(dòng)調(diào)整.

    REPE

      例:比較兩個(gè)字符串,找出它們不相匹配的位置。

    lea si, mess1 lea di, mess2 mov cx, 5 cld repe cmpsb


      反向比較:

    lea si, mess1+4 lea di, mess2+4 mov cx, 5 std repe cmpsb

    SCAS 串掃描指令

    SCAS DST SCASB (字節(jié)) SCASW (字)

    執(zhí)行操作:
      字節(jié)操作:(AL) - ((DI)), (DI)←(DI)±1
      字操作:(AX) - ((DI)), (DI)←(DI)±2

    例:從一個(gè)字符串中查找一個(gè)指定的字符

    mess db ‘COMPUTER’lea di, mess ; -------- (ES:DI)保留串地址mov al, ‘T’ ; -------- 搜索字符mov cx, 8 ; -------- 字符長度cldrepne scasb ; -------- 這里在循環(huán)的判斷是否(CX)=0或ZF=1。條件成立即中止

    執(zhí)行完后

    • (di):相匹配字符的下一個(gè)地址
    • (cx):剩下還未比較的字符個(gè)數(shù)

    子程序設(shè)計(jì)

    int i=0; int main(){func();return 0; } void func(){i++; }

      等價(jià)于:

    ASSUME CS:CODE CODE SEGMENT START:MOV AX,0 ;AX相當(dāng)于iCALL FUNC ;調(diào)用FUNC子程序MOV AH,4CHINT 21H FUNC PROC NEARINC AX ;i++RET FUNC ENDP CODE ENDS END START

      子程序:在許多應(yīng)用程序中,常常需要多次使用某功能的指令序列。這時(shí),為了減少重復(fù)編寫程序,節(jié)省內(nèi)存空間,把這一功能的指令序列組成一個(gè)相對獨(dú)立的程序段。在程序運(yùn)行時(shí),如果需要使用這個(gè)給定的功能,就轉(zhuǎn)移到這個(gè)獨(dú)立的程序段,待這個(gè)獨(dú)立的程序段指令序列執(zhí)行完后,又返回到原來位置繼續(xù)運(yùn)行程序。我們把這個(gè)相對獨(dú)立的程序段就叫子程序過程
      調(diào)用程序:編制程序時(shí),按需要轉(zhuǎn)向子程序,稱為子程序調(diào)用,或稱為過程調(diào)用。調(diào)用子程序的程序稱為調(diào)用程序或主程序。主、子程序是相對而言的。但子程序一定是受調(diào)用程序或主程序調(diào)用的。子程序定義的位置可以放在主程序的前面或后面。

    過程定義偽操作

    過程名 PROC NEAR or FAR……RET 過程名 ENDP

    說明:

    • 過程名是子程序入口的符號地址;
    • RET是子程序返回的命令;
    • NEAR屬性:調(diào)用程序和子程序在同一代碼段中,可省略。(段內(nèi)調(diào)用)
    • FAR屬性:調(diào)用程序和子程序不在同一代碼段中。(段間調(diào)用)
    • 同一個(gè)子程序可以被段內(nèi)調(diào)用,也可以段間調(diào)用。

    子程序的調(diào)用與返回指令

    1)CALL 子程序調(diào)用指令:隱含使用堆棧保存返回地址

      指令格式:CAL DST ;其中DST為過程的目標(biāo)地址(即過程名)。
      指令功能:

    • 把CALL指令的下一條指令地址(稱為返回點(diǎn)或斷點(diǎn)) 推入堆棧保存,然后轉(zhuǎn)到目標(biāo)地址(DST)。
    • CALL指令可以在段內(nèi)、段間調(diào)用,尋址方式分為直接和間接兩種。

    段內(nèi)直接近調(diào)用:CALL DST

      DST給出子程序的入口地址(子程序?yàn)閚ear屬性),比如:CALL subp

      執(zhí)行操作:

    • (SP) ← (SP) - 2
    • ( (SP)+1,(SP) ) ← (IP)
      • 上面兩句相當(dāng)于PUSH IP
    • (IP) ← DST
      • 實(shí)際操作是把從指令中得到的距目標(biāo)過程相對偏移量加到指令指針I(yè)P上(得到子程序的入口地址),實(shí)現(xiàn)過程調(diào)用。

    段內(nèi)間接近調(diào)用:CALL DST

      執(zhí)行操作:

    • PUSH IP
    • (IP) ← (EA)
      • DST給出寄存器或存儲(chǔ)單元的內(nèi)容(轉(zhuǎn)向地址)
      • 比如: CALL word ptr [bx]

    段間直接遠(yuǎn)調(diào)用:CALL FAR PTR DST

      DST給出子程序的入口地址(子程序?yàn)閒ar屬性),比如:CALL far ptr subp

      執(zhí)行操作:

    • PUSH CS
    • PUSH IP
    • (IP) ← DST偏移地址
    • (CS) ← DST段地址

    段間間接遠(yuǎn)調(diào)用:CALL FAR PTR DST

      DST給出存儲(chǔ)單元的內(nèi)容(轉(zhuǎn)向地址),比如: CALL dword ptr [bx]
      執(zhí)行操作:

    • PUSH CS
    • PUSH IP
    • (IP) ← (EA)
    • (CS) ← (EA+2)

    2)RET 返回主程序指令

      說明:屬于無條件轉(zhuǎn)移指令。可以在段內(nèi)或段間返回。

    段內(nèi)近返回:RET

      執(zhí)行操作:

    • POP IP

    段內(nèi)帶立即數(shù)近返回:RET EXP

      執(zhí)行操作:

    • POP IP
    • (SP)←(SP)+EXP

    段間遠(yuǎn)返回:RET(F)

      執(zhí)行操作:

    • POP IP
    • POP CS

    現(xiàn)場保護(hù)和恢復(fù)

      要保護(hù)的寄存器:應(yīng)該是在子程序中將被使用,返回調(diào)用程序后仍然需要使用其原有內(nèi)容的那些寄存器。即保護(hù)調(diào)用程序和子程序兩者在使用上發(fā)生沖突的那些寄存器。但在編程時(shí),一時(shí)很難弄清哪些是有沖突的寄存器,一種較為簡單的方法是把所有的寄存器均加以保護(hù)。
      一般在子程序中進(jìn)行寄存器保護(hù)較好。即在子程序的開始部分,先進(jìn)行相關(guān)寄存器(主要是在子程序中使用的各寄存器)的保護(hù)。然后再進(jìn)行子程序的處理操作。在執(zhí)行完子程序后,返回前,先恢復(fù)各寄存器內(nèi)容后,再返回調(diào)用程序。

    subt proc near push axpush bxpush cxpush dx…………pop dxpop cxpop bxpop axret subt endp

    子程序的參數(shù)傳送

      入口參數(shù):子程序需要從主程序獲取的參數(shù)。使子程序可以對不同數(shù)據(jù)進(jìn)行相同功能的處理。
      出口參數(shù):是子程序返回給主程序的參數(shù)。使子程序可以將不同的結(jié)果送至主程序

      實(shí)現(xiàn)的方法是把子程序所需要的入口參數(shù),由調(diào)用程序預(yù)先放入指定的寄存器中。在進(jìn)入子程序后,子程序就可直接對這些寄存器內(nèi)容進(jìn)行操作了。同樣子程序的運(yùn)行結(jié)果,也可置入寄存器中,把它們作為子程序的出口參數(shù)寄存器使用。由于寄存器數(shù)目有限,適用于參數(shù)較少的情況。

    • 1) 通過寄存器傳送參數(shù)
    • 2) 通過存儲(chǔ)器傳送參數(shù)
    • 3) 通過地址表傳送參數(shù)地址
    • 4) 通過堆棧傳送參數(shù)或參數(shù)地址

      參數(shù)的傳遞方法并不是固定不變的,即它們是可以綜合使用的。依實(shí)現(xiàn)的需要和情況的不同,可以靈活使用其中一種方式,也可以同時(shí)使用幾種方式的混合。有的時(shí)候還可能并不需要參數(shù)傳遞。

    ; 十六進(jìn)制到十進(jìn)制的轉(zhuǎn)換(通過寄存器傳送參數(shù)) ; hexidec:接收鍵盤輸入的十六進(jìn)制數(shù),在屏幕上輸出相應(yīng)的十進(jìn)制數(shù) hexidec segment ; 16?10assume cs: hexidec main proc far start: push dssub ax, axpush axcall hexibin ; 16轉(zhuǎn)2call crlfcall binidec ; 2轉(zhuǎn)10call crlfret main endp……………… hexidec ends; 按位取數(shù) binidec proc near mov cx, 10000dcall dec_divmov cx, 1000dcall dec_divmov cx, 100dcall dec_divmov cx, 10dcall dec_divmov cx, 1dcall dec_divretbinidec endpdec_div proc nearmov ax, bxmov dx, 0div cxmov bx, dxmov dl, aladd dl, 30hmov ah, 2int 21hret dec_div endp; hexibin:接收4位十六進(jìn)制數(shù)的輸入 ; binidec:輸出5位的十進(jìn)制數(shù)值 ; 入口參數(shù)為BX。 ; 出口參數(shù)為BX。 hexibin proc near mov bx, 0mov cx,4newchar:mov ah, 1int 21hcmp al, 30h ; 0~9的16進(jìn)制表示為30~39jl exitcmp al, 3ah ; 和10比較,如果小于10的就跳轉(zhuǎn)到add_tojl add_tocmp al, 41h ; 和A比較jl exitcmp al, 47h ; 和G比較jge exitcmp al, 61h ; 和a比較jl exitcmp al, 67h ; 和g比較jge exit add_to:push cxmov cl, 4shl bx, clmov ah, 0add bx, axpop cxloop newchar exit: ret hexibin endp; 回車換行 Crlf proc nearpush axpush dxmov dl, 0dhmov ah,2int 21hmov dl, 0ahmov ah,2int 21hpop dxpop axret Crlf endpend start

      宏:源程序中一段有獨(dú)立功能的程序代碼。在使用之前先定義一次,以后就可以多次調(diào)用。
      宏指令:用戶自定義的指令。在編程時(shí),將多次使用的功能用一條宏指令來代替。

    匯編語言源程序包含:

    • 指令:程序運(yùn)行時(shí)執(zhí)行的語句
    • 偽指令(偽操作):匯編時(shí)執(zhí)行
    • 宏指令:匯編時(shí)展開

    高級語言的宏

      C語言中以#define作為標(biāo)志的編譯預(yù)處理命令稱為宏定義命令。其不帶參數(shù)的格式為:
      

    #define 標(biāo)識(shí)符 字符串

      其中的標(biāo)識(shí)符叫宏名,字符串叫宏體。帶參的宏一般形式為:
      

    #define 宏名(參數(shù)表) 字符串

      如:

    #define PI 3.1415926 #define area(r) (3.1415926*(r)*(r))

      系統(tǒng)對宏的處理是這樣的:當(dāng)遇到宏名時(shí),就用宏體替換,即所謂的宏替換。這一過程是由預(yù)編譯程序完成的(不必用戶自己操作),而后才將宏替換后的程序交編譯程序進(jìn)行編譯。

    宏定義、宏調(diào)用和宏展開

    ; 宏定義: macro_name MACRO [啞元表] ; 形參/虛參…… …… ; 宏定義體 ENDM

      宏調(diào)用: (必須先定義后調(diào)用)macro_name [實(shí)元表] ; 實(shí)參
      宏展開: 宏定義體->復(fù)制到宏指令位置,實(shí)參代虛參。

    宏和子程序的對比

    名稱優(yōu)點(diǎn)缺點(diǎn)
    子程序模塊化,省內(nèi)存開銷大
    參數(shù)傳送簡單,執(zhí)行效率高占用內(nèi)存空間大

    宏定義中的參數(shù)

    • 1、宏定義可以無變元(無參數(shù));
    • 2、變元可以是常數(shù)、寄存器、存儲(chǔ)單元名以及用尋址方式能找到的地址或表達(dá)式;
    • 3、變元可以是操作碼或操作碼的一部分(必須用&作為分隔符);
    • 4、變元可以是ASCII串(字符串)。
      • 注意:宏調(diào)用時(shí)若實(shí)參個(gè)數(shù)少于形參個(gè)數(shù)會(huì)出現(xiàn)編譯錯(cuò)誤,若實(shí)參個(gè)數(shù)多于形參,則按形參的順序填入實(shí)參,多余部分被忽略。

    宏匯編操作符

    符號使用說明
    &符號1 & 符號2宏展開時(shí),合并前后兩個(gè)符號形成一個(gè)符號。 &可以作為啞元的前綴。
    ;;宏展開的時(shí)候,;;后面的注釋不予展開。
    %% 表達(dá)式匯編程序?qū)?后面的表達(dá)式轉(zhuǎn)換為當(dāng)前基數(shù)下的數(shù)字,并在展開期間用這個(gè)數(shù)取代啞元。

    LOCAL偽操作

      LOCAL偽操作為每個(gè)標(biāo)號建立唯一的符號(??0000~??FFFF),必須緊跟在MACRO語句之后,中間不允許有任何操作包括注釋。

    ; 宏定義 absol MACRO operLOCAL nextcmp oper,0jge nextneg oper next: ENDM ; 宏調(diào)用 …… absol var …… absol bx ……

      說明:
      反匯編出來內(nèi)容如下:
      

    宏展開:……; `absol var`的內(nèi)容 1 cmp var,0 1 jge ??0000 1 neg var 1 ??0000: ; next的地址…………; `absol bx`的內(nèi)容 1 cmp bx,0 1 jge ??0001 1 neg bx 1 ??0001: ; next的地址……

      從上面可以看出使用了LOCAL偽操作之后,每次調(diào)用absol后,next的地址都是不同的。即 LOCAL偽操作為每個(gè)標(biāo)號建立唯一的符號

    列表偽操作

    名稱說明
    .LALL在LST清單中列出宏展開后的全部語句(包括注釋)。
    .SALL在LST清單中不列出任何宏展開后的語句。
    .XALL缺省的列表方式,只列出宏體中產(chǎn)生目標(biāo)代碼的語句。

    宏庫的建立和調(diào)用

    建立宏庫

      >EDIT MACRO . MAC
      

    macro1 MACRO [啞元表]…… ENDM macro2 MACRO [啞元表]…… ENDM……macroN MACRO [啞元表]…… ENDM

    調(diào)用宏庫

      >EDIT EXP.ASM

    include MACRO.MAC …… macro1 [實(shí)元表] …… macro2 [實(shí)元表] …… ; 刪除不用的宏定義`purge macroN` macroN [實(shí)元表] ……

    輸入輸出程序設(shè)計(jì)

      不同外設(shè)具有的端口數(shù)各不相同,計(jì)算機(jī)中為每一個(gè)端口都賦予一個(gè)惟一編號——稱為端口地址(或端口號PORT)。 8086CPU采用I/O端口獨(dú)立編址的方式,采用16位地址最多能管理64K個(gè)端口,即端口占64KB地址空間,端口號為0~65535。必須使用專門的I/O指令訪問端口。
      CPU與I/O接口進(jìn)行通信是通過接口電路內(nèi)部的一組寄存器實(shí)現(xiàn)的,這些寄存器稱為端口,包括:數(shù)據(jù)端口、狀態(tài)端口和命令端口

    累加器專用傳送指令I(lǐng)N/OUT

    (只能用AX或AL與端口傳送信息)

    輸入指令

    • IN (I/O -> CPU)

    長格式:(PORT是端口地址(00~FFH))

    • IN AL, PORT (字節(jié))
    • IN AX, PORT (字)

    執(zhí)行操作:

    • (AL) <- ( PORT ) (字節(jié))
    • (AX) <- ( PORT+1, PORT )(字)

    短格式:

    • MOV DX, PORT
    • IN AL, DX (字節(jié))
    • IN AX, DX (字)

    執(zhí)行操作:(端口號>255時(shí),先送到DX)

    • (AL) <- ( (DX) ) (字節(jié))
    • (AX) <- ( (DX)+1, (DX) )(字)

    輸出指令

    • OUT (CPU -> I/O)

    長格式:

    • OUT PORT, AL (字節(jié))
    • OUT PORT, AX (字)

    功能:將寄存器中內(nèi)容輸出到指定端口。

    短格式:

    • MOV DX , PORT
    • OUT DX, AL (字節(jié))
    • OUT DX, AX (字)

    訪問端口

      in al,60h;從60h號端口讀入一個(gè)字節(jié)。
      執(zhí)行時(shí)與總線相關(guān)的操作:

    • ① CPU通過地址線將地址信息60h發(fā)出;
    • ② CPU通過控制線發(fā)出端口讀命令,選中端口所在的芯片,并通知它,將要從中讀取數(shù)據(jù);
    • ③ 端口所在的芯片將60h端口中的數(shù)據(jù)通過數(shù)據(jù)線送入CPU。
      • 注意:在in和out 指令中,只能使用 ax 或al來存放從端口中讀入的數(shù)據(jù)或要發(fā)送到端口中的數(shù)據(jù)

    I/O 設(shè)備的數(shù)據(jù)傳送方式

    • 1、查詢方式(程序控制方式)
    • 2 、中斷方式
    • 3 、DMA方式(直接存儲(chǔ)器存取方式/成組傳送方式)

    查詢方式

      CPU和內(nèi)存通過端口與外部設(shè)備進(jìn)行通信。CPU在執(zhí)行主程序過程中,當(dāng)需要進(jìn)行I/O操作時(shí),很難保證輸入設(shè)備已經(jīng)準(zhǔn)備好了數(shù)據(jù),或者是輸出設(shè)備已經(jīng)處在可以接收數(shù)據(jù)的狀態(tài)。因此,一般要在外部設(shè)備準(zhǔn)備就緒并且I/O接口已經(jīng)做好數(shù)據(jù)傳送的情況下,才能進(jìn)行數(shù)據(jù)傳送,這種傳送方式稱為查詢傳送方式

      
       查詢過程使CPU很容易與不同速度的外設(shè)實(shí)現(xiàn)速度配合,使接口電路十分簡單,適用于較少數(shù)據(jù)傳輸情況下使用。但要占用CPU大量時(shí)間去查詢I/O設(shè)備的狀態(tài)
      

    中斷傳輸方式


       采用中斷方式, CPU執(zhí)行主程序,等待中斷的發(fā)生。I/O設(shè)備與CPU并行操作,進(jìn)行數(shù)據(jù)傳輸?shù)臏?zhǔn)備工作。當(dāng)輸入設(shè)備將數(shù)據(jù)準(zhǔn)備好,或者輸出設(shè)備空閑時(shí),便通過I/O接口向CPU發(fā)申請中斷。CPU在每執(zhí)行完一條指令之后都會(huì)檢查是否有中斷請求,只要滿足中斷響應(yīng)條件,CPU就暫停執(zhí)行當(dāng)前的程序,轉(zhuǎn)向執(zhí)行中斷處理程序,進(jìn)行數(shù)據(jù)傳送,等傳送完成后,CPU返回到被中斷的主程序,繼續(xù)進(jìn)行原來的工作。
       中斷方式:需要保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場,數(shù)據(jù)傳輸由CPU完成。

    DMA方式——成組數(shù)據(jù)傳送方式

      主要由硬件DMA控制器實(shí)現(xiàn)其傳送功能,用于一些高速的I/O設(shè)備(比如磁盤),能使I/O設(shè)備直接與存儲(chǔ)器進(jìn)行成批數(shù)據(jù)的快速傳送。
      DMA方式:用DMA控制器來控制存儲(chǔ)器和I/O設(shè)備之間的數(shù)據(jù)傳送時(shí),并不經(jīng)過CPU,傳輸過程中CPU不占用總線,CPU處于原地等待。這樣,傳輸時(shí)就不需要保存斷點(diǎn)等額外操作了。另外,整個(gè)控制數(shù)據(jù)塊傳送的過程,包括地址增量和計(jì)數(shù)器減量的操作,都是由硬件控制完成的,因而大大縮短了數(shù)據(jù)傳送的控制時(shí)間,提高了整個(gè)系統(tǒng)的處理效率。

    程序直接控制 I/O 方式

       I/O 指令是主機(jī)與外設(shè)進(jìn)行通信的最基本途徑。DOS 功能調(diào)用和BIOS例行程序中的輸入/輸出功能也是由IN和OUT指令完成的。
       例:循環(huán)測試某狀態(tài)寄存器的2位是否為1

    AGAIN: IN AL, STATUS_PORT; --------狀態(tài)寄存器的端口地址(00~FFH)TEST AL, 00000100BJZ AGAININ AL,DATA_PORT; --------數(shù)據(jù)寄存器的端口地址(00~FFH)MOV AL, DATAOUT DATA_PORT, AL

      

    輪流查詢幾種I/O設(shè)備

    輪流查詢幾種I/O設(shè)備: DEV1: IN AL, STAT1TEST AL, STAT1_BITJZ DEV2CALL FAR PTR PROC1 DEV2: IN AL, STAT2TEST AL, STAT2_BITJZ DEV3CALL FAR PTR PROC2 DEV3: IN AL, STAT3TEST AL, STAT3_BITJZ DEV1CALL FAR PTR PROC3
    • 優(yōu):由程序安排或修改 設(shè)備的優(yōu)先次序
    • 缺:查詢等待浪費(fèi)CPU大量有效時(shí)間
    • 使用I/O指令直接控制輸入輸出比調(diào)用DOS功能或BIOS例行程序效率更高,但其對硬件的依賴性很大,所以一般的程序設(shè)計(jì)還是盡可能使用DOS或BIOS功能調(diào)用。

    I/O程序舉例: CMOS RAM 芯片

      PC機(jī)中有一個(gè)CMOS RAM芯片,其有如下特征:

    • 1)包含一個(gè)實(shí)時(shí)鐘和一個(gè)有128個(gè)存儲(chǔ)單元的RAM存儲(chǔ)器。
    • 2)該芯片靠電池供電。所以,關(guān)機(jī)后其內(nèi)部的實(shí)時(shí)鐘仍可正常工作, RAM 中的信息不丟失。
    • 3)128 個(gè)字節(jié)的 RAM 中,內(nèi)部實(shí)時(shí)鐘占用0~0DH單元來保存時(shí)間信息,其余大部分單元用于保存系統(tǒng)配置信息,供系統(tǒng)啟動(dòng)時(shí)BIOS程序的讀取。
      • BIOS也提供了相關(guān)的程序,使我們可以在開機(jī)的時(shí)候配置CMOS RAM 中的系統(tǒng)信息。
    • 4)該芯片內(nèi)部有兩個(gè)端口,端口地址為70h71h。CPU 通過這兩個(gè)端口讀寫CMOS RAM。
    • 5)70h為地址端口,存放要訪問的CMOS RAM單元的地址; 71h為數(shù)據(jù)端口,存放從選定的CMOS RAM 單元中讀取的數(shù)據(jù),或要寫入到其中的數(shù)據(jù)。可見,CPU對CMOS RAM的讀寫分兩步進(jìn)行。
      • 比如:讀CMOS RAM的2號單元:
        • 1、將2送入端口70h mov al, 2,out 70h, al
        • 2、從71h讀出2號單元的內(nèi)容in al, 71h

    CMOS RAM中存儲(chǔ)的時(shí)間信息

      在CMOS RAM中,存放著當(dāng)前時(shí)間:

    類型地址
    00H
    02H
    時(shí)04H
    星期06H
    07H
    08H
    09H

      這6個(gè)信息的長度都為1個(gè)字節(jié),存儲(chǔ)了用兩個(gè) BCD碼表示的兩位十進(jìn)制數(shù),高 4 位的BCD碼表示十位,低4 位的BCD 碼表示個(gè)位。
      
      比如:00010100b表示14。

    讀取CMOS RAM的信息

      要讀取 CMOS RAM的信息,我們首先要向地址端口70h寫入要訪問的單元的地址:

    mov al,8 out 70h,al

      然后從數(shù)據(jù)端口71h中取得指定單元中的數(shù)據(jù):in al,71h

    中斷傳送方式

      中斷:使cpu中止正在執(zhí)行的程序而轉(zhuǎn)去處理特殊事件的操作。
      中斷源:引起中斷的事件。8086/8088CPU最多有256個(gè)中斷源,這些中斷源根據(jù)來自CPU的內(nèi)部還是外部分為兩大類:內(nèi)部中斷源外部中斷源
      外中斷(硬中斷):

    • 外設(shè)的 I/O 請求 —— 可屏蔽中斷INTR
    • 電源掉電 / 奇偶錯(cuò) —— 非屏蔽中斷NMI

      所謂不可屏蔽中斷是指該中斷請求不能通過軟件的方式對其屏蔽,一旦出現(xiàn)NMI中斷請求,CPU必須立即響應(yīng)。
      內(nèi)中斷(軟中斷10H):

    • INT 指令 / CPU 錯(cuò)(除法錯(cuò)、溢出)
    • 為調(diào)試程序設(shè)置的中斷(t、g命令)

    80x86 中斷源

    (圖中引線端標(biāo)示的數(shù)字為分配的終端類型號N(0-255))

      8259A外部有28個(gè)引腳。有9片8259A可構(gòu)成64級中斷源。

    中斷向量表

      各類型(0~0FFH)中斷處理程序的入口地址表

    中斷的條件

    (從外設(shè)發(fā)出中斷請求到CPU響應(yīng)中斷,有兩個(gè)控制條件起決定性作用):

    • 設(shè)置CPU中斷允許位:
      • FLAGS 中的IF = 1 的時(shí)候允許中斷 ( STI 開中斷)IF = 0的時(shí)候禁止中斷 ( CLI 關(guān)中斷)
    • 設(shè)置中斷屏蔽位:
      • 中斷屏蔽寄存器的中斷屏蔽位 = 0的時(shí)候允許I/O設(shè)備請求中斷 ,= 1 的時(shí)候禁止I/O設(shè)備請求中斷。

    修改中斷處理程序

    DATAS SEGMENTDATAS ENDSSTACKS SEGMENT;此處輸入堆棧段代碼 STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV AL,0MOV AH,35HINT 21HPUSH ESPUSH BX ;保存原向量PUSH DSMOV AX,SEG FUNCTIONMOV DS,AXMOV DX,OFFSET FUNCTIONMOV AL,0MOV AH,25HINT 21H ;設(shè)置新的向量POP DS ;--------------------主程序部分 …… ;------------------POP DXPOP DSMOV AL,0MOV AH,25HINT 21H ;恢復(fù)原向量 MOV AH,4CHINT 21H;--------------中斷處理程序 FUNCTION PROC NEAR…… FUNCTION ENDP CODES ENDSEND START

    CPU中斷過程

    • 1)取中斷類型:CPU ← type N
    • 2)保護(hù)現(xiàn)場:FLAGS、CS、IP入棧
    • 3)IF=0 (關(guān)中斷), TF=0(禁止單步中斷)
    • 4)計(jì)算中斷向量地址,取中斷向量:(4×N)→ IP,(4×N+2)→ CS
    • 5)轉(zhuǎn)中斷處理程序
      • 以上步驟都由硬件完成。采用向量中斷的方法,大大加快了中斷處理的速度。因?yàn)橛?jì)算機(jī)可直接通過中斷向量表轉(zhuǎn)向相應(yīng)的處理程序,而不需要CPU去逐個(gè)檢測和確定中斷原因。

    INT

      格式: int n ; n為中斷類型碼。
      功能:是引發(fā)n號中斷過程。
      CPU 執(zhí)行int n過程如下:

    • 1)取中斷類型碼n;
    • 2)標(biāo)志寄存器入棧,IF = 0,TF = 0;
    • 3)CS、IP入棧;
    • 4)(IP) = (n*4),(CS) = (n*4+2)。
      • 從此處轉(zhuǎn)去執(zhí)行n號中斷的中斷處理程序。

      或者這么理解:

    • 系統(tǒng)功能號送到寄存器AH中
    • 入口參數(shù)送到指定的寄存器中
    • 用INT 21H指令執(zhí)行功能調(diào)用
    • 根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況
    AH功能入口參數(shù)出口參數(shù)
    4CH返回DOS
    1鍵盤輸入一個(gè)字符到AL中AL=字符
    2輸出DL寄存器的字符到顯示器DL(存放一個(gè)字符)
    9輸出一個(gè)以“$”結(jié)尾的字符串到顯示器DS:字符串所在的段地址
    DX:字符串首地址
    0AH從鍵盤輸入一個(gè)字符串到指定緩沖區(qū)DS:緩沖區(qū)所在的段地址
    DX:緩沖區(qū)首地址
    緩沖區(qū)相應(yīng)位置
    • 更多請見: 匯編常用的INT 21H系統(tǒng)調(diào)用

    IRET

      可見,INT 指令的最終功能和call指令相似,都是調(diào)用一段程序。一般情況下,系統(tǒng)將一些具有一定功能的子程序,以中斷處理程序的方式提供給應(yīng)用程序調(diào)用。
    我們在編程的時(shí)候,可以用int指令調(diào)用這些子程序,而在子程序中安排iret指令返回。我們將這樣的中斷處理子程序簡稱為中斷例程。
      IRET指令的執(zhí)行過程相當(dāng)于:

    pop ip pop cs pop flags

    中斷程序的編寫步驟

      中斷處理程序的編寫與子程序類似,先保護(hù)現(xiàn)場,再完成功能,然后恢復(fù)現(xiàn)場,最后用IRET指令返回,返回地址是中斷發(fā)生時(shí)緊接著的下一條指令。

    中斷處理子程序:
      保存寄存器內(nèi)容,如允許中斷嵌套,則開中斷 ( STI )
      中斷處理功能
      關(guān)中斷(CLI)
      送中斷結(jié)束命令( EOI )給中斷命令寄存器
      恢復(fù)寄存器內(nèi)容
      IRET中斷返回
    主程序:
      1、設(shè)置中斷向量
      2、設(shè)置 CPU 的中斷允許位IF
      3、設(shè)置設(shè)備的中斷屏蔽位

      注意:程序員在編程的時(shí)候可以調(diào)用系統(tǒng)設(shè)置好的中斷例程,也可以自己編寫中斷處理程序。中斷類型號0、1、3、4是固定的內(nèi)部中斷,向量2是非屏蔽中斷,向量5~31是保留給系統(tǒng)使用的中斷,向量32~255則是用戶可用的中斷

    示例

      編寫一個(gè)中斷處理程序,要求在主程序運(yùn)行期間,每隔 10秒顯示一次字符串‘ bell ’。

    .model small .stack .datacnt dw 182 mes db 'bell',0ah,0dh,'$'.codestart:mov ax, @datamov ds, ax mov al, 1ch mov ah, 35hint 21h ;取向量1chpush espush bx ;保存原向量push ds mov dx, offset ringmov ax, seg ringmov ds, axmov al, 1chmov ah, 25hint 21h ;設(shè)置新向量pop dsin al, 21h;中斷屏蔽寄存器and al, 11111110bout 21h, al ;增加定時(shí)器中斷sti ;開中斷

    DOS系統(tǒng)功能調(diào)用

    執(zhí)行過程

    • 系統(tǒng)功能調(diào)用的格式:
      • ① 傳送入口參數(shù)到指定寄存器中(可選項(xiàng))
      • ② 功能號送入AH寄存器
      • ③ INT 21H
    • INT 21H是一個(gè)具有近90個(gè)子功能的中斷服務(wù)程序,這些子功能的編號稱為功能號。
    • INT 21H的功能大致可以分為四個(gè)方面,即設(shè)備管理、目錄管理、文件管理和其他

    BIOS和DOS中斷

      BIOS是固化在PC機(jī)內(nèi)存地址0FE000開始的8KBROM中的基本輸入輸出系統(tǒng)的例行程序,它為PC系列的不同微處理器提供了兼容的系統(tǒng)加電自檢、引導(dǎo)裝入、主要I/O設(shè)備的處理程序以及接口控制等功能模塊,一般以中斷處理程序的形式存在。BIOS可以處理所有的系統(tǒng)中斷,如鍵盤、顯示器、磁盤、打印、日期與時(shí)間等。BIOS是模塊化的結(jié)構(gòu)形式,每個(gè)功能模塊的入口地址都在中斷向量表中,對這些中斷調(diào)用是通過軟中斷指令I(lǐng)NT來實(shí)現(xiàn)的。

      DOS是IBM PC機(jī)的磁盤操作系統(tǒng),由軟盤或硬盤提供。它的兩個(gè)DOS模塊IBMBIO.COM和IBMDOS。COM使BIOS使用起來更方便。其中模塊IBMBIO.COM是一個(gè)輸入輸出設(shè)備處理程序,提供DOS到BIOS的低級接口,模塊IBMDOS。COM包括一個(gè)文件管理程序和一些處理程序,把信息傳送給IBMBIO.COM,形成BIOS調(diào)用。因?yàn)镈OS模塊提供了更多更必要的測試,使DOS操作比使用相應(yīng)功能的BIOS操作更簡易,而且DOS對硬件的依賴性更少些。

    用戶編程原則

    • ①盡可能使用DOS的系統(tǒng)功能調(diào)用,提高程序可移植性。
    • ②在DOS功能不能實(shí)現(xiàn)的情況下,考慮用BIOS功能調(diào)用。(比如讀打印機(jī)狀態(tài):BIOS中斷17H的功能2)
    • ③在DOS和BIOS的中斷子程序不能解決問題時(shí), 才使用IN/OUT指令直接控制硬件。(比如聲音控制)

    中斷例程調(diào)用方法

      一般來說,中斷例程中包含多個(gè)子程序,內(nèi)部用AH傳遞子程序的編號來決定執(zhí)行哪個(gè)子程序。

    鍵盤I/O

    • 大多數(shù)有用的程序都需要處理用戶的輸入。
    • 鍵盤輸入寄存器的端口地址為60H,控制寄存器的端口地址為61H。
    • 鍵盤上的每個(gè)鍵都有一個(gè)掃描碼(01~83)。
    • ◢ 據(jù)掃描碼可確定操作的是哪個(gè)鍵、是按下鍵還是釋放鍵;
    • 掃描碼用一個(gè)字節(jié)表示。低7位是掃描碼的數(shù)字編碼(即在鍵盤上的位置), 最高位D7位表示鍵的操作狀態(tài):
      • 當(dāng)按下鍵時(shí), D7=0 ,取得通碼;
      • 當(dāng)釋放鍵時(shí), D7=1,取得斷碼。
    • 鍵盤通過鍵盤接口電路與計(jì)算機(jī)連接。 當(dāng)在鍵盤上“按下”或“放開”一個(gè)鍵時(shí),如果鍵盤中斷是允許的(21H端口的1位等于0),就會(huì)產(chǎn)生一個(gè)類型9的中斷,并轉(zhuǎn)入到BIOS的鍵盤中斷處理程序。

    BIOS鍵盤中斷處理程序功能

    • ◢ 從鍵盤接口(60H)讀取操作鍵的掃描碼;
    • ◢ 將掃描碼轉(zhuǎn)換成字符碼(大部分鍵的字符碼即相應(yīng)字符的ASCII碼,沒有相應(yīng)ASCII碼的鍵字符碼為0。 );
    • ◢ 將鍵的掃描碼、字符碼存放在ROM BIOS數(shù)據(jù)區(qū)的鍵盤緩沖區(qū)KB_BUFFER( 0040:001A ), 供其它有關(guān)鍵盤的中斷子程應(yīng)用。

    BIOS鍵盤中斷(INT 16H)

    AH功能返回參數(shù)
    0從鍵盤讀一字符AL=字符碼,AH=掃描碼
    1讀鍵盤狀態(tài)并檢查是否有字符輸入如按下ZF=0,AL=字符碼,AH=掃描碼,否則ZF=1,緩沖區(qū)空
    2取鍵盤狀態(tài)字節(jié)AH=00,AL=鍵盤狀態(tài)字節(jié)(KB_FLAG)

    比如指令序列:

    MOV AH, 0 INT 16H ;等待按鍵輸入然后取得掃描碼和字符碼 MOV BX,AX ;用BX傳遞參數(shù) CALL BINIHEX ;調(diào)用子程序?qū)X轉(zhuǎn)16進(jìn)制并顯示

    使用int 16h中斷例程讀取鍵盤緩沖區(qū)

    • int 16h 中斷例程的 0 號功能,進(jìn)行如下的工作:
    • 1)檢測鍵盤緩沖區(qū)中是否有數(shù)據(jù);
    • 2)沒有則繼續(xù)做第1 步;
    • 3)讀取緩沖區(qū)第一個(gè)字單元中的鍵盤輸入;
    • 4)將讀取的掃描碼送入ah,ASCII 碼送入al;
    • 5)將己讀取的鍵盤輸入從緩沖區(qū)中刪除。
      • 可見,B1OS 的int 9 中斷例程和int 16h 中斷例程是一對相互配合的程序,int 9 中斷例程向鍵盤緩沖區(qū)中寫入,int 16h 中斷例程從緩沖區(qū)中讀出。

    DOS鍵盤中斷(INT 21H)

    AH功能調(diào)用參數(shù)返回參數(shù)
    1從鍵盤輸入一個(gè)字符并回顯在屏幕上AL =字符
    6讀鍵盤字符,不回顯DL = 0FFH若有字符可取,AL=字符,ZF=0
    若無字符可取,AL=0,ZF=1
    7從鍵盤輸入一個(gè)字符,不回顯AL =字符
    A輸入字符到緩沖區(qū)DS:DX = 緩沖區(qū)首址(DX+1)=實(shí)際輸入字符數(shù)
    B檢驗(yàn)鍵盤狀態(tài)AL=0表示有輸入 ,AL=FF表示無輸入

    0AH功能的注意事項(xiàng)

    • ◢ 輸入的字符均帶回顯,且光標(biāo)隨字符移動(dòng)。當(dāng)輸入回車符結(jié)束時(shí),也回顯回車符。表現(xiàn)為功能調(diào)用結(jié)束后,光標(biāo)回到了行首。
    • ◢ 回車符0DH作為一個(gè)輸入的字符存放在字符串尾,但計(jì)算輸入個(gè)數(shù)時(shí),不包括回車鍵。實(shí)際最多能輸入的字符數(shù) = 限制的最多數(shù)-1 (回車符占一個(gè))
    • ◢ 執(zhí)行完0AH功能后,DS和DX的值不變, DS:DX仍指向緩沖區(qū)的首地址。
    • ◢ 整個(gè)緩沖區(qū)的大小應(yīng)為:限制的最多數(shù) +2,max DB 11, ? , 11 dup (?),緩沖區(qū)必須定義為字節(jié)類型,不能定義為字類型

    顯示器I/O

    • 1、顯示器通過顯卡(顯示適配器)連接到計(jì)算機(jī)上。
    • 2、單色顯示適配器只能顯示黑白兩色。只能顯示ASCII碼字符和一些簡單字符圖形。
    • 3、彩色顯示適配器能以紅、綠、藍(lán)彩色顯示以點(diǎn)繪制的圖形以及ASCII字符。
    • 4、顯示器有兩種顯示方式:
      • 文本方式:
        • 指以字符為單位顯示的方式,字符通常是指字母、數(shù)字、普通符號和一些特殊符號(如矩形塊等)。
      • 圖形方式:
        • 指以點(diǎn)為單位顯示的方式。一個(gè)點(diǎn)就是一個(gè)像素。
    • 5、屏幕上各象素的顯示信息,存放在顯示緩沖區(qū)(顯存)中。

    文本方式

      
      將屏幕劃分為 m列和n行 (m × n),在每個(gè)網(wǎng)格位置上顯示像素,一個(gè)字符是一個(gè)像素。在這種顯示方式下,顯示緩沖存儲(chǔ)區(qū)中存放的是字符的ASCII碼和對應(yīng)的顯示屬性,每個(gè)字符占用兩個(gè)字節(jié)的空間

    圖形方式:

      將屏幕劃分為 m×n的點(diǎn)陣,在每個(gè)點(diǎn)的位置顯示像素,一個(gè)點(diǎn)是一個(gè)像素。顯示緩沖存儲(chǔ)區(qū)中存放的是“像素”點(diǎn)的信息,它的值為“0”或者“1”,為“0”就不在屏幕上打點(diǎn),為“1”則在屏幕上打點(diǎn)。

    文本方式屬性字節(jié)的含義

    DOS顯示功能調(diào)用中斷(INT 21H)

    AH功能調(diào)用參數(shù)
    2顯示一個(gè)字符(檢驗(yàn)Ctrl-Break)DL = 字符
    光標(biāo)跟隨字符移動(dòng)
    6顯示一個(gè)字符(不檢驗(yàn)Ctrl-Break)DL = 字符
    光標(biāo)跟隨字符移動(dòng)
    9顯示字符串DS:DX=串地址
    串必須以$結(jié)束,光標(biāo)跟隨串移動(dòng)

    顯示存儲(chǔ)器

      MDA顯存的起始地址為B000:0000,CGA、EGA、VGA的是B800:0000。 1屏幕的字符數(shù)據(jù)稱為1頁數(shù)據(jù)。據(jù)顯存大小,可存儲(chǔ)若干頁的字符象素。
      例: 16KB 顯存能存儲(chǔ):(1000B=1KB)
      25×80方式,4頁( 0 ~ 3 ), 80×25×2×4 =16000
      25×40方式,8頁( 0 ~ 7 ), 40×25×2×8 =16000
      對CGA、EGA、VGA的80列顯示方式,0頁顯存中的起始地址是B800:0000, 1頁B800:1000, 2頁B800:2000,3頁B800:3000。屏幕上某一字符位置在顯存中的偏移地址計(jì)算公式:
      Char_offset=Page_offset+((row*width)+column)*byte
      字符偏移地址=頁偏移地址+((行號 * 行寬)+列號)* 2

    BIOS顯示中斷(INT 10H)

      功能號 AH=0,1, 2, 3, 5, 6, 7, 8, 9, 0AH, 0EH 13H

    設(shè)置顯示方式

    • 1.入口參數(shù) AL = 顯示方式值
    AL顯示方式值顯示點(diǎn)陣大小顯示方式
    0040×25黑白文本方式
    0140×25彩色文本方式
    0280×25黑白文本方式
    0380×25彩色文本方式
    04320×320彩色圖形方式
    • 2.功能號 AH = 00H
    • 3.類型號 10H
    • 4.出口參數(shù) 無
    • 5.實(shí)現(xiàn)功能 將顯示方式設(shè)置為指定的形式

        例: 將顯示方式設(shè)置為 25×80彩色文本方式

    MOV AL, 03HMOV AH, 00INT 10H

    控制光標(biāo)

    隱藏光標(biāo) 

    ;隱藏光標(biāo) mov ch,20h mov cl,00h mov ah,1 int 10h

    光標(biāo)定位

      Int 10h的功能02:。
      DH和DL寄存器中為光標(biāo)位置的行列號,BH中為頁號(單色顯示器頁號為0 )。
      例:

    ; -------- 設(shè)置光標(biāo)的位置,光標(biāo)在第5行第6列(4,5)。 mov dh,4 ; DH是行號 mov dl,5 ; DL是列號 mov bh,0 ; BH是頁號 mov ah,2 ; 2號功能 int 10h

     讀光標(biāo)位置

      功能03 :BH中指定頁號。把光標(biāo)位置的行號回送給DH,列號回送給DL,光標(biāo)大小的參數(shù)填入CH和CL 。

    mov ah,3 mov bh,0 int 10h ;返回參數(shù)dh:dl=行:列

    清屏和卷屏

      功能06(07):使屏幕內(nèi)容上卷(或下卷)指定的行。需要7個(gè)參數(shù)。
      例:清除屏幕

    mov ah, 6 ; ah=功能號 mov al, 0 ; al=指定行數(shù)(為0全屏幕空白) mov bh, 70h ; bh=卷入行屬性(白底黑字 ); -------- 定義窗口屬性 mov ch, 0 ; ch=左上角行號 mov cl, 0 ;cl= 左上角列號 mov dh, 24 ; dh=右下角行號 mov dl, 79 ;dl= 右下角列號 ; -------- 定義窗口屬性int 10h ; BIOS調(diào)用類型10h

    顯示字符及字符串

      
      功能9(0a): 把一個(gè)字符送到顯示屏幕,可直接在cx中設(shè)定顯示次數(shù),調(diào)用結(jié)束后光標(biāo)返回它的初始位置。(0a以正常屬性顯示)
      功能8:讀取當(dāng)前光標(biāo)位置的字符和屬性,入口參數(shù)bh=顯示頁號,返回ah/al=字符/屬性。
      例: 在品紅背景下,顯示5個(gè)淺綠色閃爍的星號。(閃爍很快幾乎覺察不到)

    MOV AH,09 ; 光標(biāo)位置下顯示 MOV AL,'*' ; 顯示字符 MOV BH,0 ; 顯示頁0 MOV BL,0DAH ; 1 101 1010 MOV CX,05 ; 顯示次數(shù) INT 10H ; BIOS調(diào)用

    顯示字符串

    • 功能13H:顯示字符串。
    • 參數(shù):
      • ES:BP=字符串地址
      • AL=寫方式(0~3)
      • CX=字符串長度
      • DH/DL=起始行/列
      • BH/BL=頁號/屬性
    • 子功能號
      • AL=0,1,要指定整個(gè)顯示字符串的屬性。
      • AL=2,3,必須指定每個(gè)字符的屬性。

    顯示系統(tǒng)時(shí)間

    DATAS SEGMENTCLOCK DB 0,0,':',0,0,':',0,0,'$' DATAS ENDS CODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AX RESTART:LEA BX,CLOCKMOV AL,4CALL GETTIMEMOV AL,2CALL GETTIMEMOV AL,0CALL GETTIME;------ 設(shè)置光標(biāo)位置MOV DH,10 ;行MOV DL,30 ;列MOV BH,0MOV AH,2INT 10H;------ 隱藏光標(biāo)MOV CH,20HMOV CL,00HMOV AH,1INT 10H;------ 輸出時(shí)間LEA DX,CLOCKMOV AH,9INT 21H ; ------ 檢測鍵盤輸入。IN AL,60HCMP AL,1JNZ RESTART ;按下ESC退出,不斷更新時(shí)間MOV AH,4CHINT 21H ; ------ 獲取時(shí)間 入口參數(shù):AL GETTIME PROC; ------ 讀取數(shù)據(jù)OUT 70H,AL ; 設(shè)定讀數(shù)地址IN AL,71H ; 取數(shù); ------ 左移四位得到十位數(shù)值MOV AH,0 ;清零MOV CL,4SHL AX,CLSHR AL,CL ; 得到個(gè)位數(shù)值 ADD AH,30H ; 轉(zhuǎn)換成ASCIIADD AL,30H ; 轉(zhuǎn)換成ASCIIMOV CLOCK[BX],AHMOV CLOCK[BX+1],ALADD BX,3 ; 跳過三個(gè)字符->':'RET GETTIME ENDP CODES ENDSEND START

    總結(jié)

    以上是生活随笔為你收集整理的汇编语言8086笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    成人aaa片一区国产精品 | 红桃av一区二区三区在线无码av | 精品国产乱码久久久久乱码 | 精品无码国产一区二区三区av | 久久精品人妻少妇一区二区三区 | 乱人伦中文视频在线观看 | 久久久久亚洲精品男人的天堂 | 4hu四虎永久在线观看 | 日本精品人妻无码77777 天堂一区人妻无码 | 18禁止看的免费污网站 | 天下第一社区视频www日本 | 夜精品a片一区二区三区无码白浆 | 鲁大师影院在线观看 | 国产精品va在线观看无码 | 中文字幕无码视频专区 | 全黄性性激高免费视频 | 国产美女极度色诱视频www | 欧洲美熟女乱又伦 | 无码av免费一区二区三区试看 | 亚洲爆乳无码专区 | 国产成人一区二区三区别 | 亚洲人成人无码网www国产 | 东京热一精品无码av | 天堂а√在线中文在线 | 中文毛片无遮挡高清免费 | 久久精品国产一区二区三区 | 婷婷色婷婷开心五月四房播播 | 男女猛烈xx00免费视频试看 | 亚洲人交乣女bbw | 国产精品久久久久久亚洲毛片 | 激情爆乳一区二区三区 | 国产无遮挡吃胸膜奶免费看 | 亚洲成av人片天堂网无码】 | 免费乱码人妻系列无码专区 | 国产超碰人人爽人人做人人添 | 亚洲小说春色综合另类 | 丰满少妇人妻久久久久久 | 国产精品毛多多水多 | 中文字幕久久久久人妻 | 日日干夜夜干 | 欧美激情内射喷水高潮 | 亚洲爆乳精品无码一区二区三区 | 特大黑人娇小亚洲女 | 撕开奶罩揉吮奶头视频 | 男女作爱免费网站 | 2020久久香蕉国产线看观看 | 东京无码熟妇人妻av在线网址 | 中文字幕无码免费久久99 | 国产美女极度色诱视频www | 亚洲精品成人av在线 | 亚洲午夜久久久影院 | 日欧一片内射va在线影院 | 日产精品99久久久久久 | 亚洲成av人片天堂网无码】 | 老司机亚洲精品影院无码 | 麻豆精产国品 | 亚洲 a v无 码免 费 成 人 a v | 亚洲小说图区综合在线 | 亚洲色无码一区二区三区 | 性做久久久久久久久 | 5858s亚洲色大成网站www | 国产综合色产在线精品 | 国产一区二区不卡老阿姨 | 奇米影视888欧美在线观看 | 日韩人妻系列无码专区 | 老司机亚洲精品影院无码 | 久久精品99久久香蕉国产色戒 | 激情国产av做激情国产爱 | 久久精品女人天堂av免费观看 | v一区无码内射国产 | 4hu四虎永久在线观看 | 国产精品久久久一区二区三区 | 久久99精品国产麻豆蜜芽 | 丁香啪啪综合成人亚洲 | 国产亚洲欧美在线专区 | 亚洲一区二区三区四区 | 少妇性俱乐部纵欲狂欢电影 | 国产三级精品三级男人的天堂 | 久久这里只有精品视频9 | 强伦人妻一区二区三区视频18 | 久久午夜夜伦鲁鲁片无码免费 | 亚洲理论电影在线观看 | 性欧美牲交xxxxx视频 | 亚洲爆乳精品无码一区二区三区 | 久久亚洲中文字幕精品一区 | 对白脏话肉麻粗话av | 鲁鲁鲁爽爽爽在线视频观看 | 国产熟女一区二区三区四区五区 | 女人被男人爽到呻吟的视频 | 亚洲精品久久久久久久久久久 | 熟妇女人妻丰满少妇中文字幕 | 亚洲一区二区三区偷拍女厕 | 一本久道久久综合婷婷五月 | 少妇高潮喷潮久久久影院 | 99久久精品无码一区二区毛片 | 国产精品久久久久无码av色戒 | 麻豆国产人妻欲求不满谁演的 | 无码国产激情在线观看 | 天天做天天爱天天爽综合网 | 国产三级久久久精品麻豆三级 | 粗大的内捧猛烈进出视频 | 十八禁真人啪啪免费网站 | 亚洲人成网站色7799 | 久久国产精品精品国产色婷婷 | 国产午夜福利亚洲第一 | 给我免费的视频在线观看 | 色综合久久久无码网中文 | 曰韩无码二三区中文字幕 | 欧美人与禽zoz0性伦交 | 亚洲国产精品无码久久久久高潮 | 白嫩日本少妇做爰 | 国产口爆吞精在线视频 | 偷窥日本少妇撒尿chinese | 欧美性猛交xxxx富婆 | 99视频精品全部免费免费观看 | 全球成人中文在线 | 中国大陆精品视频xxxx | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 中文字幕无码视频专区 | 黑人巨大精品欧美黑寡妇 | 欧美喷潮久久久xxxxx | 日韩精品成人一区二区三区 | 久久久久久久女国产乱让韩 | 久久人人爽人人爽人人片av高清 | 粗大的内捧猛烈进出视频 | 人妻少妇精品无码专区二区 | 国产两女互慰高潮视频在线观看 | 亚洲精品国产精品乱码视色 | 人妻尝试又大又粗久久 | 2020久久超碰国产精品最新 | 久久人人爽人人爽人人片av高清 | 亚洲区小说区激情区图片区 | 无码精品国产va在线观看dvd | 99riav国产精品视频 | 55夜色66夜色国产精品视频 | 红桃av一区二区三区在线无码av | www国产亚洲精品久久久日本 | 日本精品少妇一区二区三区 | 色偷偷人人澡人人爽人人模 | 窝窝午夜理论片影院 | 日本饥渴人妻欲求不满 | 在线亚洲高清揄拍自拍一品区 | 成人无码精品1区2区3区免费看 | 日本大乳高潮视频在线观看 | 人妻少妇精品久久 | 67194成是人免费无码 | 日韩视频 中文字幕 视频一区 | 亚洲小说图区综合在线 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲国产欧美在线成人 | 亚洲人成网站在线播放942 | 欧美激情内射喷水高潮 | 亚洲精品一区二区三区婷婷月 | 亚洲欧美中文字幕5发布 | 国产极品视觉盛宴 | 丰满人妻精品国产99aⅴ | 天堂无码人妻精品一区二区三区 | 2020久久超碰国产精品最新 | 精品国产一区二区三区av 性色 | 樱花草在线社区www | 国产精品久久久久9999小说 | 国产精品亚洲五月天高清 | 日韩人妻无码中文字幕视频 | 精品少妇爆乳无码av无码专区 | 国产成人亚洲综合无码 | 久久精品国产99精品亚洲 | 男人和女人高潮免费网站 | 国产在线精品一区二区高清不卡 | 久久国内精品自在自线 | 双乳奶水饱满少妇呻吟 | 成人欧美一区二区三区黑人免费 | 国产区女主播在线观看 | 国产美女极度色诱视频www | 亚洲第一无码av无码专区 | 97无码免费人妻超级碰碰夜夜 | 亚洲自偷自偷在线制服 | 天下第一社区视频www日本 | 亚洲色成人中文字幕网站 | 成人欧美一区二区三区黑人免费 | 色诱久久久久综合网ywww | 亚洲s码欧洲m码国产av | 牛和人交xxxx欧美 | 欧美国产亚洲日韩在线二区 | 午夜福利试看120秒体验区 | 无码人妻丰满熟妇区五十路百度 | 国产亚洲视频中文字幕97精品 | 欧美35页视频在线观看 | 午夜肉伦伦影院 | 日本精品人妻无码免费大全 | 国产亚洲精品久久久ai换 | 一本无码人妻在中文字幕免费 | 久久综合激激的五月天 | 色综合视频一区二区三区 | 女人色极品影院 | 好男人www社区 | 国产高潮视频在线观看 | 久久久久久九九精品久 | 亚洲精品欧美二区三区中文字幕 | 99国产精品白浆在线观看免费 | 免费人成在线视频无码 | 国产乱人偷精品人妻a片 | 精品成在人线av无码免费看 | 日韩视频 中文字幕 视频一区 | 天下第一社区视频www日本 | 少妇性l交大片 | 又大又硬又黄的免费视频 | 97精品国产97久久久久久免费 | 精品少妇爆乳无码av无码专区 | 国产精品毛片一区二区 | 久久无码中文字幕免费影院蜜桃 | 国产色精品久久人妻 | 成人亚洲精品久久久久 | 免费无码av一区二区 | 日韩 欧美 动漫 国产 制服 | 亚洲小说图区综合在线 | 东京无码熟妇人妻av在线网址 | 亚洲中文字幕无码中文字在线 | 中文无码伦av中文字幕 | 久久99精品国产麻豆 | 国产精品久久久久久亚洲影视内衣 | 免费人成网站视频在线观看 | 日韩av激情在线观看 | 亚洲日韩一区二区三区 | 又湿又紧又大又爽a视频国产 | 乱中年女人伦av三区 | 成人亚洲精品久久久久 | 人人澡人人妻人人爽人人蜜桃 | 亚洲小说图区综合在线 | 国产激情无码一区二区 | 精品熟女少妇av免费观看 | 成在人线av无码免观看麻豆 | 久久综合给合久久狠狠狠97色 | 在教室伦流澡到高潮hnp视频 | 免费国产黄网站在线观看 | 岛国片人妻三上悠亚 | 又大又硬又黄的免费视频 | 九九热爱视频精品 | 成人精品视频一区二区 | 国产精品爱久久久久久久 | 色狠狠av一区二区三区 | 亚洲精品成人福利网站 | 精品欧美一区二区三区久久久 | 福利一区二区三区视频在线观看 | 999久久久国产精品消防器材 | 色欲综合久久中文字幕网 | 国产sm调教视频在线观看 | 好爽又高潮了毛片免费下载 | av人摸人人人澡人人超碰下载 | 国产三级精品三级男人的天堂 | 樱花草在线播放免费中文 | 狠狠色噜噜狠狠狠7777奇米 | 国产一区二区三区精品视频 | 午夜成人1000部免费视频 | 少妇性荡欲午夜性开放视频剧场 | 牲欲强的熟妇农村老妇女 | 亚洲精品国产精品乱码视色 | 女人被男人躁得好爽免费视频 | 亚洲人成影院在线观看 | 日韩精品无码一区二区中文字幕 | 无码人妻丰满熟妇区五十路百度 | 一本久久伊人热热精品中文字幕 | 99视频精品全部免费免费观看 | 色婷婷久久一区二区三区麻豆 | 乱码午夜-极国产极内射 | 狠狠cao日日穞夜夜穞av | 亚洲a无码综合a国产av中文 | 高潮毛片无遮挡高清免费视频 | 国产成人精品必看 | 99视频精品全部免费免费观看 | 国产成人无码一二三区视频 | 国产精品高潮呻吟av久久4虎 | 精品久久久无码人妻字幂 | 国产成人一区二区三区在线观看 | 水蜜桃亚洲一二三四在线 | 美女毛片一区二区三区四区 | 亚洲欧美日韩国产精品一区二区 | 成人试看120秒体验区 | 日本爽爽爽爽爽爽在线观看免 | 久久久av男人的天堂 | 国产精品欧美成人 | 377p欧洲日本亚洲大胆 | 亚洲天堂2017无码中文 | 天天摸天天碰天天添 | 影音先锋中文字幕无码 | 国产色xx群视频射精 | 中文字幕av无码一区二区三区电影 | 亚洲高清偷拍一区二区三区 | 亚洲国产精品美女久久久久 | 人人妻人人澡人人爽欧美一区 | 免费国产成人高清在线观看网站 | 国产亲子乱弄免费视频 | 宝宝好涨水快流出来免费视频 | 色婷婷综合中文久久一本 | 亚洲精品国产第一综合99久久 | 熟妇女人妻丰满少妇中文字幕 | 亚洲精品成人av在线 | 麻豆国产97在线 | 欧洲 | 色综合久久久久综合一本到桃花网 | 亚洲综合无码久久精品综合 | 全黄性性激高免费视频 | 一区二区三区高清视频一 | 伊人久久婷婷五月综合97色 | 18黄暴禁片在线观看 | 国产人妻大战黑人第1集 | 十八禁真人啪啪免费网站 | 国产精品久久国产精品99 | 国产后入清纯学生妹 | 国产免费久久精品国产传媒 | 亚洲狠狠婷婷综合久久 | 爆乳一区二区三区无码 | 精品国产国产综合精品 | 狂野欧美性猛xxxx乱大交 | 亚洲の无码国产の无码步美 | 欧洲vodafone精品性 | 任你躁国产自任一区二区三区 | 免费国产成人高清在线观看网站 | 国产亚洲精品精品国产亚洲综合 | 国产在线精品一区二区高清不卡 | 中文字幕乱码人妻无码久久 | 中文字幕人成乱码熟女app | 男人的天堂av网站 | 人妻熟女一区 | 狠狠色丁香久久婷婷综合五月 | 国产精品高潮呻吟av久久4虎 | 精品久久久中文字幕人妻 | 成人性做爰aaa片免费看不忠 | 妺妺窝人体色www在线小说 | 亚洲一区av无码专区在线观看 | 国产一区二区三区影院 | 国产亚洲欧美日韩亚洲中文色 | 天堂亚洲2017在线观看 | 内射爽无广熟女亚洲 | 免费网站看v片在线18禁无码 | 国产成人无码一二三区视频 | 少妇被粗大的猛进出69影院 | 国产美女极度色诱视频www | 在线观看免费人成视频 | 日本大香伊一区二区三区 | 欧美日韩亚洲国产精品 | 偷窥日本少妇撒尿chinese | 亚洲午夜久久久影院 | 亚洲中文字幕在线无码一区二区 | 波多野结衣av一区二区全免费观看 | 日本丰满熟妇videos | 亚洲人成无码网www | 国产色xx群视频射精 | 51国偷自产一区二区三区 | 久久 国产 尿 小便 嘘嘘 | www国产精品内射老师 | 欧美刺激性大交 | 精品日本一区二区三区在线观看 | 亚洲欧美日韩国产精品一区二区 | 国产无套内射久久久国产 | 在线看片无码永久免费视频 | 日本熟妇人妻xxxxx人hd | 国产偷自视频区视频 | 亚洲精品欧美二区三区中文字幕 | 麻花豆传媒剧国产免费mv在线 | 久久国产精品萌白酱免费 | 少妇愉情理伦片bd | 国产精品亚洲专区无码不卡 | 中文字幕乱码中文乱码51精品 | 亚洲一区二区三区播放 | 国产精品多人p群无码 | 无码人妻出轨黑人中文字幕 | 天堂久久天堂av色综合 | 亚洲综合精品香蕉久久网 | 又黄又爽又色的视频 | 亚洲国产精品一区二区第一页 | 无码人妻黑人中文字幕 | 国产高潮视频在线观看 | 久久午夜无码鲁丝片秋霞 | 国内精品人妻无码久久久影院 | 欧美性黑人极品hd | 久久精品人人做人人综合 | 日本一卡2卡3卡四卡精品网站 | 国产精品久久久久久久9999 | 国产精品a成v人在线播放 | 任你躁国产自任一区二区三区 | 久久综合网欧美色妞网 | 亚洲午夜福利在线观看 | 久久人人爽人人爽人人片av高清 | 特大黑人娇小亚洲女 | 成人精品一区二区三区中文字幕 | 国产精品无码成人午夜电影 | 国产精品国产三级国产专播 | 在线观看欧美一区二区三区 | 成人无码精品1区2区3区免费看 | 丝袜美腿亚洲一区二区 | 欧美日本免费一区二区三区 | 国产成人无码区免费内射一片色欲 | 中国女人内谢69xxxx | 亚洲中文字幕无码中字 | 国精产品一区二区三区 | 欧美精品国产综合久久 | 中文字幕乱妇无码av在线 | 妺妺窝人体色www在线小说 | 亚洲日韩一区二区三区 | 色一情一乱一伦 | 久久综合九色综合97网 | 国内精品一区二区三区不卡 | 国产成人综合美国十次 | 国产av无码专区亚洲awww | 久久zyz资源站无码中文动漫 | 国产又爽又猛又粗的视频a片 | 波多野结衣av在线观看 | 日本熟妇大屁股人妻 | 久久国产精品偷任你爽任你 | 午夜嘿嘿嘿影院 | 老熟妇乱子伦牲交视频 | 久久久久成人片免费观看蜜芽 | 色五月五月丁香亚洲综合网 | 日日橹狠狠爱欧美视频 | 福利一区二区三区视频在线观看 | 我要看www免费看插插视频 | 久久久中文久久久无码 | 亚洲欧美色中文字幕在线 | 九月婷婷人人澡人人添人人爽 | 国产精品毛多多水多 | 国产超碰人人爽人人做人人添 | 久久亚洲精品中文字幕无男同 | 中文字幕中文有码在线 | 国产麻豆精品精东影业av网站 | 国产精品对白交换视频 | 午夜福利不卡在线视频 | 中文字幕色婷婷在线视频 | 亚洲大尺度无码无码专区 | 99在线 | 亚洲 | 国色天香社区在线视频 | 无套内谢的新婚少妇国语播放 | ass日本丰满熟妇pics | 亚洲午夜无码久久 | 国产精品美女久久久久av爽李琼 | 人妻插b视频一区二区三区 | 久久99精品久久久久久动态图 | 国产偷抇久久精品a片69 | 黑森林福利视频导航 | 玩弄人妻少妇500系列视频 | 亚洲人成网站色7799 | 国产色视频一区二区三区 | 无码精品人妻一区二区三区av | 欧美老人巨大xxxx做受 | 暴力强奷在线播放无码 | 久久无码中文字幕免费影院蜜桃 | 久久久国产精品无码免费专区 | 国产精品欧美成人 | 精品无码成人片一区二区98 | 亚洲а∨天堂久久精品2021 | 久久99精品国产麻豆蜜芽 | 噜噜噜亚洲色成人网站 | 欧美熟妇另类久久久久久不卡 | 桃花色综合影院 | 亚洲国产欧美国产综合一区 | 婷婷六月久久综合丁香 | 国产激情综合五月久久 | 欧美丰满熟妇xxxx性ppx人交 | 欧美一区二区三区视频在线观看 | 国产成人无码a区在线观看视频app | 激情综合激情五月俺也去 | 亚洲中文字幕无码一久久区 | 成人精品视频一区二区三区尤物 | 人妻少妇精品无码专区二区 | yw尤物av无码国产在线观看 | 亚洲精品一区二区三区在线 | 大肉大捧一进一出视频出来呀 | 国产人妻久久精品二区三区老狼 | 欧美喷潮久久久xxxxx | 亚洲欧洲无卡二区视頻 | 性欧美大战久久久久久久 | 天天摸天天透天天添 | 亚洲精品成a人在线观看 | 无套内谢的新婚少妇国语播放 | 男人扒开女人内裤强吻桶进去 | 国产精品无码成人午夜电影 | 丁香花在线影院观看在线播放 | 亚洲精品一区国产 | www国产亚洲精品久久久日本 | 国产va免费精品观看 | 国产av人人夜夜澡人人爽麻豆 | 女人和拘做爰正片视频 | 任你躁在线精品免费 | 亚洲一区二区三区 | av人摸人人人澡人人超碰下载 | 人人妻人人澡人人爽人人精品 | 久久久精品国产sm最大网站 | 男女超爽视频免费播放 | 熟妇人妻中文av无码 | 亚洲精品国产品国语在线观看 | 国产精品怡红院永久免费 | 中文字幕乱码中文乱码51精品 | 国产精品多人p群无码 | 精品 日韩 国产 欧美 视频 | 波多野结衣 黑人 | 国产亚洲精品精品国产亚洲综合 | 女人被男人躁得好爽免费视频 | 麻豆成人精品国产免费 | 国产特级毛片aaaaaaa高清 | 免费人成在线观看网站 | 久久精品丝袜高跟鞋 | 色欲综合久久中文字幕网 | 激情内射亚州一区二区三区爱妻 | 久久综合狠狠综合久久综合88 | 妺妺窝人体色www在线小说 | 久久综合色之久久综合 | 国产激情精品一区二区三区 | 精品成在人线av无码免费看 | 国内少妇偷人精品视频免费 | 国产免费无码一区二区视频 | 成人性做爰aaa片免费看不忠 | 日本精品人妻无码免费大全 | 国产av无码专区亚洲a∨毛片 | 美女极度色诱视频国产 | 久9re热视频这里只有精品 | 久久精品国产日本波多野结衣 | 国产亚洲精品久久久闺蜜 | 丰满人妻被黑人猛烈进入 | 狠狠噜狠狠狠狠丁香五月 | 麻豆国产人妻欲求不满谁演的 | 99久久亚洲精品无码毛片 | 全黄性性激高免费视频 | 久久精品一区二区三区四区 | 男人扒开女人内裤强吻桶进去 | 水蜜桃色314在线观看 | 国产无套粉嫩白浆在线 | 自拍偷自拍亚洲精品被多人伦好爽 | 久久久久99精品国产片 | 日韩精品无码一区二区中文字幕 | 精品人妻人人做人人爽 | 亚洲另类伦春色综合小说 | 免费人成在线观看网站 | 九九在线中文字幕无码 | 日产精品高潮呻吟av久久 | 人妻尝试又大又粗久久 | 毛片内射-百度 | 国产亚洲精品久久久久久 | 精品一区二区三区波多野结衣 | 超碰97人人射妻 | 色欲综合久久中文字幕网 | 图片区 小说区 区 亚洲五月 | 国精品人妻无码一区二区三区蜜柚 | 国产精品永久免费视频 | 亚洲人成网站免费播放 | 国产成人综合色在线观看网站 | 国产高清av在线播放 | 午夜无码人妻av大片色欲 | 初尝人妻少妇中文字幕 | 天干天干啦夜天干天2017 | 四虎4hu永久免费 | 日本va欧美va欧美va精品 | 精品无码av一区二区三区 | 精品国产麻豆免费人成网站 | 波多野42部无码喷潮在线 | 久久人人爽人人人人片 | 精品国产av色一区二区深夜久久 | 色婷婷综合中文久久一本 | 小鲜肉自慰网站xnxx | 久久久www成人免费毛片 | 人人澡人人透人人爽 | 麻豆国产97在线 | 欧洲 | 人妻少妇被猛烈进入中文字幕 | 亚洲精品www久久久 | 国产日产欧产精品精品app | 欧美国产亚洲日韩在线二区 | 在线看片无码永久免费视频 | 无码国内精品人妻少妇 | 久久久久久国产精品无码下载 | 夜夜躁日日躁狠狠久久av | 成人无码精品一区二区三区 | 亚洲精品久久久久avwww潮水 | 精品人妻中文字幕有码在线 | 牛和人交xxxx欧美 | 成人亚洲精品久久久久 | 成人影院yy111111在线观看 | 蜜桃视频韩日免费播放 | 熟妇女人妻丰满少妇中文字幕 | 人人妻人人澡人人爽欧美一区 | 成人av无码一区二区三区 | 日本乱人伦片中文三区 | 国产精品永久免费视频 | 色综合视频一区二区三区 | 国产成人亚洲综合无码 | 亚洲の无码国产の无码影院 | 东京热男人av天堂 | 国产精品对白交换视频 | 青青久在线视频免费观看 | 在线欧美精品一区二区三区 | 97无码免费人妻超级碰碰夜夜 | 黑人大群体交免费视频 | 国产精品高潮呻吟av久久 | 日韩欧美中文字幕公布 | 久久久久久九九精品久 | 国产精品福利视频导航 | 中文字幕人妻丝袜二区 | 久久久国产一区二区三区 | 国产suv精品一区二区五 | 亚欧洲精品在线视频免费观看 | 久久亚洲中文字幕无码 | 国产精品鲁鲁鲁 | 亚洲区小说区激情区图片区 | 欧美日韩视频无码一区二区三 | 欧美日韩一区二区免费视频 | 久久久久久久女国产乱让韩 | 全黄性性激高免费视频 | 精品人妻人人做人人爽夜夜爽 | 色一情一乱一伦一区二区三欧美 | 国产色xx群视频射精 | 久久久久久亚洲精品a片成人 | 六月丁香婷婷色狠狠久久 | 无套内谢老熟女 | 秋霞成人午夜鲁丝一区二区三区 | 亚洲欧美综合区丁香五月小说 | 欧美性黑人极品hd | 无码国产色欲xxxxx视频 | 久久综合网欧美色妞网 | 欧美日韩在线亚洲综合国产人 | 丁香花在线影院观看在线播放 | 一本色道久久综合亚洲精品不卡 | 国产疯狂伦交大片 | 国内精品一区二区三区不卡 | 乱中年女人伦av三区 | 少妇太爽了在线观看 | 成人精品一区二区三区中文字幕 | 午夜精品一区二区三区的区别 | 大地资源中文第3页 | 少妇太爽了在线观看 | 水蜜桃av无码 | 最近免费中文字幕中文高清百度 | 国产精品美女久久久 | 激情内射日本一区二区三区 | 国产精品久久久一区二区三区 | 国产激情艳情在线看视频 | 国产av久久久久精东av | 色 综合 欧美 亚洲 国产 | 日本www一道久久久免费榴莲 | 99久久婷婷国产综合精品青草免费 | 大屁股大乳丰满人妻 | 久在线观看福利视频 | 国产精品自产拍在线观看 | 中文字幕久久久久人妻 | 桃花色综合影院 | 欧美日韩亚洲国产精品 | 女人被男人躁得好爽免费视频 | 99久久人妻精品免费二区 | 亚洲国精产品一二二线 | 中文字幕+乱码+中文字幕一区 | 国产亚洲精品久久久久久国模美 | 蜜桃无码一区二区三区 | 久久精品一区二区三区四区 | 99riav国产精品视频 | 成人免费视频在线观看 | 强辱丰满人妻hd中文字幕 | 无码人妻av免费一区二区三区 | 国产精品第一国产精品 | 精品乱码久久久久久久 | 亚洲人亚洲人成电影网站色 | 激情内射日本一区二区三区 | 久久久久免费精品国产 | 在线观看国产午夜福利片 | 久久国产精品二国产精品 | 激情人妻另类人妻伦 | 国产激情综合五月久久 | 国产一区二区三区四区五区加勒比 | 18无码粉嫩小泬无套在线观看 | 亚洲色大成网站www国产 | 中文字幕色婷婷在线视频 | 伊人久久婷婷五月综合97色 | 98国产精品综合一区二区三区 | 天天拍夜夜添久久精品 | 狠狠亚洲超碰狼人久久 | 老子影院午夜精品无码 | 成人综合网亚洲伊人 | 国产热a欧美热a在线视频 | 久久午夜夜伦鲁鲁片无码免费 | 国产偷国产偷精品高清尤物 | 成年美女黄网站色大免费全看 | 精品偷自拍另类在线观看 | 亚洲爆乳无码专区 | 东京无码熟妇人妻av在线网址 | aⅴ在线视频男人的天堂 | 日日碰狠狠躁久久躁蜜桃 | 精品人妻av区 | 国产成人精品久久亚洲高清不卡 | 中文字幕人妻无码一夲道 | 亚洲中文字幕在线观看 | 精品久久久久久亚洲精品 | 欧美三级a做爰在线观看 | 99精品国产综合久久久久五月天 | 少妇被粗大的猛进出69影院 | 牲交欧美兽交欧美 | 日韩精品无码一区二区中文字幕 | 亚洲精品久久久久久久久久久 | 国内揄拍国内精品少妇国语 | 精品久久久久久人妻无码中文字幕 | 白嫩日本少妇做爰 | 少妇无套内谢久久久久 | 成人精品一区二区三区中文字幕 | 中文字幕无码日韩欧毛 | 亚洲国产av精品一区二区蜜芽 | 精品无人区无码乱码毛片国产 | 精品人人妻人人澡人人爽人人 | 国产艳妇av在线观看果冻传媒 | 色五月丁香五月综合五月 | 大屁股大乳丰满人妻 | 国内精品九九久久久精品 | 日本乱人伦片中文三区 | 日本在线高清不卡免费播放 | 日韩精品一区二区av在线 | 欧美日韩一区二区综合 | 亚洲成色www久久网站 | 少妇人妻大乳在线视频 | 中文字幕 亚洲精品 第1页 | 99er热精品视频 | 亚洲精品国产a久久久久久 | 中文字幕亚洲情99在线 | 国内揄拍国内精品少妇国语 | 中文字幕无码av激情不卡 | 成人欧美一区二区三区黑人 | 人妻体内射精一区二区三四 | 精品国产一区二区三区av 性色 | 综合网日日天干夜夜久久 | 免费观看的无遮挡av | 亚洲色欲久久久综合网东京热 | 77777熟女视频在线观看 а天堂中文在线官网 | 偷窥日本少妇撒尿chinese | 波多野结衣乳巨码无在线观看 | 无码福利日韩神码福利片 | 国产亚洲精品久久久久久久 | 伊人久久大香线蕉午夜 | 国产欧美精品一区二区三区 | 欧美日韩亚洲国产精品 | 好男人www社区 | 女高中生第一次破苞av | 双乳奶水饱满少妇呻吟 | 国产成人无码一二三区视频 | 亚洲中文字幕久久无码 | 麻豆成人精品国产免费 | 熟妇女人妻丰满少妇中文字幕 | 国产网红无码精品视频 | av无码电影一区二区三区 | 99久久人妻精品免费一区 | 国产亚洲精品久久久久久大师 | 一本久道久久综合婷婷五月 | 粗大的内捧猛烈进出视频 | 亚洲小说春色综合另类 | 樱花草在线播放免费中文 | 永久免费观看国产裸体美女 | 激情国产av做激情国产爱 | 亚洲国产精品成人久久蜜臀 | 久久熟妇人妻午夜寂寞影院 | 国产精品自产拍在线观看 | 乌克兰少妇性做爰 | 国产色在线 | 国产 | 久久久亚洲欧洲日产国码αv | 永久免费观看国产裸体美女 | 亚洲理论电影在线观看 | 日韩人妻少妇一区二区三区 | 无码人中文字幕 | 麻豆精品国产精华精华液好用吗 | 亚洲s码欧洲m码国产av | 亚洲中文字幕va福利 | 亚洲日韩乱码中文无码蜜桃臀网站 | 精品国产麻豆免费人成网站 | 久久精品99久久香蕉国产色戒 | 亚洲日本va午夜在线电影 | 日韩少妇内射免费播放 | 麻豆人妻少妇精品无码专区 | 日本精品高清一区二区 | 欧美xxxxx精品 | 亚洲综合另类小说色区 | av无码久久久久不卡免费网站 | 国产亚洲视频中文字幕97精品 | 精品国产麻豆免费人成网站 | 久久国产精品偷任你爽任你 | 久久97精品久久久久久久不卡 | 亚洲 a v无 码免 费 成 人 a v | 老太婆性杂交欧美肥老太 | 国产午夜视频在线观看 | 男女下面进入的视频免费午夜 | 国产成人一区二区三区别 | 成熟女人特级毛片www免费 | 十八禁真人啪啪免费网站 | 夜夜夜高潮夜夜爽夜夜爰爰 | 黑人粗大猛烈进出高潮视频 | 午夜性刺激在线视频免费 | 丰满肥臀大屁股熟妇激情视频 | 亚洲色大成网站www国产 | 久久久国产精品无码免费专区 | 少妇无套内谢久久久久 | 国产特级毛片aaaaaaa高清 | 最近的中文字幕在线看视频 | 精品一二三区久久aaa片 | 亚洲精品成a人在线观看 | 久久99精品久久久久久 | 青春草在线视频免费观看 | 3d动漫精品啪啪一区二区中 | 玩弄人妻少妇500系列视频 | 夜精品a片一区二区三区无码白浆 | 青春草在线视频免费观看 | 强伦人妻一区二区三区视频18 | 国产午夜福利亚洲第一 | 十八禁视频网站在线观看 | 男人的天堂av网站 | 欧美老人巨大xxxx做受 | 国产精品无码一区二区桃花视频 | 久久人人爽人人爽人人片av高清 | 国产精品久久精品三级 | 成人三级无码视频在线观看 | 久久精品人人做人人综合 | 久久精品视频在线看15 | 中文字幕无码日韩专区 | 久久久久亚洲精品中文字幕 | 人人妻人人澡人人爽人人精品浪潮 | a国产一区二区免费入口 | 国产极品美女高潮无套在线观看 | 国产精品永久免费视频 | 四虎4hu永久免费 | 国产一区二区不卡老阿姨 | 久热国产vs视频在线观看 | 国产亚洲人成在线播放 | 少妇高潮喷潮久久久影院 | 18精品久久久无码午夜福利 | 99riav国产精品视频 | 亚洲男人av天堂午夜在 | 国产欧美精品一区二区三区 | 成 人 免费观看网站 | 麻豆国产人妻欲求不满谁演的 | 日韩 欧美 动漫 国产 制服 | 嫩b人妻精品一区二区三区 | 亚洲自偷自偷在线制服 | 亚洲一区二区三区香蕉 | 人妻人人添人妻人人爱 | 免费男性肉肉影院 | 免费人成网站视频在线观看 | 东北女人啪啪对白 | 久久久国产精品无码免费专区 | 国产精品久久久久久无码 | 免费观看的无遮挡av | 久久久国产精品无码免费专区 | 欧美丰满熟妇xxxx | 久9re热视频这里只有精品 | 久久这里只有精品视频9 | 国产精品99久久精品爆乳 | 99re在线播放 | 免费播放一区二区三区 | 午夜福利一区二区三区在线观看 | 国产精品亚洲一区二区三区喷水 | 双乳奶水饱满少妇呻吟 | 免费人成网站视频在线观看 | 黄网在线观看免费网站 | 久久久久久久久888 | 亚洲欧洲无卡二区视頻 | 精品国产一区二区三区四区在线看 | 日韩欧美群交p片內射中文 | 日韩精品乱码av一区二区 | 国产成人无码a区在线观看视频app | 天海翼激烈高潮到腰振不止 | 99久久亚洲精品无码毛片 | 亚洲人成网站免费播放 | 日本丰满护士爆乳xxxx | 亚洲国产成人av在线观看 | 成人三级无码视频在线观看 | 99久久人妻精品免费二区 | 亚洲精品成人av在线 | www成人国产高清内射 | 性生交片免费无码看人 | 两性色午夜视频免费播放 | 精品无码av一区二区三区 | 无码精品人妻一区二区三区av | 欧美精品国产综合久久 | 免费无码av一区二区 | 国产精品久久精品三级 | 九月婷婷人人澡人人添人人爽 | 夜精品a片一区二区三区无码白浆 | 真人与拘做受免费视频一 | 日本va欧美va欧美va精品 | 国产精品多人p群无码 | 国产内射爽爽大片视频社区在线 | 国产精品沙发午睡系列 | 国产精品美女久久久网av | 无码国产激情在线观看 | 欧美乱妇无乱码大黄a片 | 久久精品人人做人人综合 | 久久午夜无码鲁丝片秋霞 | 奇米影视7777久久精品 | 四虎国产精品免费久久 | 久久99精品国产麻豆蜜芽 | 88国产精品欧美一区二区三区 | 无码人妻黑人中文字幕 | 久久精品中文字幕一区 | 亚洲欧洲日本综合aⅴ在线 | 日本成熟视频免费视频 | 少妇性俱乐部纵欲狂欢电影 | 午夜性刺激在线视频免费 | 波多野结衣av在线观看 | 18禁黄网站男男禁片免费观看 | 美女张开腿让人桶 | 成人影院yy111111在线观看 | 特级做a爰片毛片免费69 | 国产福利视频一区二区 | 亚洲熟悉妇女xxx妇女av | 97久久国产亚洲精品超碰热 | 18精品久久久无码午夜福利 | 女人被爽到呻吟gif动态图视看 | 牲交欧美兽交欧美 | 狂野欧美性猛xxxx乱大交 | 欧美激情一区二区三区成人 | 日韩精品无码一本二本三本色 | 男人的天堂2018无码 | 麻豆国产丝袜白领秘书在线观看 | 玩弄人妻少妇500系列视频 | 日韩精品无码免费一区二区三区 | 色欲综合久久中文字幕网 | 无码午夜成人1000部免费视频 | 无码av免费一区二区三区试看 | 久久久av男人的天堂 | 亚洲熟熟妇xxxx | 免费中文字幕日韩欧美 | 狠狠综合久久久久综合网 | 精品欧洲av无码一区二区三区 | 国产国产精品人在线视 | 欧美黑人巨大xxxxx | 欧美变态另类xxxx | 三级4级全黄60分钟 | 一本久久a久久精品亚洲 | 亚洲国产精品美女久久久久 | 久久久婷婷五月亚洲97号色 | 国产精品亚洲а∨无码播放麻豆 | 欧美高清在线精品一区 | 清纯唯美经典一区二区 | 天堂亚洲2017在线观看 | 免费播放一区二区三区 | 国产亚洲精品久久久久久久 | 沈阳熟女露脸对白视频 | 日韩精品乱码av一区二区 | 亚洲精品成人福利网站 | 亚洲 高清 成人 动漫 | 欧美自拍另类欧美综合图片区 | 亚洲色成人中文字幕网站 | 亚洲 高清 成人 动漫 | 亚洲国产一区二区三区在线观看 | 色五月五月丁香亚洲综合网 | 嫩b人妻精品一区二区三区 | 久久午夜无码鲁丝片秋霞 | 丰满少妇女裸体bbw | 欧美日韩一区二区免费视频 | 欧美性生交活xxxxxdddd | 亚洲熟妇色xxxxx亚洲 | 强辱丰满人妻hd中文字幕 | 色婷婷久久一区二区三区麻豆 | 国产黄在线观看免费观看不卡 | 精品无人区无码乱码毛片国产 | 美女毛片一区二区三区四区 | 久久综合网欧美色妞网 | 欧洲精品码一区二区三区免费看 | 国产内射老熟女aaaa | 一本加勒比波多野结衣 | 日本欧美一区二区三区乱码 | 三上悠亚人妻中文字幕在线 | 秋霞成人午夜鲁丝一区二区三区 | 亚洲国产欧美国产综合一区 | 亚洲一区二区三区在线观看网站 | 网友自拍区视频精品 | 久久 国产 尿 小便 嘘嘘 | 国产乡下妇女做爰 | 欧美国产亚洲日韩在线二区 | 亚洲の无码国产の无码步美 | 日韩视频 中文字幕 视频一区 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 久久国产自偷自偷免费一区调 | 国产精品美女久久久 | 久久综合九色综合欧美狠狠 | 亚洲成色在线综合网站 | 国产麻豆精品精东影业av网站 | 精品国产一区二区三区四区在线看 | 巨爆乳无码视频在线观看 | 在线播放免费人成毛片乱码 | 国产精品亚洲综合色区韩国 | 中文字幕无码av波多野吉衣 | 欧美日韩综合一区二区三区 | 小泽玛莉亚一区二区视频在线 | 日本免费一区二区三区最新 | 乌克兰少妇性做爰 | 欧美日本免费一区二区三区 | 亚洲一区二区三区含羞草 | 国产精品亚洲а∨无码播放麻豆 | 日韩 欧美 动漫 国产 制服 | 亚洲高清偷拍一区二区三区 | 亚洲精品综合五月久久小说 | 亚洲七七久久桃花影院 | 欧美性猛交内射兽交老熟妇 | 久久久精品人妻久久影视 | 欧美黑人乱大交 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲精品午夜无码电影网 | 成人免费视频一区二区 | 欧美真人作爱免费视频 | 性开放的女人aaa片 | 久久婷婷五月综合色国产香蕉 | 亚洲色无码一区二区三区 | 55夜色66夜色国产精品视频 | 国产日产欧产精品精品app | 精品偷拍一区二区三区在线看 | 日韩 欧美 动漫 国产 制服 | 九九热爱视频精品 | 亚洲日本一区二区三区在线 | 好爽又高潮了毛片免费下载 | 99麻豆久久久国产精品免费 | 亚洲成av人片天堂网无码】 | 国产成人综合美国十次 | 国产成人午夜福利在线播放 | av无码久久久久不卡免费网站 | 国产精品多人p群无码 | 久久久久免费精品国产 | 国产精品久久久久无码av色戒 | 国产午夜福利亚洲第一 | 巨爆乳无码视频在线观看 | 久久久av男人的天堂 | 日本大乳高潮视频在线观看 | 天堂久久天堂av色综合 | 国产婷婷色一区二区三区在线 | 亚洲伊人久久精品影院 | 中文字幕精品av一区二区五区 | 人人妻人人澡人人爽欧美精品 | 国产一区二区三区精品视频 | 樱花草在线社区www | 亚洲欧美国产精品久久 | 老子影院午夜伦不卡 | 国产精品久久久久7777 | 3d动漫精品啪啪一区二区中 | 强辱丰满人妻hd中文字幕 | 亚洲国产精品无码久久久久高潮 | 亚洲午夜福利在线观看 | 亚洲欧洲中文日韩av乱码 | 男人的天堂2018无码 | 日本熟妇乱子伦xxxx | 一区二区三区高清视频一 | 在线播放免费人成毛片乱码 | 日日夜夜撸啊撸 | a在线亚洲男人的天堂 | 国产精品国产三级国产专播 | 久9re热视频这里只有精品 | 日本一本二本三区免费 | 全黄性性激高免费视频 | 永久免费观看国产裸体美女 | 日韩无套无码精品 | 精品国产一区av天美传媒 | 国产麻豆精品一区二区三区v视界 | 在线观看免费人成视频 | 日韩精品乱码av一区二区 | 国产精品久久久午夜夜伦鲁鲁 | 国产精品久久国产精品99 | 欧美熟妇另类久久久久久多毛 | 双乳奶水饱满少妇呻吟 | 2019午夜福利不卡片在线 | 亚洲色大成网站www | 国产精品亚洲一区二区三区喷水 | 综合网日日天干夜夜久久 | 超碰97人人做人人爱少妇 | 亚洲成a人片在线观看无码 | 精品欧美一区二区三区久久久 | 精品一区二区不卡无码av | 久久无码专区国产精品s | 久久亚洲a片com人成 | 精品国产一区二区三区四区在线看 | 久久这里只有精品视频9 | 国产明星裸体无码xxxx视频 | 日韩无码专区 | 国产精品亚洲五月天高清 | 精品无码国产自产拍在线观看蜜 | 中文字幕无码视频专区 | 日本护士毛茸茸高潮 | 波多野结衣av一区二区全免费观看 | 激情国产av做激情国产爱 | 国产精品亚洲专区无码不卡 | 在线а√天堂中文官网 | 国产无遮挡吃胸膜奶免费看 | 露脸叫床粗话东北少妇 | 国产xxx69麻豆国语对白 | 在线成人www免费观看视频 | 精品一区二区三区无码免费视频 | 曰韩少妇内射免费播放 | 人人妻人人澡人人爽欧美一区九九 | 国产激情艳情在线看视频 | 亚洲欧美日韩综合久久久 | 日日摸日日碰夜夜爽av | 国产无遮挡又黄又爽又色 | 极品嫩模高潮叫床 | 中文字幕无码视频专区 | 亚洲精品久久久久久一区二区 | 国产精品久久福利网站 | 亚洲中文字幕乱码av波多ji | 天干天干啦夜天干天2017 | 扒开双腿吃奶呻吟做受视频 | 无码国产乱人伦偷精品视频 | 麻豆md0077饥渴少妇 | 国产性生大片免费观看性 | 97精品人妻一区二区三区香蕉 | 亚洲精品中文字幕乱码 | 亚洲精品一区二区三区大桥未久 | 欧美日韩一区二区免费视频 | 国产欧美精品一区二区三区 | 国产熟女一区二区三区四区五区 | 少妇人妻偷人精品无码视频 | 亚洲精品www久久久 | 成人精品视频一区二区 | 女人色极品影院 | 久久精品人人做人人综合 | 黄网在线观看免费网站 | 国产香蕉尹人视频在线 | 久久精品女人天堂av免费观看 | 无码国产色欲xxxxx视频 | 国产无套粉嫩白浆在线 | 亚洲精品一区国产 | 亚洲 高清 成人 动漫 | 特黄特色大片免费播放器图片 | 2020最新国产自产精品 | 无码午夜成人1000部免费视频 | 久久国产劲爆∧v内射 | 亚洲熟妇自偷自拍另类 | 久久精品人人做人人综合试看 | 亚洲乱码国产乱码精品精 | 无码av岛国片在线播放 | 无遮挡国产高潮视频免费观看 | 在线视频网站www色 | 97精品人妻一区二区三区香蕉 | 黑人粗大猛烈进出高潮视频 | 国产精品毛多多水多 | 久久伊人色av天堂九九小黄鸭 | 牲欲强的熟妇农村老妇女视频 | 亚洲欧美日韩综合久久久 | 欧美日韩在线亚洲综合国产人 | 中文字幕人妻丝袜二区 | 欧美日本免费一区二区三区 | 日本精品人妻无码77777 天堂一区人妻无码 | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲欧美日韩成人高清在线一区 | 99国产精品白浆在线观看免费 | 国产精品无码一区二区三区不卡 | 国产精品亚洲一区二区三区喷水 | 国产性生交xxxxx无码 | 久久久中文久久久无码 | 极品嫩模高潮叫床 | 男人和女人高潮免费网站 | 无码国产色欲xxxxx视频 | 天海翼激烈高潮到腰振不止 | 国产精品高潮呻吟av久久 | 青青久在线视频免费观看 | 天海翼激烈高潮到腰振不止 | 日产国产精品亚洲系列 | 麻豆成人精品国产免费 | 欧美肥老太牲交大战 | 狂野欧美性猛交免费视频 | 国产超级va在线观看视频 | 亚洲乱码国产乱码精品精 | 色情久久久av熟女人妻网站 | 国产又爽又猛又粗的视频a片 | 国产成人无码av一区二区 | 亚洲欧美精品伊人久久 | 亚洲一区二区三区 | 国产凸凹视频一区二区 | 少妇久久久久久人妻无码 | 亚洲一区av无码专区在线观看 | 久久午夜无码鲁丝片秋霞 | 国产精品va在线观看无码 | 午夜成人1000部免费视频 | 四虎国产精品一区二区 | 亚洲成a人片在线观看日本 | 日日摸日日碰夜夜爽av | 国产区女主播在线观看 | 久久久国产一区二区三区 | 久久午夜无码鲁丝片秋霞 | www国产亚洲精品久久久日本 | www国产亚洲精品久久久日本 | 人人澡人摸人人添 | 狂野欧美激情性xxxx | 97久久国产亚洲精品超碰热 | 日本欧美一区二区三区乱码 | 少妇久久久久久人妻无码 | 黑森林福利视频导航 | av无码不卡在线观看免费 | 少妇太爽了在线观看 | 中文字幕无码人妻少妇免费 | 色综合久久久久综合一本到桃花网 | 76少妇精品导航 | 国产精品久久久久久亚洲影视内衣 | 国产精品久久久久久无码 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 任你躁在线精品免费 | 成人三级无码视频在线观看 | 国产欧美熟妇另类久久久 | √8天堂资源地址中文在线 | 一本精品99久久精品77 | 亚洲高清偷拍一区二区三区 | 丁香花在线影院观看在线播放 | 日韩少妇内射免费播放 | 俺去俺来也www色官网 | 夜夜影院未满十八勿进 | 亚洲欧美国产精品专区久久 | 宝宝好涨水快流出来免费视频 | 精品厕所偷拍各类美女tp嘘嘘 | 国语精品一区二区三区 | 中国大陆精品视频xxxx | 天堂在线观看www | 亚洲精品一区二区三区婷婷月 | 鲁一鲁av2019在线 | 亚洲色偷偷偷综合网 | 99国产精品白浆在线观看免费 | 小泽玛莉亚一区二区视频在线 | 午夜福利试看120秒体验区 | 乱人伦人妻中文字幕无码 | 乱中年女人伦av三区 | 国产精品鲁鲁鲁 | 亚洲中文字幕无码中字 | 日本大乳高潮视频在线观看 | 亚洲熟妇自偷自拍另类 | 女人被男人爽到呻吟的视频 | 亚洲小说图区综合在线 | 国产av人人夜夜澡人人爽麻豆 | 久久国产精品萌白酱免费 | 牛和人交xxxx欧美 | 久久国产精品偷任你爽任你 | 四虎国产精品免费久久 | 最新国产乱人伦偷精品免费网站 | 久久精品国产99精品亚洲 | 久久zyz资源站无码中文动漫 | 7777奇米四色成人眼影 | 国产精品久久久久影院嫩草 | 狠狠色噜噜狠狠狠狠7777米奇 | 夜夜躁日日躁狠狠久久av | 色综合天天综合狠狠爱 | 黑森林福利视频导航 | 日日麻批免费40分钟无码 | 狠狠综合久久久久综合网 | 亚洲精品国产精品乱码视色 | 熟妇人妻无码xxx视频 | 丁香啪啪综合成人亚洲 | 国产精品无套呻吟在线 | 国产 浪潮av性色四虎 | 精品国产av色一区二区深夜久久 | 久久综合色之久久综合 | 成人性做爰aaa片免费看不忠 | 国产艳妇av在线观看果冻传媒 | 人人妻人人澡人人爽欧美一区 | 99精品国产综合久久久久五月天 | 激情人妻另类人妻伦 | 免费无码肉片在线观看 | 色窝窝无码一区二区三区色欲 | 国产精品99久久精品爆乳 | 久久久久久a亚洲欧洲av冫 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲欧美日韩综合久久久 | 人妻aⅴ无码一区二区三区 | 九月婷婷人人澡人人添人人爽 | 欧美丰满少妇xxxx性 | 婷婷六月久久综合丁香 | 18禁止看的免费污网站 | 欧美老妇交乱视频在线观看 | 国产色视频一区二区三区 | 暴力强奷在线播放无码 | 亚洲日韩乱码中文无码蜜桃臀网站 | 久久www免费人成人片 | 国产艳妇av在线观看果冻传媒 | 女人被爽到呻吟gif动态图视看 | 丁香啪啪综合成人亚洲 | 国产在线无码精品电影网 | 亚洲国产精品一区二区第一页 | 亚洲国产精品久久久久久 | 色婷婷香蕉在线一区二区 | 小泽玛莉亚一区二区视频在线 | av无码不卡在线观看免费 | 久久精品成人欧美大片 | 少妇一晚三次一区二区三区 | 国产真实乱对白精彩久久 | 又大又黄又粗又爽的免费视频 | 久久亚洲日韩精品一区二区三区 | 亚洲区小说区激情区图片区 | 午夜无码区在线观看 | 日韩精品成人一区二区三区 | 丰满少妇弄高潮了www | 无码国产乱人伦偷精品视频 | 国产精品自产拍在线观看 | 131美女爱做视频 | 一区二区三区高清视频一 | 欧洲美熟女乱又伦 | 国产超碰人人爽人人做人人添 | 欧美黑人巨大xxxxx | 亚洲精品无码国产 | 婷婷综合久久中文字幕蜜桃三电影 | 老子影院午夜精品无码 | 久久精品中文字幕一区 | 国产无av码在线观看 | 人妻尝试又大又粗久久 | 亚洲精品久久久久久久久久久 | 国产精品办公室沙发 | 99精品视频在线观看免费 | 精品国产精品久久一区免费式 | 性开放的女人aaa片 | 亚洲男人av香蕉爽爽爽爽 | 国产无套粉嫩白浆在线 | 牲交欧美兽交欧美 | 国产午夜无码视频在线观看 | 亚洲一区av无码专区在线观看 | 国内精品九九久久久精品 | 久久精品人人做人人综合试看 | 久久精品99久久香蕉国产色戒 | 樱花草在线播放免费中文 | 真人与拘做受免费视频 | 精品国产成人一区二区三区 | 久久人人爽人人爽人人片ⅴ | 奇米影视888欧美在线观看 | 精品一区二区三区无码免费视频 | 精品国产国产综合精品 | 性欧美大战久久久久久久 | 性色欲网站人妻丰满中文久久不卡 | 性欧美大战久久久久久久 | 偷窥村妇洗澡毛毛多 | 午夜免费福利小电影 | 激情爆乳一区二区三区 | 亚洲自偷自拍另类第1页 | 黑人大群体交免费视频 | 波多野结衣av一区二区全免费观看 | 亚洲 高清 成人 动漫 | 一本久久a久久精品vr综合 | 最近免费中文字幕中文高清百度 | 精品日本一区二区三区在线观看 | 国产办公室秘书无码精品99 | 丰满少妇熟乱xxxxx视频 | a国产一区二区免费入口 | 大地资源网第二页免费观看 | 色噜噜亚洲男人的天堂 | 久久精品国产一区二区三区 | 狠狠噜狠狠狠狠丁香五月 | 亚洲日本va午夜在线电影 | 国产真实乱对白精彩久久 | 国产人妻精品一区二区三区不卡 | 精品人人妻人人澡人人爽人人 | 丁香花在线影院观看在线播放 | 波多野结衣乳巨码无在线观看 | 99视频精品全部免费免费观看 | 国产成人午夜福利在线播放 | 曰韩少妇内射免费播放 | 亚洲中文无码av永久不收费 | 欧美 丝袜 自拍 制服 另类 | 国产精品亚洲а∨无码播放麻豆 | 捆绑白丝粉色jk震动捧喷白浆 | 成人aaa片一区国产精品 | 久久国产劲爆∧v内射 | 人妻尝试又大又粗久久 | 中文字幕无码乱人伦 | 99国产精品白浆在线观看免费 | 欧美人与禽zoz0性伦交 | 亚洲一区二区三区四区 | 国产美女精品一区二区三区 | 无码av免费一区二区三区试看 | 亚洲色大成网站www | 3d动漫精品啪啪一区二区中 | 久久精品国产日本波多野结衣 | 国产在热线精品视频 | 国产精品久久精品三级 | 人妻尝试又大又粗久久 | 亚洲午夜久久久影院 | 婷婷五月综合缴情在线视频 | 国产三级精品三级男人的天堂 | 国产真实伦对白全集 | 天堂а√在线地址中文在线 | 少妇高潮喷潮久久久影院 | 免费播放一区二区三区 | 国产精品久久国产三级国 | 国产偷抇久久精品a片69 | 日本又色又爽又黄的a片18禁 | 国产精品丝袜黑色高跟鞋 | 丰满人妻被黑人猛烈进入 | 日韩av无码一区二区三区不卡 | 狠狠亚洲超碰狼人久久 | 国产精品久久久午夜夜伦鲁鲁 | 无码毛片视频一区二区本码 | 99久久精品无码一区二区毛片 | 日韩精品无码一区二区中文字幕 | 少妇性l交大片 | 精品无码一区二区三区的天堂 | 亚洲精品综合一区二区三区在线 | 一二三四社区在线中文视频 | 在线观看国产一区二区三区 | 国产午夜亚洲精品不卡下载 | 黑人粗大猛烈进出高潮视频 | 国产午夜手机精彩视频 | 亚洲s色大片在线观看 | 清纯唯美经典一区二区 | 野外少妇愉情中文字幕 | 精品少妇爆乳无码av无码专区 | 国产99久久精品一区二区 | 久激情内射婷内射蜜桃人妖 | 色一情一乱一伦一区二区三欧美 | 日日麻批免费40分钟无码 | 国产日产欧产精品精品app | aa片在线观看视频在线播放 | 亚洲午夜久久久影院 | 久久久久99精品国产片 | 夜精品a片一区二区三区无码白浆 | 欧美丰满少妇xxxx性 | 久久久久久国产精品无码下载 | 日日摸夜夜摸狠狠摸婷婷 | 丝袜美腿亚洲一区二区 | 亚洲精品无码国产 | 亚洲色欲色欲天天天www | 欧美日韩一区二区综合 | 人人妻人人藻人人爽欧美一区 | 综合网日日天干夜夜久久 | 日日摸夜夜摸狠狠摸婷婷 | 狠狠色噜噜狠狠狠狠7777米奇 | 中文字幕无码热在线视频 | 131美女爱做视频 | 人妻互换免费中文字幕 | 免费无码的av片在线观看 | 老头边吃奶边弄进去呻吟 | 麻豆精产国品 | 国产疯狂伦交大片 | 老头边吃奶边弄进去呻吟 | 久久人人爽人人爽人人片ⅴ | 精品 日韩 国产 欧美 视频 | 亚洲精品一区三区三区在线观看 | 国产精品18久久久久久麻辣 | 一本久道久久综合婷婷五月 | 夜夜夜高潮夜夜爽夜夜爰爰 | 成人一在线视频日韩国产 | 一本久道久久综合婷婷五月 | 国产真实伦对白全集 | 丰满人妻被黑人猛烈进入 | 日韩人妻无码一区二区三区久久99 | 久久久www成人免费毛片 | 国产亚洲精品久久久久久国模美 | 国产三级精品三级男人的天堂 | 欧美日本免费一区二区三区 | 人人妻人人澡人人爽欧美一区九九 | 欧美日韩人成综合在线播放 | 少妇的肉体aa片免费 | 麻豆av传媒蜜桃天美传媒 | 精品无人国产偷自产在线 | 日本护士毛茸茸高潮 | 亚洲一区二区三区在线观看网站 | 精品国产麻豆免费人成网站 | 欧美 丝袜 自拍 制服 另类 | 人人妻人人澡人人爽人人精品浪潮 | 丰满人妻被黑人猛烈进入 | 精品偷拍一区二区三区在线看 | 久久99久久99精品中文字幕 | 国产成人无码a区在线观看视频app | 国产精品无码永久免费888 | 国产人妻久久精品二区三区老狼 | 野狼第一精品社区 | 无遮无挡爽爽免费视频 | 精品久久久久久亚洲精品 | 熟女体下毛毛黑森林 | 亚洲日韩一区二区三区 | 久久zyz资源站无码中文动漫 | 2020久久超碰国产精品最新 | 清纯唯美经典一区二区 | 亚洲小说图区综合在线 | 亚洲无人区午夜福利码高清完整版 | 麻豆av传媒蜜桃天美传媒 | 国产精品国产三级国产专播 | 十八禁视频网站在线观看 | 色五月丁香五月综合五月 | 色情久久久av熟女人妻网站 | 欧美国产日韩亚洲中文 | 久久国产精品萌白酱免费 | 亚洲七七久久桃花影院 | 中国女人内谢69xxxx | 久久亚洲中文字幕精品一区 | 一本久久a久久精品亚洲 | 国语自产偷拍精品视频偷 | 丰满人妻被黑人猛烈进入 | 九九在线中文字幕无码 | 无码人妻出轨黑人中文字幕 | 亚洲另类伦春色综合小说 | 亚洲啪av永久无码精品放毛片 | 色老头在线一区二区三区 | 东京无码熟妇人妻av在线网址 | 黑人巨大精品欧美黑寡妇 | 99视频精品全部免费免费观看 | 久久综合给久久狠狠97色 | 亚洲 高清 成人 动漫 | 亚洲人成网站免费播放 | 日本乱偷人妻中文字幕 | 人妻无码久久精品人妻 | 2019nv天堂香蕉在线观看 | 国产情侣作爱视频免费观看 | 久久精品视频在线看15 | 亚洲国产精品久久久久久 | 女高中生第一次破苞av | 色综合视频一区二区三区 | 亚洲精品国偷拍自产在线观看蜜桃 | 人妻夜夜爽天天爽三区 | 久久综合香蕉国产蜜臀av | 成人一在线视频日韩国产 | 国产97色在线 | 免 | 亚洲日韩一区二区三区 | 国产高清av在线播放 | 最新版天堂资源中文官网 | 国产国语老龄妇女a片 | 日韩av无码中文无码电影 | 99久久婷婷国产综合精品青草免费 | 欧美 亚洲 国产 另类 | 亚洲 日韩 欧美 成人 在线观看 | 久久99精品国产麻豆 | 无码一区二区三区在线 | 久久成人a毛片免费观看网站 | 人人妻人人澡人人爽欧美精品 | 国产偷国产偷精品高清尤物 | 99re在线播放 | 图片区 小说区 区 亚洲五月 | 日韩av无码一区二区三区不卡 | 久久精品99久久香蕉国产色戒 | 欧美精品一区二区精品久久 | 未满小14洗澡无码视频网站 | 啦啦啦www在线观看免费视频 | 人人妻人人澡人人爽欧美精品 | 国产va免费精品观看 | 人人澡人摸人人添 | 亚洲熟熟妇xxxx | 女人被男人躁得好爽免费视频 | 网友自拍区视频精品 | 中文久久乱码一区二区 | 成人av无码一区二区三区 | 亚洲娇小与黑人巨大交 | 樱花草在线社区www | 国内精品一区二区三区不卡 | 两性色午夜视频免费播放 | 国产成人无码专区 | 亚洲乱码国产乱码精品精 | 乱人伦人妻中文字幕无码久久网 | 久久久久99精品国产片 | 1000部啪啪未满十八勿入下载 | 波多野结衣av一区二区全免费观看 | 久久 国产 尿 小便 嘘嘘 | 成人欧美一区二区三区黑人 | 久久久亚洲欧洲日产国码αv | 领导边摸边吃奶边做爽在线观看 | 国产极品视觉盛宴 | 天堂无码人妻精品一区二区三区 | 无码一区二区三区在线 | 日本精品高清一区二区 | 人妻与老人中文字幕 | 国产国语老龄妇女a片 | 亚洲国产精品久久人人爱 | 国产精品理论片在线观看 | 少妇被粗大的猛进出69影院 | 国产午夜亚洲精品不卡 | 东京一本一道一二三区 | 国产精品怡红院永久免费 | 性啪啪chinese东北女人 | 天堂无码人妻精品一区二区三区 | 人人澡人人妻人人爽人人蜜桃 | 国产精品怡红院永久免费 | 亚洲狠狠色丁香婷婷综合 | 少妇厨房愉情理9仑片视频 | 国产福利视频一区二区 | 久久国产自偷自偷免费一区调 | 国产超碰人人爽人人做人人添 | 国产精品va在线观看无码 | 免费观看的无遮挡av | 欧美性猛交内射兽交老熟妇 | 久久久久国色av免费观看性色 | 亚洲成av人片天堂网无码】 | 国产熟妇另类久久久久 | 色婷婷久久一区二区三区麻豆 | 无套内射视频囯产 | 黑人粗大猛烈进出高潮视频 | 中文字幕乱码亚洲无线三区 | 久久久www成人免费毛片 | 好男人www社区 | 四十如虎的丰满熟妇啪啪 | 狠狠cao日日穞夜夜穞av | 亚洲精品一区二区三区婷婷月 | 亚洲自偷自拍另类第1页 | 思思久久99热只有频精品66 | 久久精品成人欧美大片 | 国产免费久久久久久无码 | 国产精品二区一区二区aⅴ污介绍 | 小泽玛莉亚一区二区视频在线 | 亚洲小说图区综合在线 | 日日躁夜夜躁狠狠躁 | 日本大香伊一区二区三区 | 天堂а√在线地址中文在线 | 国产情侣作爱视频免费观看 | 香港三级日本三级妇三级 | 纯爱无遮挡h肉动漫在线播放 | 纯爱无遮挡h肉动漫在线播放 | 国产黄在线观看免费观看不卡 | 久久精品国产精品国产精品污 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 东北女人啪啪对白 | 国产人成高清在线视频99最全资源 | 丁香花在线影院观看在线播放 | 国产农村乱对白刺激视频 | √天堂资源地址中文在线 | 亚洲爆乳精品无码一区二区三区 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚洲色欲久久久综合网东京热 | 一本无码人妻在中文字幕免费 | 一个人看的视频www在线 | 中文字幕人妻无码一夲道 | 欧美午夜特黄aaaaaa片 | 国产真人无遮挡作爱免费视频 | 2020最新国产自产精品 | 欧洲精品码一区二区三区免费看 | 亚洲国产精品毛片av不卡在线 | 久精品国产欧美亚洲色aⅴ大片 | 色综合视频一区二区三区 | 人人妻人人澡人人爽人人精品 | 领导边摸边吃奶边做爽在线观看 | 国产成人无码av一区二区 | 久久久无码中文字幕久... | 国产精品资源一区二区 | 最新版天堂资源中文官网 | 亚洲乱码日产精品bd | 亚洲成av人片在线观看无码不卡 | 成人性做爰aaa片免费看不忠 | 波多野结衣 黑人 | 国产莉萝无码av在线播放 | 成人综合网亚洲伊人 | 国产午夜福利亚洲第一 | 亚洲男女内射在线播放 | 国产肉丝袜在线观看 | 久久精品国产一区二区三区肥胖 | 欧美人与禽zoz0性伦交 | 亚洲男人av天堂午夜在 | 性生交片免费无码看人 | 一本久道久久综合狠狠爱 | 大肉大捧一进一出好爽视频 | 88国产精品欧美一区二区三区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产精品资源一区二区 | 色偷偷人人澡人人爽人人模 | 色婷婷欧美在线播放内射 | 午夜熟女插插xx免费视频 | 国产精品亚洲综合色区韩国 | 欧美精品无码一区二区三区 | 国产热a欧美热a在线视频 | 久久亚洲国产成人精品性色 | 久久精品国产99精品亚洲 | 成人精品视频一区二区三区尤物 | а天堂中文在线官网 | 亚洲狠狠婷婷综合久久 | 国产精品久久久久9999小说 | 久久 国产 尿 小便 嘘嘘 | 无码av免费一区二区三区试看 | 亚洲最大成人网站 | 色综合久久中文娱乐网 | 欧美日韩综合一区二区三区 | 男人和女人高潮免费网站 | 日本丰满熟妇videos | 日本xxxx色视频在线观看免费 | 成人免费视频一区二区 | 妺妺窝人体色www在线小说 | 亚洲男人av香蕉爽爽爽爽 | 中文字幕乱码人妻二区三区 | 亚洲自偷自拍另类第1页 | 99精品无人区乱码1区2区3区 | 久久久婷婷五月亚洲97号色 | 无遮无挡爽爽免费视频 | 中文字幕av无码一区二区三区电影 | 日本免费一区二区三区最新 | 日日夜夜撸啊撸 | 精品aⅴ一区二区三区 | 色五月五月丁香亚洲综合网 | 在线看片无码永久免费视频 | 色情久久久av熟女人妻网站 | 日本一区二区三区免费播放 | 人人妻人人澡人人爽欧美一区 | 国产另类ts人妖一区二区 | 亚洲色欲久久久综合网东京热 | 成人毛片一区二区 | 亚洲欧美日韩成人高清在线一区 | 无遮挡国产高潮视频免费观看 |