DOS功能調用之INT 21H指令說明及使用方法

轉自:https://www.cnblogs.com/ynwlgh/archive/2011/12/12/2285017.htmlhtml

不少初學彙編語言的同窗可能會對INT 21H這條指令感到困惑,不知道是什麼意思,下面就以一段簡單的程序爲你們講解:緩存

例如:須要鍵盤輸入,而且回顯。安全

AH的值須要查表取得,表在下面異步

指令:MOV AH,01測試

     INT 21Hspa

經過這樣兩條指令,輸入的字符就會被存儲在AL中。.net

表:DOS系統功能調INT 21H指針

AHhtm

功能blog

調用參數

返回參數

00

程序終止(同INT 20H)

CS=程序段前綴

 

01

鍵盤輸入並回顯

 

AL=輸入字符

02

顯示輸出

DL=輸出字符

 

03

異步通迅輸入

 

AL=輸入數據

04

異步通迅輸出

DL=輸出數據

 

05

打印機輸出

DL=輸出字符

 

06

直接控制檯I/O

DL=FF(輸入)
DL=字符(輸出)

AL=輸入字符

07

鍵盤輸入(無回顯)

 

AL=輸入字符

08

鍵盤輸入(無回顯)
檢測Ctrl-Break

 

AL=輸入字符

09

顯示字符串

DS:DX=串地址
'$'結束字符串

 

0A

鍵盤輸入到緩衝區

DS:DX=緩衝區首地址
(DS:DX)=緩衝區最大字符數

(DS:DX+1)=實際輸入的字符數

0B

檢驗鍵盤狀態

 

AL=00 有輸入
AL=FF 無輸入

0C

清除輸入緩衝區並
請求指定的輸入功能

AL=輸入功能號
(1,6,7,8,A)

 

0D

磁盤復位

 

清除文件緩衝區

0E

指定當前缺省的磁盤驅動器

DL=驅動器號 0=A,1=B,...

AL=驅動器數

0F

打開文件

DS:DX=FCB首地址

AL=00 文件找到
AL=FF 文件未找到

10

關閉文件

DS:DX=FCB首地址

AL=00 目錄修改爲功
AL=FF 目錄中未找到文件

11

查找第一個目錄項

DS:DX=FCB首地址

AL=00 找到
AL=FF 未找到

12

查找下一個目錄項

DS:DX=FCB首地址
(文件中帶有*或?)

AL=00 找到
AL=FF 未找到

13

刪除文件

DS:DX=FCB首地址

AL=00 刪除成功
AL=FF 未找到

14
 

順序讀
 

DS:DX=FCB首地址
 

AL=00 讀成功
  =01 文件結束,記錄中無數據
  =02 DTA空間不夠
  =03 文件結束,記錄不完整

15

順序寫

DS:DX=FCB首地址

AL=00 寫成功
  =01 盤滿
  =02 DTA空間不夠

16

建文件

DS:DX=FCB首地址

AL=00 創建成功
  =FF 無磁盤空間

17

文件更名

DS:DX=FCB首地址
(DS:DX+1)=舊文件名
(DS:DX+17)=新文件名

AL=00 成功
AL=FF 未成功

19

取當前缺省磁盤驅動器

 

AL=缺省的驅動器號 0=A,1=B,2=C,...

1A

置DTA地址

DS:DX=DTA地址

 

1B
 

取缺省驅動器FAT信息
 

 

AL=每簇的扇區數
DS:BX=FAT標識字節
CX=物理扇區大小
DX=缺省驅動器的簇數

1C

取任一驅動器FAT信息

DL=驅動器號

同上

21
 

隨機讀
 

DS:DX=FCB首地址
 

AL=00 讀成功
  =01 文件結束
  =02 緩衝區溢出
  =03 緩衝區不滿

22

隨機寫

DS:DX=FCB首地址

AL=00 寫成功
  =01 盤滿
  =02 緩衝區溢出

23

測定文件大小

DS:DX=FCB首地址

AL=00 成功(文件長度填入FCB)
AL=FF 未找到

24

設置隨機記錄號

DS:DX=FCB首地址

 

25

設置中斷向量

DS:DX=中斷向量
AL=中斷類型號

 

26

創建程序段前綴

DX=新的程序段前綴

 

27
 

隨機分塊讀
 

DS:DX=FCB首地址
CX=記錄數

AL=00 讀成功
  =01 文件結束
  =02 緩衝區過小,傳輸結束
  =03 緩衝區不滿

28

隨機分塊寫

DS:DX=FCB首地址
CX=記錄數

AL=00 寫成功
  =01 盤滿
  =02 緩衝區溢出

29

分析文件名

ES:DI=FCB首地址
DS:SI=ASCIIZ串
AL=控制分析標誌

AL=00 標準文件
  =01 多義文件
  =02 非法盤符

2A

取日期

 

CX=年
DH:DL=月:日(二進制)

2B

設置日期

CX:DH:DL=年:月:日

AL=00 成功
  =FF 無效

2C

取時間

 

CH:CL=時:分
DH:DL=秒:1/100秒

2D

設置時間

CH:CL=時:分
DH:DL=秒:1/100秒

AL=00 成功
  =FF 無效

2E

置磁盤自動讀寫標誌

AL=00 關閉標誌
AL=01 打開標誌

 

2F

取磁盤緩衝區的首址

 

ES:BX=緩衝區首址

30

取DOS版本號

 

AH=發行號,AL=版本

31

結束並駐留

AL=返回碼
DX=駐留區大小

 

33
 

Ctrl-Break檢測
 

AL=00 取狀態
  =01 置狀態(DL)
DL=00 關閉檢測
  =01 打開檢測

DL=00 關閉Ctrl-Break檢測
  =01 打開Ctrl-Break檢測

35

取中斷向量

AL=中斷類型

ES:BX=中斷向量

36

 

取空閒磁盤空間

 

DL=驅動器號 
0=缺省,1=A,2=B,...
 

成功:AX=每簇扇區數
     BX=有效簇數
     CX=每扇區字節數
     DX=總簇數
失敗:AX=FFFF

38

置/取國家信息

DS:DX=信息區首地址

BX=國家碼(國際電話前綴碼)
AX=錯誤碼

39

創建子目錄(MKDIR)

DS:DX=ASCIIZ串地址

AX=錯誤碼

3A

刪除子目錄(RMDIR)

DS:DX=ASCIIZ串地址

AX=錯誤碼

3B

改變當前目錄(CHDIR)

DS:DX=ASCIIZ串地址

AX=錯誤碼

3C

創建文件

DS:DX=ASCIIZ串地址
CX=文件屬性

成功:AX=文件代號
錯誤:AX=錯誤碼

3D
 

打開文件
 

DS:DX=ASCIIZ串地址
AL=0 讀
  =1 寫
  =3 讀/寫

成功:AX=文件代號
錯誤:AX=錯誤碼

3E

關閉文件

BX=文件代號

失敗:AX=錯誤碼

3F
 

讀文件或設備
 

DS:DX=數據緩衝區地址
BX=文件代號
CX=讀取的字節數

讀成功:
  AX=實際讀入的字節數
  AX=0 已到文件尾
讀出錯:AX=錯誤碼

40

寫文件或設備

DS:DX=數據緩衝區地址
BX=文件代號
CX=寫入的字節數

寫成功:
  AX=實際寫入的字節數
寫出錯:AX=錯誤碼

41

刪除文件

DS:DX=ASCIIZ串地址

成功:AX=00
出錯:AX=錯誤碼(2,5)

42

 

移動文件指針

 

BX=文件代號
CX:DX=位移量
AL=移動方式(0:從文件頭絕對位移,1:從當前位置相對移動,2:從文件尾絕對位移)

成功:DX:AX=新文件指針位置
出錯:AX=錯誤碼
 

43
 

置/取文件屬性
 

DS:DX=ASCIIZ串地址
AL=0 取文件屬性
AL=1 置文件屬性
CX=文件屬性

成功:CX=文件屬性
失敗:CX=錯誤碼

44



 

設備文件I/O控制



 

BX=文件代號
AL=0 取狀態
  =1 置狀態DX
  =2 讀數據
  =3 寫數據
  =6 取輸入狀態
  =7 取輸出狀態

DX=設備信息



 

45

複製文件代號

BX=文件代號1

成功:AX=文件代號2
失敗:AX=錯誤碼

46

人工複製文件代號

BX=文件代號1
CX=文件代號2

失敗:AX=錯誤碼

47

取當前目錄路徑名

DL=驅動器號
DS:SI=ASCIIZ串地址

(DS:SI)=ASCIIZ串
失敗:AX=出錯碼

48

分配內存空間

BX=申請內存容量

成功:AX=分配內存首地
失敗:BX=最大可用內存

49

釋放內容空間

ES=內存起始段地址

失敗:AX=錯誤碼

4A

調整已分配的存儲塊

ES=原內存起始地址
BX=再申請的容量

失敗:BX=最大可用空間
     AX=錯誤碼

4B
 

裝配/執行程序
 

DS:DX=ASCIIZ串地址
ES:BX=參數區首地址
AL=0 裝入執行
AL=3 裝入不執行

失敗:AX=錯誤碼
 

4C

帶返回碼結束

AL=返回碼

 

4D

取返回代碼

 

AX=返回代碼

4E

查找第一個匹配文件

DS:DX=ASCIIZ串地址
CX=屬性

AX=出錯代碼(02,18)

4F

查找下一個匹配文件

DS:DX=ASCIIZ串地址
(文件名中帶有?或*)

AX=出錯代碼(18)

54

取盤自動讀寫標誌

 

AL=當前標誌值

56

文件更名

DS:DX=ASCIIZ串(舊)
ES:DI=ASCIIZ串(新)

AX=出錯碼(03,05,17)

57

置/取文件日期和時間

BX=文件代號
AL=0 讀取
AL=1 設置(DX:CX)

DX:CX=日期和時間
失敗:AX=錯誤碼

58

取/置分配策略碼

AL=0 取碼
AL=1 置碼(BX)

成功:AX=策略碼
失敗:AX=錯誤碼

59
 

取擴充錯誤碼
 

 

AX=擴充錯誤碼
BH=錯誤類型
BL=建議的操做
CH=錯誤場所

5A

創建臨時文件

CX=文件屬性
DS:DX=ASCIIZ串地址

成功:AX=文件代號
失敗:AX=錯誤碼

5B

創建新文件

CX=文件屬性
DS:DX=ASCIIZ串地址

成功:AX=文件代號
失敗:AX=錯誤碼

5C

 

控制文件存取

 

AL=00封鎖
  =01開啓
BX=文件代號
CX:DX=文件位移
SI:DI=文件長度

失敗:AX=錯誤碼

 

62

取程序段前綴

 

BX=PSP地址

 

 

 

 

 

 

 

彙編指令集太多,若是不用就會忘記,因此將i處理器官方的指令集大全寫到博客上,有須要的人能夠參考一下!X86和X87彙編指令大全(有註釋)   ---------- 1、數據傳輸指令 ----------------------------------------------------   它們在存貯器和寄存器、寄存器和輸入輸出端口之間傳送數據.   1. 通用數據傳送指令.       MOV     傳送字或字節.       MOVSX   先符號擴展,再傳送.       MOVZX   先零擴展,再傳送.       PUSH    把字壓入堆棧.       POP     把字彈出堆棧.       PUSHA   把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧.       POPA    把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧.       PUSHAD  把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧.       POPAD   把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧.       BSWAP   交換32位寄存器裏字節的順序       XCHG    交換字或字節.(至少有一個操做數爲寄存器,段寄存器不可做爲操做數)       CMPXCHG 比較並交換操做數.(第二個操做數必須爲累加器AL/AX/EAX)       XADD    先交換再累加.(結果在第一個操做數裏)       XLAT    字節查錶轉換.----BX指向一張256字節的表的起點,AL爲表的索引值(0-255,即0-FFH);返回AL爲查表結果.([BX+AL]->AL)   2. 輸入輸出端口傳送指令.       IN      I/O端口輸入. ( 語法: IN   累加器,    {端口號│DX} )       OUT     I/O端口輸出. ( 語法: OUT {端口號│DX},累加器 )輸入輸出端口由當即方式指定時,    其範圍是 0-255; 由寄存器 DX 指定時,其範圍是    0-65535.   3. 目的地址傳送指令.       LEA     裝入有效地址.例: LEA DX,string ;把偏移地址存到DX.       LDS     傳送目標指針,把指針內容裝入DS.例: LDS SI,string   ;把段地址:偏移地址存到DS:SI.       LES     傳送目標指針,把指針內容裝入ES.例: LES DI,string   ;把段地址:偏移地址存到ES:DI.       LFS     傳送目標指針,把指針內容裝入FS.例: LFS DI,string   ;把段地址:偏移地址存到FS:DI.       LGS     傳送目標指針,把指針內容裝入GS.例: LGS DI,string   ;把段地址:偏移地址存到GS:DI.       LSS     傳送目標指針,把指針內容裝入SS.例: LSS DI,string   ;把段地址:偏移地址存到SS:DI.   4. 標誌傳送指令.       LAHF    標誌寄存器傳送,把標誌裝入AH.       SAHF    標誌寄存器傳送,把AH內容裝入標誌寄存器.       PUSHF   標誌入棧.       POPF    標誌出棧.       PUSHD   32位標誌入棧.       POPD    32位標誌出棧.   ---------- 2、算術運算指令 ----------------------------------------------------       ADD     加法.       ADC     帶進位加法.       INC     加 1.       AAA     加法的ASCII碼調整.       DAA     加法的十進制調整.       SUB     減法.       SBB     帶借位減法.       DEC     減 1.       NEG     求反(以    0 減之).       CMP     比較.(兩操做數做減法,僅修改標誌位,不回送結果).       AAS     減法的ASCII碼調整.       DAS     減法的十進制調整.       MUL     無符號乘法.結果回送AH和AL(字節運算),或DX和AX(字運算),       IMUL    整數乘法.結果回送AH和AL(字節運算),或DX和AX(字運算),       AAM     乘法的ASCII碼調整.       DIV     無符號除法.結果回送:商回送AL,餘數回送AH, (字節運算);或 商回送AX,餘數回送DX, (字運算).       IDIV    整數除法.結果回送:商回送AL,餘數回送AH, (字節運算);或 商回送AX,餘數回送DX, (字運算).       AAD     除法的ASCII碼調整.       CBW     字節轉換爲字. (把AL中字節的符號擴展到AH中去)       CWD     字轉換爲雙字. (把AX中的字的符號擴展到DX中去)       CWDE    字轉換爲雙字. (把AX中的字符號擴展到EAX中去)       CDQ     雙字擴展. (把EAX中的字的符號擴展到EDX中去)   ---------- 3、邏輯運算指令 ----------------------------------------------------       AND     與運算.       OR      或運算.       XOR     異或運算.       NOT     取反.       TEST    測試.(兩操做數做與運算,僅修改標誌位,不回送結果).       SHL     邏輯左移.       SAL     算術左移.(=SHL)       SHR     邏輯右移.       SAR     算術右移.(=SHR)       ROL     循環左移.       ROR     循環右移.       RCL     經過進位的循環左移.       RCR     經過進位的循環右移.                 以上八種移位指令,其移位次數可達255次.                 移位一次時, 可直接用操做碼. 如 SHL AX,1.                 移位>1次時, 則由寄存器CL給出移位次數.                 如 MOV CL,04   SHL AX,CL   ---------- 4、串指令 ----------------------------------------------------------                 DS:SI 源串段寄存器 :源串變址.                 ES:DI 目標串段寄存器:目標串變址.                 CX 重複次數計數器.                 AL/AX 掃描值.                 D標誌   0表示重複操做中SI和DI應自動增量; 1表示應自動減量.                 Z標誌   用來控制掃描或比較操做的結束.       MOVS    串傳送.( MOVSB 傳送字符. MOVSW 傳送字. MOVSD 傳送雙字. )       CMPS    串比較.( CMPSB 比較字符. CMPSW 比較字. )       SCAS    串掃描.把AL或AX的內容與目標串做比較,比較結果反映在標誌位.       LODS    裝入串.把源串中的元素(字或字節)逐一裝入AL或AX中.( LODSB 傳送字符. LODSW 傳送字.    LODSD 傳送雙字. )       STOS    保存串.是LODS的逆過程.       REP         當CX/ECX<>0時重複.       REPE/REPZ   當ZF=1或比較結果相等,且CX/ECX<>0時重複.       REPNE/REPNZ 當ZF=0或比較結果不相等,且CX/ECX<>0時重複.       REPC        當CF=1且CX/ECX<>0時重複.       REPNC       當CF=0且CX/ECX<>0時重複.   ---------- 5、程序轉移指令 ----------------------------------------------------   1. 無條件轉移指令 (長轉移)       JMP         無條件轉移指令       CALL        過程調用       RET/RETF    過程返回.   2. 條件轉移指令   (短轉移,-128到+127的距離內)( 當且僅當(SF XOR OF)=1時,OP1<OP2 )       JA/JNBE     不小於或不等於時轉移.       JAE/JNB     大於或等於轉移.       JB/JNAE     小於轉移.       JBE/JNA     小於或等於轉移.           以上四條,測試無符號整數運算的結果(標誌C和Z).       JG/JNLE     大於轉移.       JGE/JNL     大於或等於轉移.       JL/JNGE     小於轉移.       JLE/JNG     小於或等於轉移.           以上四條,測試帶符號整數運算的結果(標誌S,O和Z).       JE/JZ       等於轉移.       JNE/JNZ     不等於時轉移.       JC          有進位時轉移.       JNC         無進位時轉移.       JNO         不溢出時轉移.       JNP/JPO     奇偶性爲奇數時轉移.       JNS         符號位爲 "0" 時轉移.       JO          溢出轉移.       JP/JPE      奇偶性爲偶數時轉移.       JS          符號位爲 "1" 時轉移.   3. 循環控制指令(短轉移)       LOOP            CX不爲零時循環.       LOOPE/LOOPZ     CX不爲零且標誌Z=1時循環.       LOOPNE/LOOPNZ   CX不爲零且標誌Z=0時循環.       JCXZ            CX爲零時轉移.       JECXZ           ECX爲零時轉移.   4. 中斷指令       INT         中斷指令       INTO        溢出中斷       IRET        中斷返回   5. 處理器控制指令       HLT         處理器暫停,  直到出現中斷或復位信號才繼續.       WAIT        當芯片引線TEST爲高電平時使CPU進入等待狀態.       ESC         轉換到外處理器.       LOCK        封鎖總線.       NOP         空操做.       STC         置進位標誌位.       CLC         清進位標誌位.       CMC         進位標誌取反.       STD         置方向標誌位.       CLD         清方向標誌位.       STI         置中斷容許位.       CLI         清中斷容許位.   ---------- 6、僞指令 ----------------------------------------------------------       DW          定義字(2字節).       PROC        定義過程.       ENDP        過程結束.       SEGMENT     定義段.       ASSUME      創建段寄存器尋址.       ENDS        段結束.       END         程序結束.   ---------- 7、處理機控制指令:標誌處理指令 ------------------------------------       CLC     進位位置0指令       CMC     進位位求反指令       STC     進位位置爲1指令       CLD     方向標誌置1指令       STD     方向標誌位置1指令       CLI     中斷標誌置0指令       STI     中斷標誌置1指令       NOP     無操做       HLT     停機       WAIT    等待       ESC     換碼       LOCK    封鎖   ========== 浮點運算指令集 ======================================================   ---------- 1、控制指令(帶9B的控制指令前綴F變爲FN時浮點不檢查,機器碼去掉9B)----   FINIT                 初始化浮點部件                  機器碼  9B DB E3   FCLEX                 清除異常                         機器碼  9B DB E2   FDISI                 浮點檢查禁止中斷                 機器碼  9B DB E1   FENI                  浮點檢查禁止中斷二            機器碼  9B DB E0   WAIT                  同步CPU和FPU                    機器碼  9B   FWAIT                 同步CPU和FPU                    機器碼  D9 D0   FNOP                  無操做                          機器碼  DA E9   FXCH                  交換ST(0)和ST(1)                機器碼  D9 C9   FXCH ST(i)            交換ST(0)和ST(i)                機器碼  D9 C1iii   FSTSW ax              狀態字到ax                       機器碼  9B DF E0   FSTSW   word ptr mem  狀態字到mem                      機器碼  9B DD mm111mmm   FLDCW   word ptr mem  mem到狀態字                      機器碼  D9 mm101mmm   FSTCW   word ptr mem  控制字到mem                      機器碼  9B D9 mm111mmm      FLDENV  word ptr mem  mem到全環境                      機器碼  D9 mm100mmm   FSTENV  word ptr mem  全環境到mem                      機器碼  9B D9 mm110mmm   FRSTOR  word ptr mem  mem到FPU狀態                    機器碼  DD mm100mmm   FSAVE   word ptr mem  FPU狀態到mem                    機器碼  9B DD mm110mmm      FFREE ST(i)           標誌ST(i)未使用                   機器碼  DD C0iii   FDECSTP               減小棧指針1->0 2->1             機器碼  D9 F6   FINCSTP               增長棧指針0->1 1->2             機器碼  D9 F7   FSETPM                浮點設置保護                       機器碼  DB E4   ---------- 2、數據傳送指令 ----------------------------------------------------   FLDZ                  將0.0裝入ST(0)                  機器碼  D9 EE   FLD1                  將1.0裝入ST(0)                  機器碼  D9 E8   FLDPI                 將π裝入ST(0)                    機器碼  D9 EB   FLDL2T                將ln10/ln2裝入ST(0)             機器碼  D9 E9   FLDL2E                將1/ln2裝入ST(0)                機器碼  D9 EA   FLDLG2                將ln2/ln10裝入ST(0)             機器碼  D9 EC   FLDLN2                將ln2裝入ST(0)                  機器碼  D9 ED      FLD    real4 ptr mem  裝入mem的單精度浮點數             機器碼  D9 mm000mmm   FLD    real8 ptr mem  裝入mem的雙精度浮點數             機器碼  DD mm000mmm   FLD   real10 ptr mem  裝入mem的十字節浮點數             機器碼  DB mm101mmm      FILD    word ptr mem  裝入mem的二字節整數              機器碼  DF mm000mmm   FILD   dword ptr mem  裝入mem的四字節整數              機器碼  DB mm000mmm   FILD   qword ptr mem  裝入mem的八字節整數              機器碼  DF mm101mmm      FBLD   tbyte ptr mem  裝入mem的十字節BCD數            機器碼  DF mm100mmm      FST    real4 ptr mem  保存單精度浮點數到mem             機器碼  D9 mm010mmm   FST    real8 ptr mem  保存雙精度浮點數到mem             機器碼  DD mm010mmm      FIST    word ptr mem  保存二字節整數到mem              機器碼  DF mm010mmm   FIST   dword ptr mem  保存四字節整數到mem              機器碼  DB mm010mmm      FSTP   real4 ptr mem  保存單精度浮點數到mem並出棧      機器碼  D9 mm011mmm   FSTP   real8 ptr mem  保存雙精度浮點數到mem並出棧      機器碼  DD mm011mmm   FSTP  real10 ptr mem  保存十字節浮點數到mem並出棧      機器碼  DB mm111mmm      FISTP   word ptr mem  保存二字節整數到mem並出棧           機器碼  DF mm011mmm   FISTP  dword ptr mem  保存四字節整數到mem並出棧           機器碼  DB mm011mmm   FISTP  qword ptr mem  保存八字節整數到mem並出棧           機器碼  DF mm111mmm      FBSTP  tbyte ptr mem  保存十字節BCD數到mem並出棧     機器碼  DF mm110mmm      FCMOVB                ST(0),ST(i) <時傳送              機器碼  DA C0iii   FCMOVBE               ST(0),ST(i) <=時傳送             機器碼  DA D0iii   FCMOVE                ST(0),ST(i) =時傳送             機器碼  DA C1iii   FCMOVNB               ST(0),ST(i) >=時傳送             機器碼  DB C0iii   FCMOVNBE              ST(0),ST(i) >時傳送              機器碼  DB D0iii   FCMOVNE               ST(0),ST(i) !=時傳送            機器碼  DB C1iii   FCMOVNU               ST(0),ST(i) 有序時傳送        機器碼  DB D1iii   FCMOVU                ST(0),ST(i) 無序時傳送        機器碼  DA D1iii   ---------- 3、比較指令   --------------------------------------------------------   FCOM                  ST(0)-ST(1)                      機器碼  D8 D1   FCOMI                 ST(0),ST(i)  ST(0)-ST(1)         機器碼  DB F0iii   FCOMIP                ST(0),ST(i)  ST(0)-ST(1)並出棧   機器碼  DF F0iii   FCOM   real4 ptr mem  ST(0)-實數mem                      機器碼  D8 mm010mmm   FCOM   real8 ptr mem  ST(0)-實數mem                      機器碼  DC mm010mmm      FICOM   word ptr mem  ST(0)-整數mem                      機器碼  DE mm010mmm   FICOM  dword ptr mem  ST(0)-整數mem                      機器碼  DA mm010mmm   FICOMP  word ptr mem  ST(0)-整數mem並出棧               機器碼  DE mm011mmm   FICOMP dword ptr mem  ST(0)-整數mem並出棧               機器碼  DA mm011mmm      FTST                  ST(0)-0                          機器碼  D9 E4   FUCOM  ST(i)          ST(0)-ST(i)                      機器碼  DD E0iii   FUCOMP ST(i)          ST(0)-ST(i)並出棧                   機器碼  DD E1iii   FUCOMPP               ST(0)-ST(1)並二次出棧             機器碼  DA E9   FXAM                  ST(0)規格類型                    機器碼  D9 E5   ---------- 4、運算指令   --------------------------------------------------------   FADD                  把目的操做數 (直接接在指令後的變量或堆棧緩存器) 與來源操做數 (接在目的操做數後的變量或堆棧緩存器)  相加,並將結果存入目的操做數   FADDP  ST(i),ST       這個指令是使目的操做數加上 ST  緩存器,並彈出 ST 緩存器,而目的操做數必須是堆棧緩存器的其中之一,最後無論目的操做數爲什麼,經彈出一次後,目的操做數會變成上一個堆棧緩存器了   FIADD                 FIADD 是把 ST   加上來源操做數,而後再存入 ST 緩存器,來源操做數必須是字組整數或短整數形態的變數      FSUB                  減   FSUBP   FSUBR                 減數與被減數互換   FSUBRP   FISUB   FISUBR      FMUL                  乘   FMULP   FIMUL      FDIV                  除   FDIVP   FDIVR   FDIVRP   FIDIV   FIDIVR      FCHS                  改變 ST 的正負值      FABS                  把 ST  之值取出,取其絕對值後再存回去。      FSQRT                 將 ST  之值取出,開根號後再存回去。      FSCALE                這個指令是計算 ST*2^ST(1)之值,再把結果存入 ST 裏而 ST(1)   之值不變。ST(1)  必須是在 -32768 到 32768 (-215 到 215 )之間的整數,若是超過這個範圍計算結果沒法肯定,若是不是整數 ST(1)    會先向零舍入成整數再計算。因此爲安全起見,最好是由字組整數載入到 ST(1) 裏。      FRNDINT               這個指令是把 ST 的數值舍入成整數,FPU    提供四種舍入方式,由 FPU 的控制字組(control    word)中的 RC 兩個位決定                             RC    舍入控制                             00    四捨五入                             01    向負無限大舍入                             10    向正無限大舍入                             11    向零捨去   ================================================================================   ---------------------  做者:17歲boy想當攻城獅  來源:CSDN  原文:https://blog.csdn.net/bjbz_cxy/article/details/79467688  版權聲明:本文爲博主原創文章,轉載請附上博文連接!

相關文章
相關標籤/搜索