微機原理——指令系統——傳送類指令(MOV、LEA、LDS、LES、LAHF、SAHF、XCHG、XLAT、PUSH、POP、PUSHF、POPF)

博主聯系方式:
QQ:1540984562
QQ交流群:892023501
群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。

【沒事兒可以到我主頁看看】https://blog.csdn.net/qq_42604176

傳送類指令

      • 1.通用傳送類指令:MOV指令
        • MOV例題講解:
      • 2.取有效指令LEA指令:
        • LEA例題講解:
      • 3.取地址指針指令:LDS、LES
        • LDS例題講解:
        • LES例題講解:
      • 4.標志傳送指令:LAHF、SAHF
      • 5.數據交換指令:XCHG
      • 6.字節轉換指令:XLAT
      • 7.堆棧操作指令:PUSH、POP、PUSHF、POPF
        • 棧操作例題講解:

指令分類
功能:把數據、地址、或立即數傳送到寄存器或存儲單元中 。

1.通用傳送類指令:MOV指令

MOV指令的格式為:   MOV   DST,   SRC	(MOV指令的實質是:把SRC的內容復制到DST中,執行操作后 SRC的內容不變!)
語法格式:MOV reg/mem/seg ,reg/mem/seg/imm

Reg:寄存器,mem:存儲器,seg:段寄存器,imm立即數
對標志位的影響:除標志寄存器傳送指令外,均不影響標志位

當無法通過任一個操作數確定是操作類型時,需要利用匯編語言的操作符顯式指明
MOV [BX+SI], 255 ;非法指令,修正:
MOV BYTE PTR [BX+SI],255;BYTE PTR說明是字節操作
MOV WORD PTR [BX+SI],255;WORD PTR說明是字操作
傳輸方向

MOV例題講解:

問:將以AREA1為首地址的100個字節數據搬移到以AREA2為首地址的內存中,若AREA1和AREA2都在當前數據段中,可以用帶有循環控制的數據傳送程序來實現。

MOV   SI,OFFSETAREA1;(OFFSET是取地址					
MOV   DI,OFFSETAREA2;  偏移量,必須加上)
;SI DI作為指針指向兩個內存的首地址
MOV   CX,100;	循環次數為100	
AGAIN:MOV   AL,[SI];RD為低MOV [DI],AL  ;WR為低	通過中間寄存器,將SI指向的內容轉移到DI指向的空間INC    SI	INC    DI	;指針自加1DEC   CX		;計數器減1JNZ  AGAIN 	;結果不為0轉移		等效于LOOP

有關尋址方式的一些語法要求請看這里!!!

2.取有效指令LEA指令:

指令格式: LEA reg16 ,存儲器尋址方式/地址標號
將源操作數指向的偏移地址送入寄存器中

LEA  BX,[BX+SI+0F62H]
如指令執行前:
(BX)=0400H,(SI)=003CH
則指令執行后:
(BX)=0400H+003CH+ 0F62H=139EH;139EH是偏移地址!不是DS:139EH中的內容!

LEA 指令與MOV 指令的區別:
LEA SI,BUFF;將標號BUFF的偏移地址送入寄存器中
MOV SI,BUFF;將標號BUFF所指存儲單元的內容送入SI

LEA例題講解:

問:如指令執行前(SI)=3000H,(BX)=0400H,MEEM=12000H,DS=1000H,執行LEA BX,MEEM指令后BX的內容為

BX存儲的是MEEM的偏移地址,BX=MEEM-DS*16H=2000H;

問:執行LEA BX,(SI)指令后BX的內容為

BX存儲的是SI的偏移地址所以BX=(SI)=3000H;

3.取地址指針指令:LDS、LES

LDS指令 (指針送寄存器和DS)
指令格式:LDS reg16 ,存儲器尋址方式
語法格式:LDS reg16 ,reg16/mem/lable
指令功能:從src指定的存儲單元開始,由4個連續存儲單元中取出前2字節送到reg,取出后2字節送到DS

LDS例題講解:

問:LDS AX,(SI +20 ) (20050H)=1234H,(20052H)=5678H,AX=0000H,DS=2000H,SI=0030H,
執行的結果為:AX=???,DS=???

src存儲單元地址=DS*16H + SI + 20H =20000+0030+0020=20050;
AX=(20050)=1234H;
DS=(20050+2)=5678H;

問:已知指令執行前(22000H~22005H)=12H、34H,56H、78H,9AH、BCH,AX=0000H,DS=2000H,BX=2000H,MEEM=22002H,執行指令LDS AX,MEEM和執行指令LDS AX,(BX)
過程
LES指令 (指針送寄存器和ES)
指令格式:LES reg16 ,存儲器尋址方式
語法格式: LES reg16 ,reg16/mem/lable ;
指令功能:從src指定的存儲單元開始,由4個連續存儲單元中取出前2字節送到reg,取出后2字節送到ES中

LES例題講解:

問:LES AX,20(SI)或 LES AX,(SI +20 ) 假設執行前為(20050H)=1234H,(20052H)=5678H,AX=0000H,DS=2000H,SI=0030H
執行的結果為:AX=???,ES=???

物理地址=20020+0030H=20050H
AX=(20050H)=1234H
ES=(20050+2H)=5678H

4.標志傳送指令:LAHF、SAHF

LAHF SAHF

5.數據交換指令:XCHG

執行的操作:交換DST與SRC的內容 DST SRC
語法格式為: XCHG reg/mem,reg/mem
注意點:這種交換只能在通用寄存器之間、通用寄存器與存貯器之間進行,存儲器與存儲器之間不能交換段寄存器不能作為一個操作數。

例:XCHG BX ,[BP+SI]
如指令執行前:(BX)=6F30H,(BP)=0200H,2F246H=54H 2F247H=51H ,(SI)=0046H,(SS)=2F00H,(2F00H)=4254H,OPR2的物理地址=2F00×16+0200+0046=2F246H
則指令執行后:(BX)=5154H,(2F246H)=6F30H。

6.字節轉換指令:XLAT

XLAT

7.堆棧操作指令:PUSH、POP、PUSHF、POPF

堆棧概念–存儲器的一段區域,按“先進后出”的原則進行存取操作。8086/8088系統,堆棧位于堆棧段,其段地址由SS指示,SP寄存器作為指針,SP內容始終指向棧頂所在存儲單元
堆棧是一塊特殊的存儲區域,利用這塊區域可以存儲返回地址等信息,從而實現子程序的嵌套調用。
作用:在調用一個過程時,保存返回地址;暫時存放寄存器或存儲器單元操作數的內容。
PUSH:
指令格式:進棧 PUSH SRC (堆棧壓入指令,進棧指令)
操作:(SP) (SP)-2, 指針-2
((SP)+1,(SP)) SRC 把操作數壓入棧中
功能:將16位寄存器,段寄存器,16位存儲單元數據壓入堆棧。
POP:
指令格式: 出棧 POP DST
操作:(DST) ((SP)+1,(SP)),
(SP) (SP)+2
過程:
1
壓棧和出棧的流程:

MOV  AX,8000H
MOV  SS,AX   ;設堆棧段地址  (SS)=8000H
MOV  SP,2000H ;設堆棧指針
MOV  DX,3E4AH
PUSH DX ;(先進) DX內容存入(SS×16+1FFEH=(SP-2))
PUSH AX  ; AX內容存入(SS×16+1FFCH =(SP-2-2) )
PUSH  (2000H);取數據段 (DS×16+2000H)內容進棧;存入(SS×16+1FFAH =(SP-2-2-2) )POP (2000H); (SS×16+1FFAH)到(DS×16+2000H)
POP   AX     ; (SS×16+1FFCH)到AX 
POP   DX   ;(后出) (SS×16+1FFEH)到DX

流程
PUSHF和POPF:
在這里插入圖片描述
在這里插入圖片描述

棧操作例題講解:

1、交換DS 和 ES的內容

PUSH DS;
PUSH ES;
POP DS;
POP ES;

2、在子程序設計時,需要從子程序返回時保持通用寄存器不變,這時候可以利用堆棧把寄存器保護起來

PUSH AX;
PUSH BX;
PUSH CX;
PUSH DX;
//調用子程序;
//子程序返回;
POP DX;
POP CX;
POP BX;
POP AX;

注意事項:

PUSH操作使棧頂向低地址方向移動,而POP操作則剛好相反;
·堆棧操作只能作字操作;
·SS:SP在任何時候都指向當前的棧頂

【沒事兒可以到我主頁看看】https://blog.csdn.net/qq_42604176

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378677.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378677.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378677.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

lastindexof方法_Java Vector lastIndexOf()方法與示例

lastindexof方法向量類別的lastIndexOf()方法 (Vector Class lastIndexOf() method) Syntax: 句法: public int lastIndexOf (Object ob);public int lastIndexOf (Object ob, int indices);lastIndexOf() method is available in java.util package. lastIndexOf(…

李開復:微博的價值在哪里

導讀:微博可以改變社會現象,可以傳播信息,可以幫助你成長,可以發出你的聲音。它讓我們能夠人人成為記者,讓每一個轉發的人都變成了一個編輯 很多人問微博是搶了誰的生意,開心網還是人人網?其實它…

mysql 任務計劃 /etc/cron.d_Linux /etc/cron.d增加定時任務

一般情況下我們添加計劃任務時,都是直接修改/etc/crontab。但是,不建議這樣做,/etc/cron.d目錄就是為了分項目設置計劃任務而創建的。例如,增加一項定時的備份任務,我們可以這樣處理:在/etc/cron.d目錄下新…

19-Harris角點檢測

角點檢測顧名思義,就是對類似頂點的檢測,與邊緣有所區別 邊緣可能在某一方向上變化不是特別明顯,但角點在任何方向上變換都很明顯 cv2.cornerHarris(img,blockSize,ksize,k) cv2.cornerHarris(gray,2,3,0.04) 參數一:img&#xff…

微機原理——指令系統——算數運算指令(ADD、ADC、SUB、SBB、INC、DEC、NEG、CMP、MUL、IMUL、DIV、IDIV、CBW、CWD、BCD調整)

博主聯系方式: QQ:1540984562 QQ交流群:892023501 群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。 算數運算指令1、加減法指令ADD、ADC 、SUB 、SBB 和增量減量指令INC、DEC、NEGADD…

linux系統出現Too many open files 錯誤、linux too many open files

故障一、linux too many open files linux系統出現Too many open files 錯誤,這是因為文件描述符大小不夠,或者有不正常的網絡連接(Socket也是一種特殊的文件)、文件IO沒有關閉并釋放出文件描述符(文件句柄,File Operator&#xf…

精通init ramfs構建

一、init ramfs是什么   在2.6版本的linux內核中,都包含一個壓縮過的cpio格式的打包文件。當內核啟動時,會 從這個打包文件中導出文件到內核的rootfs文件系統,然后內核檢查rootfs中是否包含有init文件,如果有則執行它&#xff0…

python 示例_帶有示例的Python date isocalendar()方法

python 示例Python date.isocalendar()方法 (Python date.isocalendar() Method) date.isocalendar() method is used to manipulate objects of date class of module datetime. date.isocalendar()方法用于操作模塊datetime的日期類的對象。 It uses a date class object a…

mysql 函數重載_[賦值]函數,變量,重載 ,_第1頁_169IT

[java/j2ee] java實現簡單的給sql語句賦值的示例代碼本身很簡單。拼接sql的時候?不好數,簡單的用來賦值。代碼如下:/** * TODO 循環賦值,缺少的類型可隨時添加 * author Lucius * param pt * param list * throws SQLException */ public static…

20-SIFT算法

import cv2 import numpy as np from matplotlib import pyplot as pltdef show_photo(name,picture):#圖像顯示函數cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()img cv2.imread(E:\Jupyter_workspace\study\data/cfx.png) gray cv2.cvtColor(img,cv2.COL…

Opencv——寫入或讀取數據到XML或YAML文件

什么是XML、YAML文件 XML(eXtensible Markup Language)是一種元標記語言。所謂“原標記”,就是開發者可以根據自身需要定義的標記,任何滿足XML命名規則的名稱都可以標記。此外,XML是一種語義/結構化語言,它描述了文檔的結構和語義…

mysql 遷移 nosql_從關系型Mysql到Nosql HBase的遷移實踐

2013年11月22-23日,作為國內唯一專注于hadoop技術與應用分享的大規模行業盛會,2013 Hadoop中國技術峰會(China Hadoop Summit 2013)于北京福朋喜來登集團酒店隆重舉行。來自國內外各行業領域的近千名CIO、CTO、架構師、IT經理、咨詢顧問、工程師、Hadoop…

Oracle EBS數據定義移植工具:FNDLOAD

在實際的EBS二次開發中,我們經常會碰到需要在各個環境之間移植二次開發的程序對象以及數據定義,如在EBS二次開發中并發請求的定義會涉及到:可執行、并發程序、值集、請求組等的定義,定義需要從開發環境、測試環境、UAT環境一直到正…

21-特征匹配方法(Brute-Force蠻力匹配)

Brute-Force蠻力匹配 cv2.BFMatcher(crossCheck True) crossCheck表示兩個特征點相互匹配 例如A中的第i個特征點與B中的第j個特征點最近,并且B中的第j個特征點到A中的第i個特征點也是 NORM_L2:歸一化數組的(歐幾里得距離),如果其他特征計算…

weakhashmap_Java WeakHashMap values()方法與示例

weakhashmapWeakHashMap類values()方法 (WeakHashMap Class values() method) values() method is available in java.util package. values()方法在java.util包中可用。 values() method is used to get the values that exist in this map to be viewed in a collection. val…

Opencv——幾何空間變換(仿射變換和投影變換)

幾何空間變換【1】幾何變換(空間變換)簡述【2】變換矩陣知識簡述齊次坐標的概念幾何運算矩陣【3】圖像的仿射變換1、平移變換2、比例縮放3、旋轉4、對稱變換(不做展示)1、關于X軸變換2、關于Y軸變換3、關于直線YX變換4、關于直線Y…

用于主題檢測的臨時日志(e1784e6f-037e-45de-bad1-8bbc239818ee - 3bfe001a-32de-4114-a6b4-4005b770f6d7)...

這是一個未刪除的臨時日志。請手動刪除它。(578392f7-2207-4b01-b36d-c483f0699988 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)轉載于:https://www.cnblogs.com/Fly-sky/archive/2011/03/03/1969850.html

probuffer java_Protocol Buffer的使用

Probotbuf簡介在網絡通信和通用數據交換等應用場景中經常使用的技術是 JSON 或 XML,這兩種技術常被用于數據的結構化呈現和序列化。我們可以從兩個方面來看JSON 和 XML與protobuf的異同:一個是數據結構化,一個是數據序列化。這里的數據結構化…

根據DbSchema生成代碼2

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using System.Threading; using System.IO; using Rocky;namespace Rocky.CodeBuilder {public class DbBuilder : Disposable{#region 字段public even…

22-隨機抽樣一致算法RANSAC

隨機抽樣一致算法(Random sample consensus,RANSAC) 看似復雜,其基本思想就是:隨機選取倆點,然后連接,給定一個容忍范圍,在這個范圍內的點越多越好,然后不斷的迭代進行找兩點之間容忍范圍內點最…