尊旭网
当前位置: 尊旭网 > 知识 >

汇编语言指令

时间:2024-09-23 15:56:40 编辑:阿旭

单片机的基本指令有哪些?

不知道你是问的哪种单片机下面给你的是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),即分别从堆栈中弹出调用子程序时压入的返回地址 \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\x


单片机汇编DA指令什么用

单片机汇编言语DA指令,是指十进制加法运算。是结合加法指令一起用的,例如DAA,这条指令是十进制调整指令,用来在进行十进制运算(BCD码)时进行校正的。当两个BCD码加法时,01H+09H应该是等于10H,但由于 单片机的加法指令是二进制的运算,加完之后得到的结果是0AH,这时就需要再加上一个06H。扩展资料:其他常用单片机汇编指令:1、MOV A,Rn 寄存器内容送入累加器2、MOV A,direct 直接地址单元中的数据送入累加器3、MOV A,@Ri (i=0,1)间接RAM 中的数据送入累加器4、MOV A,#data 立即数送入累加器5、MOV Rn,A 累加器内容送入寄存器6、MOV Rn,direct 直接地址单元中的数据送入寄存器7、MOV Rn,#data 立即数送入寄存器8、MOV direct,A 累加器内容送入直接地址单元9、MOV direct,Rn 寄存器内容送入直接地址单元10、MOV direct,direct 直接地址单元中的数据送入另一个直接地址单元参考资料来源:百度百科—单片机汇编指令

汇编语言有哪些

常见的汇编语言有Intel汇编语言、Motorola汇编语言、IBM汇编语言、Zilog汇编语言以及ARM汇编语言等。拓展:汇编语言的应用涉及到很多领域,比如软件开发、硬件开发、操作系统内核开发、嵌入式系统开发以及网络编程等。网名:汇编控(Assembler Controller)。拓展:汇编语言作为计算机编程中的一种低级语言,具有计算机编程中最基本的概念,可以用来完成复杂的计算机操作,是编写系统软件的基础。


汇编语言是什么语言?

什么是汇编和汇编语言?
汇编语言是一种低级计算机编程语言,说"低级"并不是指语言的功能和复杂程度,而是它出现在计算机发展史的早期,但现在仍广泛应用于计算机开发领域,应为它是绝大多数语言的基础.再者,它是一种面向机器的语言,即它运行与操作都与计算机硬件密切相关.

C语言是一种高级语言,它有利于人为操作,近于面向对象与面向机器之间(VB就是一种面向对象的编程语言),它的功能更加强大,可移植性高,是当今最广泛的语言之一.

DOS汇编是说汇编语言的操作界面是DOST系统,这也说明是汇编是更低级一些,但执行鼎度是其它语言无法相比的,就是可移植性较差.
汇编语言是什么
计算机程序设计语言的发展,经历了从机器语言、汇编语言到高级语言的历程。



1. 机器语言

电子计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由“0”和“1”组成的指令序列交由计算机执行,这种语言,就是机器语言。使用机器语言是十分痛苦的,特别是在程序有错需要修改时,更是如此。而且,由于每台计算机的指令系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,造成了重复工作。但由于使用的是针对特定型号计算机的语言,故而运算效率是所有语言中最高的。机器语言,是第一代计算机语言。

2. 汇编语言

为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“A D D”代表加法,“M O V”代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。然而计算机是不认识这些符号的,这就需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程序。

汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼而质量高,所以至今仍是一种常用而强有力的软件开发工具。

3. 高级语言

从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语言,这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。经过努力,1 9 5 4年,第一个完全脱离机器硬件的高级语言—F O RT R A N问世了,4 0多年来,共有几百种高级语言出现,有重要意义的有几十种,影响较大、使用较普遍的有F O RT R A N、A L G O L、C O B O L、B A S I C、L I S P、S N O B O L、P L / 1、P a s c a l、C、P R O L O G、A d a、C + +、V C、V B、D e l p h i、J AVA 等。

高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到非过程化程序语言的过程。相应地,软件的开发也由最初的个体手工作坊式的封闭式生产,发展为产业化、流水线式的工业化生产。

6 0年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是人自为战,缺乏科学规范的系统规划与测试、评估标准,其恶果是大批耗费巨资建立起来的软件系统,由于含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有不出错阀软件。这一切,极大地震动了计算机界,史称“软件危机”。人们认识到:大型程序的编制不同于写小程序,它应该是一项新的技术,应该像处理工程一样处理软件研制的全过程。程序的设计应易于保证正确性,也便于验证正确性。1 9 6 9年,提出了结构化程序设计方法,1 9 7 0年,第一个结构化程序设计语言—P a s c a l语言出现,标志著结构化程序设计时期的开始。

8 0年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设计。在此之前的高级语言,几乎都是面向过程的,程序的执行是流水线似的,在一个模块被执行完成前,人们不能干别的事,也无法动态地改变程序的执行方向。这和人们日常处理事物的......>>
汇编语言中@是什么意思
#表示立即数寻址。采用立即寻址方式的指令,在立即数前面加上立即寻址符“#”。

例如指令MOV A,#30H中30H就是立即数,指令功能为将30H赋给累加器A。

@表示寄存器的间接寻址。

例如指令MOV A,@R0就使用了寄存器间接寻址方式,这条指令的意义为将地址指针R0指向的内部数据存储器单元中的数据送入累加器A中。假设R0中内容为30H,则此指令的功能是以R0寄存器的内容30H为地址,把内部RAM 30H单元中的内容传送给累加器A。
什么是汇编语言
汇编语言它是计算机语言,计算机语言说通俗点就是人类与计算机(CPU)沟通的桥梁,计算机它不认识人类的语言,听不懂也读不懂,要让计算机替我们去完成我们的工作,就需要我们将要交给计算机完成的任务翻译为计算机语言。汇编语言是各种语言中的一种,它属于低级的计算机语言,这是相对于面向过程的C语言,以及面向对象的C++,java而言。它是除机器语言以外最接近硬件的计算机语言,而且可以通过学习汇编语言深入的了解操作系统的底层运行机制,并以CPU的角度思考问题。这样可以让你在编写高级语言的程序的时候避免很多错误,并且能更深入理解高级语言的执行 原理。因为汇编语言属于低级语言,所以既然低级就肯定不容易被普通用户认识,这需要一定的硬件基础知识和一些计算机工作原理的知识。以前在大学阶段学过汇编语言,但没有当回事儿,连作业都是复制加粘贴完成的(像这样的不在少数吧:))。工作以后才发现这个语言是个好东西,它其实是个非常重要的基础课程。所以现在有时间就把书打开多看一点,学一点。汇编语言目前常见的有两种:一个是基于8086/88架构的DOS下的16位汇编语言,还有就是基于80386架构及其以后型号的windows下32位汇编语言。我不知道linux下有没有汇编语言。顺便说一下,不管什么汇编语言它所编出来的程序都属于软件,所以不管什么软件都需要依赖操作系统这个基础平台,它才可以被硬件CPU所执行,因为操作系统就是提供硬件与用户之间的接口,所有软件都要通过它来分配到硬件资源(不知道对不对哈:)才可以被执行)。一般先学习16位的DOS汇编,然后再学32位的windows汇编。所以我们先谈谈16位的DOS汇编哈。要学汇编语言首先就是要了解CPU,你只有了解了CPU才能了解汇编语言的执行,因为它基本就是直接在操作CPU的各个组成单元(像寄存器)。在 *** 上找了这个图,如下:上面这个CPU的逻辑结构图是8088的,8088和8086大的架构差不多,所以就以这个为例介绍下各个组成部分的作用。主寄存器:AX(AH,AL)累加寄存器,一般用作暂存数据;BX(BH,BL)基址寄存器,一般用作偏移地址存放;CX(CH,CL)计数寄存器,一般用在循环控制次数;DX(DH,DL)数据寄存器,好像和AX差不多吧;SP堆栈指针寄存器,栈指针;BP基址指针寄存器,可作SP使用;SI源变址寄存器和DI目的变址寄存器,这两个做为BX扩展用于偏移地址存放。段寄存器: CS:代码段寄存器,任何一个程序都是从代码段开始执行的,CS寄存器指明了代码段的段地址。DS:数据段寄存器,存放程序中数据部分的段地址。SS:堆栈段寄存器,堆栈是内存中特殊的内存块,堆与栈不同,目前我只知道栈是尊循“先进后出,后进先出”的原则而使用。ES:附加段寄存器,应该是作为DS数据段寄存器的扩充吧。地址加法器: 这是用在对内存寻址时所使用,它通过将段寄存器中的段地址与BX、SI、DI等寄存器中的偏移地址作一定处理从而输出物理地址,然后就可以访问内存单元了。汇编程序中的地址只是逻辑地址,并不是真实的内存上的地址。在程序实际运行时每次访问内存都会先将逻辑地址转换成物理地址才可以访问到物理内存。关于CPU寻址,逻辑地址,物理地址我也会再写篇文章来讨论。逻辑运算单元和控制单元:这是CPU最核心的单元,我们暂只记住它们是负责执行与控制就好了。内部数据,地址总线:CPU内部各部件之间通信的通道。外部地址总线:用来传输CPU想要读取/写入内存单元的物理地址。它的宽度就决定了CPU能够访问的内存的最大容量。外部数据和控制总......>>
汇编语言里*是什么意思
其表示去0x804a260地址处的内存内容

参考blog.csdn/...314473
汇编语言的伪指令是什么?
简单理解就是汇编语言中那些没有对应机器指令的汇编指令。

在计算机中直接运行的程序所对应的叫机器(指令)语言,如果直接按二进制表示出来就是一系列 0 和 1 。当然,用机器语言编写程序的时代一般都使用八进制或十六进制,它们和二进制是3位对1位或4位对1位的关系,从而简化机器语言程序代码在书面(或屏幕)上的表示。即便如此,这种程序还是太令人望而生畏了,所以才有了“汇编”语言,其含义是用人类比较容易理解的符号来替代机器指令。假定一条加法指令的逻辑序列可用二进制表示为0110……1011,用八进制可表示为 3……3,用十六进制则表示为 6……B。而汇编语言则用 ADD x,y 这种形式来表示一条机器指令,即每一条机器指令都用一个对应的“汇编指令”来替代所形成的指令系统叫“汇编语言”,而将用汇编语言编写的程序翻译成机器语言的过程叫“汇编”过程。为了增加汇编语言的可读性和协助翻译程序对汇编源程序进行翻译而增加的汇编指令就是“伪指令”。
汇编语言有什么特点
汇编语言的总体特点1.机器相关性

这是一种面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。因为是机器指令的符号化表示,故不同的机器就有不同的汇编语言。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。

2.高速度和高效率

汇编语言保持了机器语言的优点,具有直接和简捷的特点,可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等,且占用内存少,执行速度快,是高效的程序设计语言。

3.编写和调试的复杂性

由于是直接控制硬件,且简单的任务也需要很多汇编语言语句,因此在进行程序设计时必须面面俱到,需要考虑到一切可能的问题,合理调配和使用各种软、硬件资源。这样,就不可避免地加重了程序员的负担。与此相同,在程序调试时,一旦程序的运行出了问题,就很难发现。

优点

1、因为用汇编语言设计的程序最终被转换成机器指令,故能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。使用汇编语言,可以访问所有能够被访问的软、硬件资源。

2、目标代码简短,占用内存少,执行速度快,是高效的程序设计语言,经常与高级语言配合使用,以改善程序的执行速度和效率,弥补高级语言在硬件控制方面的不足,应用十分广泛。

缺点

1、汇编语言是面向机器的,处于整个计算机语言层次结构的底层,故被视为一种低级语言,通常是为特定的计算机或系列计算机专门设计的。不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行,缺乏可移植性;

2、难于从汇编语言代码上理解程序设计意图,可维护性差,即使是完成简单的工作也需要大量的汇编语言代码,很容易产生bug,难于调试;

3、使用汇编语言必须对某种处理器非常了解,而且只能针对特定的体系结构和处理器进行优化,开发效率很低,周期长且单调。
汇编语言和高级语言的区别是什么?
汇编语言是面向机器的程序设计语言。在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。

高级语音:

由于汇编语言依赖于硬件体系,且助记符量大难记,于是人们又发明了更加易用的所谓高级语言。在这种语言下,其语法和结构更类似普通英文,且由于远离对硬件的直接操作,使得一般人经过学习之后都可以编程。高级语言通常按其基本类型、代系、实现方式、应用范围等分类。
汇编语言里#是什么意思 比如MOV A , #21H
呵呵 俺来帮你解答:

汇编语言里#是立即数的前缀

例如: MOV A ,抚#21H

#21H 表示21H是一个立即数 该指令是将立即数21H传送给累加器A.
汇编语言GE是什么指令
大于等于


汇编语言指令的基本格式是什么

汇编语言的指令格式,目前有两种不同的标准:Windows下的汇编语言基本上都遵循Intel风格的语法,比如:MASM、NASM;而Unix/Linux下的汇编语言基本上都遵循AT&T风格的语法;
一、汇编语言语句的通用格式
[名称[:]] 指令码 [第一操作数][,第二操作数] ;注释
汇编语言的指令码的操作数的个数可以是0、1、2个;当操作数的个数为2的时候,语句还有两种不同的格式:
Windows下Intel风格的汇编语言语句格式为:
[名称[:]] 指令码 目的操作数DST,源操作数SRC ;注释
Unix/Linux下AT&T风格的汇编语言语句格式为:
[名称[:]] 指令码 源操作数SRC,目的操作数DST ;注释
例如: CYCLE: ADD AX,02H ;(AX)<-(AX)+02H
解释:
汇编语言语句格式中的"名称"并不是所有语句都必需的,但是,如果语句中带有"名称",那么,大多数情况下,"名称"都表示的是内存中某一存储单元的地址,也就是"名称"后面各项在内存中存放的第一个存储单元的地址(包括该"名称"所在段的段地址和段内偏移地址);比如上面的指令中,CYCLE就是该语句的名称,CYCLE表示的就是其后面的机器指令码在内存中存放的第一个地址;"名称"与指令码之间的分隔符可以是冒号":",也可以是空格字符" ";当以冒号分割时,该名称代表的是一个标号;当以空格分割时,该名称代表的可能是标号,也可能是变量;当指令码有多个操作数的时候,相邻两个操作数之间要用逗号","分割;指令码与操作数之间必须以空格分割;汇编语言语句的注释必须以分号";"开头;