寻址方式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
寻址方式:1.立即寻址:操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一部分于操作码一起存放在程序储存器中,可以立即得到并执行,不需要经过别的途径去寻找,在数前常冠以#作为前缀。2.寄存器寻址:在指令选定的某寄存器中存放或读取操作数3,寄存器间接寻址:由指令指出某一寄存器的内容,常有@前缀。4,直接寻址:指令中直接给出操作数所在的存储器地址。5,变址寻址:基址寄存器加变址寄存器间接寻址,MOVC A,@A+DPTR.6,相对寻址:以当前程序计数器PC值加上指令中给出的偏移量rel而构成实际操作数地址的寻址方法,它用于访问程序存储器,常出现在相对转移指令中。7,位寻址:在位操作指令中直接给出位操作数的地址可以对片内RAM中128个位和特殊功能寄存器SFR中的93个位进行寻址。
数据传送类指令:一、以累加器为目的操作数的指令
MOV A, Rn ; (Rn)→A,n=0~7
MOV A, @Ri ; ((Ri))→A,i=0,1
MOV A, direct ;(dir ect)→A
MOV A, #data ; #data→A
二、以Rn为目的操作数的指令
MOV Rn, A ; (A)→Rn, n=0~7
MOV Rn, direct ;(direct)→Rn, n=0~7
MOV Rn, #data ; #data→Rn, n=0~7
三、以直接地址direct为目的操作数的指令
MOV direct, A ; (A)→direct
MOV direct, Rn ;(Rn)→direct, n=0~7
MOV direct1, direct2;
MOV direct, @Ri ;((Ri))→direct
MOV direct, #data ; #data→direct
四、以寄存器间接地址为目的操作数的指令
MOV @Ri, A ;(A)→((Ri)),i=0,1
MOV @Ri, direct ;(direct)→((Ri))
MOV @Ri, #data ; #data→((Ri))
五、16位数传送指令
MOV DPTR, #data16 ; #data16→DPTR
唯一的16位数据的传送指令,
立即数的高8位送入DPH,
立即数的低8位送入DPL。
六、堆栈操作指令
内部RAM中可以设定一个后进先出(LIFO-Last In First Out)的区域称作堆栈,堆栈指针SP始终指向堆栈的
栈顶位置。
1、进栈指令 PUSH direct
先将栈指针SP加1,然后把direct中的内容送到SP指示的内部RAM单元中
2、出栈指令 POP direct
SP指示的栈顶(内部RAM单元)内容送入direct字节单元
中,栈指针SP减1
七、累加器A与外部数据存储器传送指令
MOVX A, @DPTR ;((DPTR))→A,读外部RAM/IO
MOVX A, @Ri ;((Ri))→A,读外部RAM/IO
MOVX@DPTR, A ;(A)→((DPTR)),写外部RAM/IO
MOVX@Ri, A ;(A)→((Ri)),写外部RAM/IO
算术运算类指令:(1)ADD(signed or unsigned ADD):
不带进位的加法指令格式:ADD d, s操作:(d)←(d)+(s)
(2)ADC(add with carry):带进位的加法指令
格式:ADC d, s操作:(d)←(d)+(s)+CF
(3)INC(increment by 1):加1指令
格式:INC d操作:(d)←(d)+1
2.减法指令
(1)SUB(subtract):不带借位的减法指令
格式:SUB d, s 操作:(d)←(d)-(s)
(2)SBB(subtraction with borrow):带借位的减法指令
格式:SBB d, s 操作:(d)←(d)-(s)-CF
(3)DEC(decrement by 1):减1指令
格式:DEC d 操作:(d)←(d)-1
(4)NEG(two’s complement negate):求补指令
格式:NEG d操作:(d)←(d)+1
(5)CMP(compare two operands):比较指令
格式:CMP d, s操作:(d)-(s)
3.乘法指令
(1)MUL(unsigned multiply):无符号数的乘法指令
格式:MUL s操作:s为字节操作数:AX←AL(s)
s为字操作数:DX, AX←AX(s)
(2)IMUL(signed multiply):有符号数的乘法指令
格式:IMUL s操作:s为字节操作数:AX←AL(s)
s为字操作数:DX, AX←AX(s)
4.除法指令
(1)DIV(unsigned divide):无符号数的除法指令
格式:DIV s操作:分为字节和字两种操作类型。
字节操作时,16位被除数在AX中,8位除数为源操作数,结果的8位商在AL中,8位余数在AH中,表示为:AL←AX/(s) 商AH←AX/(s) 余数
字操作时,32位被除数在DX和AX中,其中DX为高位字,16位除数为源操作数,结果的16位商在AX中,16位余数在DX中,表示为:AX←DX, AX/(s) 商DX←DX, AX/(s) 余数DIV指令的被除数、除数、商和余数全部为无符号数。
(2)IDIV(signed divide):有符号数的除法指令格式:IDIV s
操作:与DIV指令相同,只是被除数、除数、商和余数均为有符号数,且余数的符号和被除数的符号相同。
(3)CBW(convert byte to word):字节转换为字指令格式:CBW
操作:AL中的符号位(最高位D7)扩展到AH中。若AL中的D7=0,则AH=00H。若AL中的D7=1,则AH=FFH。
(4)CWD(convert word to doubleword):字转换为双字指令格式:CWD
操作:AX中的符号位(最高位D15)扩展到DX中。若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFFH。