第二部分 微机原理 第3章 MCS-51的 指令系统 主讲教师:喻红
主要内容 MCS-51单片机的寻址方式 MCS-51单片机的指令系统
3.1 指令及其表示方法 指令是完成一种特定操作的命令。具有以下功能: 指明执行什么性质和类型的操作 明确参加操作的数据或数据所在的地址 3.1 指令及其表示方法 指令是完成一种特定操作的命令。具有以下功能: 指明执行什么性质和类型的操作 明确参加操作的数据或数据所在的地址 指定操作结果存放的地址 指定下一条指令的地址
格式:指令由操作码和操作数两部分组成。 MCS-51指令格式有三种: 单字节指令:操作码 双字节指令:操作码 操作数 三字节指令:操作码 第一操作数,第二操作数 指令表示方法:机器码和助记符表示法。
3.2 MCS-51单片机的寻址方式 寻址: 对操作数的来源进行寻址; 对操作数的目的进行寻址; 对下条指令地址进行寻址。 寻址的中心任务是如何在寻址范围内灵活方便地找到所需的操作数或操作数的地址。自然,寻址方式越多,计算机的功能越强,灵活性越大。
MCS-51单片机有七种寻址方式。 寄存器寻址方式 直接寻址方式 寄存器间接寻址方式 立即寻址方式 基址加变址的间接寻址方式 相对寻址方式 位寻址方式
3.2.1 寻址空间和符号注释 一、寻址空间 存储器的存储单元地址和位地址。 程序存储器:片内外统一编址,64K 3.2.1 寻址空间和符号注释 一、寻址空间 存储器的存储单元地址和位地址。 程序存储器:片内外统一编址,64K 片内数据存储器:工作寄存器、特殊功能寄存器 片外数据存储器 :64K 具有地址的位
二、符号注释 Rn : 当前工作寄存器R0~R7 Ri : 可作为地址指针的寄存器R0或R1 #data : 8位二进制立即数(#xxB,#xxH,#xx) #data16 : 16位二进制立即数 direct :8位片内RAM的直接地址 rel : 相对地址偏移量,一字节带符号数
addr11 :11位二进制数的目的地址 addr16 :16位二进制数的目的地址 Bit :可进行位寻址的位地址 (x) :直接寻址方式中,表示直接地址x单元中 的内容; 间接寻址方式中,表示由间接寄存器x所 指地址单元中的内容 :数据传送方向 @ :寄存器间接寻址符号
3.2.2 寻址方式——立即寻址 (1)立即寻址:指令中操作数就是直接参与操作的数,因此又称“立即数”。 例如: 3.2.2 寻址方式——立即寻址 (1)立即寻址:指令中操作数就是直接参与操作的数,因此又称“立即数”。 例如: MOV DPTR,#3456H;DPH←34H,DPL←56H MOV A,#45H ;A←45H 立即寻址主要用来对寄存器赋值。 立即数只能作为源操作数。
3.2.2 寻址方式——直接寻址 (2)直接寻址:指令中操作数的值是存放参与操作的数的字节地址。 3.2.2 寻址方式——直接寻址 (2)直接寻址:指令中操作数的值是存放参与操作的数的字节地址。 这种寻址方式使用的变量是direct,可访问的存储空间有: (只能对片内RAM) 特殊功能寄存器(只能用直接寻址方式) 内部数据存储器的低128字节
例如:指令 MOV A,45H 指令代码:E5 45
1.内部RAM的低128字节; 例如: MOV A,78H ;A←(78H) MOV 30H,40H ;(30H)←(40H) 2.特殊功能寄存器; 例如: MOV DPH,A ;DPH←A:E5 83 MOV 83H,A ;83H←A :E5 83 可使用SFR的名字或地址
3.2.2 寻址方式——寄存器寻址 (3)寄存器寻址: 操作数存放在某一寄存器中,指令中指出相应的寄存器名。这种寻址方式可以对R0~R7、A、B、C(位)、DPTR进行操作。 寄存器寻址主要是对工作寄存器R0-R7进行操作,用指令操作码的低3位指明所使用的寄存器。 MOV A,R0;E8 (11101000) MOV A,R1;E9 (11101001) MOV A,R7;EF (11101111)
例如:指令 MOV A,R3 指令代码:EB(11101011)
3.2.2 寻址方式——寄存器间接寻址 (4)寄存器间接寻址:寄存器中的内容不是操作数本身,而是操作数的地址。即操作数的地址是以寄存器中的内容间接给出的。 可用于寄存器间接寻址的寄存器:工作寄存器R0和R1、堆栈指针SP、数据指针DPTR 寻址空间: R0和R1寻址片内低128个字节或片外低256个字节; 堆栈指针SP寻址堆栈; 数据指针DPTR寻址片外64K数据存储器
例如:指令 MOV A,@R0 机器代码:1110 0110
适用的存储空间: 1.内部RAM,使用的变量为@R0、@R1、@SP; 例如:MOV @R0,76H ; (R0)←(76H) PUSH PSW ; SP←SP+1,(SP)←PSW
2.内部RAM的低半字节,使用的变量是 @R0、@R1; 例如: XCHD A,@R1;
XCH 字节交换:A与内部RAM单元或SFR交换。例如 XCH A,R2 ;(A)(R2) XCHD 半字节交换:A与内部RAM单元进行低四位交换,只能用寄存器间址@Ri。 例如 XCHD A,@R1;(A)D0- D 3 ((R1))D0- D 3 SWAP A ;(A)D0- D 3 (A)D4- D 7
3.外部RAM(或I/O口),使用的变量是 @R0、@R1、@DPTR; 例如: MOVX @R0,A ;(R0)←A MOVX A,@DPTR ;A←(DPTR)
3.2.2 寻址方式——变址寻址 (5)变址寻址:以程序计数器PC或数据指针DPTR作为基址寄存器,累加器A作为变址寄存器,操作的数的有效地址为: 有效地址=(基址寄存器)+A 这种寻址方式仅适用于程序存储器空间
例如:指令 MOVC A,@A+DPTR 机器代码:93 设累加器A=47H,DPTR=2000H,(2047H)=5CH,指令执行后,A=5CH
3.2.2 寻址方式——相对寻址 (6)相对寻址:寻找下一条要执行的指令的地址,仅用于相对转移指令中。相对寻址的有效地址为: D=PC+rel 式中:有效地址D称为目的地址 PC为当前执行的程序指令地址,称为源地址 rel是相对地址,它是目的地址与源地址的差值 偏移量:用机器码表示的相对地址
例如:指令 JC 18H 机器代码:40 16
3.2.2 寻址方式——位寻址 (7)位寻址:操作对象是位,指令中直接给出位地址。这种寻址方式也可以归并于直接寻址方式,但它提供的是直接的位地址。 例如:指令 SETB 3AH 机器代码:D2 3A 位地址3AH是片内RAM中27H单元的第2位,指令执行后,3AH这一位被置为1。若(27H)=00000000B,则指令执行后(27H)=00000100B
MCS-51指令系统的七种寻址方式
3.3 MCS-51单片机的指令系统 111条指令按功能分为五大类: 数据传送类指令 28条 算术运算类指令 24条 逻辑运算类指令 25条 数据传送类指令 28条 算术运算类指令 24条 逻辑运算类指令 25条 控制转移类指令 17条 位操作类指令 17条
111条指令中 单字节 49条 单周期 64条 双字节 45条 双周期 45条 三字节 17条 四周期 2条
3.3.1 数据传送类指令 功能:实现数据存储器之间的数据传送 操作对象:工作寄存器组、片内RAM、片外RAM、I/O口 寄存器 片内RAM 3.3.1 数据传送类指令 功能:实现数据存储器之间的数据传送 操作对象:工作寄存器组、片内RAM、片外RAM、I/O口 寄存器 片内RAM 立即数 累加器 片外数据 存储器 程序
一、片内RAM数据传送 (1)片内RAM之间 MOV direct1,direct2 ;(direct1)←(direct2) MOV @Ri,direct ;(Ri)←(direct) MOV direct,@Ri ;(direct)←(Ri) 例:20H:0FFH;R0:40H。 MOV 30H,40H ;(30H) ←(40H) MOV @R0,20H ;(R0)←(20H)=(40H)←(20H) MOV 30H,@R0 ;(30H)←(R0)=(30H)←(40H)
PUSH direct ;SP←SP+1,(SP)←(direct) POP direct ;(direct)←(SP),SP←SP-1 堆栈操作指令属于寄存器间接寻址方式,所用的指针是SP。 例:SP=30H,(50H)=80H PUSH 50H; SP ← SP+1,(31H) ← (50H) POP 40H; (40H) ←(31H),SP ←SP-1
(2)片内RAM与寄存器 MOV direct, Rn ;(direct)←Rn MOV Rn,direct ;Rn←(direct) 例: R1← R0 MOV 4EH, R0 ;(4EH)←R0 MOV R1,4EH ;R1←(4EH)
(3)片内RAM与A MOV A,direct ;A←(direct) MOV A,@Ri ;A←(Ri) MOV direct , A ; (direct) ← A MOV @Ri , A ; (Ri) ← A
(4)立即数送片内RAM MOV @Ri,#data ;((Ri))← data MOV direct,#data ;(direct)← data 例:R1:30H MOV @R1,#0FFH;(R1)← 0FFH(11111111B) MOV 30H,#255; (30H)← 255
二、寄存器数据传送 (1)寄存器之间 同片内RAM与寄存器方式 MOV direct, Rn ;(direct)←Rn MOV Rn,direct ;Rn←(direct)
(2)寄存器与A MOV A,Rn ;A←Rn MOV Rn,A ;Rn←A
(3)立即数送寄存器 MOV Rn,#data ;Rn←data MOV A,#data ;A← data MOV DPTR,#data16 ;DPTR← data16 例: MOV DPTR,#2000H 数据指针DPTR由DPL和DPH组成,该指令将立即数高8位20H传送到DPH,将立即数低8位00H传送到DPL
目的操作数为A: MOV A,Rn ;A←Rn MOV A, direct; A←( direct ) MOV A,@Ri ;A←(Ri) MOV A,#data ;A← data
目的操作数为寄存器Rn: MOV Rn ,A ; Rn ←A MOV Rn , direct; Rn ←( direct ) MOV Rn ,#data ; Rn ← data
目的操作数为直接地址: MOV direct ,A; (direct )← A MOV direct ,Rn ; (direct) ←Rn MOV direct , direct; (direct) ←( direct ) MOV direct ,@Ri ; (direct )←(Ri) MOV direct ,#data ; (direct) ← data
目的操作数为间接地址: MOV @Ri ,A ; (Ri) ←A MOV @Ri , direct; (Ri) ←( direct ) MOV @Ri ,#data ; (Ri) ← data
三 、片外数据存储器数据传送 只能用寄存器间接寻址方式; 只能与A之间进行数据传送; 地址指针可以是@R0、@R1,@DPTR MOVX A,@Ri ;A←(Ri) MOVX @Ri,A ;(Ri)←A MOVX A,@DPTR ;A←(DPTR) MOVX @DPTR,A ;(DPTR)←A 片外256字节范围 共有6条指令 片外64K字节范围
例1:把片内RAM 40H单元中的内容送到片外RAM 2000H单元中: MOV A , 40H ;A ←(40H) MOV DPTR,#2000H ;DPTR ←2000H MOVX @DPTR,A ;(2000H) ←A 例2:把2100H单元中的内容传送到2120H单元中: MOV DPTR,#2100H MOVX A,@DPTR MOV DPTR,#2120H MOVX @DPTR,A
四、程序存储器数据传送 从程序存储器中取数据应用于查取预置的数据表格,有两条查表指令: MOVC A,@A+PC ;PC←PC+1,A← (A+PC) 所查的表格在以当前程序指针PC为基址寄存器的256个字节的程序存储器范围内。 MOVC A,@A+DPTR ;A← (A+DPTR) 所查的表格在以DPTR为基址寄存器的64K程序存储器范围内。
例:程序存储器中的数据表格 2000H:01H 2001H:23H 2002H:45H 2003H:67H 执行程序: 1000H: MOV A,#03H 1002H: MOV DPTR,#2000H 1005H: MOVC A,@A+DPTR
五、并行I/O数据传送 MCS-51 I/O口:可视为片内存储器单元 外部扩充I/O口:可视为片外数据存储器 例: MOV A,P1 ;A ←P1 MOV P2,P1 ;P2 ←P1
六、交换指令 (1)XCH :源操作数与A的字节交换 XCH A,Rn ; A Rn XCH A,direct ; A (direct) XCH A,@Ri ; A (Ri)
(2)XCHD :源操作数与A的低半字节交换 XCHD A,@Ri ; (3) SWAP A:累加器A的高4位与低4位内容互换指令 SWAP A ; A.3~A.0←→ A.7~A.4 A
3.3.2 算术运算类指令 1.加法指令 2.减法指令 3.乘法指令 4.除法指令
一、加法指令 1.加法指令:ADD
2.带进位加法指令: ADDC
3.加1指令:INC
4.十进制数加法调整 DA A: 当要进行十进制数加法运算时,该指令用在加法指令(ADD、ADDC)之后,会对相加结果进行调整,确保结果也是BCD码。
二、减法指令 1.带借位的减法指令:SUBB 进行减法运算前必须对Cy清0。
2.减1指令:DEC
三、乘法指令 MUL AB A、B中为两个单字节无符号数,乘积为双字节数,高字节在B中,低字节在A中。当乘积大于255(OFFH)时,OV=1;任何情况下,Cy总是“0”。
四、除法指令 DIV AB 两个单字节无符号数除法,被除数送A,除数送B,执行后商在A中,余数在B中。 若除数为0,则指令执行后A、B的内容不定,且OV=1,任何情况下,Cy总是清“0”。
3.3.3 逻辑运算类指令 一、逻辑与指令 ANL 二、逻辑或指令 ORL 三、逻辑异或指令 XRL 四、累加器A清零指令 CLR A 3.3.3 逻辑运算类指令 一、逻辑与指令 ANL 二、逻辑或指令 ORL 三、逻辑异或指令 XRL 四、累加器A清零指令 CLR A 五、累加器A取反指令 CPL A 六、累加器A循环移位指令 RL A RR A RLC A RRC A
direct;direct ← ( direct )∧( direct ) #data;direct ← ( direct )∧data 一、逻辑与指令 ANL A , Rn ; A← A∧Rn direct; A← A∧( direct ) @Ri; A← A∧ (Ri) #data; A← A∧data ANL direct , direct;direct ← ( direct )∧( direct ) #data;direct ← ( direct )∧data 逻辑与指令常用于屏蔽某些位
direct;direct ← ( direct )∨(direct ) ORL direct , 二、逻辑或指令 ORL A , Rn ; A← A∨Rn direct; A← A∨ ( direct ) @Ri; A← A∨ (Ri) #data; A← A∨ data direct;direct ← ( direct )∨(direct ) ORL direct , #data;direct ← ( direct )∨ data 逻辑或指令常用于某些位的置位
direct;direct ← ( direct )∨( direct ) 三、逻辑异或指令 XRL A , Rn ; A← A∨Rn direct; A← A∨( direct ) @Ri; A← A∨ (Ri) #data; A← A∨ data XRL direct , direct;direct ← ( direct )∨( direct ) #data;direct ← ( direct )∨ data 逻辑异或指令常用于某些位的取反
以上指令可直接对接口进行操作: ANL P1,#01111100B ORL P1,#00110010B XRL P1,#31H
四、对A的逻辑运算指令 累加器A清零 CLR A ;A←0 累加器A 取反 CPL A ; A ← A
累加器A循环移位 A RL A ; RLC A ; RR A ; RRC A ; C A A C A
3.3.4 程序控制类指令 作用:通过改变程序计数器PC,改变程序执行的方向,或调用子程序,或从子程序返回 一、转移类指令 3.3.4 程序控制类指令 作用:通过改变程序计数器PC,改变程序执行的方向,或调用子程序,或从子程序返回 一、转移类指令 二、调用子程序及返回指令 三、空操作指令 NOP
无条件转移类指令 (1)短转移指令SJMP (Short Jump) SJMP rel ; (PC)←(PC)+rel ; -126<rel< +129 例: 0100H 80 rel SJMP AAA 0102H 00 NOP … 0123H 00 AAA:NOP 跳转起始位置: (PC)+2 跳转范围:起始位置的-128~+127之间
无条件转移类指令 (2)绝对跳转指令AJMP (Absolute Jump) AJMP addr11 ;(PC)←(PC)+2, PC=PC15~11a10a9a8a7a6a5a4a3a2a1a0 跳转起始位置: (PC)+2 跳转范围:2K (3)长跳转LJMP (Long Jump) LJMP addr16 ;(PC)←addr15~0 跳转范围:64K
无条件转移类指令 (4)间接转移指令JMP (Jump to Address) JMP @A+DPTR ;(PC)←(A)+(DPTR) (A)是无符号数,指令执行后,不影响累加器和DPTR中的内容,也不影响任何标志。 本指令根据A中的内容可实现多个分支,故亦称散转指令。
无条件转移类指令 例:在某键盘处理程序中,假定命令键的读数(0AH、0BH、0CH、0DH中之一)在A中,利用散转指令便可根据A中的内容实现正确的转向。 KEYB: MOV DPTR,#JMPTBL CLR C SUBB A,#0AH RL A JMP @A+DPTR JMPTBL:AJMP AAA; AJMP BBB AJMP CCC AJMP DDD
无条件转移类指令 -128 JMP PC AJMP SJMP PC LJMP 64K PC+2 PC+2 DPTR PC+2 2K +127 JMP @A+DPTR PC PC+2 DPTR 256 AJMP PC+2 2K SJMP PC+2 -128 +127
无条件转移类指令 (5)子程序调用与返回(ACALL、LCALL、RET) 1.ACALL addr11 ; (PC)←(PC)+2, (SP)←(SP)+1, ((SP))←(PC7~0) (SP)←(SP)+1, ((SP))←(PC15~8) PC=PC15~11a10a9…a0 2.LCALL addr16 ; (PC)←(PC)+3 (SP)←(SP)+1, ((SP))←(PC7~0) (SP)←(SP)+1, ((SP))←(PC15~8) (PC)←addr16
无条件转移类指令 3.RET ; ;(PC15~8)←((SP)),(SP)←(SP)-1 ;(PC7~0)←((SP)),(SP)←(SP)-1 4.RETI ;(PC15~8)←((SP)),(SP)←(SP)-1 ;(PC7~0)←((SP)),(SP)←(SP)-1 ;清除中断状态寄存器中相应中断标志位
条件转移类指令 条件转移指令是指当满足某种条件时程序才转移,而条件不满足时程序继续执行下一条指令。条件主要指PSW中的标志。 8051单片机指令对标志的影响如下表
指令 标志 C OV AC ADD × CLR C ADDC CPL C SUBB ANL C,bit MUL ANL C,/bit DIV ORL C,bit DA ORL C,/bit RRC MOV C,bit RLC CJNE SETB C 1
条件转移类指令 一、根据进位标志: (1)JC rel ;当C=1时转移,(PC)←(PC)+2,(PC)←(PC)+rel (2)JNC rel ;当C=0时转移,(PC)←(PC)+2,(PC)←(PC)+rel 二、根据零标志: (1)JZ rel ;当(A)=0时转移,(PC)←(PC)+2,(PC)←(PC)+rel (2)JNZ rel ;当(A)≠0时转移,(PC)←(PC)+2,(PC)←(PC)+rel
条件转移类指令 三、比较不相等,则转移: CJNE A,#data,rel; CJNE A,direct,rel; CJNE @Ri,#data,rel; CJNE Rn,#data,rel; 3字节指令,当第一操作数=第二操作数时不转,(PC)←(PC)+3,否则转移,(PC)←(PC)+3+rel,本指令还影响Cy,当第一操作数≥第二操作数时,Cy=0,因此可实现程序的三分支。
A = B吗? 出口 Y N A > B吗? 入口 1 2 3
条件转移类指令 例: CJNE A,30H,NEQ ;(A)≠(30H),转NEQ EQ: ;(A)=(30H) NEQ: JC LITTER ;(A)<(30H),转LITTER LITTER: ┋ ┋ ┋
条件转移类指令 四、减1不为0则转移: DJNZ Rn,rel ;(PC)←(PC)+2,(Rn)←(Rn)-1 当(Rn)=0时,不转移, 当(Rn)≠0时转移,(PC)←(PC)+rel DJNZ direct,rel (PC)←(PC)+3,(direct)←(direct)-1 当(direct)=0时,不转移, 当(direct)≠0时转移,(PC)←(PC)+rel
条件转移类指令 (2)根据对某一位测试确定是否转移 JB bit,rel ; (bit)=1 转移 ;即(PC)←(PC)+3,(PC)←(PC)+rel JNB bit,rel ; (bit)=0 转移 JBC bit,rel ;(bit)=1 转移,且(bit)←0
3.3.5 位操作类指令 MCS-51单片机中有一个位处理器,以进位位Cy作为位累加器,可完成以下操作: 1.位数据传送 2.位状态控制 3.3.5 位操作类指令 MCS-51单片机中有一个位处理器,以进位位Cy作为位累加器,可完成以下操作: 1.位数据传送 2.位状态控制 3.位逻辑操作 4.位条件转移指令 寻址空间: 1.片内RAM的20H~2FH共16个字节单元的每一位,位地址为00H~7FH 2.SFR中字节地址可以被8整除的专用寄存器中的位,位地址从80H~F7H,其中有少数位未被定义。
位地址的表达方式: 1.直接用位地址表示;20H 2.用点操作符号表示;(20H).1,PSW.4 3.寄存器的位定义名称;RS1,OV 4.用户定义;L1 BIT PSW.4
一、位数据传送指令 位数据传送必须经过位累加器Cy,而不能在可寻址位之间传送。 MOV C,bit ;(Cy)←(bit) MOV bit,C ;(bit)←(Cy)
二、位状态控制指令 位状态控制有置1和清零两种,每种有两条指令,如下: SETB C ;(Cy)←1 SETB bit ;(bit)←1 CLR C ;(Cy)←0 CLR bit ;(bit)←0
三、位逻辑操作指令 位逻辑操作有与、或、取反三种。与、或操作时,以位累加器Cy作为第一操作数,第二操作数为位地址,操作结果在Cy中。取反可以对每个位地址内容直接进行。 ANL C,bit ;(Cy)←(Cy)∧(bit) ANL C,/bit ;(Cy)←(Cy)∧(/bit) ORL C,bit ;(Cy)←(Cy)∨(bit) ORL C,/bit ;(Cy)←(Cy)∨(/bit) CPL C ;(Cy)←(/Cy) CPL bit ;(bit)←(/bit)
指令练习 1.20H:50H; MOV A,#10; A:10,(0AH) MOV R0,#20H; R0:20H MOV 30H,@R0; 30H:50H ADD A,30H; A:5AH;30H:50H MOV DPTR,#2000H; DPTR:2000H MOVX @DPTR,A; 2000H:5AH
指令练习 MOV SP,#30H; SP:30H PUSH ACC; SP=31H;31H:5AH PUSH DPL; SP=32H;32H:00H PUSH DPH; SP=33H;33H:20H 2.MCS-51单片机是通过哪些方法将程序存储器和数据存储器严格分开的?
指令练习 3.若要完成以下的数据传送,应如何用MCS-51指令来实现? 1)R7内容传送到R4 2)外部RAM 20H单元内容送R0 3)ROM 2000H单元内容送R2 4)外部RAM 0456H的内容送外部RAM 0078H单元。
指令练习 4.设R0的内容为32H,A的内容为48H,内部RAM 32H内容的80H,40H内容为08H,请指出在执行下列程序段后各单元内容的变化。 MOV A,@R0 MOV @ R0,40H MOV 40H,A MOV R0,#40H MOV @ R0,A
指令练习 5.试编一程序将内部RAM 30H~3FH单元数据传送到外部RAM首址为0F00H的单元中去。 MOV R0,#30H; MOV DPTR,#0F00H MOV R1,#10H LOOP:MOV A,@R0; MOVX @DPTR,A; INC R0; INC DPTR; DJNZ R1,LOOP;
指令练习 6.有两块数据分别在内部RAM 20H~29H、30H~39H,现将两块数据对换,试编程。 MOV R0,#20H; MOV R1,#30H; MOV R2,#10; LOOP: MOV A,@R0; XCH A,@R1; XCH A,@R0; INC R0; INC R1; DJNZ R2,LOOP
指令练习 7.阅读程序写出结果 MOV 21H,#5AH ; 21H:5AH MOV R0,#21H; R0:21H MOV R1,#2FH ; R1:2FH MOV A,@R0 ; A:5AH(01011010B) CPL A ; A:0A5H(10100101B) MOV @R1,A; 2FH:0A5H INC R0 ; R0:22H RL A; A:4BH(01001011B) MOV @R0,A; 22H:4BH SETB ACC.2 ; A: 4FH(01001111B )
指令练习 8.下述程序执行后,SP、A、B内容? ORG 2000H MOV SP,#40H MOV A,#30H LCALL SUBR ADD A,#10H MOV B,A L1: SJMP L1 SUBR: MOV DPTR,#200AH PUSH DPL PUSH DPH RET
Question! (1)片内RAM与寄存器 MOV direct, Rn ;(direct)←Rn MOV Rn,direct ;Rn←(direct) 例: R1← R0 MOV 4EH, R0 ;(4EH)←R0 MOV R1,4EH ;R1←(4EH) (4)立即数送片内RAM MOV @Ri,#data ;((Ri))← data MOV direct,#data ;(direct)← data 例:R1:30H MOV @R1,#0FFH;(R1)← 0FFH(11111111B) MOV 30H,#255; (30H)← 255