5.3.数据传送类指令

合集下载

数据传送类指令

数据传送类指令

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)立即数不能作为目的操 作数。

数据传送类指令

数据传送类指令
微机原理与接口技术
数据传送类指令
1. 通用数据传送
2. 堆栈操作
3. 地址传送
4. 标志位传送
5. I/O数据传送
传送类指令执行后对标志位都没有影响(除SAHF、 POPF和POPFD外)。
-.通用数据传送指令
指令书写格式
指令功能
MOV REG/MEM/SEG,REG/MEM/SEG/IMM XCHG REG/MEM,REG/MEM XLAT BSWAP REG32
2009年6月2日星期二
8
PUSH/POP指令
PUSH指令:①SP-N→SP; ②16/32/64位的源操作数压入堆栈
源操作数可以是通用寄存器、段寄存器和存储器,N为源操作数的 字节数2或4或8 。 POP指令:①从栈顶弹出操作数到目标操作数;
② SP+N→SP 目标操作数可以是通用寄存器、段寄存器(CS除外)或存储器。
注意:
①不能在两个存储单元之间直接交换数据;
②段寄存器和立即数不能作为操作数。
2009年6月2日星期二
5
(3)查表转换指令XLAT
指令格式:XLAT 功能:完成一个字节的查表转换,将数据段中偏移地址为
BX/ebx/RBX与AL寄存器之和的存储单元的内容送入AL寄存器, 即:[BX+AL]→AL。 例:若(BX)=0100H,(AL)=05H,执行XLAT指令后,(AL)=2CH。 注意:由于AL只有8位,所以表的长度不能超过256字节。
2009年6月2日星期二
10
(3)PUSHAD/POPAD
386新增指令 PUSHAD指令将所有扩展通用寄存器的内容
压入堆栈,压入的顺序是:EAX、ECX、 EDX、EBX、ESP、EBP、ESI、EDI; POPAD弹出的顺序与PUSHAD压入的相反 (弹出到ESP的值被丢弃)。

MCS-51指令系统

MCS-51指令系统
18
4、控制转移类指令(二)
无条件转移:(LJMP,AJMP,SJMP,JMP—4条) LJMP addr16 长跳转指令
——可在64K范围内跳转 AJMP addr11 绝对跳转指令
——可在指令所在的2K范围内跳转 SJMP rel 相对跳转指令
——可在当前PC-128与+127范围内跳转 JMP @A+DPTR 间接长跳转指令
1
累加器清零/取反操作 (CLR,CPL—2条)
CLR A —对累加器清零
1 Byte 1 Tm
CPL A ——对累加器按位取非 1 Byte 1 Tm 15
3、逻辑运算及移位类指令(三)
逻辑运算指令在程序中的应用(下面的例子认为Acc 的内容为9AH)
逻辑与ANL运算用于对某些位进行清0或者保留: 例: ANL A, #0FH; 则(A) = 0AH
位清零/置位指令(4条): CLR bit(或C) —— (bit或 C)“0” SETB bit(或C) —— (bit或 C)“1”
位逻辑与/或/非指令(6条): ANL C,bit(或/bit) ORL C,bit(或/bit) CPL bit (或 C) 注: “/bit”表示对bit位先取反然后再参加运算
带借位减法(SUBB):(A) ← (A)- (Cy)- (第二操作数)
10
2、算术运算类指令(三)
加1/减1操作: (INC,DEC—9条) INC, DEC与用加/减法指令做加1/减1 操作不 同之处在于INC、DEC不影响标志位。
单字节乘/除运算: (MUL,DIV—2条) 两个单字节数的乘/除法运算只在A与B之间 进行。 MUL AB: (A)与(B)相乘, 积为16位数,

三菱F 系列PLC的功能指令

三菱F 系列PLC的功能指令

[D·]
2.指令说明
3 传送指令 2
图5.25为MOV的示例梯形图,对应的指令为: MOV D10 D20。 如X010接通,将D10的内容传送到D20中去,传送结果
5.3.3 传送指令 3
D10内容保持不变,D20中内容被D10内容转化为二进 制后取代。 可以将D10中的内容通过多条传送指令传送到多个目标 单元中去,传送结果D10的内容还是不变,也就是说源 存储器是“取之不尽”的,而目存储器则是“后入为主 ”。 MOV指令的32位脉冲方式: (D)MOV(P) [S·] [D·]。 5.3.4 移位传送指令
5.3.1 比较指令 2
比较指令CMP可对两个数进行代数减法操作,将源操 作数[S1·]和[S2·]的数据进行比较,结果送到目标操作 数[D·]中,再将比较结果写入指定的相邻三个标志软组 件中。指令中所有源数据均作为二进制数处理。 图5.23所示为比较指令CMP的梯形图,对应的指令为 :CMP Kl00 D10 M0。 在图5.23中,如X010接通, 则将执行比较操作,即将 100减去D10中的内容,再 将比较结果写入相邻三个 标志软组件M0~M2中。标 志位操作规则是:
BCD码变换指令能够转换的最大数据范围就会出错, 16位操作时为0~9999;32位操作时为0~99999999 。BCD码变换指令的32位脉冲操作格式为: (D)BCD(P)[S·] [D·]。
5.3.10 BIN变换指令
1.指令用法
BIN变换指令: FNC19 BIN [S·] [D·] [S·]为被转换的软组件,[D·]为目软组件。 功能:将指定软组件中的BCD码转换成二进制数并送 到指定的目软组件中去。此指令作用正好与BCD变换 指令相反,用于将软组件中的BCD码转换成二进制数 2.指令说明 BIN变换指令概要如表5.19。

数据传送类指令

数据传送类指令

【例】: 设内部RAM(30H)=40H,(40H)=10H,(10H)=00H,(P1)=0CAH,分析以 下程序执行后,各单元、寄存器、P2口的内容。
MOV R0,#30H
;R0←30H
MOV A,@R0
;A←((R0))
MOV R1,A
;R1←(A)
MOV B,@R1
;B←((R1))
MOV @R1,P1
;A←00H
MOV @DPTR,A
;((DPTR))←(A)
程序段执行后,(DPTR)=2023H,(30H)=0FH,(A)=00H,(2023H)=00H,表示 把片外RAM 2023H单元的内容0FH送到内部RAM的30H单元,然后把外部RAM 2023H单元和累加器A清0。
若采用R0和R1间接寻址,必须把高8位地址先送到P2口,上述程序段将改为:
单片机原理与应用
助记符有:MOV,MOVX,MOVC,XCH,XCHD,PUSH,POP,SWAP。 格式:MOV [目的操作数],[源操作数] 功能:目的操作数← 源操作数中的数据 源操作数可以是:A、Rn、direct、@Ri、#data 目的操作数可以是:A、Rn、direct、@Ri
注意:一般不影响标志,只有一种堆栈操作可能直接修改程序状态字 PSW。另外,如果目的操作数为ACC,将会影响奇偶标志P。
MOV A,@Ri
A←((Ri)) √ × × × Ri内容指向的地址单元中的内容送到累加器A
【例】: 设外部RAM(2023H)=0FH,执行以下程序段:
MOV DPTR,#2023H ;DPTR←2023H
MOVX A,@DPTR
;A←((DPTR))
MOV 30H,A
;30H←(A)

51指令集

51指令集

1、数据传送类指令1. MOV:MOV (目的字节),(源字节);2. MOVC:和MOV用法基本相同,主要用于ROM查表,也就是基址变址中。

3. MOVX:和MOV用法基本相同,主要读写片外RAM中,也就是间接寻址,如MOVX A,@Ri 。

4. PUSH:主要用于堆栈操作中的压栈操作,例如:(SP)=07H,(40H)= 88H,执行指令PUSH 40H后,(SP)= 08H)(08H)= 88H。

其中,SP为堆栈指针,压栈之后堆栈指针加一。

5. POP:主要用于堆栈操作中的弹栈操作,(SP)= 5FH,(5FH)= 90H,执行指令POP 70H后,(70H)= 90H,(SP)= 5EH,弹栈后堆栈指针减一。

6. XCH:主要用于两个数据之间交换,例如:(R0)= 80H,(A)= 20H。

执行指令XCH A,R0后,(A)= 80H,(R0)= 20H。

7. XCHD:这个指令的主要功能是间址操作数的低半字节与A的低半字节内容相互交换。

例如:(A)= 20H,(R0)= 30H,(30H)= 67H。

执行XCHD A,@R0后(A)= 27,(30H)= 60H.8. SWAP:这个指令的功能是累加器的高、低四位进行互换。

例如:(A)= 23H,执行SWAP A指令之后(A)= 32H。

2、算术运算类指令1) 加法a) 不带进位加法影响程序状态字标志位PSW中的CY(CY是进位标志位,即和的D7为有进位时(CY)=1,否则,(CY)= 0)、AC(AC为辅助进位标志位,当D3为有进位时为1,否则为0)、OV(和的D7和D6为只有一个进位时为1,否则为0)和P(当累加器ACC中的1为奇数时为1,否则为0)例如:(A)=84H,(30H)=8DH,执行指令ADD A,30H结果A =11Hb) 带进位加法影响的程序状态字标志位与不带进位的加法相同。

表达形式为ADDCA,Rnc) 增一例如:INC A A的数值自加一d) 十进制调整当累加器A中的低4位数出现了非BCD码或第四位产生进位时,应在第四位加六调整,以产生第四位正确的BCD码结果。

8086CPU中的数据传送类指令

8086CPU中的数据传送类指令

8086CPU 中的数据传送类指令数据传送类指令注意点1. 除 SAHF 、POPF 指令外,其余传送类指令CPU 执⾏后,对6个状态标志均⽆影响。

也就是说,除 SAHF 、POPF 指令外,CPU 只是做了数据传送,并没有进⾏数据运算,对状态标志位⽆影响。

2. 语法规则1)⽴即数只能做源操作数2)类型⼀致3)类型明确4)当ES 、DS 、SS 做⽬的操作数时,源操作数不能是⽴即数。

5)CS 、IP 不能做⽬的操作数6)两存储器单元之间不能直接操作数据传送类指令通⽤数据传送指令-MOVmov 指令的格式为取有效地址指令-LEALEA 指令的格式为REG_16表⽰⼀个16位寄存器,理论上只要是16位即可,但是因为存放有效地址,所以最好是 BX 、BP 、SI 、DIMEM 是5种存储器寻址⽅式之⼀指明的⼀个存储器单元。

例如等同于功能⼀样。

取地址指针指令-LDS 、LES这两个指令是将双字变量MEM 内容中的⾼16位送⼊DS/ES ,低16位送⼊指定的REG16中。

这⾥REG16不允许为段寄存器。

不常⽤,了解。

以LDS 为例,格式为REG_16表⽰⼀个16位寄存器MEM 是5种存储器寻址⽅式之⼀指明的⼀个存储器单元例如得到地址指针,就可以很容易取数据MOV DST ,SRCLEA REG_16,MEMLEA BX ,data1 ;data1是变量,直接寻址找到这个存储单元把有效地址送给BXMOV BX ,OFFSET data1LDS REG_16,MEMTABLE DB 10H ,20H...LDS BX ,TABLE ;TABLE 的段地址->(DS ),TABLE 的偏移地址->(BX)Processing math: 100%MOV DX,[BX]实际中LEA⽤的⽐较多。

标志传送指令-LAHF、SAHF指令LAHF(load AH register from flags)可以将PSW寄存器中的低8位传送到AH中,指令SAHF(store AH register from flags)可以将AH 的内容传送到PSW寄存器中的低8位。

关于第七讲 数据传送类指令

关于第七讲 数据传送类指令

第七讲数据传送类指令教学方法:讲授法教学目的:1、熟悉数据传送的三种方式及特点2、熟悉ROM数据传送(查表)3、熟练掌握RAM数据传送教学重点、难点:堆栈操作指令、查表指令主要教学内容(提纲):一、数据传送的三种方式二、ROM数据传送三、RAM数据传送复习:1、MCS-51系列指令格式?2、六种寻址方式分别是什么?讲授要点§3-2 数据传送类指令一、内部RAM数据传送类1、一般数据传送指令回忆前述操作数描述符:A,direct,Rn,@Ri,#data,DPTR等。

经排列组合可写出下列指令:MOV A,Rn ;(A)(Rn)以下类似。

MOV A,directMOV A,@RiMOV A,#dataMOV Rn,AMOV Rn,directMOV Rn,#dataMOV direct,AMOV direct,RnMOV direct,directMOV direct,@RiMOV direct,#dataMOV @Ri,AMOV @Ri, directMOV @Ri,#dataMOV DPTR,#data16 ;唯一的16位数据传送指令。

上述指令不影响任何标志位,但PSW的P位除外。

注意:MOV Rn,RnMOV @Ri, @RiMOV Rn, @RiMOV #data, A等指令是非法指令。

2、栈操作指令PUSH directPOP direct不影响任何标志位。

PUSH direct 指令执行中,机器自动进行两步操作:(1)(SP)(SP)+ 1(2)((SP))(direct)例1、设(SP)= 09H,(DPTR)= 0123H,分析:执行PUSH DPLPUSH DPH后,各单元中的内容。

POP direct 指令执行中,机器也自动进行两步操作:(1)(direct)((SP))(2)(SP)(SP)-1例2、设(SP)= 0BH,(0BH)= 01H,(0AH)= 23H执行POP DPHPOP DPL后,各单元中的内容。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

;写入R0到PRIMASK
MSR MSP, R0
;写入R0的值到主堆栈指针
Байду номын сангаас
MSR PSP, R0
;写入R0的值到进程堆栈
指针
8
数据传送类指令
立即数到寄存器传送数据
MOV R0, #0x12; 立即数0x12传送到R0低16位,高16位清零 MOV R1, #’A’; 字符A的ASCII码传送到R1低16位,高16位清0 MOVW R1, #0x1234; 立即数1234H传送到R1低16位,高16位清0 MOVT R1, #0x5678;立即数5678H传送到R1高16位,低16位不变 将0x12345678送到R1,除了用上面2条指令外,还可以用前面学过的伪指 令 LDR R1, =0x12345678
3
数据传送类指令
寄存器与存储器间传送数据
存储器到寄存器传送
LDRx 指令、LDMxy指令 LDRx 指令的x可以是B(byte)、H(half word)、D(Double word) 或者省略(word)
示例 LDRB Rd,[Rn,#offset] LDRH Rd,[Rn,#offset] LDR Rd, [Rn, #offset] LDRD Rd1, Rd2, [Rn, #offset]
LDRB R0,[R1,#8] ;将存储器地址为R1+8的字节数据读入寄存器R0,并将
R0的高
24位清零。
LDRH R0,[R1,R2] ;将存储器地址为R1+R2的半字数据读入寄存器R0,并将
R0的
高16位清零
LDR R0,[R1,R2] !;将存储器地址为R1+R2的字数据读入寄存器R0,并将新
6
数据传送类指令
寄存器与存储器间传送数据
寄存器到存储器传送
STRB R0,[R1,#8] ;将寄存器R0中的字节数据写入以R1+8为地址的存
储器中。
STRH R0,[R1] ;将寄存器R0中的半字数据写入以R1为地址的存储器中。
STR R0,[R1],#8 ;将R0中的字数据写入以R1为地址的存储器中,并
功能描述 从地址Rn+offset处读取一个字节送到Rd 从地址Rn+offset处读取一个半字送到Rd 从地址Rn+offset处读取一个字送到Rd 从地址Rn+offset处读取一个双字(64位整数)送到Rd1 (低32位)和Rd2(高32位)
4
数据传送类指令
寄存器与存储器间传送数据
存储器到寄存器传送
9
数据传送类指令 问题与思考
如何实现存储器之间的数据传送,也就是把存储器中一个区域的数据块 传送到另一个区域
9
Thanks
感谢
谢谢,精品课件
资料搜集
ARM Cortex-M3 的STM32系列 数据传送类指令
数据传送类指令 数据传送类指令
两个寄存器间传送数据 寄存器与存储器间传送数据 寄存器与特殊功能寄存器间传送数据 把一个立即数加载到寄存器
2
数据传送类指令 两个寄存器间传送数据
MOV 指令、MVN指令 MOV R8, R3; R8 = R3 MVN R8, R3; R8 = -R3(按位取反) MOV PC, LR MOVEQ R0, R1
将新地址
R1+8写入R1
STRD R1, R2, [R3, #8];把R1(低32位)和R2(高32位)表达的双字存储
到地址
R3+8处
STMFD [SP]!, {R0};意思是:把R0保存到堆栈(sp指向的地址)中
7
数据传送类指令
寄存器与特殊功能寄存器间传送数据
特殊功能寄存器到通用寄存器
MRS R0, BASEPRI MRS R0, FAULTMASK MRS R0, PRIMASK MRS R0, MSP MRS R0, PSP
示例 STRB Rd, [Rn, #offset] STRH Rd, [Rn, #offset] STR Rd, [Rn, #offset] STRD Rd1, Rd2, [Rn, #offset]
功能描述 把Rd中的低字节存储到地址Rn+offset处 把Rd中的低半字存储到地址Rn+offset处 把Rd中的字存储到地址Rn+offset处 把Rd1(低32位)和Rd2(高32位)表达的双字存储到地 址Rn+offset处
地址
R1+R2写入R1
LDRD R1, R2, [R3, #8] ;从地址R3+8处读取一个双字(64位整数)送到R1
(低32位)
和R2(高32位)
LDMFD SP! , {R0, R1, R2};批量操作,从左到右运行,即出栈
5
数据传送类指令
寄存器与存储器间传送数据 寄存器到存储器传送
STRx 指令、STMxy指令
;读取BASEPRI到R0 ;读取FAULTMASK到R0
;读取PRIMASK到R0 ;读取主堆栈指针到 R0 ;读取进程堆栈指针到 R0
通用寄存器到特殊功能寄存器
MSR BASEPRI, R0
;写入R0到BASEPRI
MSR FAULTMASK, R0 ;写入R0到FAULTMASK
MSR PRIMASK, R0
相关文档
最新文档