
机械制图,公差尺寸,程序指令,循环程序,宏程序,刀具使用。
1.机械制图是用图样确切表示机械的结构形状、尺寸大小、工作原理和技术要求的学科。图样由图形、符号、文字和数字等组成,是表达设计意图和制造要求以及交流经验的技术文件,常被称为工程界的语言。
2.你得能看懂公差尺寸。实际参数值的允许变动量。参数,既包括机械加工中的几何参数,也包括物理、化学、电学等学科的参数。所以说公差是一个使用范围很广的概念。对于机械制造来说,制定公差的目的就是为了确定产品的几何参数,使其变动量在一定的范围之内,以便达到互换或配合的要求。
3.程序方面得掌握一些基本的指令。
G00定位 (快速移动)
G01直线切削
G02顺时针切圆弧
G03逆时针切圆弧
M05切削液
M30程序结束
4.循环程序。G71外圆粗车循环指令适用于轴向尺寸较长的外圆柱面或内孔面,需多次走刀才能完成的粗加工,但该指令的应用有它的局限性,即零件轮廓必须符合X轴、Z轴方向同时单调增大或单调减小。复合固定循环指令G73是一种多次成形封闭切削循环指令,该指令适于对已基本成形的铸、锻毛坯切削。
5.宏程序。宏就是用公式来加工零件的,比如说椭圆,如果没有宏的话,我们要逐点算出曲线上的点,然后慢慢来用直线逼近,如果是个光洁度要求很高的工件的话,那么需要计算很多的点,可是应用了宏后,我们把椭圆公式输入到系统中然后我们给出Z坐标并且每次加10um那么宏就会自动算出X坐标并且进行切削, 实际上宏在程序中主要起到的是运算作用。
6.刀具的使用及修磨。你的成品零件是否漂亮,好的刀具是必不可少的,零件加工得是否漂亮主要有五个因素:1刀具的打磨。2.程序的编制。3.机床的精密度4.材料的选择5.工艺的制定。
不知道你是问的哪种单片机下面给你的是MCS-51的,希望对你有帮助,如有,麻烦采纳,谢谢 数据传送指令共有29条,数据传送指令一般的 *** 作是把源 *** 作数传送到目的 *** 作数,指令执行完成后,源 *** 作数不变,目的 *** 作数等于源 *** 作数。如果要求在进行数据传送时,目的 *** 作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令,数据传送指令不影响标志C,AC和OV,但可能会对奇偶标志P有影响。 \x0d\x0a\x0d\x0a[1]. 以累加器A为目的 *** 作数类指令(4条) \x0d\x0a这4条指令的作用是把源 *** 作数指向的内容送到累加器A。有直接、立即数、寄存器和寄存器间接寻址方式: \x0d\x0a\x0d\x0aMOV A,data (data)→(A) 直接单元地址中的内容送到累加器A \x0d\x0aMOV A,#data #data→(A) 立即数送到累加器A中 \x0d\x0aMOV A,Rn (Rn)→(A) Rn中的内容送到累加器A中 \x0d\x0aMOV A,@Ri ((Ri))→(A) Ri内容指向的地址单元中的内容送到累加器A \x0d\x0a\x0d\x0a[2]. 以寄存器Rn为目的 *** 作数的指令(3条) \x0d\x0a这3条指令的功能是把源 *** 作数指定的内容送到所选定的工作寄存器Rn中。有直接、立即和寄存器寻址方式: \x0d\x0a\x0d\x0aMOV Rn,data (data)→(Rn) 直接寻址单元中的内容送到寄存器Rn中 \x0d\x0aMOV Rn,#data #data→(Rn) 立即数直接送到寄存器Rn中 \x0d\x0aMOV Rn,A (A)→(Rn) 累加器A中的内容送到寄存器Rn中 \x0d\x0a\x0d\x0a[3]. 以直接地址为目的 *** 作数的指令(5条) \x0d\x0a这组指令的功能是把源 *** 作数指定的内容送到由直接地址data所选定的片内RAM中。有直接、立即、寄存器和寄存器间接4种寻址方式: \x0d\x0a\x0d\x0aMOV data,data (data)→(data) 直接地址单元中的内容送到直接地址单元 \x0d\x0aMOV data,#data #data→(data) 立即数送到直接地址单元 \x0d\x0aMOV data,A (A)→(data) 累加器A中的内容送到直接地址单元 \x0d\x0aMOV data,Rn (Rn)→(data) 寄存器Rn中的内容送到直接地址单元 \x0d\x0aMOV data,@Ri ((Ri))→(data) 寄存器Ri中的内容指定的地址单元中数据送到直接地址单元 \x0d\x0a\x0d\x0a[4]. 以间接地址为目的 *** 作数的指令(3条) \x0d\x0a这组指令的功能是把源 *** 作数指定的内容送到以Ri中的内容为地址的片内RAM中。有直接、立即和寄存器3种寻址方式: \x0d\x0a\x0d\x0aMOV @Ri,data (data)→((Ri)) 直接地址单元中的内容送到以Ri中的内容为地址的RAM单元 \x0d\x0aMOV @Ri,#data #data→((Ri)) 立即数送到以Ri中的内容为地址的RAM单元 \x0d\x0aMOV @Ri,A (A)→((Ri)) 累加器A中的内容送到以Ri中的内容为地址的RAM单元 \x0d\x0a\x0d\x0a[5]. 查表指令(2条) \x0d\x0a这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式: \x0d\x0a\x0d\x0aMOVC A,@A+DPTR ((A))+(DPTR)→(A) 表格地址单元中的内容送到累加器A中 \x0d\x0aMOVC A,@A+PC ((PC))+1→(A),((A))+(PC)→(A) 表格地址单元中的内容送到累加器A中 \x0d\x0a\x0d\x0a[6]. 累加器A与片外数据存储器RAM传送指令(4条) \x0d\x0a这4条指令的作用是累加器A与片外RAM间的数据传送。使用寄存器寻址方式: \x0d\x0a\x0d\x0aMOVX @DPTR,A (A)→((DPTR)) 累加器中的内容送到数据指针指向片外RAM地址中 \x0d\x0aMOVX A, @DPTR ((DPTR))→(A) 数据指针指向片外RAM地址中的内容送到累加器A中 \x0d\x0aMOVX A, @Ri ((Ri))→(A) 寄存器Ri指向片外RAM地址中的内容送到累加器A中 \x0d\x0aMOVX @Ri,A (A)→((Ri)) 累加器中的内容送到寄存器Ri指向片外RAM地址中 \x0d\x0a\x0d\x0a[7]. 堆栈 *** 作类指令(2条) \x0d\x0a这4类指令的作用是把直接寻址单元的内容传送到堆栈指针SP所指的单元中,以及把SP所指单元的内容送到直接寻址单元中。这类指令只有两条,下述的第一条常称为入栈 *** 作指令,第二条称为出栈 *** 作指令。需要指出的是,单片机开机复位后,(SP)默认为07H,但一般都需要重新赋值,设置新的SP首址。入栈的第一个数据必须存放于SP+1所指存储单元,故实际的堆栈底为SP+1所指的存储单元。 \x0d\x0a\x0d\x0aPUSH data (SP)+1→(SP),(data)→(SP) 堆栈指针首先加1,直接寻址单元中的数据送到堆栈指针SP所指的单元中 \x0d\x0aPOP data (SP)→(data)(SP)-1→(SP), 堆栈指针SP所指的单元数据送到直接寻址单元中,堆栈指针SP再进行减1 *** 作 \x0d\x0a\x0d\x0a[8]. 交换指令(5条) \x0d\x0a这5条指令的功能是把累加器A中的内容与源 *** 作数所指的数据相互交换。 \x0d\x0a\x0d\x0aXCH A,Rn (A)←→(Rn)累加器与工作寄存器Rn中的内容互换 \x0d\x0aXCH A,@Ri (A)←→((Ri))累加器与工作寄存器Ri所指的存储单元中的内容互换 \x0d\x0aXCH A,data (A)←→(data)累加器与直接地址单元中的内容互换 \x0d\x0aXCHD A,@Ri (A 3-0 )←→((Ri) 3-0 )累加器与工作寄存器Ri所指的存储单元中的内容低半字节互换 \x0d\x0aSWAP A (A 3-0 )←→(A 7-4 )累加器中的内容高低半字节互换 \x0d\x0a\x0d\x0a[9]. 16位数据传送指令(1条) \x0d\x0a这条指令的功能是把16位常数送入数据指针寄存器。 \x0d\x0a\x0d\x0aMOV DPTR,#data16 #dataH→(DPH),#dataL→(DPL)16位常数的高8位送到DPH,低8位送到DPL \x0d\x0a\x0d\x0aMCS-51算术运算指令 \x0d\x0a\x0d\x0a算术运算指令共有24条,算术运算主要是执行加、减、乘、除法四则运算。另外MCS-51指令系统中有相当一部分是进行加、减1 *** 作,BCD码的运算和调整,我们都归类为运算指令。虽然MCS-51单片机的算术逻辑单元ALU仅能对8位无符号整数进行运算,但利用进位标志C,则可进行多字节无符号整数的运算。同时利用溢出标志,还可以对带符号数进行补码运算。需要指出的是,除加、减1指令外,这类指令大多数都会对PSW(程序状态字)有影响。这在使用中应特别注意。 \x0d\x0a\x0d\x0a[1]. 加法指令(4条) \x0d\x0a这4条指令的作用是把立即数,直接地址、工作寄存器及间接地址内容与累加器A的内容相加,运算结果存在A中。 \x0d\x0a\x0d\x0aADD A,#data (A)+#data→(A) 累加器A中的内容与立即数#data相加,结果存在A中 \x0d\x0aADD A,data (A)+(data)→(A) 累加器A中的内容与直接地址单元中的内容相加,结果存在A中 \x0d\x0aADD A,Rn (A)+(Rn)→(A) 累加器A中的内容与工作寄存器Rn中的内容相加,结果存在A中 \x0d\x0aADD A,@Ri (A)+((Ri))→(A) 累加器A中的内容与工作寄存器Ri所指向地址单元中的内容相加,结果存在A中 \x0d\x0a\x0d\x0a[2]. 带进位加法指令(4条) \x0d\x0a这4条指令除与[1]功能相同外,在进行加法运算时还需考虑进位问题。 \x0d\x0a\x0d\x0aADDC A,data (A)+(data)+(C)→(A) 累加器A中的内容与直接地址单元的内容连同进位位相加,结果存在A中 \x0d\x0aADDC A,#data (A)+#data +(C)→(A) 累加器A中的内容与立即数连同进位位相加,结果存在A中 \x0d\x0aADDC A,Rn (A)+Rn+(C)→(A) 累加器A中的内容与工作寄存器Rn中的内容、连同进位位相加,结果存在A中 \x0d\x0aADDC A,@Ri (A)+((Ri))+(C)→(A) 累加器A中的内容与工作寄存器Ri指向地址单元中的内容、连同进位位相加,结果存在A中 \x0d\x0a\x0d\x0a[3]. 带借位减法指令(4条) \x0d\x0a这组指令包含立即数、直接地址、间接地址及工作寄存器与累加器A连同借位位C内容相减,结果送回累加器A中。 \x0d\x0a这里我们对借位位C的状态作出说明,在进行减法运算中,CY=1表示有借位,CY=0则无借位。OV=1声明带符号数相减时,从一个正数减去一个负数结果为负数,或者从一个负数中减去一个正数结果为正数的错误情况。在进行减法运算前,如果不知道借位标志位C的状态,则应先对CY进行清零 *** 作。 \x0d\x0a\x0d\x0aSUBB A,data (A)-(data) - (C)→(A) 累加器A中的内容与直接地址单元中的内容、连同借位位相减,结果存在A中 \x0d\x0aSUBB A,#data (A)-#data -(C)→(A) 累加器A中的内容与立即数、连同借位位相减,结果存在A中 \x0d\x0aSUBB A,Rn (A)-(Rn) -(C)→(A) 累加器A中的内容与工作寄存器中的内容、连同借位位相减,结果存在A中 \x0d\x0aSUBB A,@Ri (A)-((Ri)) -(C)→(A) 累加器A中的内容与工作寄存器Ri指向的地址单元中的内容、连同借位位相减,结果存在A中 \x0d\x0a\x0d\x0a[4]. 乘法指令(1条) \x0d\x0a这个指令的作用是把累加器A和寄存器B中的8位无符号数相乘,所得到的是16位乘积,这个结果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,说明乘积大于FFH,否则OV=0,但进位标志位CY总是等于0。 \x0d\x0a\x0d\x0aMUL AB (A)×(B)→(A)和(B) 累加器A中的内容与寄存器B中的内容相乘,结果存在A、B中 \x0d\x0a\x0d\x0a[5]. 除法指令(1条) \x0d\x0a这个指令的作用是把累加器A的8位无符号整数除以寄存器B中的8位无符号整数,所得到的商存在累加器A,而余数存在寄存器B中。除法运算总是使OV和进位标志位CY等于0。如果OV=1,表明寄存器B中的内容为00H,那么执行结果为不确定值,表示除法有溢出。 \x0d\x0a\x0d\x0aDIV AB (A)÷(B)→(A)和(B) 累加器A中的内容除以寄存器B中的内容,所得到的商存在累加器A,而余数存在寄存器B中。 \x0d\x0a\x0d\x0a[6]. 加1指令(5条) \x0d\x0a这5条指令的的功能均为原寄存器的内容加1,结果送回原寄存器。上述提到,加1指令不会对任何标志有影响,如果原寄存器的内容为FFH,执行加1后,结果就会是00H。这组指令共有直接、寄存器、寄存器减间址等寻址方式: \x0d\x0a\x0d\x0aINC A (A)+1→(A) 累加器A中的内容加1,结果存在A中 \x0d\x0aINC data (data)+1→(data) 直接地址单元中的内容加1,结果送回原地址单元中 \x0d\x0aINC @Ri ((Ri))+1→((Ri)) 寄存器的内容指向的地址单元中的内容加1,结果送回原地址单元中 \x0d\x0aINC Rn (Rn)+1→(Rn)寄存器Rn的内容加1,结果送回原地址单元中 \x0d\x0aINC DPTR (DPTR)+1→(DPTR)数据指针的内容加1,结果送回数据指针中 \x0d\x0a\x0d\x0a在INC data这条指令中,如果直接地址是I/O,其功能是先读入I/O锁存器的内容,然后在CPU进行加1 *** 作,再输出到I/O上,这就是“读—修改—写” *** 作。 \x0d\x0a\x0d\x0a[7]. 减1指令(4条) \x0d\x0a这组指令的作用是把所指的寄存器内容减1,结果送回原寄存器,若原寄存器的内容为00H,减1后即为FFH,运算结果不影响任何标志位,这组指令共有直接、寄存器、寄存器间址等寻址方式,当直接地址是I/O口锁存器时,“读—修改—写” *** 作与加1指令类似。 \x0d\x0a\x0d\x0aDEC A (A)-1→(A)累加器A中的内容减1,结果送回累加器A中 \x0d\x0aDEC data (data)-1→(data)直接地址单元中的内容减1,结果送回直接地址单元中 \x0d\x0aDEC @Ri ((Ri))-1→((Ri))寄存器Ri指向的地址单元中的内容减1,结果送回原地址单元中 \x0d\x0a\x0d\x0aDEC Rn (Rn)-1→(Rn)寄存器Rn中的内容减1,结果送回寄存器Rn中 \x0d\x0a\x0d\x0a[8]. 十进制调整指令(1条) \x0d\x0a在进行BCD码运算时,这条指令总是跟在ADD或ADDC指令之后,其功能是将执行加法运算后存于累加器A中的结果进行调整和修正。 \x0d\x0a\x0d\x0aDA A \x0d\x0a\x0d\x0aMCS-51逻辑运算及移位指令 \x0d\x0a\x0d\x0a逻辑运算和移位指令共有25条,有与、或、异或、求反、左右移位、清0等逻辑 *** 作,有直接、寄存器和寄存器间址等寻址方式。这类指令一般不影响程序状态字(PSW)标志。 \x0d\x0a\x0d\x0a[1]. 循环移位指令(4条) \x0d\x0a这4条指令的作用是将累加器中的内容循环左或右移一位,后两条指令是连同进位位CY一起移位。 \x0d\x0a\x0d\x0aRL A 累加器A中的内容左移一位 \x0d\x0aRR A 累加器A中的内容右移一位 \x0d\x0aRLC A 累加器A中的内容连同进位位CY左移一位 \x0d\x0aRRC A 累加器A中的内容连同进位位CY右移一位 \x0d\x0a\x0d\x0a[2]. 累加器半字节交换指令(1条) \x0d\x0a这条指令是将累加器中的内容高低半字节互换,这在上一节中内容已有介绍。 \x0d\x0a\x0d\x0aSWAP A 累加器中的内容高低半字节互换 \x0d\x0a\x0d\x0a[3]. 求反指令(1条) \x0d\x0a这条指令将累加器中的内容按位取反。 \x0d\x0a\x0d\x0aCPL A 累加器中的内容按位取反 \x0d\x0a\x0d\x0a[4]. 清零指令(1条) \x0d\x0a这条指令将累加器中的内容清0。 \x0d\x0a\x0d\x0aCLR A 0→(A),累加器中的内容清0 \x0d\x0a\x0d\x0a[5]. 逻辑与 *** 作指令(6条) \x0d\x0a这组指令的作用是将两个单元中的内容执行逻辑与 *** 作。如果直接地址是I/O地址,则为“读—修改—写” *** 作。 \x0d\x0a\x0d\x0aANL A,data 累加器A中的内容和直接地址单元中的内容执行与逻辑 *** 作。结果存在寄存器A中。 \x0d\x0aANL data,#data 直接地址单元中的内容和立即数执行与逻辑 *** 作。结果存在直接地址单元中。 \x0d\x0aANL A,#data 累加器A的内容和立即数执行与逻辑 *** 作。结果存在累加器A中。 \x0d\x0aANL A,Rn 累加器A的内容和寄存器Rn中的内容执行与逻辑 *** 作。结果存在累加器A中。 \x0d\x0aANL data,A 直接地址单元中的内容和累加器A的内容执行与逻辑 *** 作。结果存在直接地址单元中。 \x0d\x0aANL A,@Ri 累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行与逻辑 *** 作。结果存在累加器A中。 \x0d\x0a\x0d\x0a[6]. 逻辑或 *** 作指令(6条) \x0d\x0a这组指令的作用是将两个单元中的内容执行逻辑或 *** 作。如果直接地址是I/O地址,则为“读—修改—写” *** 作。 \x0d\x0a\x0d\x0aORL A,data 累加器A中的内容和直接地址单元中的内容执行逻辑或 *** 作。结果存在寄存器A中。 \x0d\x0aORL data,#data 直接地址单元中的内容和立即数执行逻辑或 *** 作。结果存在直接地址单元中。 \x0d\x0aORL A,#data 累加器A的内容和立即数执行逻辑或 *** 作。结果存在累加器A中。 \x0d\x0aORL A,Rn 累加器A的内容和寄存器Rn中的内容执行逻辑或 *** 作。结果存在累加器A中。 \x0d\x0aORL data,A 直接地址单元中的内容和累加器A的内容执行逻辑或 *** 作。结果存在直接地址单元中。 \x0d\x0aORL A,@Ri 累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑或 *** 作。结果存在累加器A中。 \x0d\x0a\x0d\x0a[7]. 逻辑异或 *** 作指令(6条) \x0d\x0a这组指令的作用是将两个单元中的内容执行逻辑异或 *** 作。如果直接地址是I/O地址,则为“读—修改—写” *** 作。 \x0d\x0a\x0d\x0aXRL A,data 累加器A中的内容和直接地址单元中的内容执行逻辑异或 *** 作。结果存在寄存器A中。 \x0d\x0aXRL data,#data 直接地址单元中的内容和立即数执行逻辑异或 *** 作。结果存在直接地址单元中。 \x0d\x0aXRL A,#data 累加器A的内容和立即数执行逻辑异或 *** 作。结果存在累加器A中。 \x0d\x0aXRL A,Rn 累加器A的内容和寄存器Rn中的内容执行逻辑异或 *** 作。结果存在累加器A中。 \x0d\x0aXRL data,A 直接地址单元中的内容和累加器A的内容执行逻辑异或 *** 作。结果存在直接地址单元中。 \x0d\x0aXRL A,@Ri 累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑异或 *** 作。结果存在累加器A中。 \x0d\x0a\x0d\x0aMCS-51控制转移指令 \x0d\x0a\x0d\x0a控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。 \x0d\x0a\x0d\x0a[1]. 无条件转移指令(4条) \x0d\x0a这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令访问的程序存储器空间为11位地址2kB空间。 \x0d\x0a\x0d\x0aLJMP addr16 addr16→(PC),给程序计数器赋予新值(16位地址) \x0d\x0a\x0d\x0aAJMP addr11 (PC)+2→(PC),addr11→(PC 10-0 )程序计数器赋予新值(11位地址),(PC 15-11 )不改变 \x0d\x0a\x0d\x0aSJMP rel (PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值 \x0d\x0a\x0d\x0aJMP @A+DPTR (A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值 \x0d\x0a\x0d\x0a[2]. 条件转移指令(8条) \x0d\x0a程序可利用这组丰富的指令根据当前的条件进行判断,看是否满足某种特定的条件,从而控制程序的转向。 \x0d\x0a\x0d\x0aJZ rel A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行 \x0d\x0a\x0d\x0aJNZ rel A≠0,(PC)+ 2 + rel→(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行 \x0d\x0a\x0d\x0aCJNE A, data, rel A≠(data),(PC)+ 3 + rel→(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行 \x0d\x0a\x0d\x0aCJNE A, #data, rel A≠#data,(PC)+ 3 + rel→(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行 \x0d\x0a\x0d\x0aCJNE Rn, #data, rel A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行 \x0d\x0a\x0d\x0aCJNE @Ri, #data, rel A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行 \x0d\x0a\x0d\x0aDJNZ Rn, rel (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行 \x0d\x0a\x0d\x0aDJNZ data, rel (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址单元中的内容减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行 \x0d\x0a\x0d\x0a[3]. 子程序调用指令(1条) \x0d\x0a子程序是为了便于程序编写,减少那些需反复执行的程序占用多余的地址空间而引入的程序分支,从而有了主程序和子程序的概念,需要反复执行的一些程序,我们在编程时一般都把它们编写成子程序,当需要用它们时,就用一个调用命令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指令。 \x0d\x0a\x0d\x0aLCALL addr16 长调用指令,可在64kB空间调用子程序。此时(PC)+ 3→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr16→(PC),即分别从堆栈中d出调用子程序时压入的返回地址 \x0d\x0a\x0d\x0aACALL addr11 绝对调用指令,可在2kB空间调用子程序,此时(PC)+ 2→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr11→(PC 10-0 ) \x0d\x0a\x0d\x0aRET 子程序返回指令。此时(SP)→(PC 15-8 ),(SP)- 1→(SP),(SP)→(PC 7-0 ),(SP)- 1→(SP) \x0d\x0a\x0d\x16位数据 *** 作指令名字 功能
ADC 带进位加法(ADD with Carry)
ADD 加法
AND 按位与。这里的按位与和C的”&”功能相同
ASR 算术右移(Arithmetic Shift Right)
BIC 按位清零(把一个数跟另一个无符号数的反码按位与)
CMN 负向比较(把一个数跟另一个数据的二进制补码相比较)
CMP 比较(Compare,比较两个数并且更新标志)
CMP 把一个寄存器的内容和另一个寄存器的内容或立即数进行比较。但不存储结果,只是正确的更改标志。
一般CMP做完判断后会进行跳转,后面通常会跟上B指令!
CPY 把一个寄存器的值拷贝(COPY)到另一个寄存器中
EOR 近位异或
LSL 逻辑左移(Logic Shift Left)
LSR 逻辑右移(Logic Shift Right)
MOV 寄存器加载数据,既能用于寄存器间的传输,也能用于加载立即数
MUL 乘法(Multiplication)
MVN 加载一个数的 NOT值(取到逻辑反的值)
NEG 取二进制补码
ORR 按位或
ROR 循环右移
SBC 带借位的减法
SUB 减法(Subtraction)
TST 测试(Test,执行按位与 *** 作,并且根据结果更新Z)
REV 在一个32位寄存器中反转(Reverse)字节序
REVH 把一个32位寄存器分成两个(Half)16位数,在每个16位数中反转字节序
REVSH 把一个32位寄存器的低16位半字进行字节反转,然后带符号扩展到32位
SXTB 带符号(Signed)扩展一个字节(Byte)到 32位
SXTH 带符号(Signed)扩展一个半字(Half)到 32位
UXTB 无符号(Unsigned)扩展一个字节(Byte)到 32位
UXTH 无符号(Unsigned)扩展一个半字(Half)到 32位
16位转移指令
名字 功能
B 无条件转移(Branch)
B<cond> 有条件(Condition)转移
BL 转移并连接(Link)。用于呼叫一个子程序,返回地址被存储在LR中
CBZ 比较(Compare),如果结果为零(Zero)就转移(只能跳到后面的指令)
CBNZ 比较,如果结果非零(Non Zero)就转移(只能跳到后面的指令)
IT If-Then
16位存储器数据传送指令
名字 功能
LDR 从存储器中加载(Load)字到一个寄存器(Register)中
LDRH 从存储器中加载半(Half)字到一个寄存器中
LDRB 从存储器中加载字节(Byte)到一个寄存器中
LDRSH 从存储器中加载半字,再经过带符号扩展后存储一个寄存器中
LDRSB 从存储器中加载字节,再经过带符号扩展后存储一个寄存器中
STR 把一个寄存器按字存储(Store)到存储器中
STRH 把一个寄存器存器的低半字存储到存储器中
STRB 把一个寄存器的低字节存储到存储器中
LDMIA 加载多个字,并且在加载后自增基址寄存器
STMIA 存储多个字,并且在存储后自增基址寄存器
PUSH 压入多个寄存器到栈中
POP 从栈中d出多个值到寄存器中
其它16位指令
名字 功能
SVC 系统服务调用(Service Call)
BKPT 断点(Break Point)指令。如果调试被使能,则进入调试状态(停机)。
NOP 无 *** 作(No Operation)
CPSIE 使能 PRIMASK(CPSIE i)/FAULTMASK(CPSIE f)——清零相应的位
CPSID 除能 PRIMASK(CPSID i)/FAULTMASK(CPSID f)——置位相应的位
32位数据 *** 作指令
名字 功能
ADC 带进位加法
ADD 加法
ADDW 宽加法(可以加 12 位立即数)
AND 按位与(原文是逻辑与,有误——译注)
ASR 算术右移
BIC 位清零(把一个数按位取反后,与另一个数逻辑与)
BFC 位段清零
BFI 位段插入
CMN 负向比较(把一个数和另一个数的二进制补码比较,并更新标志位)
CMP 比较两个数并更新标志位
CLZ 计算前导零的数目
EOR 按位异或
LSL 逻辑左移
LSR 逻辑右移
MLA 乘加
MLS 乘减
MOVW 把 16 位立即数放到寄存器的底16位,高16位清0
MOV 加载16位立即数到寄存器(其实汇编器会产生MOVW——译注)
MOVT 把 16 位立即数放到寄存器的高16位,低 16位不影响
MVN 移动一个数的补码
MUL 乘法
ORR 按位或(原文为逻辑或,有误——译注)
ORN 把源 *** 作数按位取反后,再执行按位或(原文为逻辑或,有误——译注)
RBIT 位反转(把一个 32 位整数先用2 进制表达,再旋转180度——译注)
REV 对一个32 位整数做按字节反转
REVH/REV16 对一个32 位整数的高低半字都执行字节反转
REVSH 对一个32 位整数的低半字执行字节反转,再带符号扩展成32位数
ROR 圆圈右移
RRX 带进位的逻辑右移一格(最高位用C 填充,且不影响C的值——译注)
SFBX 从一个32 位整数中提取任意的位段,并且带符号扩展成 32 位整数
SDIV 带符号除法
SMLAL 带符号长乘加(两个带符号的 32 位整数相乘得到 64 位的带符号积,再把积加到另一个带符号 64位整数中)
SMULL 带符号长乘法(两个带符号的 32 位整数相乘得到 64位的带符号积)
SSAT 带符号的饱和运算
SBC 带借位的减法
SUB 减法
SUBW 宽减法,可以减 12 位立即数
SXTB 字节带符号扩展到32位数
TEQ 测试是否相等(对两个数执行异或,更新标志但不存储结果)
TST 测试(对两个数执行按位与,更新Z 标志但不存储结果)
UBFX 无符号位段提取
UDIV 无符号除法
UMLAL 无符号长乘加(两个无符号的 32 位整数相乘得到 64 位的无符号积,再把积加到另一个无符号 64位整数中)
UMULL 无符号长乘法(两个无符号的 32 位整数相乘得到 64位的无符号积)
USAT 无符号饱和 *** 作(但是源 *** 作数是带符号的——译注)
UXTB 字节被无符号扩展到32 位(高24位清0——译注)
UXTH 半字被无符号扩展到32 位(高16位清0——译注)
32位存储器数据传送指令
名字 功能
LDR 加载字到寄存器
LDRB 加载字节到寄存器
LDRH 加载半字到寄存器
LDRSH 加载半字到寄存器,再带符号扩展到 32位
LDM 从一片连续的地址空间中加载多个字到若干寄存器
LDRD 从连续的地址空间加载双字(64 位整数)到2 个寄存器
STR 存储寄存器中的字
STRB 存储寄存器中的低字节
STRH 存储寄存器中的低半字
STM 存储若干寄存器中的字到一片连续的地址空间中
STRD 存储2 个寄存器组成的双字到连续的地址空间中
PUSH 把若干寄存器的值压入堆栈中
POP 从堆栈中d出若干的寄存器的值
32位转移指令
名字 功能
B 无条件转移
BL 转移并连接(呼叫子程序)
TBB 以字节为单位的查表转移。从一个字节数组中选一个8位前向跳转地址并转移
TBH 以半字为单位的查表转移。从一个半字数组中选一个16 位前向跳转的地址并转移
其它32位指令
LDREX 加载字到寄存器,并且在内核中标明一段地址进入了互斥访问状态
LDREXH 加载半字到寄存器,并且在内核中标明一段地址进入了互斥访问状态
LDREXB 加载字节到寄存器,并且在内核中标明一段地址进入了互斥访问状态
STREX 检查将要写入的地址是否已进入了互斥访问状态,如果是则存储寄存器的字
STREXH 检查将要写入的地址是否已进入了互斥访问状态,如果是则存储寄存器的半字
STREXB 检查将要写入的地址是否已进入了互斥访问状态,如果是则存储寄存器的字节
CLREX 在本地的处理上清除互斥访问状态的标记(先前由 LDREX/LDREXH/LDREXB做的标记)
MRS 加载特殊功能寄存器的值到通用寄存器
MSR 存储通用寄存器的值到特殊功能寄存器
NOP 无 *** 作
SEV 发送事件
WFE 休眠并且在发生事件时被唤醒
WFI 休眠并且在发生中断时被唤醒
ISB 指令同步隔离(与流水线和 MPU等有关——译注)
DSB 数据同步隔离(与流水线、MPU 和cache等有关——译注)
DMB 数据存储隔离(与流水线、MPU 和cache等有关——译注)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)