8086CPU中的數據傳送類指令


數據傳送類指令

注意點

  1. \(SAHF、POPF\) 指令外,其余傳送類指令CPU執行后,對6個狀態標志均無影響。

也就是說,除 \(SAHF、POPF\) 指令外,CPU只是做了數據傳送,並沒有進行數據運算,對狀態標志位無影響。

  1. 語法規則

1)立即數只能做源操作數

2)類型一致

3)類型明確

4)當ES、DS、SS做目的操作數時,源操作數不能是立即數。

5)CS、IP不能做目的操作數

6)兩存儲器單元之間不能直接操作

數據傳送類指令

通用數據傳送指令-MOV

mov指令的格式為

MOV DST,SRC

取有效地址指令-LEA

LEA指令的格式為

LEA REG_16,MEM

REG_16表示一個16位寄存器,理論上只要是16位即可,但是因為存放有效地址,所以最好是 BX、BP、SI、DI

MEM是5種存儲器尋址方式之一指明的一個存儲器單元。

例如

LEA BX,data1 ;data1是變量,直接尋址找到這個存儲單元把有效地址送給BX

等同於

MOV BX,OFFSET data1

功能一樣。

取地址指針指令-LDS、LES

這兩個指令是將雙字變量MEM內容中的高16位送入DS/ES,低16位送入指定的REG16中。這里REG16不允許為段寄存器。

不常用,了解。

以LDS為例,格式為

LDS REG_16,MEM

REG_16表示一個16位寄存器

MEM是5種存儲器尋址方式之一指明的一個存儲器單元

例如

TABLE DB 10H,20H...
LDS BX,TABLE ;TABLE的段地址->(DS),TABLE的偏移地址->(BX)

得到地址指針,就可以很容易取數據

MOV DX,[BX]

實際中LEA用的比較多。

標志傳送指令-LAHF、SAHF

指令LAHF(load AH register from flags)可以將PSW寄存器中的低8位傳送到AH中,指令SAHF(store AH register from flags)可以將AH的內容傳送到PSW寄存器中的低8位。

源操作數和目的操作數的尋址方式均為隱含尋址方式。

數據交換指令-XCHG

XCHG指令完成兩個操作數之間數據的交換

XCHG指令格式為

XCHG DST,SRC 

注意兩點:

  1. DST,SRC的內容均不能為立即數

  2. 所有的段寄存器不能參加交換

例如

XCHG AX,BX
XCHG DL,DH
XCHG AX,[SI+3]

字節轉換指令-XLAP

XLAP為隱含尋址,格式為

XLAP ;DS:(BX)+(AL)->(AL)

右邊默認在數據段,以BX內容為基址加上以AL為內容的相對位移量,作為有效地址,尋找一個存儲單元,將這個單元的內容傳送給AL。

XLAP非常適合兩個代碼之間的交換(查表)

例如

TABLE DB 30H,31H,32H,33H... ;在DS段定義字符0-9,存儲為ASCII碼
...
mov AL,3 ;通過查表得到字符3
LEA BX,TABLE ;BX默認數據段,執行后TABLE的偏移地址屬性傳送給BX
XLAB ;(AL)= 33H

所以XLAB也叫查表指令。

堆棧操作指令

有四條,堆棧操作指令必須 按字(雙字節)操作

  1. 壓入堆棧指令-PUSH

格式為

PUSH SRC ;將SRC壓入堆棧

SRC不能為立即數

  1. 彈出堆棧指令-POP

格式為

POP DST ;從堆棧彈出DST
  1. PUSHF

PUSHF為隱含尋址,格式為

PUSHF ;將(PSW)壓入堆棧
  1. POPF

POPF為隱含尋址,格式為

POPF ;從堆棧彈出一個字,送給(PSW)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM