微机原理——指令系统——传送类指令(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.mzph.cn/news/378677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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…

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…

mysql 迁移 nosql_从关系型Mysql到Nosql HBase的迁移实践

2013年11月22-23日,作为国内唯一专注于hadoop技术与应用分享的大规模行业盛会,2013 Hadoop中国技术峰会(China Hadoop Summit 2013)于北京福朋喜来登集团酒店隆重举行。来自国内外各行业领域的近千名CIO、CTO、架构师、IT经理、咨询顾问、工程师、Hadoop…

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

Brute-Force蛮力匹配 cv2.BFMatcher(crossCheck True) crossCheck表示两个特征点相互匹配 例如A中的第i个特征点与B中的第j个特征点最近,并且B中的第j个特征点到A中的第i个特征点也是 NORM_L2:归一化数组的(欧几里得距离),如果其他特征计算…

Opencv——几何空间变换(仿射变换和投影变换)

几何空间变换【1】几何变换(空间变换)简述【2】变换矩阵知识简述齐次坐标的概念几何运算矩阵【3】图像的仿射变换1、平移变换2、比例缩放3、旋转4、对称变换(不做展示)1、关于X轴变换2、关于Y轴变换3、关于直线YX变换4、关于直线Y…

probuffer java_Protocol Buffer的使用

Probotbuf简介在网络通信和通用数据交换等应用场景中经常使用的技术是 JSON 或 XML,这两种技术常被用于数据的结构化呈现和序列化。我们可以从两个方面来看JSON 和 XML与protobuf的异同:一个是数据结构化,一个是数据序列化。这里的数据结构化…

22-随机抽样一致算法RANSAC

随机抽样一致算法(Random sample consensus,RANSAC) 看似复杂,其基本思想就是:随机选取俩点,然后连接,给定一个容忍范围,在这个范围内的点越多越好,然后不断的迭代进行找两点之间容忍范围内点最…

23-背景建模

帧差法 由于场景中的目标在运动,目标的影像在不同图像帧中的位置不同。该类算法对时间上连续的两帧图像进行差分运算,不同帧对应的像素点相减,判断灰度差的绝对值,当绝对值超过一定阈值时,即可判断为运动目标&#xf…

DB2 9 运用开辟(733 考试)认证指南,第 3 部门: XML 数据独霸(4)

议决运用顺序存储和检索 XMLXML 编码字符编码在汗青上,术语 字符集、字符编码 和 码页 都有雷同的意义:一个字符集和一个二进制码集,其中每个码示意一个字符。(码页是来自 IBM 的一个术语,示意一个大型主机或 IBM PC 上…

Opencv——霍夫变换以及遇到的一些问题

目录问题1 :颜色空间转换函数参数问题:CV_BGR2GRAY vs CV_GRAY2BGR问题2:cvRound()、cvFloor()、cvCeil()函数用法霍夫变换的含义标准霍夫直线变换霍夫线变换函数参数讲解累计概率霍夫变换霍夫变换圆变换原理和算法步骤:霍夫圆变换…

java ssm如何上传图片_ssm整合-图片上传功能(转)

本文介绍 ssm (SpringSpringMVCMybatis)实现上传功能。以一个添加用户的案例介绍(主要是将上传文件)。一、需求介绍我们要实现添加用户的时候上传图片(其实任何文件都可以)。文件名:以 博客名日期的年月日时分秒毫秒形式命名如 言曌博客2017082516403213.png路径&am…

24-光流估计

光流是空间运动物体在观测成像平面上的像素运动的“瞬间速度”,根据各个像素点的速度矢量特征,可以对图像进行动态分析,例如目标跟踪 亮度恒定:同一点随着时间的变化,其亮度不会发生改变 小运动:随着时间的…

java公平索非公平锁_java中的非公平锁不怕有的线程一直得不到执行吗

首先来看公平锁和非公平锁,我们默认使用的锁是非公平锁,只有当我们显示设置为公平锁的情况下,才会使用公平锁,下面我们简单看一下公平锁的源码,如果等待队列中没有节点在等待,则占有锁,如果已经…

mybatis.net - 5 嵌入资源与引用资源

在SqlMap.config文件中可以有两种方式引入外部的文件。 一种是通过资源的方式&#xff0c;在文件中表现为 resource&#xff0c;就是引用外部的文件&#xff0c;这里需要保证文件的路径正确。 <sqlMaps><sqlMap resource"Maps/ProductMap.xml"/><sqlM…

图解MySQL数据库的陈列和把持-4

泉源&#xff1a;网海拾贝 填入一些测试数据&#xff1a; 封闭“MySQL Query Browser”&#xff0c;再从头翻开它&#xff0c;切换到testtable表&#xff0c;看到了没有&#xff1f;刚刚输出的中文变成了“&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&am…

非常好友(C++)

Bessie和其他的所有奶牛的耳朵上都戴有一个射频识别&#xff08;RFID&#xff09;序列号码牌。因此农夫John可以机械化地计算他们的数量。很多奶牛都有一个“牛友”。如果奶牛A的序列号的约数之和刚好等于奶牛B的序列号&#xff0c;那么A的牛友就是B。在这里&#xff0c;一个数…

使用快捷键,快到极致

前段时间曾经写过一篇文章&#xff0c;《优秀程序员无他-善假于物也》。其中谈到一点是优秀的程序员必须要能灵活的掌握常用软件的快捷键。对于程序员来说&#xff0c;每天使用时间最长的软件恐怕就是IDE&#xff08;Integrated Development Environment&#xff09;了。如果你…

轮廓(查找和绘制轮廓、轮廓的表达与组织、轮廓的特性)

目录1、轮廓的定义2、如何在图像中找到轮廓opencv自带的查找轮廓函数:findContours()3、轮廓的表达方式1.顶点的序列2.Freeman链码4、轮廓之间的组织方式5、轮廓的特点&#xff08;这部分可以展开来详细探讨&#xff0c;这里不做过多解释&#xff09;6、轮廓的匹配7、绘制轮廓d…