单片机课件 杨风开 3章学习资料_第1页
单片机课件 杨风开 3章学习资料_第2页
单片机课件 杨风开 3章学习资料_第3页
单片机课件 杨风开 3章学习资料_第4页
单片机课件 杨风开 3章学习资料_第5页
已阅读5页,还剩129页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3章

MCS51指令系统汇编语言是一种面向机器的语言,是用符号来表示指令和地址的语言。单片机的编程,可以使用C语言等高级语言,也可以使用汇编语言。3.1

寻址方式大多数指令执行时,都需要使用操作数。寻址方式就是在指令中说明操作数所在地址的方法。一般说来,寻址方式越多,单片机的功能就越强,灵活性越大,指令系统也就越复杂。3.1.1寻址方式MCS-5l单片机有以下7种寻址方式:1)立即数寻址方式立即寻址方式就是操作数在指令中直接给出。出现在指令中的操作数即为立即数。立即数前面加前缀标志“#”。例如指令:

MOVA,#40H

所谓寻址,就是寻找操作数的地址,立即数寻址实际上不存在寻址的问题,操作数就是所提供的数值,因此所谓立即数寻址只是一种习惯说法。2)寄存器寻址方式寄存器寻址方式就是操作数在工作寄存器中,因此,指定了寄存器就能得到操作数。在寄存器寻址方式的指令中,以符号名称表示寄存器。例如指令:

MOVA,Rn

;n=0~7传送实际上是拷贝寄存器寻址范围包括:①4组通用工作寄存区共32个工作寄存器。但只能针对当前的工作寄存器区的8个工作寄存器进行操作,因此指令中的寄存器的名称只能是R0~R7。②部分特殊功能寄存器,例如累加器A、寄存器B以及数据指针DPTR(DPH、DPL)等。3)直接寻址方式直接寻址方式中,指令的操作数直接以单元地址的形式给出。例如,假设指令执行前地址40H数据存储单元的值为12H,指令:

MOVA,40H注意与立即数寻址的区别直接寻址方式只能使用8位二进制数表示的地址,所以直接寻址方式的寻址范围只限于:①内部RAM的低128个单元;②特殊功能寄存器。寄存器寻址只是直接寻址方式针对寄存器的特定表示方法,在实质上与直接寻址没有区别。4)寄存器间接寻址方式寄存器中存放的是地址,即操作数是通过寄存器中的地址间接得到的,因此称之为寄存器间接寻址,简称为间址寻址。例如:MOV A,@R0寄存器间接寻址方式中的寄存器只有R0、R1和DPTR三个。寄存器间接寻址范围为:①访问内部RAM低128个地址单元,其通用形式为@Ri(i=0,1);②对片外数据存储器的64K字节的间接寻址,只能使用DPTR作间接寻址寄存器,其形式为@DPTR。例如:MOVXA,@DPTR5)基址寄存器加变址寄存器

间接寻址方式这种寻址方式简称为基址加间接寻址,主要用于查程序存储器中的数据表,只能以寄存器DPTR或PC作基址寄存器,以累加器A作为变址寄存器。并以两者中的数值相加形成的16位数值作为地址寻找操作数,以达到查表的目的。MOVC A,@DPTR+A

这种寻址方式的指令只有3条:

MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR6)位寻址方式MCS-51单片机有位处理功能,可以对数据按位进行操作,因此就有相应的位寻址方式。位寻址指令中可以直接使用位地址,例如:

MOVC,40H区别:MOVA,40H同样一个数值,在指令中是代表字节地址还是代表位地址,除了可以由操作数的类型决定外,也可以由操作码决定,例如:

SETB

40H位寻址的寻址范围包括:①内部RAM中的位寻址区,字节地址为20H~2FH,共16个字节单元,128个位,位地址是00H~7FH。对这128个位的寻址使用直接地址表示。位寻址区中的位有两种表示方法,一种是直接给出位地址;另一种是字节地址加上位数,例如(20H).6。例如:

MOV C,06H

MOV C,(20H).6两条指令的作用是等效的。②特殊功能寄存器可寻址位,有4种表示方法:特殊功能寄存器符号加位数的表示方法。例如PSW寄存器的位5表示为PSW.5;直接使用位地址。例如PSW寄存器位5的位地址为0D5H;位名称的表示方法。例如PSW寄存器位5是F0标志位,可使用F0表示该位;字节地址加位数的表示方法。例如PSW寄存器位5,因PSW的字节地址为0D5H,可表示为(0D0H).5。这4种位表示方法相互是等价的。7)相对寻址方式相对寻址方式是为解决程序转移而专门设置的,为各种转移指令所采用。这种寻址方式以当前指令所在程序地址(程序指针PC中的值)为基数,加上给定的地址偏移量,从而得到新的执行指令地址(新的PC值)。例如:JC

50H

指令当中的“50H”就是所谓的地址偏移量,通常用一个符号(标号)来代替,例如用标号LOOP来代替数值50H,则指令可以写成:

JC

LOOP所谓“相对寻址方式”,实际上并不存在“寻找操作数地址”的问题,地址偏移量本身就是指令的操作数,根据地址偏移量得到跳转地址是指令自身的功能。从硬件电路的运行过程看,新的地址由指令译码电路直接获得,跳转类指令并不存在取操作数的过程。2.1.2寻址方式符号说明

Rn、Ri、direct、#data、#data16rel、DPTR、bit、C或CYaddr11,addrl6@3.2指令概述单片机所能执行的指令的集合就是其指令系统。MCS—51单片机指令系统是—种简明易掌握、效率较高的指令系统,其一大特点是在硬件结构中有一个位处理机(也称布尔处理机),对应这个位处理机,指令系统中相应地设计了一个处理位变量的指令子集,这个子集在开发需大量处理位变量的程序时十分有效、方便,非常适合测量、控制系统的应用。指令的表示方法称为指令格式。一条指令通常由两部分组成,即操作码和操作数。操作码用来规定指令进行什么操作,而操作数则是指令操作的对象。操作数可能是一个具体的数据,也可能是指出到哪里取得数据的地址或符号。对于机器而言,指令实质上就是一些二进制数码(机器码),包括操作码和操作数。如果用一个个二进制数(机器码)来表示指令,则编程、记录时都不直观,因此,汇编语言采用一些与指令功能相关的英文字母来代表指令操作码,称为助记符,用具有特定含义的符号代表操作数,称为标号或变量名。在汇编语言指令说明中,一般包括以下几个内容:机器码格式指令字长

指令周期数指令执行的过程

3.3

指令功能描述1)ACALL指令指令格式: ACALLaddr11指令描述:短调用地址为addr11的子程序。实际编程时不用这么复杂计算,可以用标号代替addr11,例如:

ACALL

DISP指令执行时,将调用标号(名称)为DISP的子程序。2)ADD指令指令格式: ADDA,Rn

;(A)+(Rn)→A,n=0~7

ADDA,direct

;(A)+(direct)→A

ADDA,@Ri

;(A)+((Ri))→A,i=0,1

ADDA,#data

;(A)+#data→A指令描述:ADD指令称为加法指令,其功能为:将被寻址数据单元的值(或立即数)与累加器A中的值相加,结果保存到累加器A中。ADD指令的功能也可以简单的描述为:将被寻址数据单元的值加到累加器A中。

ADD指令完成两个8位二进制数加法运算,其中一个加数总是来自累加器A,而另一个加数可由寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等不同的寻址方式得到。其相加的结果总是放在累加器A中。使用加法指令时,要注意运算结果对标志位的影响:①如果位7有进位,则置“1”进位标志C,否则清“0”C。②如果位3有进位,置“1”辅助进位标志AC,否则清“0”AC。③如果位6、位7没有同时进位,则溢出标志位OV置“1”,否则清“0”OV。关于溢出的概念,在数字电路中已经学习过,在此说明如下:设两个8位二进制数11111001B(-7)和00001000B(8)相加,结果为00000001B,加的过程中,最高位(位7)和次高位(位6)同时发生了进位,此时结果是正确的,没有发生溢出,加法只影响进位位。设两个8位二进制数01111111B(127)和01000000B(64)相加,结果为10111111B(-63),显然结果是错误的。加的过程中,次高位(位6)发生了进位,而最高位(位7)没有发生进位,这就是溢出。同样,如果两个绝对值较大的负数相加,结果也会变成正数,加的过程中,最高位发生了进位而次高位没有发生进位。减法运算也有类似的效应,绝对值较大的两个有符号数相减,可能会发生溢出,绝对值较小的两个有符号数相减,不会发生溢出。因此,判断两数之和(之差)是否溢出,就是看加(减)的过程中最高位和次高位是否同时发生进位(借位),如果同时发生进位(借位)或都不发生进位(借位),则没有溢出,否则就是溢出。避免加法溢出现象的最简单方法是减少有效数位数,保留两位符号位。比如两个00111111B(前两位为符号位)相加,结果仍为正数。因此,在编程时,应注意加数(减数)的绝对值不能过大。从数字电路的角度来说,只有加、减法运算才会发生溢出。MCS-51硬件电路中,乘、除法运算也会影响溢出标志位OV,具体影响情况将在相应的指令描述中说明。3)ADDC指令指令格式:

ADDCA,Rn

;(A)+(Rn)+C→A, ADDCA,direct

;(A)+(direct)+C→A

ADDCA,@Ri

;(A)+((Ri))+C→A ADDCA,#data

;(A)+#data+C→A指令描述:ADDC称为带进位加法指令,其进行加法运算的特点是进位标志位C参与运算,因此带进位加法运算是三个数相加。4)AJMP指令指令格式:AJMP

addrl1指令描述:AJMP称为无条件近跳转(转移)指令,指令执行后,将跳转到由addrl1设定的程序地址处执行。例如:

LOOP1:

AJMP

LOOP1

… AJMP LOOP2

… LOOP2: …

…5)ANL指令指令格式:ANLA,Rn

ANLA,direct

ANLA,#data

ANLA,@Ri

ANLdirect,A

ANLdirect,#data

ANLC,bit指令描述:ANL称为逻辑与指令,可以以字节为单位进行逻辑与运算,也可以以位为单位进行逻辑与运算。①以字节为单位进行逻辑与运算以字节为单位进行逻辑与运算时,基本功能是将源操作数与目标操作数按位进行逻辑与运算,结果放到目标操作数存储单元中。②以位为单位进行逻辑与运算指令格式中最后一条是以位为单位进行逻辑与运算,其功能是将进位标志位C(位“累加器”)的值与直接寻址位的值进行逻辑与运算,结果存放到进位标志位C中。例如,指令:

ANL C,50H6)CJNE指令指令格式:CJNEA,direct,rel

CJNEA,#data,rel

CJNERn,#data,rel

CJNE@Ri,#data,rel指令描述:CJNE称为比较不相等转移指令,当源寻址单元的值与目标存储单元的值(或立即数)不相等时,程序跳转到rel设定的地址处执行,否则,程序顺序执行。CJNE指令的功能是比较前面两个操作数的大小,如果两者的值不相等则转移,把程序指针PC的值增量为下一条指令的起始地址后,再把指令最后一个字节的有符号的相对偏移量加到PC上,并计算出转向的目标地址。…

CJNE A,50H,NEXT1

AJMP NEXT2NEXT1:

LJMP NEXTNEXT2: …

…7)CLR指令指令格式:

CLRA

CLRC

CLRbit指令描述:CLR称为清零指令,可以以字节为单位将累加器A中的值清0,也可以以位为单位,将进位位C或位地址为bit的位清0。8)CPL指令

指令格式: CPLA

CPLC

CPLbit指令描述:CPL称为取反指令。9)DA指令指令格式: DA

A

指令描述:DA称为十进制调整指令,用于对累加器A中的BCD码十进制数加法运算结果的修正。10)DEC指令指令格式:

DECA DECRn

DECdirect

DEC@Ri指令描述:DEC指令称为减1指令

11)DIV指令指令格式: DIV

AB指令描述:DIV指令称为除法指令,其功能是把累加器A中8位无符号整数(被除数)除以B中的8位无符号整数(除数),所得的商(为整数)存放在累加器A中,余数在寄存器B中,清“0”C和溢出标志位OV。如果执行指令前B的内容为“0”(即除数为“0”),则存放结果的A、B中的内容不定,并置“1”溢出标志位OV。12)DJNZ指令

指令格式:

DJNZRn,rel

DJNZdirect,rel指令描述:DJNZ指令称为减1非0跳转指令,或者称为循环指令

MOV R7,#5LOOP:

DJNZ R7,LOOP

…13)INC指令指令格式: INCA

INCRn

INCdirect

INC@Ri

INCDPTR指令描述:INC指令称为增1指令14)JB指令指令格式: JBbit,rel指令描述:如果位地址bit为1,则跳转到rel设定的程序地址处执行;如果bit位为0则程序顺序执行。

JB 60H,NEXT

…NEXT:

…15)JBC指令指令格式: JBCbit,rel指令描述:如果位地址bit的值为1则跳转到rel设定的程序地址处执行,同时将被测试位清0;如果bit位的值为0则程序顺序执行。JBC指令和JB指令的区别在于,JBC指令在跳转的时候会将被测试位清0,而JB指令不将被测试位清0。16)JC指令

指令格式: JC

rel指令描述:如果进位位C为1,则跳转到rel设定的程序地址处执行;如果C为0则程序顺序执行。JC指令和JB指令的区别在于,JB指令测试的是直接地址位,而JC指令测试的是进位位C。17)JMP指令指令格式:

JMP

@A+DPTR指令描述:JMP指令称为分支跳转指令,跳转的目标地址由累加器A中8位无符号数与DPTR中的16位无符号数之和来确定。JMP指令的实用形式如下:

MOV B,#3

MUL AB

MOV DPTR,#BRANCH

JMP

@A+DPTRBRANCH: LJMP CON0

LJMP CON1

LJMP CON2

…18)JNB指令指令格式: JNBbit,rel

指令描述:如果直接寻址位bit为0,则跳转到rel设定的程序地址处执行;否则程序顺序执行。JNB指令和JB指令的区别在于,JB指令测试直接地址位bit是否为1,JNB指令测试直接地址位bit是否为0。19)JNC指令指令格式: JNC

rel指令描述:如果进位位C不为0,则跳转到rel设定的程序地址处执行;否则程序顺序执行。JNC指令和JB指令的区别在于,JB指令测试直接地址位bit是否为1,JNC指令测试进位位C的值是否为0。20)JNZ指令指令格式: JNZ

rel

指令描述:如果累加器A中的值不为0,则跳转到rel设定的程序地址处执行;否则程序顺序执行。JNZ指令和JB指令的区别在于,JB指令测试的是直接地址位bit是否为1,JNZ指令测试的是累加器A中的值(8位)是否不为0。21)JZ指令指令格式: JZ

rel指令描述:如果累加器A中的值为0,则跳转到rel设定的程序地址处执行;否则程序顺序执行。JZ指令和JB指令的区别在于,JB指令测试的是直接地址位bit是否为1,JZ指令测试的是累加器A中的值(8位)是否为0。22)LCALL指令指令格式:LCALL

addrl6指令描述:LCALL称为长调用指令,可以调用64K字节范围内程序存储器中的任何一个子程序。23)LJMP指令指令格式: LJMP

addrl6指令描述:LJMP称为长跳转指令,可以跳转到64K字节范围内程序存储器中的任何一个地址处执行。24)MOV指令指令格式:

MOV〈目标操作数〉,〈源操作数〉指令描述:MOV称为一般数据传送指令,是使用最频繁,指令格式最多的一条指令。上面给出的指令格式,是MOV指令的通用格式,其具体格式根据目标操作数不同而有多种类型。以下针对不同目标操作数,分类说明MOV指令的具体格式和功能。①以累加器为目的操作数格式:

MOVA,Rn

MOVA,@Ri

MOVA,direct

MOVA,#data②以Rn为目的操作数格式:

MOVRn,A

MOVRn,direct

MOVRn,#data

③以直接地址为目的操作数格式:

MOVdirect,A

MOVdirect,Rn

MOVdirect1,direct2

MOVdirect,@Ri

MOVdirect,#data

④以寄存器间接地址为目的操作数格式:

MOV@Ri,A

MOV@Ri,direct

MOV@Ri,#data

⑤16位数传送指令格式: MOVDPTR,#data16

功能:把16位立即数传送到数据地址指针DPTR中。这是整个指令系统中唯一的一条16位数据的传送指令,用来设置地址指针DPTR的值。地址指针DPTR由DPH和DPL组成。这条指令执行的结果把立即数的高8位送入DPH,立即数的低8位送入DPL。⑥数据位传送指令格式:MOVC,bit

MOVbit,C功能:指令格式第一行,把直接地址为bit的位中的值传送到进位位C中,第二行把进位位C中的值传送到直接地址为bit的位中。位传送指令中,一个操作数必须为进位位C,另—个可以是任何直接寻址位。25)MOVC指令指令格式: MOVCA,@A+PC

MOVCA,@A+DPTR指令描述:MOVC称为查表指令①以PC作基址寄存器

INC A

INC A

MOVC A,@A+PC

AJMP CONTINUTABLE: DB 00H,01H,02H,…CONTINU: …②以DPTR为基址寄存器

MOV DPTR,#TABLE

MOVC A,@A+DPTR

…26)MOVX指令指令格式:MOVXA,@DPTR

MOVXA,@Ri

MOVX@DPTR,A

MOVX@Ri,A

指令描述:MOVX指令用于累加器A与外部数据存储器之间数据传送。27)MUL指令指令格式: MUL

AB指令描述:MUL指令称为乘法指令,其功能是把累加器A和寄存器B中的无符号8位整数相乘,其16位积的低位字节在累加器A中,高位字节在B中。如果积大于255,则置“1”溢出标志位OV,否则清“0”OV。MUL指令执行后,进位标志位C总是被清“0”。28)NOP指令指令格式: NOP指令描述:NOP指令称为空操作指令,NOP指令不进行任何实际操作,只消耗一个机器周期的时间,常用于程序中的等待或时间的延迟。29)ORL指令指令格式: ORLA,Rn

ORLA,direct

ORLA,#data

ORLA,@Ri

ORLdirect,A

ORLdirect,#data

ORLC,bit指令描述:ORL称为逻辑或指令,能以字节为单位进行逻辑或运算,也能以位为单位进行运算。30)POP指令指令格式: POPdirect指令描述:POP称为出栈指令,功能是将堆栈指针SP指示的内部RAM单元的数值送人直接地址字节单元中,堆栈指针SP减1。31)PUSH指令指令格式: PUSHdirect指令描述:PUSH称为压栈指令,功能是首先将栈指针SP加1,然后把直接地址单元的数值压入栈指针SP指示的内部RAM单元中。32)RET指令指令格式: RET指令描述:RET称为子程序返回指令,功能是从堆栈中退出PC的高位和低位,同时把堆栈指针SP减2。33)RETI指令指令格式: RETI指令描述:RETI称为中断返回指令,功能是从堆栈中退出PC的高位和低位,把堆栈指针SP减2,同时清0相应的中断请求标志位。34)RL指令指令格式: RLA指令描述:RL指令将累加器A的8位值向左循环移一位35)RLC指令指令格式: RLCA指令描述:RLC指令将累加器A的8位值和进位标志位C一起向左循环移一位,C移入累加器最低位ACC.0,累加器最高位ACC.7移入进位位C

36)RR指令指令格式: RRA指令描述:RR指令将累加器A的8位值向右循环移一位37)RRC指令指令格式: RRCA指令描述:RRC指令将累加器A的8位值和进位标志位C一起向右循环移一位38)SETB指令指令格式: SETBC

SETBbit指令描述:SETB指令将进位位C或直接位地址为bit的位中的值置为1,SETB指令中的直接地址值只能是位地址39)SJMP指令指令格式: SJMPrel指令描述:由于SJMP指令的字长、执行时间与AJMP指令完全相同,但是跳转范围远小于AJMP指令,因而没有任何实用价值。40)SUBB指令指令格式:

SUBBA,Rn

SUBBA,direct

SUBBA,@Ri

SUBBA,#data指令描述:带借位的减法指令,其进行减法运算的特点是进位标志位C参与运算,因此带借位减法运算是三个数相减。41)SWAP指令

指令格式: SWAPA指令描述:SWAP称为累加器半字节交换指令,其功能是将累加器A的高半字节和低半字节的值互换。42)XCH指令指令格式: XCHA,Rn

XCHA,direct

XCHA,@Ri

指令描述:XCH称为字节交换指令,其功能是将累加器A中的值和被寻址内部数据存储单元的值相互交换。43)XCHD指令指令格式: XCHDA,@Ri指令描述:XCHD称为半字节交换指令,其功能是将累加器的低4位与间接寻址内部RAM单元的低4位交换。44)XRL指令指令格式: XRLA,Rn

XRLA,direct

XRLA,#data

XRLA,@Ri

XRLdirect,A

XRLdirect,#data指令描述:XRL称为逻辑异或指令,XRL指令只能以字节为单位进行逻辑异或运算。3.4

汇编语言程序开发的过程

(本节大部分内容课本没有)软件一般是以硬件为基础工作的,软件的设计要结合硬件来进行。根据系统硬件的功能和性能指标,首先设计出软件功能,然后对一个个功能模块进行编程实现。1)编译的基本概念如前所述,最终的程序,就是储存在存储器中的高、低电平物理信号,即二进制数值。MCS-51的程序存储器是以字节(8位)为单位的,因此在单片机的程序存储器中存放的是一个个8位的二进制数字。例如:111001010111000000010001程序可以用这样的二进制数来编写,然后采用特定的方法将这些二进制数烧写到EEPROM、FLASH等程序存储器中。这种二进制数表示的指令,称为机器码。机器码指令一般由操作码和操作数两部分构成,有些指令只有操作码,没有操作数,有些指令有两个操作数。例一的三个数值可以分为两个部分:机器码指令:01110101

0111000000010001(操作码)

(操作数)但是利用这样的二进制数表示程序,毕竟不直观,书写、分析起来都很困难,于是将操作码用具有一定含义的助记符来代替,操作数用十进制或十六进制数来代替。例二中的机器码指令可以用下面的程序语句来代替:程序语句:

MOV

70H,#11(操作码助记符)

(操作数)其中操作数如果用十六进制数表示,则后面带后缀“H”,如果不带后缀,则默认为十进制数。例三中的两个数值还是有些不直观,可以用两个具有一定含义的符号来代替,即替两个数值取个名字。例四令: COUNTER=70H STAGE=11则例三的程序语句可以写为:程序语句:

MOV

COUNTER,#STAGE形如例三、例五所示的指令,称为汇编语言指令,由汇编语言指令构成的程序,称为汇编语言程序。例四中的COUNTER、STAGE也称为符号、标号或变量名。在PC机(个人计算机)还不普及的时候,开发人员一般先在纸上利用汇编语言指令编写程序,并进行仔细推敲、修改,再人工翻译成机器码。因为要在机器码和汇编语言之间反复相互翻译,所以开发编程人员都很熟悉机器码指令,有些简单的程序甚至直接用机器码指令编写。将汇编语言程序翻译成机器码程序,是一个繁杂的过程,不仅要对指令的机器码比较熟悉,还要熟悉每条指令的机器码长度,并要经常对程序的长度进行精确计算。有些指令对于汇编语言来说是确定的,对于机器码指令来说,是变化的。例如:1000H JC

NEXT…

…1020H NEXT:

NOP第一行指令机器码为:4020H因此,修改汇编程序是容易的,但是要修改机器码程序,添加或删除指令,则所有的跳转类指令,都要重新计算跳转长度,从而修改有关的指令机器码。这就是许多MCS-51的资料中,在介绍跳转类指令时,都要介绍比较繁杂的地址计算方法的原因。随着PC机的普及应用,一般在PC机上以文本文档的格式编写汇编语言程序,这种文本文档称为汇编语言源程序或源代码,文件扩展名为.asm。用助记符、标号和变量名代表指令机器码的汇编语言源程序,必须经过PC机上的编译软件翻译成机器码文件,才能通过专门的硬件编程器烧写到程序存储器中执行。对于现在的应用程序开发人员来说,没有必要熟悉指令的机器码,通常也没有必要了解指令的机器码长度和计算跳转的目标地址,这些翻译、计算工作,都由PC机上的专门编译软件来完成。将汇编语言源程序文件翻译成机器码文件的过程称为汇编或编译,完成编译功能的PC机软件称为编译器或汇编器(Assembler)。编译形成的机器码文件,称为目标文件,扩展名一般为.obj。将机器码程序翻译成汇编语言程序的过程称为反汇编。令: COUNTER=70H STAGE=11也可以写成指令的形式,如:COUNTER EQU

70HSTAGE EQU

11这两行语句,在形式上与汇编语言指令是相同的,但是并不能够翻译成机器码指令,只是告诉翻译人员或编译软件,翻译时遇到“COUNTER”就换成数值“70H”,遇到“STAGE”就换成“11”。类似这种不能翻译成机器码的指令,称为伪指令。指令是与机器硬件对应的,不同的机器硬件具有不同的指令集;伪指令是与编译软件对应的,不同的编译软件支持不同的伪指令集。用C语言等高级语言编写的源程序,还要先翻译成汇编语言源程序,再编译成机器码目标文件。相对来说,汇编语言、机器码语言属于低级语言,高级语言必须翻译成低级语言,才能被机器硬件接受。将C语言源程序翻译成汇编语言源程序的PC机软件,称为C编译器。每一行高级语言语句,实际上可能对应若干条汇编语言指令,并且因编译软件(翻译人员)不同而存在差异。而将汇编语言翻译成机器码,则不管谁来翻译,结果都是一样的。2)用户程序开发的过程

汇编语言源程序文件,以扩展名.asm表示。汇编语言程序可以编写在一个源程序文件中,也可以编写在两个或多个源文件中;可以由一个人编写,也可以由不同的人分开来写。不同的文件中保存的可以分别是汇编代码或C代码,以便于程序的模块化设计。只要编译软件支持,同一个源程序文件中,可以一段汇编指令、一段C语言函数交替编写。某些常用功能的程序内容,比如各种计算类程序,可以先编写好多个通用源文件,然后用PC机上专门的软件将这些通用源文件组合成一个源文件库。实现这种组合功能的PC机软件称为存档器(Archiver)。也可以将各个通用源文件分别编译,形成各自的目标文件,再建立一个目标文件库。编译器将各个源文件、源文件库编译成相应的目标文件,目标文件一般用扩展名.obj表示。这些目标文件还要按一定的方式进一步组合起来,才能烧写到程序存储器中在机器上执行。将不同的目标文件、目标文件库中的内容组合到一起的过程,称为程序的链接(也称为连接)。完成链接功能的PC机软件,称为链接器(Linker)。链接生成的目标文件,称为可执行目标文件,一般用扩展名.hex表示。即使只有一个源文件,也必须进行链接,以把目标文件变成可执行的目标文件。库文件、多个文件组合成一个文件,一般都是针对C语言源程序的。对于汇编语言源文件来说,一般没有必要弄出多个源文件来。早期的编译软件也有将汇编源文件直接生成可执行的.hex十六进制目标文件,或者直接生成可执行的.bin二进制

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论