第六讲 数据传送指令
数据传送类指令
05
06
不允许直接向段寄存器传送立即数。
该指令不影响标志位。
06
数据传送类指令
例3-12
指出下列指令中的错误 (1)MOV [DI], [SI] (2)MOV DS, 1000H (3)MOV 2000H, AX
(1)两个操作数不能同时为存 储器操作数。
(2)不能直接向段寄存器传送 立即数,正确的指令应为:
(1)在CPU内部寄存器之间 进行数据传送。
例如,MOV BL, AL MOV BX, AX MOV DS, AX
(2)在CPU内部寄存器与存 储器之间进行数据传送。
例如,MOV AX, [1000H] MOV BX, [SI][BX] MOV DATA[BP], ES
(3)将立即数传送给寄存器。 例如,MOV AX, 1234H MOV SI, 1000H
例3-14
数据传送类指令
已知:(BX)=1122H,(DS)=3000H,(31000H)=1234H。执行指令: XCHG BX, [1000H] 源操作数的物理地址为:(DS)×16+1000H=31000H。 指令执行的结果为:(BX)=1234H,(31000H)=1122H。
要实现两个存储单元X与Y之间的数据交换, 可以执行如下指令:
数据传送类指令
例3-15 已知:(DS)=3000H,(32000H)=12H,(32001H)
=34H,(32002H)=56H,(32003H)=78H。执行指令: LDS SI, [2000H]
地址传送指令
1.5 输入输出指令
数据传送类指令
输入输出指令用于在I/O端口与CPU之间传送数据。
MOV AX, 1000H MOV DS, AX (3)立即数不能作为目的操 作数。
数据传送指令
数据传送指令数据传送指令包括数据的传送、交换、堆栈数据的压入与弹出,是最基本、使用率最高的一类指令。
助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP共八种。
1.MOV类指令及功能(16条)这类指令的功能是从源操作数到目的操作数的数据传送。
MOV A, Rn ;Rn→A,寄存器Rn的内容送到累加器AMOV A, direct ;(direct)→A,直接地址中的内容送AMOV A, @Ri ;(Ri)→A,Ri间址的内容送AMOV A, #data ;data→A,立即数送AMOV Rn,, A ;A→Rn,累加器A中的内容送寄存器RnMOV Rn, direct ;(direct)→Rn;直接地址中的内容送RnMOV Rn, #data ;data→Rn;立即数送RnMOV direct, A ;A→(direct),A中的内容送入直接地址中MOV direct, Rn ;Rn→(direct),寄存器内容送入直接地址中MOV direct, direct ;(direct) →(direct),源操作数直接地址的内容送入;目的操作数的直接地址中MOV direct, @Ri ;(Ri)→(direct),Ri间址内容送入直接地址中MOV direct, #data ;data→(direct),立即数送入直接地址中MOV @Ri, A ;A→(Ri),A中内容送到Ri间址单元中MOV @Ri, direct ;(direct)→(Ri),直接地址中内容送入Ri间址单元中MOV @Ri, #data ;data→(Ri),立即数送入Ri间址单元中MOV DPTR, #data16 ;data16→DPTR,16位常数送入数据指针DPTR中,高8;位送入DPH,低8位送入DPH,低8位送入DPL中从上述指令可以看出目的操作数有A累加器、Rn寄存器、直接地址direct及间接地址@Ri,源操作数除此之外还多一种立即数data。
数据传送指令
3.2.1数据传送指令
(4) 格式:POP DST 操作:(DST)←((SP+1),(SP)),(SP)←(SP)+2 先出栈,后指针加2,按字取出。目标操作数DST的寻址方式为 立即寻址方式之外的所有存储器操作数寻址方式和寄存器寻址
POP AX POP [BX+SI]
3.2.1数据传送指令
(5) 该指令把存储器操作数的有效地址送到指定的寄存器中。 格式: LEA REG,SRC 操作:(REG)←SRC,即把源操作数(SRC应是存储器操 作数)的有效地址送到指定的寄存器中(REG LEA DX,[BX+SI+0B62H] 执行前:(BX)=3000H,(SI)=00C3H 执行后:(DX)=3000H+00C3H+0B62H=3C25H(有效地址
操作:(AL)←[(DX)](字节);(AX)←[(DX)+1,(DX)](字)
3.2.1数据传送指令
(2)
格式Ⅰ:OUT PORT ,AL OUT PORT ,AX ;字输出
操作:(PORT) ←AL(字节);(PORT+1,PORT)←AX
格式Ⅱ:OUT AL, DX OUT AX, DX
操作:[(DX)] ←(AL)(字节),[(DX)+1,(DX)] ←(AX)(字)IN/OUT 指令有两种格式,选择哪一种,取决于 外部设备端口地址的宽度。格式Ⅰ指令有两个字节,称长格式, 格式II指令只有一个字节,称短格式。
3.2.1数据传送指令
3. (1) LAHF
格式: LAHF 操作:(AH)←(PSW的低字节),即标志寄存器 (PSW)的低字节传送到AH (2) SAHF 格式:SAHF 操作:(PSW的低字节)←(AH),即将AH 寄存器的内
第六章 S7-200PLC特殊功能指令..
SHL_W
EN IN N SLW OUT, N ENO OUT
SHL_DW
EN IN N SLD OUT, N ENO OUT
说明: (1)把输入端(IN)指定的数据右移/左移N位,结果存入 OUT单元; (2)移位时,移出位进入SM1.1,另一端自动补0。SM1.1 始终存放最后一次被移出的位; (3)移位次数最大分别为8、16、32。 (4)如果移位结果是0,零存储器位(SM1.0)置位。
二、移位和循环移位指令
SHR_B SHR_W
EN IN N SRW OUT, N ENO OUT
SHR_DW
EN IN N SRD OUT, N ENO OUT
(1)右移位指令
EN IN N
ENO OUT
SRB OUT, N
(2)左移位指令
SHL_B
EN IN N SLB OUT, N ENO OUT
执行操作:LN(IN)=OUT。
IN
LN IN OUT
3、指数指令:EXP
把一个双字长(32位)的实数IN取以e为底的
EXP
EN IN ENO OUT
指数,得到32位的实数结果OUT。 4、正弦、余弦、正切指令
EXP IN OUT
即正弦、余弦、正切指令。将把一个双字长( 32 位)的实数
弧度值 IN 分别取正弦、余弦、正切,各得到 32 位的实数结果 OUT。
例:移位和循环指令编程
循环前 AC1 1010 0101 0001 1001 SM1.1
SM1.1 移位前 1101 0101 1001 1011 VW300
循环后 AC1 1101 0010 1000 1100
SM1.1 1
SM1.1 移位后 1 1010 1011 0011 0110 VW300
汇编语言基本指令详解
汇编语言基本指令详解在计算机科学和计算机工程领域,汇编语言是一种计算机底层编程语言,用于直接控制计算机硬件。
它是机器语言的文本形式,使用符号和助记符来代表机器指令,相对于高级编程语言来说更加底层。
汇编语言基本指令是使用汇编语言进行编程时必不可少的内容。
下面将详细介绍汇编语言中常用的基本指令。
1. 数据传送指令数据传送指令用于在寄存器之间传递数据,常见的指令有MOV、ADD、SUB、MUL等。
MOV指令用于将数据从一个位置传送到另一个位置,格式为MOV 目标操作数, 源操作数。
例如,MOV AX, BX可以将BX的值传送给AX。
ADD指令用于将两个操作数相加,并将结果保存到目标操作数中。
格式为ADD 目标操作数, 源操作数。
例如,ADD AX, BX可以将AX与BX的值相加,并将结果保存在AX中。
SUB指令用于将源操作数的值从目标操作数中减去,并将结果保存到目标操作数中。
格式为SUB 目标操作数, 源操作数。
例如,SUB AX, BX可以将BX的值从AX中减去,并将结果保存在AX中。
MUL指令用于将两个操作数相乘,并将结果保存到目标操作数中。
格式为MUL 目标操作数, 源操作数。
例如,MUL AX, BX可以将AX与BX的值相乘,并将结果保存在AX中。
2. 算术逻辑指令算术逻辑指令用于进行各种算术和逻辑运算,例如加法、减法、乘法、除法、与、或、非等。
ADD指令在前面已经提到,用于将两个操作数相加。
SUB指令在前面已经提到,用于将源操作数的值从目标操作数中减去。
MUL指令在前面已经提到,用于将两个操作数相乘。
DIV指令用于将目标操作数除以源操作数,并将商保存到目标操作数,余数保存在DX中。
格式为DIV 操作数。
例如,DIV BX可以将AX的值除以BX,并将商保存在AX中,余数保存在DX中。
AND指令用于对两个操作数进行按位与运算,并将结果保存到目标操作数中。
格式为AND 目标操作数, 源操作数。
例如,AND AX,BX可以将AX与BX的值按位与,并将结果保存在AX中。
第六讲数据传送指令PPT课件
(1)一般传送指令
该类指令的功能是实现数在片内RAM单元之间、寄存器 之间、寄存器与RAM单元之间的传送。所有指令具有统一的 格式,其格式如下:
MOV <目的操作数>,<源操作数>;目的操作数单元←源 操作数(或单元)
操作码助记符都是"MOV",目的操作数和源操作数不同 寻址方式的组合就派生出该类的全部指令。因此,记忆这类指 令的关键在于掌握两个操作数的各种寻址方式的组合关系。
例如:已知累加器A中有一个0-9范围内的数,用查 表指令编出能查找出该数的平方值的程序
(1)采用PC作为基址寄存器
为了便于理解,我们把如下查表程序定位在1FFBH
ORG 1FFBH
1FFBH
ADD A , #data
1FFDH
MOVC A , @A+PC
1FFEH
SJMP $
2000H
DB 0
2001H
DB 1
2002H
DB4
…
2009H
DB 81
END
(2)采用DPTR作为基址寄存器 采用DPTR作为基址寄存器的查表程序比较简单,也容易
理解,只要预先使用一条十六位数传送指令,把表的是始址 2000H送入DPTR,然后进行查表就行了。相应程序为:
MOV DPTR , #2000H MOVC A , @A+DPTR 思考:用查表方法把累加器中的十六进制数转换为ASCII码, 并送回累加器中。
例如: 设(R0) = 30H,30H = 4AH,(A) = 28H,则 执行XCH A, @R0后,结果为(A) = 4AH,(30H) = 28H。 执行XCHD A,@R0后,结果为(A) = 2AH,(30H) = 48H。 执行SWAP A后,结果为(A) = 82H。
数据传送指令PPT课件
.
以direct 为目的操作数的指令
1、指令 MOV direct, @Rn MOV direct,A MOV direct,#data MOV direct,Rn MOV direct,direct
.
2、功能 把源操作数送入由直接地址指向的存储
【作业】
1、设(A)=34H,(R0)=30H,(30H)=56H, 执行下列指令后A的内容是多少? XCHD A,@R0
2、若(R0)=37H,(A)=76H,执行 XCH A, R0 指令 结果:(A)=?,(R0)=?
3、设(SP)=32H,(32H)=70H,(31H) =60H,执行下述指令后SP是多少?
1、若(23H)= 30H,执行 MOV R6,23H 则 R6的内容为多少,该指令的寻址方式是什么?
2、若执行MOV R3,#24H , 则结果:(R3) =?
3、若(40H)=34H ,执行MOV A ,40H, 则结果: (A)=?
.
作业:
1、若(R1)= 30H,(30H)= 68H,执行 MOV A,@R1,则A的内容为多少,源操作数 的寻址方式是什么?
2、若执行MOV R1,#20H ,则R1的内容为多少 3、若(64H)=70H,(A)=78H,执行指令MOV
64H,A 则64H及A的内容为多少 4、若(R1)=35H,执行 MOV @R1,#40H 指
令则35H的内容为多少
.
用户RAM区或堆栈区(见教材P49)
• 供用户使用的一般RAM区,共有80个单 元,其单元地址为30H~7FH。在一般应用 中常把堆栈开辟在此区中。MCS—51单片机 堆栈区不是固定的, 原则上可设在内部RAM 的任意区域内, 但为了避开工作寄存器区 和位寻址区, 一般设在30H以后的范围内。
数据传送指令
数据传送指令
1.MOV 目的,源将源操作数送到目的操作书中,源操作数不变
1源,目的操作数不能同为存储器操作数
2数据类型一致
3CS和立即数不能为目的操作数立即数不能直接传给段寄存器
2.压栈指令PUSH 源操作数将存储器或寄存器操作数压入堆栈
3.出栈指令POP 字数据将字数据弹到寄存器或存储单元
4.交换指令XCHG 目的,源将源操作数目的操作数互换段寄存器的内容不能互换
输入输出指令
1.输入指令IN
1直接寻址输入指令IN AL,PORT AL<---(PORT)
IN AX,PORT AL<---(PORT+1,PORT)
2间接寻址输入指令IN AL,DX AL<----(DX)
IN AX,DX AX<---(DX+1,DX)
从DX寄存器指定端口读入一个字节送给AL,首先应把端口地址送给DX
2.输出指令OUT
1直接寻址输出指令OUT PORT,AL OUT PORT,AX
2间接寻址输出指令OUT DX,AL OUT DX,AX
地址传送指令
1.取有效地址指令LEA 16位目的,源把源操作数有效地址EA1送到16位目的寄存器中
2.装入DS和有效地址指令LDS 16位目的,源
3.装入ES和有效地址指令LES 16位目的,源
4.。
数据传送指令
(四)标志传送指令(Flag register transfer)
5
第五页,编辑于星期四:二十一点 十六分。
注意:
(1)不能用一条MOV指令实现以下传送。
存储单元之间的传送
MOV MEM2 , MEM1 错。
MOV AX , MEM1
MOV MEM2 , AX 对。
立即数送段寄存器
例 : MOV DS,2000H 错。
MOV AX, 2000 H
MOV DS , AX
对。
12
第十二页,编辑于星期四:二十一点 十六分。
一. 数据传送指令
功能:
负责把数据、地址或立即数传 送到寄存器或存储单元。
特点: 它是计算机最基本、最重要的一种操作,使用比例最高。
种类(分四种): • 通用传送指令包括: MOV, PUSH, POP ,XCHG, XLAT。
• 输入输出指令指令包括: IN, OUT。
• 目的地址传送指令包括: LEA, LDS, LES • 标志传送指令包括 : LAHF, SAHF, PUSHF, POPF
; 累加器存储器,直接寻址 ;段寄存器存储器,直接寻址
;寄存器存储器,变址寻址
MOV AX , DISP [SI] MOV DS , MEM
MOV CX , DISP [BX] [SI]
;存储器累加器,变址寻址 ;存储器段寄存器,直接寻址
;存储器累加器,相对基址加变址
11
第十一页,编辑于星期四:二十一点 十六分。
指令系统(数据传送类)
● 4. 标志位传送指令
(1) LAHF指令 LAHF指令 ●指令功能:把标志寄存器的低8位送入寄存器AH; 指令功能:把标志寄存器的低8位送入寄存器AH AH; ●指令格式: LAHF 指令格式: 执行操作:AH←(PSW低8位) 执行操作:AH←(PSW低 (2) SAHF指令 SAHF指令 ●指令功能:与LAHF指令执行相反的操作,寄存器AH的相应位分别 指令功能: LAHF指令执行相反的操作 寄存器AH 指令执行相反的操作, AH的相应位分别 传送至标志位寄存器PSW的相应位中。 PSW的相应位中 传送至标志位寄存器PSW的相应位中。 (3) PUSHF指令 PUSHF指令 ●指令功能:把标志寄存器PSW的内容压栈; 指令功能:把标志寄存器PSW的内容压栈; PSW的内容压栈 ●指令格式:PUSHF 指令格式: 执行操作: SP)- )-2 执行操作: SP ←(SP)-2; PSW低 SP ←(PSW低8位); SP+ PSW高 SP+1←(PSW高8位);
立即数 存 储 器 段寄存器 CS DS Eቤተ መጻሕፍቲ ባይዱ SS 通用寄存器 AX BP BX CX DX SP SI DI
例如: MOV 例如: MOV 注意
AX,1234H;立即数1234H AX,1234H;立即数1234H送AX 1234H送 AL,CL;通用寄存器CL中内容送AL AL,CL;通用寄存器CL中内容送AL CL中内容送
● 3.目标地址传送指令
(1)LEA有效地址送寄存器 (1)LEA有效地址送寄存器 ●指令功能:将源操作数的偏移(有效)地址传送给16位寄存器; 指令功能:将源操作数的偏移(有效)地址传送给16位寄存器 位寄存器; ●指令格式: LEA 指令格式: REG,SRC; REG,SRC; 执行操作: REG ←SRC; ←SRC; 执行操作: 源操作数的寻址方式为:存储器寻址 源操作数的寻址方式为: 目标操作数的寻址方式为:寄存器寻址(不包括段寄存器) 目标操作数的寻址方式为:寄存器寻址(不包括段寄存器)
电气自动化技术《电子教材--传送指令》
传送指令
1〕数据〔字节、字、双字、实数〕传送指令
数据传送指令把输入端〔IN〕指定的数据传送到输出端〔OUT〕,传送过程中的数据值保持不变。
数据传送指令按操作数的数据类型可分为字节传送〔MOVB〕、字传送〔MOVW〕、双字传送〔MOVD〕、实数传送〔MOVR〕指令,如表1所示。
表1数据传送指令
字节传送字传送双字传送实数传送
数据传送指令的使用如图1所示。
当I0.0闭合时,变量存储器VW100中的内容将传送到VW200中。
图1数据传送指令的使用
2〕数据块传送指令
数据块传送指令把输入端〔IN〕指定地址开始的N个连续字节、字、双字的内容传送到从输出端〔OUT〕指定地址开始的N 个连续字节、字、双字的存储单元中,传送过程中各存储单元的内容不变,N为1~255。
数据块传送指令按操作数的数据类型可分为字节块传送〔BMB〕、字块传送(BMW)、双字传送〔BMD〕指令,如表2所示。
它们均为无符号数操作。
表2 数据块传送指令
字节块传送字块传送双字块传送
3〕传送字节立即读、写指令
传送字节立即读指令BIR,读取输入端〔IN〕指定字节地址的物理输入点〔IB〕的值,并写入输出端〔OUT〕指定字节地址的存储单元中。
传送字节立即写指令BIW,将输入端〔IN〕指定字节地址的内容写入输出端〔OUT〕指定字节的物理输出点〔QB〕。
两种指令如表3所示,其操作数的数据类型为字节〔BYTE〕型。
表3 传送字节立即读、写指令
传送字节立即读传送字节立即写。
数据传送指令
数据传送指令1. 通⽤数据传送指令 MOV,PUSH,POP,XCHG,XLAT(1)MOV①MOV DS, 2000H ; //语法错误,不能⽤⽴即数给段寄存器赋值。
应该为:MOV AX, 2000MOV DS, AX② MOV WORD PTR[DI], 2000HPTR 是属性运算符,功能为修改操作数的类型。
WORD PTR 的作⽤是将操作数的类型设置为字类型。
③MOV [DI], 04AH ; //语法错误:源和⽬的操作数的类型都不确定,产⽣⼆异性。
因为[DI]代表的仅是⾸地址,不能确定它具体有多少个地址;⽽04AH也不能确定它前⾯有多少个0,占的字节数⾃然也不确定。
注意:① MOV 指令不影响标志寄存器的任何标志位②源和⽬的操作数必须等长,即同时为字节类型或字类型。
③不允许给 CS(代码段寄存器)赋值。
④ MOV 指令不能访问 IP 和 Flags(2)PUSH,POPPUSH 和 POP 是堆栈操作指令助记符。
堆栈是程序在内存中开辟的⼀个数据区,⽤以保存寄存器或存储器中暂时不⽤⽽⼜必须保存的数据。
程序中堆栈是⽤段定义语句在内存中定义的⼀个堆栈段,堆栈段的段基址存放在 SS 寄存器,段内偏移地址存放在 SP 寄存器中, SP 也常称为堆栈指针,它总是指向栈顶。
例如:设 SS=2000H,SP=102H,AX=623EH,执⾏下⾯指令后:PUSH AXAX 的数据 62H 存⼊ 20101H 单元,3EH 存⼊ 20100H 单元,SP=0100H注意:1. 堆栈指令的操作数必须是字类型,可以是 16 位的通⽤寄存器或段寄存器,也可以是两个连续的内存单元,可以采⽤任何寻址⽅式。
2. CS 不能作为出栈指令的操作数。
3. 堆栈指令不影响任何标志位。
2. 输⼊输出指令 IN,OUT8086CPU 对所有输⼊输出端⼝统⼀管理,提供了⼀个与内存储器地址空间分开的、完全独⽴的地址空间,I/O 端⼝的地址有 8 位和 16 位两种形式。
单片机指令大全
单片机指令大全单片机(Microcontroller)是一种集成了微处理器、存储器和输入/输出接口等功能的芯片,广泛应用于各种电子设备中。
在单片机的编程过程中,指令起到了至关重要的作用,指令的正确使用能够充分发挥单片机的性能和功能。
本文将详细介绍单片机常用的指令,并提供相应的格式和示例,以便读者更好地理解和运用。
一、数据传送指令数据传送指令用于从一个位置传送数据到另一个位置,常见的指令有MOV(Move)和LDR(Load Register)等。
1. MOV指令MOV指令用于将一个数据从一个位置复制到另一个位置。
格式如下:MOV 目的操作数,源操作数示例:MOV A, B ; 将寄存器B的值赋给寄存器AMOV R1, #10 ; 将立即数10赋给寄存器R12. LDR指令LDR指令用于将数据从存储器中加载到寄存器中。
格式如下:LDR 目的寄存器,来源地址示例:LDR R0, 0x1000 ; 将存储器地址0x1000处的数据加载到寄存器R0二、算术运算指令算术运算指令用于进行数值运算,如加法、减法、乘法和除法等。
常见的指令有ADD(Addition)和SUB(Subtraction)等。
1. ADD指令ADD指令用于进行加法运算,并将结果保存到指定的目标操作数中。
格式如下:ADD 目的操作数,源操作数示例:ADD A, B ; 将寄存器A和寄存器B的值相加,并将结果保存到寄存器A2. SUB指令SUB指令用于进行减法运算,并将结果保存到指定的目标操作数中。
格式如下:SUB 目的操作数,源操作数示例:SUB A, B ; 将寄存器A的值减去寄存器B的值,并将结果保存到寄存器A三、逻辑运算指令逻辑运算指令用于进行与、或、非、移位等逻辑操作。
常见的指令有AND(And)、OR(Or)和NOT(Not)等。
1. AND指令AND指令用于进行与运算,并将结果保存到指定的目标操作数中。
格式如下:AND 目的操作数,源操作数示例:AND A, B ; 将寄存器A和寄存器B的值进行与运算,并将结果保存到寄存器A2. OR指令OR指令用于进行或运算,并将结果保存到指定的目标操作数中。
数据传送指令.
说明:源操作数可以是寄存器或存储器操作数 必AX
执行前 AX 3125H 低地址 25 31 SP 52500H SP 524FEH 524FFH 52500H 进栈方向 AX 3125H 执行后
低地址
POP 出栈指令 格式:POP DST 操作: 16位指令: DST<--((SP)+1,(SP)) SP<--(SP)+2 32位指令: DST((ESP)+3,(ESP)+2,(ESP)+1,(ESP)) (ESP)(ESP)+4
MOVSX 带符号扩展传送指令 格式:MOVSX DST, SRC 操作:DST<--符号扩展(SRC)
MOVZX 带零扩展传送指 令 格式:MOVSX DST, SRC 操作:DST<--零扩展(SRC)
说明: 源操作数是8位或16位寄存器或存储器的内容 目的操作数必须是16位或32位寄存器
[例3-2-3] MOVSX指令示例 MOVSX EAX, CL 设(CL)=0ABH, 执行后 (EAX)=0FFFFFFABH 负号扩展 若(CL)=57H, 执行后 (EAX)=00000057H 正号扩展
MOV指令注意事项: (1)两个操作数长度必须一致 MOV AL, BX ;不合法 例外:源是立即数,小于目的操作数时,高位按 符号位扩展 MOV AX, 0B4H 执行后,(AX)=0FFB4H (2)不允许用立即数为段寄存器赋值 例:MOV ES, 10A0H ;不合法
(3)不允许两个操作数均是存储器操作数 MOV X, Y ;不合法 可以通过一个寄存器传送: MOV AX, Y MOV X, AX (4)不允许两个操作数均为段寄存器 MOV ES, DS ;不合法
数据传送指令
数据传送指令3.数据传送指令将数据从⼀个位置复制到另⼀个位置的指令。
最简单形式的数据传送指令——MOV类指令。
指令格式指令功能效果movb S,D传送⼀个字节(8位)S->Dmovw S,D传送⼀个字(16位)S->Dmovl S,D传送双字(32位)S->Dmovq S,D传送四字(32位扩展为64位)S->Dmovabsq I,R传送绝对的四字(64位)I->R源操作数可以为以下类型⽴即数,例如$0x100寄存器,例如%bp存储器,例如(%rdi,%rcx)⽬的操作数可为寄存器或存储器。
x86-64限制:传送指令源操作数及⽬的操作数不能都指向内存位置。
movabsq能够以任何64位数(⽴即数、寄存器、存储器)作为源操作数,但只能以寄存器作为⽬的操作数。
MOVZ类指令MOVZ类指令将较⼩的源值复制到较⼤的⽬的中去,将⽬的中剩余字节填充为0零扩展,格式为movz#&(#为源操作数的⼤⼩,&为⽬的操作数的⼤⼩):movzbwmovzblmovzbqmovzwlmovzwq注:⽆movzlq指令,movzlq可利⽤以寄存器位⽬的的movl实现(因为movl会将寄存器⾼位四字节置零)MOVS类指令MOVS类指令将较⼩的源值复制到较⼤的⽬的中去,将源操作的最⾼为复制⽤于填充⽬的剩余字节,即传送符号扩展的字节符号扩展,格式为movs#&(#为源操作数的⼤⼩,&为⽬的操作数的⼤⼩):movsbwmovsblmovsbqmovswlmovswqmovslqcltq 把%eax符号扩展到%rax(eax为rax寄存器的低32位)类似于movslq %eax,%rax程序栈程序栈是⼀种数据结构,具有“后进先出(Last In First Out)”的特性。
在x86-64中,程序栈存放在内存中的某个区域,栈顶元素的地址是所有栈中元素地址最低的,栈指针%rsp保存栈顶元素的地址。
汇编语言指令及几个例题
• • • • • •
位操作指令 NOT指令(按位取反) AND指令 XOR指令 OR指令 TEST指令 其中AND指令主要用于对某位清零。如清零AL中的高 四位,低四位保持不变。正确指令为AND AL,0FH XOR指令主要用于将某位变反(与1异或),与0异或 保持不变;如将AL的高四位取反,低四位不变。正确的 指令为XOR AL,F0H。 OR指令主要用于将某位置一。如将AL中高四位置一, 低四位不变。正确指令为OR AL,F0H TEST指令主要用于检测某位是否为1。 如TEST AL,01H如果AL是奇数那么ZF=0
• 循环移位指令(略) 至于第二章中其他指令基本没有什么特别注意的地方,只 需按照书上的介绍使用就行了。
• • • • •
例题选讲: 1.设(SP)=100H,(AX)=0FFFFH STC //置CF=1 PUSH AX //将AX压入堆栈,SP=SP-2 ADC AX,0 //AX=AX+0+CF(CF=1) PUSH BX // 将BX压入堆栈,SP=SP-2 • POP BX //将SP所指向的内容弹出送到 BX中,SP=SP+2 • 上述程序执行后BX=0;SP=0FEH
• 通过LEA AX,DATA • MOV DS,AX • 就可以将DATA的地址传送到DS的段基址中 • 同时,可以用SEG来获得起始地址,用OFFSET来获取偏 移地址。例如: • MOV SI,OFFSET DI • MOV BX,SEG DATA
• c:二进制乘除法指令 • 无符号乘法指令MUL,无符号除法指令DIV • 如果是字节型乘法(一个字节等于8位,如AL,BL等)那 么乘积放在AX中;如果是字型(一个字为两个字节)乘 法那么乘积在DS:AX中 • 无符号除法是如果是字节型除法那么商在AL中,余 数在AH中;如果是字型除法那么商在AX中,余数在DX中; • 特别注意的是,乘除法指令不能直接与立即数想乘除。 例如要实现25乘以20的无符号乘法功能 • MOV AL,25 • MOV 20 • 上面的第二条指令时错误的。正确的语句应该是:
数据传送指令
外部程序存储器的字节传送指令
指令格式
MOVC A,@A+DPTR MOVC A,@A+PC (A) (PC) (A)
指令功能
((DPTR) + (A)) (PC) + 1 ((PC) + (A))
机器码
10010011 10000011
周期
2 2
DPTR:表头地址(基址 ,A:偏移量 变址 ; :表头地址 基址 基址), :偏移量(变址 变址);
MOV MOV MOV R0,#78H @R0,#55H P1,@R0
R0 = 78H(地址值 地址值) 地址值 ((R0)) = (78H) = 55H (90H) = ((R0)) = 55H
执行过程: 执行过程:
程序存储器 操作码 10000110 直接地址 10010000 SFR 90H
01010101
范例
将直接地址单元20H中内容送入直接地址单元90H中。 中内容送入直接地址单元 将直接地址单元 中内容送入直接地址单元 中
MOV MOV 20H,#0AAH P1,20H
(20H) = AAH (90H) = (20H) = AAH 原地跳转
SJMP 0006H
执行过程: 执行过程:
程序存储器 操作码 10000101 direct1 00100000 direct2 10010000 片内RAM 片内 20H 10101010 SFR 90H 10101010
DPTR
0040H
取得表头 表头地址加 地址偏移量
0040H 0041H 0042H 0043H
0AAH
ACC
取得值
外部程序存储器的字节传送指令
指令格式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
执行结果为: 执行结果为:(DPTR)=0203H,(30H)=FFH, , , (0203H)=(A)=0FH。 。
例如:已知外部RAM的20H单元中有一个数x和内部 单元中有一个数x 例如:已知外部RAM的20H单元中有一个数 RAM的20H单元中有一个数 RAM的20H单元中有一个数y,试编出可以使它们相互 单元中有一个数y 交换的程序
第六讲
一、授课内容:第三章 80C51单片机的指 80C51单片机的指 授课内容: 令系统 二、授课目的:掌握数据传输指令基本语句 授课目的: 和应用。 和应用。 重点/难点: 三、重点/难点: 数据传输指令的基本应用
5、指令系统之数据传送类指令 指令系统之数据传送类指令
数据传送类指令共29条 它是指令系统中最活跃、 数据传送类指令共 条, 它是指令系统中最活跃、 使用 最多的一类指令。 一般的操作是把源操作数传送到目的操作数, 最多的一类指令。 一般的操作是把源操作数传送到目的操作数 即指令执行后目的操作数改为源操作数, 而源操作数保持不变。 即指令执行后目的操作数改为源操作数 而源操作数保持不变。 若要求在进行数据传送时, 不丢失目的操作数, 若要求在进行数据传送时 不丢失目的操作数 则可以用交换型 传送指令。 传送指令。
PUSH direct ;
(SP)←(SP)+ 1 ((SP))←direct
修改指针,使其指向栈顶上的一个存数单元 把直接地址单元的内容压入SP所指单元内
(direct)←((SP)+ 1) 把栈顶的数据弹出到直接寻址单元中去 POP direct ; (SP)←(SP)-1 修改指针,指向新栈顶
(1)一般传送指令 ) 该类指令的功能是实现数在片内RAM单元之间、寄存器 单元之间、 该类指令的功能是实现数在片内 单元之间 之间、寄存器与 单元之间的传送。 之间、寄存器与RAM单元之间的传送。所有指令具有统一的 单元之间的传送 格式,其格式如下: 格式,其格式如下: MOV <目的操作数 ,<源操作数 ;目的操作数单元 源 目的操作数>, 源操作数 源操作数>;目的操作数单元←源 目的操作数 操作数(或单元 操作数 或单元) 或单元 操作码助记符都是"MOV",目的操作数和源操作数不同 , 操作码助记符都是 寻址方式的组合就派生出该类的全部指令。因此, 寻址方式的组合就派生出该类的全部指令。因此,记忆这类指 令的关键在于掌握两个操作数的各种寻址方式的组合关系。 令的关键在于掌握两个操作数的各种寻址方式的组合关系。
(3)片外数据存储器数据传送指令
80C51单片机 单片机CPU对片外扩展的数据存储器 对片外扩展的数据存储器RAM或I/O口进 单片机 对片外扩展的数据存储器 或 口进 行数据传送,必须采用寄存器间接寻址的方法,通过累加器 来 行数据传送,必须采用寄存器间接寻址的方法,通过累加器A来 完成。这类指令共有以下4条单字节指令, 完成。这类指令共有以下4条单字节指令,指令操作码助记符都 为MOVX。 。 指令助记符 MOVX A,@DPTR , MOVX A,@Ri , MOVX @DPTR ,A MOVX @Ri,A , 操作功能注释 ; (A)←((DPTR)) ; (A)←((Ri)) ; ((DPTR))←(A) ; ((H MOVC A , @A+DPTR 思考:用查表方法把累加器中的十六进制数转换为 思考:用查表方法把累加器中的十六进制数转换为ASCII码, 码 并送回累加器中。 并送回累加器中。
6、堆栈操作指令
堆栈操作有进栈和出栈,即压入和弹出数据, 堆栈操作有进栈和出栈,即压入和弹出数据,常用于保存 或恢复现场。进栈指令用于保存片内 单元(低 字节 字节)或特 或恢复现场。进栈指令用于保存片内RAM单元 低128字节 或特 单元 殊功能寄存器SFR的内容;出栈指令用于恢复片内RAM单元 低 的内容;出栈指令用于恢复片内 单元(低 殊功能寄存器 的内容 单元 128字节 或特殊功能寄存器 字节)或特殊功能寄存器 的内容。 字节 或特殊功能寄存器SFR的内容。 的内容 该类指令共有如下两条指令: 该类指令共有如下两条指令:
设外部RAM(0203H)= FFH,分析以下指令执行后的结果。 例如 设外部 ,分析以下指令执行后的结果。 MOV DPTR,#0203H , MOVX A,@DPTR , MOV 30H,A , MOV A,#0FH , MOVX @DPTR,A , ;(DPTR)←0203H ;(A)←((DPTR)) ;(30H)←(A) ;(A)←0FH ;((DPTR))←(A)
第二条指令是以DPTR作为基址寄存器 累加器 的内容 作为基址寄存器, 累加器A的内容 第二条指令是以 作为基址寄存器 作为无符号数与DPTR内容相加 得到一个 16 位的地址 并 内容相加, 位的地址, 作为无符号数与 内容相加 把该地址指出的程序存储器单元的内容送到累加器A。 把该地址指出的程序存储器单元的内容送到累加器 。这条 指令的执行结果只与指针DPTR及累加器 的内容有关 与 及累加器A的内容有关 指令的执行结果只与指针 及累加器 的内容有关, 该指令存放的地址无关, 因此, 该指令存放的地址无关 因此 表格的大小和位置可以在 64 KB程序存储器中任意安排 并且一个表格可以为各个程序 程序存储器中任意安排, 程序存储器中任意安排 块所共用。 块所共用。
注意:堆栈操作指令是直接寻址指令,在书写格式中需要注意。 注意:堆栈操作指令是直接寻址指令,在书写格式中需要注意。 例如下列指令中,左列的是正确的,右列是错误的。 例如下列指令中,左列的是正确的,右列是错误的。 正确指令 PUSH ACC PUSH 00H POP ACC POP 00H 错误指令 PUSH A PUSH R0 POP A POP R0
(2)数据交换指令
数据传送指令一般都是将操作数自源地址单元传送到目的 地址单元,指令执行后,源地址单元的操作数不变, 地址单元,指令执行后,源地址单元的操作数不变,目的地址 单元的操作数则修改为源地址单元的操作数。交换指令数据作 单元的操作数则修改为源地址单元的操作数。 双向传送,涉及传送的双方互为源地址、目的地址, 双向传送,涉及传送的双方互为源地址、目的地址,指令执行 后每方的操作数都修改为另一方的操作数。因此, 后每方的操作数都修改为另一方的操作数。因此,两操作数均 未冲掉、丢失。数据交换指令共有如下 条指令 条指令: 未冲掉、丢失。数据交换指令共有如下4条指令:
MOV
R1 ,
#20H @R1 @R1
;
R1
20H x 20H , A 20H y
MOVX A , XCH A ,
; A ; ; x y
MOVX @R1 , A
例如:已知50H中有一个 --9的数, 例如:已知50H中有一个0--9的数,请编程把它变为相 中有一个0 应ASCII码的程序 ASCII码的程序
MOV R0 ,#50H MOV A , #30H XCHD A ,@R0 MOV @R0 , A
(4)访问程序存储器的数据传送指令
访问程序存储器的数据传送指令又称作查表指令, 访问程序存储器的数据传送指令又称作查表指令,采用基 址寄存器加变址寄存器间接寻址方式, 址寄存器加变址寄存器间接寻址方式,把程序存储器中存放的 表格数据读出,传送到累加器 。共有如下两条单字节指令, 表格数据读出,传送到累加器A。共有如下两条单字节指令,指 令操作码助记符为MOVC。 。 令操作码助记符为 指令助记符 MOVC A, @A+DPTR , MOVC A, @A+PC , 操作功能注释 ;(A)←((A)+(DPTR)) ;(PC)←(PC)+1,(A)←((A)+(PC)) ,
例如:已知累加器A中有一个0-9范围内的数,用查 例如:已知累加器A中有一个0 范围内的数, 表指令编出能查找出该数的平方值的程序
(1)采用 作为基址寄存器 )采用PC作为基址寄存器 为了便于理解,我们把如下查表程序定位在 为了便于理解,我们把如下查表程序定位在1FFBH ORG 1FFBH 1FFDH 1FFEH 2000H 2001H 2002H … 2009H DB 81 END 1FFBH
例如: 设(R0) = 30H,30H = 4AH,(A) = 28H,则 例如: , , , 执行XCH A, @R0后,结果为(A) = 4AH,(30H) = 28H。 执行 , 后 结果为 , 。 执行XCHD A,@R0后,结果为(A) = 2AH,(30H) = 48H。 执行 , 后 结果为 , 。 执行SWAP A后,结果为(A) = 82H。 执行 后 结果为 。
MOVC A, @A+PC MOVC A, @A+DPTR 这是两条很有用的查表指令, 这是两条很有用的查表指令 可用来查找存放在外部程序存 储器中的常数表格。第一条指令是以 作为基址寄存器 的内 作为基址寄存器, 储器中的常数表格。第一条指令是以PC作为基址寄存器 A的内 容作为无符号数和 PC的内容 ( 下一条指令的起始地址)相加后 的内容 下一条指令的起始地址) 得到一个 16 位的地址 并将该地址指出的程序存储器单元的内容 位的地址, 送到累加器A。 这条指令的优点是不改变特殊功能寄存器和PC 送到累加器 。 这条指令的优点是不改变特殊功能寄存器和 的状态, 只要根据A的内容就可以取出表格中的常数 的内容就可以取出表格中的常数。 的状态 只要根据 的内容就可以取出表格中的常数。缺点是表 个单元之中, 格只能放在该条查表指令后面的 256 个单元之中 表格的大小受 到限制, 而且表格只能被一段程序所利用. 到限制 而且表格只能被一段程序所利用
表1 访问片内RAM的一般传送指令表 访问片内RAM的一般传送指令表
例题
1、已知:R1=32H、(30H)=AAH、(31H)=BBH、(32H)=CCH, 、已知: 、 、 、 试问如下指令执行后累加器A、 中的内容是什么? 试问如下指令执行后累加器 、50H、R6、32H中的内容是什么? 、 中的内容是什么 MOV A,30H MOV 50H,A MOV R6,31H MOV @R1,30H