小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

80386ASM程序設計基礎(五)

 壞壞 2006-12-09
控制轉(zhuǎn)移指令,串操作指令
  80386控制轉(zhuǎn)移指令包括:轉(zhuǎn)移指令,循環(huán)指令,過程調(diào)用和返回指令。
  A.轉(zhuǎn)移指令包括無條件轉(zhuǎn)移指令JMP和條件轉(zhuǎn)移指令,無條件轉(zhuǎn)移指令分為段內(nèi)直接轉(zhuǎn)移,段內(nèi)間接轉(zhuǎn)移,段間直接轉(zhuǎn)移,段間間接轉(zhuǎn)移。由于80386有保護模式和實模式,在實模式下,段內(nèi)轉(zhuǎn)移的范圍在-128~127,段間轉(zhuǎn)移最大范圍為64K。在保護模式需要用48位指針,即CS:EIP(16位+32位)。條件轉(zhuǎn)移指令有很多包括JCXZ,JECXZ,JBE,JAE,JA,JB等,其用法和8086相似。
 
  B.循環(huán)指令LOOP,LOOPZ,LOO0PE,LOOPNZ,LOOPNE,TASM支持助記符LOOP,LOOPWE,LOOPWZ,LOOPWNZ,LOOPWNE,LOOPD,LOOPWD,LOOPDE,LOOPDNE,LOOPDNZ。以CX作為計數(shù)器時,就可用LOOP,LOOPWE,LOOPWZ,LOOPWNZ,LOOPWNE;在以ECX作為計數(shù)器時,以LOOPD,LOOPDE,LOOPDZ,LOOPDNZ,LOOPDNE,下面的一段例子可以說明問題:
  ABC PROC
     MOV CX,100H
     AA:
       ;ADD YOUR CODES HERE
       LOOP AA
  ABC END

  C.過程調(diào)用和返回調(diào)用CALL,RET
  這兩個指令與8086的用法相同,但由于80386下有實模式和保護模式下。在實模式下,無論是段內(nèi)調(diào)用還是段間調(diào)用均采用32位指針,即CS:IP,它們的用法與8086下相同。在保護模式下,段間調(diào)用和段內(nèi)調(diào)用均用48位指針,即ECS:IP。RET用于返回,具體實現(xiàn)過程會比較復雜,在介紹完80386的地址的管理機制后會作介紹,先介紹一下以下CALL指令在8086中的用法:
  a.段內(nèi)直接轉(zhuǎn)移,具體格式:CALL 過程名。此時CS不入棧,IP的內(nèi)棧入棧,入棧后再將加上目的地址與CALL指令的下一條指令的偏移地址之差值就可以轉(zhuǎn)移到目的地址,詳細過程:
  SP-2=>SP;將堆棧指針SP減2
  (SP)<=IP;將IP進棧
  IP+偏移地址之差;轉(zhuǎn)到目的地址
  b.段內(nèi)間接轉(zhuǎn)移,具體格式:CALL OPRD,那么在這里OPRD可以寄存器或內(nèi)存單元,它的具體實現(xiàn)過程:
  SP-2=>SP;將堆棧指針SP減2
  (SP)<=IP;將IP進棧
  IP<=(OPRD);轉(zhuǎn)到目的地址
  同a一樣,CS不入棧
  c.段間直接轉(zhuǎn)移,具體格式:CALL 過程名 [FAR],此時CS,IP均要入棧,詳細的實現(xiàn)過程:
  SP-2=>SP;將堆棧指針減2
  (SP)<=CS;將CS入棧
  SP-2=>SP;將堆棧指針再減2
  (SP)<=IP;將IP入棧
  ;裝入新的CS,IP
  IP<=過程入口的偏移地址
  CS<=過程入口的段地址
  d.段間間接轉(zhuǎn)移,具體格式:CALL OPRD [FAR],此時CS,IP均要入棧,OPRD是32位,你知道在8086中沒有32位寄存器。因此,這里的OPRD一定是存儲單元,高16位是CS的值,低16位是IP值,詳細的實現(xiàn)過程:
  SP-2=>SP;將堆棧指針減2
  (SP)<=CS;將CS入棧
  SP-2=>SP;將堆棧指針再減2
  (SP)<=IP;將IP入棧
  ;裝入新的CS,IP
  IP<=(OPRD+2,OPRD+3)
  CS<=(OPRD,OPRD1)  
  e.段內(nèi)返回
  格式:RET。實際上它的實現(xiàn)過程:
  (SP)=>IP;從當前棧頂彈出一個字,將它送給IP指令計數(shù)器
  SP+2=>SP;SP
  f.段間返回
  格式:RET,實際上它的實現(xiàn)過程:
  (SP)=>IP;IP出棧
  SP+2=>SP;
  (SP)=>CS;CS出棧
  SP+2=>SP;
 
  D.中斷返回指令IRET
  功能和用法與8086相同,這里順便介紹一下8086的中斷返回指令
  IRET,具體的實現(xiàn)過程:
  IP<=(SP);IP出棧
  SP+2=>SP;
  CS<=(SP);CS出棧
  SP+2=>SP;
  FLAGS<=(SP);標志寄存器出棧
  SP+2=>SP;
 
  E.串操作指令
  80386在串操作指令方面增加了雙字操作,在8086五條指令的基礎上增加了INS,OUTS。
  a.LOADSD,和8086的用法和功能相同,不過是對32位操作數(shù)操作。
  b.STOSD,和8086的用法和功能相同,不過是對32位操作數(shù)操作。
  c.CMPSD,和8086的用法和功能相同,不過是對32位操作數(shù)操作。
  d.SCANSD,和8086的用法和功能相同,不過是對32位操作數(shù)操作。
  e.MOVSD,和8086的用法和功能相同,不過是對32位操作數(shù)操作。
  f.重復前綴REP,和8086的功能與用法相同,仍以CX為計數(shù)器,看下面的一小程序:
  ROR ECX,2
  REP MOVSD;以CX為計數(shù)器,每次傳送雙字
  ROL ECX,1
  REP MOVSW;以CX為計數(shù)器,每次傳送一字
  ROL ECX,1
  REP MOVSB;以CX為計數(shù)器,每個傳送一個字節(jié) 
  g.INSB,INSW,INSD,OUTSB,OUTSW,OUTSD
  g1.INSB,串輸入指令,以字節(jié)單位,該指令的功能是從DX指定的端口讀入一個字節(jié)到ES:DI指定的內(nèi)存單元中。 
  g2.INSW,串輸入指令,以字單位,該指令的功能是從DX指定的端口讀入一個字節(jié)到ES:DI指定的內(nèi)存單元中。
  g3.INSD,串輸入指令,以雙字單位,該指令的功能是從DX指定的端口讀入一個字節(jié)到ES:DI指定的內(nèi)存單元中。
  g4.OUTSB, 串輸出指令,以字節(jié)為單位,將DS:SI內(nèi)存單元的內(nèi)容送往DX指定的端口。
  g5.OUTSW, 串輸出指令,以字為單位,將DS:SI內(nèi)存單元的內(nèi)容送往DX指定的端口。
  g6.OUTSD, 串輸出指令,以雙字為單位,將DS:SI內(nèi)存單元的內(nèi)容送往DX指定的端口。
  g7.串輸入和串輸出指令不影響標志寄存器中的各標志位,串操作指令可以與REP一起使用

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多