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. 引言汇编语言是一种基于计算机硬件体系结构的低级语言。

它用于编写与硬件交互的程序,并且具有直接访问计算机底层硬件的能力。

汇编指令是汇编语言中的基本操作指令,用于执行各种计算机操作,如数据传输、算术运算和逻辑运算等。

本文将为您介绍一些常见的汇编指令。

2. 数据传输指令数据传输指令用于在寄存器之间或内存和寄存器之间传输数据。

2.1 MOV - 数据传送指令mov是最常见的数据传送指令之一。

它用于将数据从一个源操作数传送到一个目的操作数。

mov destination, source其中,destination是目的操作数,source是源操作数。

这两个操作数可以是寄存器、内存地址或立即数。

2.2 LEA - 加载有效地址指令lea指令用于加载一个有效地址到一个目的操作数。

lea destination, source其中,destination是目的操作数,通常为一个寄存器,source是一个内存地址。

3. 算术运算指令算术运算指令用于执行加法、减法、乘法和除法等算术运算。

3.1 ADD - 加法指令add指令用于将两个操作数相加,并将结果存储在目的操作数中。

add destination, source其中,destination是目的操作数,source是源操作数。

这两个操作数可以是寄存器或内存地址。

3.2 SUB - 减法指令sub指令用于将第二个操作数从第一个操作数中减去,并将结果存储在目的操作数中。

sub destination, source其中,destination是目的操作数,source是源操作数。

这两个操作数可以是寄存器或内存地址。

3.3 MUL - 乘法指令mul指令用于将两个操作数相乘,并将结果存储在目的操作数中。

其中,destination是目的操作数,source是源操作数。

这两个操作数可以是寄存器或内存地址。

3.4 DIV - 除法指令div指令用于将目的操作数除以源操作数,并将商存储在目的操作数中,余数存储在另一个寄存器中。

MCS-51单片机的指令

MCS-51单片机的指令

MCS-51单⽚机的指令MCS-51单⽚机的指令⼀.数据传送类指令(29条).1 通⽤传送指令(16条)格式:MOV ⽬的操作数,源操作数功能:把第⼆操作数指定的字节内容传送到第⼀操作数指定的单元中。

不影响源操作数内容,不影响别的寄存器和标志。

根据⽬的操作数的不同,通⽤传送指令⼜分为以下⼏种类型:1.1 以累加器A为⽬的操作数的传送类指令(4条)指令助记符及功能说明如下:⽬的操作数源操作数功能说明源操作数寻址⽅式MO V A, direct ;(A)←(direct)直接寻址MO V A, @Ri ;(A)←((Ri))寄存器间接寻址MO V A, Rn ;(A)←(Rn)寄存器寻址MO A, #data ;(A)←data ⽴即寻址V这类指令的功能是将源操作数送到⽬的操作数A中。

指令执⾏后的结果:除了奇偶标志P始终跟踪A中数据的奇偶性外,不影响PSW中的其他标志位。

1.2 以Rn为⽬的操作数的传送类指令(3条)指令助记符及功能说明如下:⽬的操作数源操作数功能说明源操作数寻址⽅式MOVRn, A ;(Rn)←(A) 寄存器寻址MO V Rn, direct ;(Rn)←(direct)其中,Rn是R0,…,R7中的任意⼀个。

例1 若(A)=20H,则执⾏指令MOV R3, A后,(R3)=20H。

注意:Rn寄存器之间不能直接传送数据。

如指令“MOV R1, R7”是错误的。

该类指令执⾏后,不影响PSW中的标志位。

1.3. 以直接地址directX为⽬的操作数的传送类指令(5条)指令助记符及功能说明如下:⽬的操作数源操作数功能说明源操作数寻址⽅式M OV directX, A ;(directX)←(A)寄存器寻址M directX, Rn ;(directX)←寄存器寻址OV (Rn)M OV directX, directY ;(directX)←(directY)直接寻址M OV directX, @Ri ;(directX)←((Ri))寄存器间接寻址M OV directX, #data ;(directX)←data⽴即寻址这类指令的功能是把源操作数的内容送到直接地址directX中去。

数据传送指令

数据传送指令

数据传送指令数据传送指令包括数据的传送、交换、堆栈数据的压入与弹出,是最基本、使用率最高的一类指令。

助记符有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。

MCS-51单片机的指令集(分类)

MCS-51单片机的指令集(分类)
RET
子程序返回
1
24
RETI
中断返回
1
24
AJMP addr11
绝对短转移
2
24
LJMP addr16
长转移
3
24
SJMP rel
相对转移
2
24
JMP @A+DPTR
相对于DPTR的间接转移
1
24
JZ rel
累加器为零转移
2
24
JNZ rel
累加器非零转移
2
24
CJNE A,direct,rel
累加器与直接地址单元比较,不等则转移
2
12
MOV direct,Rn
寄存器内容送入直接地址单元
2
24
MOV direct,direct
直接地址单元中的数据送入直接地址单元
3
24
MOV direct,@Ri
间接RAM中的数据送入直接地址单元
2
24
MOV direct,#data8
8位立即数送入直接地址单元
3
24
MOV @Ri,A
累加器内容送入间接RAM单元
DEC @Ri
间接RAM内容减1
1
12
MUL A,B
A乘以B
1
48
DIV A,B
A除以B
1
48
DA A
累加器进行十进制转换
1
12
3、逻辑操作类指令
助记符
功能说明
字节数
振荡周期
ANL A,Rn
累加器与寄存器相“与”
1
12
ANL A,direct
累加器与直接地址单元相“与”

数据传递类指令

数据传递类指令

(数据传递类指令)MOV A,Rn 寄存器传送到累加器 1 1MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8) 1 1 MOV A,#data 立即数传送到累加器 2 1MOV Rn,A 累加器传送到寄存器 1 1MOV Rn,direct 直接地址传送到寄存器 2 2 MOV Rn,#data 累加器传送到直接地址 2 1 MOV direct,Rn 寄存器传送到直接地址 2 1 MOV direct,direct 直接地址传送到直接地址 3 2MOV direct,A 累加器传送到直接地址 2 1 MOV direct,@Ri 间接RAM 传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 直接地址传送到直接地址 1 2 MOV @Ri,direct 直接地址传送到间接RAM 2 1 MOV @Ri,#data 立即数传送到间接RAM 2 2 MOV DPTR,#data16 16 位常数加载到数据指针 3 1MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8)传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16)传送到累加器 1 2 MOVX @Ri,A 累加器传送到外部RAM(8) 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16) 1 2 PUSH direct 直接地址压入堆栈 2 2POP direct 直接地址弹出堆栈 2 2XCH A,Rn 寄存器和累加器交换 1 1XCH A, direct 直接地址和累加器交换 2 1XCH A, @Ri 间接RAM 和累加器交换 1 1 XCHD A, @Ri 间接RAM 和累加器交换 1 1低4 位字节(算术运算类指令)INC A 累加器加1 1 1INC Rn 寄存器加1 1 1INC direct 直接地址加1 2 1INC @Ri 间接RAM 加1 1 1INC DPTR 数据指针加1 1 2DEC A 累加器减1 1 1DEC Rn 寄存器减1 1 1DEC direct 直接地址减1 2 2DEC @Ri 间接RAM 减1 1 1MUL AB 累加器和B 寄存器相乘 1 4DIV AB 累加器除以B 寄存器 1 4DA A 累加器十进制调整 1 1ADD A,Rn 寄存器与累加器求和 1 1ADD A,direct 直接地址与累加器求和 2 1ADD A,@Ri 间接RAM 与累加器求和 1 1ADD A,#data 立即数与累加器求和 2 1ADDC A,Rn 寄存器与累加器求和(带进位) 1 1 ADDC A,direct 直接地址与累加器求和(带进位) 2 1ADDC A,@Ri 间接RAM 与累加器求和(带进位) 1 1ADDC A,#data 立即数与累加器求和(带进位) 2 1 SUBB A,Rn 累加器减去寄存器(带借位) 1 1 SUBB A,direct 累加器减去直接地址(带借位) 2 1 SUBB A,@Ri 累加器减去间接RAM(带借位) 1 1 SUBB A,#data 累加器减去立即数(带借位) 2 1 (逻辑运算类指令)ANL A,Rn 寄存器“与”到累加器 1 1ANL A,direct 直接地址“与”到累加器 2 1 ANL A,@Ri 间接RAM“与”到累加器 1 1ANL A,#data 立即数“与”到累加器 2 1ANL direct,A 累加器“与”到直接地址 2 1 ANL direct, #data 立即数“与”到直接地址 3 2 ORL A,Rn 寄存器“或”到累加器 1 2ORL A,direct 直接地址“或”到累加器 2 1 ORL A,@Ri 间接RAM“或”到累加器 1 1ORL A,#data 立即数“或”到累加器 2 1ORL direct,A 累加器“或”到直接地址 2 1 ORL direct, #data 立即数“或”到直接地址 3 1 XRL A,Rn 寄存器“异或”到累加器 1 2XRL A,direct 直接地址“异或”到累加器 2 1 XRL A,@Ri 间接RAM“异或”到累加器 1 1 XRL A,#data 立即数“异或”到累加器 2 1XRL direct,A 累加器“异或”到直接地址 2 1 XRL direct, #data 立即数“异或”到直接地址 31CLR A 累加器清零 1 2CPL A 累加器求反 1 1RL A 累加器循环左移 1 1RLC A 带进位累加器循环左移 1 1RR A 累加器循环右移 1 1RRC A 带进位累加器循环右移 1 1SWAP A 累加器高、低4 位交换 1 1(控制转移类指令)JMP @A+DPTR 相对DPTR 的无条件间接转移 1 2 JZ rel 累加器为0 则转移 2 2JNZ rel 累加器为1 则转移 2 2CJNE A,direct,rel 比较直接地址和累加器,不相等转移 3 2CJNE A,#data,rel 比较立即数和累加器,不相等转移 3 2CJNE Rn,#data,rel 比较寄存器和立即数,不相等转移 2 2CJNE @Ri,#data,rel 比较立即数和间接RAM,不相等转移 3 2DJNZ Rn,rel 寄存器减1,不为0 则转移 3 2 DJNZ direct,rel 直接地址减1,不为0 则转移 3 2 NOP 空操作,用于短暂延时 1 1ACALL add11 绝对调用子程序 2 2LCALL add16 长调用子程序 3 2RET 从子程序返回 1 2RETI 从中断服务子程序返回 1 2AJMP add11 无条件绝对转移 2 2LJMP add16 无条件长转移 3 2SJMP rel 无条件相对转移 2 2(布尔指令)CLR C 清进位位 1 1CLR bit 清直接寻址位 2 1SETB C 置位进位位 1 1SETB bit 置位直接寻址位 2 1CPL C 取反进位位 1 1CPL bit 取反直接寻址位 2 1ANL C,bit 直接寻址位“与”到进位位 2 2 ANL C,/bit 直接寻址位的反码“与”到进位位 2 2ORL C,bit 直接寻址位“或”到进位位 2 2 ORL C,/bit 直接寻址位的反码“或”到进位位 2 2MOV C,bit 直接寻址位传送到进位位 2 1 MOV bit, C 进位位位传送到直接寻址 2 2JC rel 如果进位位为1 则转移 2 2JNC rel 如果进位位为0 则转移 2 2JB bit,rel 如果直接寻址位为1 则转移 3 2 JNB bit,rel 如果直接寻址位为0 则转移 3 2 JBC bit,rel 直接寻址位为1 则转移并清除该位2 2(伪指令)ORG 指明程序的开始位置DB 定义数据表DW 定义16 位的地址表EQU 给一个表达式或一个字符串起名DATA 给一个8 位的内部RAM 起名XDATA 给一个8 位的外部RAM 起名BIT 给一个可位寻址的位单元起名END 指出源程序到此为止(指令中的符号标识)Rn 工作寄存器R0-R7Ri 工作寄存器R0 和R1@Ri 间接寻址的8 位RAM 单元地址(00H-FFH) #data8 8 位常数#data16 16 位常数addr16 16 位目标地址,能转移或调用到64KROM 的任何地方addr11 11 位目标地址,在下条指令的2K 范围内转移或调用Rel 8 位偏移量,用于SJMP 和所有条件转移指令,范围-128~+127Bit 片内RAM 中的可寻址位和SFR 的可寻址位Direct 直接地址,范围片内RAM 单元(00H-7FH)和80H-FFH$ 指本条指令的起始位置结束在讲指令系统前我们先来复习一下数制的概念。

数据传送指令

数据传送指令

数据传送指令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保存栈顶元素的地址。

数据传送类指令

数据传送类指令

§3.2 数据传送类指令一、本课在教材中的地位与前后知识的联系:本课节选自中国劳动和社会保障出版社《单片机原理及接口技术》第三章第二节“数据传送类指令”,它是在前一节单片机指令常用表示方式和寻址方式的基础上,提出的五大类指令中的第一大类,是单片机所有指令中最重要、也是最常用的一类指令。

它是其他四大类指令的基础,和其他四大类指令共同组成了MCS-51系列单片机的指令系统。

二、对教材的分析与处理:数据传送类指令可以细分为三小种:第一种是数据传送MOV、MOVX、MOVC,第二种是数据交换XCH、XCHD、SWAP,第三种是数据压入弹出PUSH、POP。

在讲解这三种数据传送类的指令时,每一种的这几个指令都可以采用对比的方法来使学生更好理解;另外,每一种的指令都可以列举事例进行讲解,用例子来增强对数据传送类指令的直观感觉。

三、教学目标:1、基础知识目标:(1)掌握数据传送类指令的操作助记符MOV、MOVC、MOVX、XCH、XCHD、SWAP、PUSH、POP。

(2)掌握各数据传送类指令的执行过程。

(3)会用数据传送类指令来书写简单的程序段。

2、能力训练目标:通过对数据传送类指令执行过程的理解,培养学生的想象能力和对比分析能力,提高其运用知识的水平。

3、创新素质目标:在分析和判断数据传送类指令的执行过程中。

培养学生的逻辑推理能力,激发他们的学习兴趣,增强学生对未知事物的探索欲。

四、教学过程和方法:本节课采用传统的教学过程:先复习巩固上一节MCS-51系列单片机指令的格式和寻址方式,由此引出本节所讲的第一条指令、也是最重要的一条指令MOV;然后逐次讲解MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP等数据传送类指令,并以例题的方式加深学生对这几条指令的理解。

为了让学生更好的掌握数据传送类指令,充分利用对比分析(把MOV、MOVC、MOVX进行对比,把XCH、XCHD、SWAP进行对比,把PUSH、POP进行对比)方法,使学生在比较中加深记忆,更快的掌握这几个指令。

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集一、数据传送类指令(7种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVX (Move External RAM) 对外部RAM的数据传送;XCH (Exchange) 字节交换;XCHD (Exchange low-order Digit) 低半字节交换;PUSH (Push onto Stack) 入栈;POP (Pop from Stack) 出栈;二、算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;SUBB(Subtract with Borrow) 带借位减法;DA(Decimal Adjust) 十进制调整;INC(Increment) 加1;DEC(Decrement) 减1;MUL(Multiplication、Multiply) 乘法;DIV(Division、Divide) 除法;三、逻辑运算类指令(10种助记符)ANL(AND Logic) 逻辑与;ORL(OR Logic) 逻辑或;XRL(Exclusive-OR Logic) 逻辑异或;CLR(Clear) 清零;CPL(Complement) 取反;RL(Rotate left) 循环左移;RLC(Rotate Left throught the Carry flag) 带进位循环左移;RR(Rotate Right) 循环右移;RRC (Rotate Right throught the Carry flag) 带进位循环右移;SWAP (Swap) 低4位与高4位交换;四、控制转移类指令(17种助记符)ACALL(Absolute subroutine Call)子程序绝对调用;LCALL(Long subroutine Call)子程序长调用;RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;SJMP(Short Jump)短转移;AJMP(Absolute Jump)绝对转移;LJMP(Long Jump)长转移;CJNE (Compare Jump if Not Equal)比较不相等则转移;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;JZ (Jump if Zero)结果为0则转移;JNZ (Jump if Not Zero) 结果不为0则转移;JC (Jump if the Carry flag is set)有进位则转移;JNC (Jump if Not Carry)无进位则转移;JB (Jump if the Bit is set)位为1则转移;JNB (Jump if the Bit is Not set) 位为0则转移;JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;五、位操作指令(1种助记符)CLR 位清零;SETB(Set Bit) 位置1。

  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
相关文档
最新文档