資料傳送類指令【80486】
資料傳送類指令
一、通用資料傳送指令
通用資料傳送指令包括最基本的傳送指令MOV、堆疊操作指令PUSH與POP、資料交換指令XCHG和位元組翻譯指令XLAT
(1)傳送指令
MOV(move):最基本的傳送指令。
格式:MOV d,s
操作:(d)⬅(s) ,將由s指定的源運算元送目標運算元d
()表示有關內容
注意點:
1、源運算元可以是8位或者16位暫存器運算元,也可以是儲存器中的某個位元組/字資料,或者是8位/16位立即數
2、目標運算元不允許為立即數,其他同源運算元一樣
3、兩者不能同時為儲存器運算元
4、CS和IP這兩個暫存器不能作為目標運算元(這兩個暫存器的值不能用MOV指令來修改)
5、當運算元採用BX、SI、DI進行間接定址時,預設的段暫存器為DS,訪問資料段;黨採用BP進行間接定址時,預設的段暫存器為SS,訪問堆疊段
(2)堆疊操作指令
80486微處理器對堆疊的操作遵循“先進後出”的原則,即最先存入堆疊的資料最後才能取出,最後存入的資料可最先取出。8086微處理器的堆疊採用“向下生長”的編址方式,即越靠近堆疊底部,其地址越大;越靠近堆疊頂部,其地址越小。在堆疊操作的過程中,堆疊指標SP的內容始終指向棧頂的地址(開始時它指向堆疊的底部,地址最高)。在80486微處理器指令系統中,有兩條專用於堆疊操作的指令PUSH和POP。除此之外,子程式呼叫及放回指令、中斷呼叫及返回指令的操作過程,都會對堆疊有影響
PUSH 壓棧指令:將資料壓入堆疊
格式:PUSH s
操作:
(SP-1),(SP-2)←(s)
SP←SP-2
說明:
1、s是源運算元,表示入棧的字運算元,除了不允許使用立即數外,暫存器、儲存器、段暫存器(CS除外)都可以作為源運算元
2、具體操作過程:先將SP減1,將運算元的高位位元組送入當前SP所指單元中,然後再將SP減1,將運算元的低位位元組又送入當前SP所指單元中。
POP 出棧指令:將資料彈出堆疊
格式:POP d
操作:
(d)←(SP+1),(SP)
SP←SP+2
說明:
1、d是目標運算元,表示由堆疊彈出的字運算元,除了立即數和CS段暫存器外,暫存器、儲存器和段暫存器都可以作為目標運算元
2、具體操作過程:先將當前SP所指的棧頂單元的內容彈出,並送入d指定的低位位元組單元,SP內容加1指向下一個單元,然後再將當前SP所指棧頂單元中的內容彈出,並送入d指定的高位位元組單元,SP的內容再加1
(3)XCHG(exchange)交換指令
格式:XCHG d,s
操作:交換(d)和(s)
說明:將s表示的源運算元的內容和d表示的目的運算元的內容相互交換,這兩個運算元都可以是位元組或字型別。交換可以在暫存器與暫存器之間、暫存器與儲存單元之間,但是不能在兩個儲存單元之間交換資料。段暫存器與指令指標IP也不能作為源運算元和目標運算元。
(4)XLAT(table look-up translation)位元組轉換指令
格式:XLAT
操作:AL←(BX+AL)
說明:位元組轉換指令XLAT用來將一種位元組程式碼轉換成另一種位元組程式碼,它將BX中的內容(程式碼表格首地址)和AL中的內容(表格偏移量)相加作為有效地址,並讀出地址單元中的內容傳送到AL暫存器中。指令執行後,AL中的內容是所要轉換的程式碼。
二、目標地址傳送指令
目標地址傳送指令共有三條,可將運算元的段基址或偏移地址傳送到指定的暫存器中。
(1)LEA(load effective address)取有效地址指令
格式:LEA d,s
操縱: (d)←EA
說明:將源運算元s的有效地址EA傳送到指令指定的暫存器中,源運算元s只能是各種定址方式的儲存器運算元,而暫存器、立即數和段暫存器都不能作為源運算元,目標運算元d可以是一個16位的通用暫存器
(2)LDS(load data segment register)取指標送暫存器和DS指令
格式:LDS d,s
操作:(d)←(s)
DS←(s+2)
說明:源運算元s確定一個雙字型別的儲存器操縱數的首地址,目標運算元d指定一個16位的通用暫存器運算元(不允許使用段暫存器)。從s所指定的儲存單元開始的連續4個儲存單元中,取出某變數的地址指標,將其前兩個位元組(即偏移地址值)傳送到目標運算元d所指定的16為通用暫存器中,而將後兩個位元組(即段基址值)傳送到DS段暫存器中
(3)LES(load extra segment register)取指標送暫存器和ES指令
格式:LES d,s
操作:(d)←(s)
(ES)←(s+2)
說明:LES和LDS指令基本類似,所不同的是以ES代替DS
三、標誌位傳送指令
標誌位傳送指令的操作涉及標誌暫存器,利用這些指令 ,可以讀出標誌暫存器的內容,也可對標誌暫存器的標誌位進行設定。標誌位傳送指令共有4條,這些指令都是單位元組指令,指令的運算元規定為隱含方式,在指令的書寫格式中不出現,是無運算元指令
(1)LAHF(load status flags into AH)標誌位送AH指令
格式:LAHF
操作:AH←FR的低位位元組,將標誌暫存器FR的低8位狀態標誌送入AH暫存器的相應位。
(2)SAHF(store AH into flag register)AH內容送標誌暫存器指令
格式:SAHF
操作:FR的低位位元組←AH,將AH暫存器中的、、、、 位的狀態標誌送入標誌暫存器FR的相應位,而FR的其他位不受影響
(3)PUSHF(push flags register into stack)標誌暫存器壓入堆疊指令
格式:PUSHF
操作:
SP←SP-1,(SP)←FR的高8位
SP←SP-1,(SP)←FR的低8位
(4)POPF(pop stack into flag register)堆疊內容彈出到標誌暫存器指令
格式:POPF
操作:
FR的低8位←(SP),SP←SP+1
FR的高8位←(SP),SP←SP+1
四、I/O資料傳送指令
80486微處理器指令系統中的I/O指令,只能在AL或AX暫存器與輸入/輸出埠之間進行資料傳送。輸入/輸出埠地址的定址方式包括直接定址和DX暫存器間接定址兩種。
(1)IN(input data from port)輸入指令
格式:IN 累加器,埠地址
輸入指令允許把一個位元組或一個字資料由輸入埠傳送到AL(位元組)或AX(字)中。若埠採用直接定址方式,則由8位立即數直接給出,可定址範圍為0~255共256個埠。若埠採用DX暫存器間接定址方式,可間接定址64K(65536)個16位埠地址
(2)OUT(output data to port)輸入指令
格式:OUT 埠地址,累加器
相關文章
- 30332資料傳送指令
- python 傳送buffer型別資料, 傳送octet-stream型別資料, 傳送Uint8Array型別資料Python型別UI
- 彙編--串傳送指令 MOVS
- 【測試】echo傳送和接收TCP/UDP資料包|shell 傳送TCP/UDP資料包TCPUDP
- 0211-使用 dummy 傳送資料
- shell指令碼:批次傳送curl請求指令碼
- 傳送kafka訊息的shell指令碼Kafka指令碼
- 8086地址傳送指令LDS,LES
- QT串列埠助手(四):資料傳送QT串列埠
- 利用Oracle資料庫傳送郵件Oracle資料庫
- react-fetch資料傳送請求React
- 使用postman傳送資料,springmvc接收資料的問題PostmanSpringMVC
- python requests傳送不同型別的資料Python型別
- 使用URLSearchParams處理 fetch 傳送的資料
- Python新型冠狀病毒疫情資料自動爬取+統計+傳送報告+資料螢幕(三)傳送篇Python
- 使用 requests 庫傳送多部分表單資料
- JAVA 資料寫入excel併傳送郵件JavaExcel
- Linux透過Shell命令向埠傳送資料Linux
- PHP 傳送GET 和 POST資料的方法分析PHP
- STM32使用DMA傳送串列埠資料串列埠
- jmeter之傳送json資料的post請求JMeterJSON
- C# 操縱貼上板 Clipboard(傳送資料、讀取資料、清空資料)C#
- Python 壓縮資料夾併傳送郵件功能Python
- C/C++ 運用Npcap傳送UDP資料包C++PCAUDP
- 直播app開發搭建,將聊天資料傳送加密APP加密
- Java網路程式設計--UDP傳送接收資料Java程式設計UDP
- 公眾號傳送模板資訊java實現(主動傳送)Java
- http不使用Form表單傳送檔案資料和非檔案資料(上傳篇)HTTPORM
- 如何在shell指令碼里使用sftp批次傳送檔案指令碼FTP
- Java用HttpClient3傳送http/https協議get/post請求,傳送map,json,xml,txt資料JavaHTTPclient協議JSONXML
- Java入門:TCP協議傳送/接收資料實現JavaTCP協議
- Java入門:UDP協議傳送/接收資料實現JavaUDP協議
- 怎麼把資料夾變成壓縮包傳送
- 利用ASP傳送和接收XML資料的處理方法XML
- SQL server資料庫高可用日誌傳送的方法SQLServer資料庫
- 資料夾怎麼拖到微信 微信傳送資料夾的辦法
- DNS域傳送資訊洩露DNS
- liunx通過TCP傳送資訊TCP