2022年ARM汇编指令 .pdf
1 / 21 汇编指令处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器()处理指令、加载存储指令、协处理器指令和异常产生指令大指令。一、跳转指令跳转指令用于实现程序流程的跳转,在程序中有以下两种方法可以实现程序流程的跳转。.使用专门的跳转指令;.直接向程序计数器写入跳转地址值,通过向程序计数器写入跳转地址值,可以实现在的地址空间中的任意跳转,在跳转之前结合使用,等类似指令, 可以保存将来的返回地址值,从而实现在连续的线性地址空间的子程序调用。指令集中的跳转指令可以完成从当前指令向前或向后的的地址空间的跳转,包括以下条指令:、指令指令的格式为:条件 目标地址指令是最简单的跳转指令。一旦遇到一个指令,处理器将立即跳转到给定的目标地址,从那里继续执行。注意存储在跳转指令中的实际值是相对当前值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。它是位有符号数,左移两位后有符号扩展为位,表示的有效偏移为位(前后的地址空间)。以下指令:;程序无条件跳转到标号处执行,;当寄存器中的条件码置位时,程序跳转到标号处执行、指令指令的格式为:条件 目标地址是另一个跳转指令,但跳转之前,会在寄存器中保存的当前内容,因此,可以通过将的内容重新加载到中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个基本但常用的手段。以 下指令:;当程序无条件跳转到标号处执行时,同时将当前的值保存到; ()中、指令指令的格式为:目标地址指令从指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有状态切换到状态,该指令同时将的当前内容保存到寄存器中。因此,当子程序使用指令集,而调用者使用指令集时,可以通过指令实现子程序的调用和处理器工作状态的切换。同时,子程序的返回可以通过将寄存器值复制到中来完成。、指令指令的格式为:条件 目标地址指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是指令,也可以是指令。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 21 页 - - - - - - - - - 2 / 21 二、数据处理指令数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。数据传送指令用于在寄存器和存储器之间进行数据的双向传输;算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新中的相应条件标志位;比较指令不保存运算结果,只更新中相应的条件标志位。数据处理指令共以下条。、指令(传送)指令的格式为:条件 目的寄存器,源操作数指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中选项决定指令的操作是否影响中条件标志位的值,当没有时指令不更新中条件标志位的值。指令示例:,;将寄存器的值传送到寄存器,;将寄存器的值传送到,常用于子程序返回, ,;将寄存器的值左移位后传送到、指令(求反)指令的格式为:条件 目的寄存器,源操作数指令可完成从另一个寄存器、被移位的寄存器、或将一个立即数加载到目的寄存器。与指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。其中决定指令的操作是否影响中条件标志位的值,当没有时指令不更新中条件标志位的值。指令示例:,;将立即数取反传送到寄存器中,完成后、指令(比较)指令的格式为:条件 操作数,操作数指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新中条件标志位的值。 该指令进行一次减法运算,但不存储结果,只更改条件标志位。标志位表示的是操作数与操作数的关系(大、小、相等 ),例如,当操作数大于操作操作数,则此后的有后缀的指令将可以执行。指令示例:,;将寄存器的值与寄存器的值相减,并根据结果设置的标;志位,;将寄存器的值与立即数相减,并根据结果设置的标志位、指令(负数比较)指令的格式为:条件 操作数,操作数指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,同时更新中条件标志位的值。该指令实际完成操作数和操作数相加,并根据结果更改条件标志位。指令示例:,;将寄存器的值与寄存器的值相加,并根据结果设置;的标志位,;将寄存器的值与立即数相加,并根据结果设置的标志位名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 21 页 - - - - - - - - - 3 / 21 、指令(测试)指令的格式为:条件 操作数,操作数指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新中条件标志位的值。操作数是要测试的数据,而操作数是一个位掩码,该指令一般用来检测是否设置了特定的位。指令示例:,;用于测试在寄存器中是否设置了最低位(表示二进制数),;将寄存器的值与立即数按位与,并根据结果设置;的标志位、指令(测试相等)指令的格式为:条件 操作数,操作数指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,并根据运算结果更新中条件标志位的值。该指令通常用于比较操作数和操作数是否相等。指令示例:,;将寄存器的值与寄存器的值按位异或,并根据结果设置;的标志位、指令(相加)指令的格式为: 条件 目的寄存器,操作数,操作数指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数应是一个寄存器,操作数可以是一个寄存器,被移位的寄存器,或一个立即数。指令示例:, ,;, ,;, , ,;( ) 、指令(带进位相加)指令的格式为:条件 目的寄存器,操作数,操作数指令用于把两个操作数相加,再加上中的条件标志位的值,并将结果存放到目的寄存器中。它使用一个进位标志位,这样就可以做比位大的数的加法,注意不要忘记设置后缀来更改进位标志。操作数应是一个寄存器,操作数可以是一个寄存器,被移位的寄存器,或一个立即数。以下指令序列完成两个位数的加法,第一个数由高到低存放在寄存器,第二个数由高到低存放在寄存器,运算结果由高到低存放在寄存器:, ,; 加低端的字, ,; 加第二个字,带进位, ,; 加第三个字,带进位, ,; 加第四个字,带进位、指令(相减)指令的格式为:条件 目的寄存器,操作数,操作数指令用于把操作数减去操作数,并将结果存放到目的寄存器中。操作数应是一个寄存器,操名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 3 页,共 21 页 - - - - - - - - - 4 / 21 作数可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。指令示例:, ,;, ,;, , ,;( ) 、指令指令的格式为:条件 目的寄存器,操作数,操作数指令用于把操作数减去操作数,再减去中的条件标志位的反码,并将结果存放到目的寄存器中。操作数应是一个寄存器,操作数可以是一个寄存器, 被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于位的减法,注意不要忘记设置后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。指令示例:, ,;! ,并根据结果设置的进位标志位、指令指令的格式为:条件 目的寄存器,操作数,操作数指令称为逆向减法指令,用于把操作数减去操作数,并将结果存放到目的寄存器中。操作数应是一个寄存器,操作数可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。指令示例:, ,;, ,;, , ,;( ) 、指令(反向带进位减)指令的格式为:条件 目的寄存器,操作数,操作数指令用于把操作数减去操作数,再减去中的条件标志位的反码,并将结果存放到目的寄存器中。操作数应是一个寄存器,操作数可以是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于位的减法,注意不要忘记设置后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。指令示例:, ,;!、指令(逻辑位与)指令的格式为: 条件 目的寄存器,操作数,操作数指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。操作数应是一个寄存器,操作数可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于屏蔽操作数的某些位。指令示例:, ,;该指令保持的、位,其余位清零。、指令(逻辑位或)指令的格式为:名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 21 页 - - - - - - - - - 5 / 21 条件 目的寄存器,操作数,操作数指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数应是一个寄存器,操作数可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操作数的某些位。指令示例:, ,;该指令设置的、位,其余位保持不变。、指令(逻辑位异或)指令的格式为: 条件 目的寄存器,操作数,操作数指令用于在两个操作数上进行逻辑异或运算,并把结果放置到目的寄存器中。操作数应是一个寄存器,操作数可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于反转操作数的某些位。指令示例:, ,;该指令反转的、位,其余位保持不变。、指令(位清零)指令的格式为: 条件 目的寄存器,操作数,操作数指令用于清除操作数的某些位,并把结果放置到目的寄存器中。操作数应是一个寄存器,操作数可以是一个寄存器,被移位的寄存器,或一个立即数。操作数为位的掩码,如果在掩码中设置了某一位,则清除这一位。未设置的掩码位保持不变。指令示例:, ,;该指令清除中的位、 、和,其余的位保持不变。三、乘法指令与乘加指令微处理器支持的乘法指令与乘加指令共有条,可分为运算结果为位和运算结果为位两类,与前面的数据处理指令不同,指令中的所有操作数、目的寄存器必须为通用寄存器,不能对操作数使用立即数或被移位的寄存器,同时,目的寄存器和操作数必须是不同的寄存器。乘法指令与乘加指令共有以下条:、指令(相乘)指令的格式为: 条件 目的寄存器,操作数,操作数指令完成将操作数与操作数的乘法运算,并把结果放置到目的寄存器中,同时可以根据运算结果设置中相应的条件标志位。其中,操作数和操作数均为位的有符号数或无符号数。指令示例:, ,;, ,;,同时设置中的相关条件标志位、指令(带累加的相乘)指令的格式为: 条件 目的寄存器,操作数,操作数,操作数指令完成将操作数与操作数的乘法运算,再将乘积加上操作数,并把结果放置到目的寄存器中,同时可以根据运算结果设置中相应的条件标志位。其中,操作数和操作数均为位的有符号数或无符号数。指令示例:名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 5 页,共 21 页 - - - - - - - - - 6 / 21 , , ,;, , ,;,同时设置中的相关条件标志位、指令指令的格式为: 条件 目的寄存器,目的寄存器,操作数,操作数指令完成将操作数与操作数的乘法运算,并把结果的低位放置到目的寄存器中,结果的高位放置到目的寄存器中,同时可以根据运算结果设置中相应的条件标志位。其中,操作数和操作数均为位的有符号数。指令示例:, , ,;( )的低位;( )的高位、指令指令的格式为:条件 目的寄存器,目的寄存器,操作数,操作数指令完成将操作数与操作数的乘法运算,并把结果的低位同目的寄存器中的值相加后又放置到目的寄存器中,结果的高位同目的寄存器中的值相加后又放置到目的寄存器中,同时可以根据运算结果设置中相应的条件标志位。其中,操作数和操作数均为位的有符号数。对于目的寄存器,在指令执行前存放位加数的低位,指令执行后存放结果的低位;对于目的寄存器,在指令执行前存放位加数的高位,指令执行后存放结果的高位。指令示例:, , ,;( )的低位;( )的高位、指令指令的格式为:条件 目的寄存器,目的寄存器,操作数,操作数指令完成将操作数与操作数的乘法运算,并把结果的低位放置到目的寄存器中,结果的高位放置到目的寄存器中,同时可以根据运算结果设置中相应的条件标志位。其中,操作数和操作数均为位的无符号数。指令示例:, , ,;( )的低位;( )的高位、指令指令的格式为:条件 目的寄存器,目的寄存器,操作数,操作数指令完成将操作数与操作数的乘法运算,并把结果的低位同目的寄存器中的值相加后又放置到目的寄存器中,结果的高位同目的寄存器中的值相加后又放置到目的寄存器中,同 时可以根据运算结果设置中相应的条件标志位。其中,操作数和操作数均为位的无符号数。对于目的寄存器,在指令执行前存放位加数的低位,指令执行后存放结果的低位;对于目的寄存器,在指令执行前存放位加数的高位,指令执行后存放结果的高位。指令示例:, , ,;( )的低位;( )的高位四、程序状态寄存器访问指令、指令名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 6 页,共 21 页 - - - - - - - - - 7 / 21 指令的格式为:条件 通用寄存器程序状态寄存器(或)指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下两种情况:.当需要改变程序状态寄存器的内容时,可用将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。.当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存。指令示例:,;传送的内容到,;传送的内容到、指令指令的格式为: 条件 程序状态寄存器(或),操作数指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中,操作数可以为通用寄存器或立即数。 用于设置程序状态寄存器中需要操作的位,位的程序状态寄存器可分为个域:位:为条件位域,用表示;位:为状态位域,用表示;位: 为扩展位域,用表示;位: 为控制位域,用表示;该指令通常用于恢复或改变程序状态寄存器的内容,在使用时, 一般要在指令中指明将要操作的域。指令示例:,;传送的内容到,;传送的内容到,;传送的内容到,但仅仅修改中的控制位域五、加载存储指令。 微处理器支持加载存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。常用的加载存储指令如下:、指令指令的格式为:条件 目的寄存器, 指令用于从存储器中将一个位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取位的字数据到通用寄存器,然后对数据进行处理。当程序计数器作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令在程序设计中比较常用,且寻址方式灵活多样,请读者认真掌握。指令示例:, ;将存储器地址为的字数据读入寄存器。, ;将存储器地址为的字数据读入寄存器。, ;将存储器地址为的字数据读入寄存器。, !;将存储器地址为的字数据读入寄存器,并将新地址;写入。, !;将存储器地址为的字数据读入寄存器,并将新地址;写入。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 7 页,共 21 页 - - - - - - - - - 8 / 21 , ,;将存储器地址为的字数据读入寄存器,并将新地址;写入。, , ! ;将存储器地址为 的字数据读入寄存器,并;将新地址 写入。, , ,;将存储器地址为的字数据读入寄存器,并将新地;址 写入。、指令指令的格式为: 条件 目的寄存器, 指令用于从存储器中将一个位的字节数据传送到目的寄存器中,同时将寄存器的高位清零。该指令通常用于从存储器中读取位的字节数据到通用寄存器,然后对数据进行处理。当程序计数器作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。指令示例:, ;将存储器地址为的字节数据读入寄存器,并将的高;位清零。, ;将存储器地址为的字节数据读入寄存器,并将的;高位清零。、指令指令的格式为: 条件 目的寄存器, 指令用于从存储器中将一个位的半字数据传送到目的寄存器中,同时将寄存器的高位清零。该指令通常用于从存储器中读取位的半字数据到通用寄存器,然后对数据进行处理。当程序计数器作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。指令示例:, ;将存储器地址为的半字数据读入寄存器,并将的高;位清零。, ;将存储器地址为的半字数据读入寄存器,并将的;高位清零。, ;将存储器地址为的半字数据读入寄存器,并将的;高位清零。、指令指令的格式为: 条件 源寄存器, 指令用于从源寄存器中将一个位的字数据传送到存储器中。该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令。指令示例:, ,;将中的字数据写入以为地址的存储器中,并将新地址;写入。, ;将中的字数据写入以为地址的存储器中。、指令指令的格式为: 条件 源寄存器, 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 8 页,共 21 页 - - - - - - - - - 9 / 21 指令用于从源寄存器中将一个位的字节数据传送到存储器中。该字节数据为源寄存器中的低位。指令示例:, ;将寄存器中的字节数据写入以为地址的存储器中。, ;将寄存器中的字节数据写入以为地址的存储器中。、指令指令的格式为:条件 源寄存器, 指令用于从源寄存器中将一个位的半字数据传送到存储器中。该半字数据为源寄存器中的低位。指令示例:, ;将寄存器中的半字数据写入以为地址的存储器中。, , ;将寄存器中的半字数据写入以为地址的存储器中。六、批量数据加载存储指令。微处理器所支持批量数据加载存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送数据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。常用的加载存储指令如下:(或)指令(或)指令的格式为:(或) 条件 类型 基址寄存器 ! ,寄存器列表 (或)指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据,该指令的常见用途是将多个寄存器的内容入栈或出栈。其中,类型 为 以下几种情况:每次传送后地址加;每次传送前地址加;每次传送后地址减;每次传送前地址减;满递减堆栈;空递减堆栈;满递增堆栈;空递增堆栈;!为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不改变。基址寄存器不允许为,寄存器列表可以为的任意组合。为可选后缀, 当指令为且寄存器列表中包含,选用该后缀时表示:除了正常的数据传送之外,还将复制到。同时,该后缀还表示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄存器。指令示例:!, , ;将寄存器列表中的寄存器(,到,)存入堆栈。!, , , ;将堆栈内容恢复到寄存器(,到,) 。七、数据交换指令、指令指令的格式为:名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 9 页,共 21 页 - - - - - - - - - 10 / 21 条件 目的寄存器,源寄存器,源寄存器 指令用于将源寄存器所指向的存储器中的字数据传送到目的寄存器中,同时将源寄存器中的字数据传送到源寄存器所指向的存储器中。显然,当源寄存器和目的寄存器为同一个寄存器时,指令交换该寄存器和存储器的内容。指令示例:, , ;将所指向的存储器中的字数据传送到,同时将中的字数据传送到所指向的存储单元。, , ;该指令完成将所指向的存储器中的字数据与中的数据交换。、指令指令的格式为:条件 目的寄存器,源寄存器,源寄存器 指令用于将源寄存器所指向的存储器中的字节数据传送到目的寄存器中,目的寄存器的高清零,同时将源寄存器中的字节数据传送到源寄存器所指向的存储器中。显然,当源寄存器和目的寄存器为同一个寄存器时,指令交换该寄存器和存储器的内容。指令示例:, , ;将所指向的存储器中的字节数据传送到,的高位清零,同时将中的低位数据传送到所指向的存储单元。, , ;该指令完成将所指向的存储器中的字节数据与中的低位数据交换。八、移位指令、 (或)(或)的格式为:通用寄存器, (或)操作数(或) 可完成对通用寄存器中的内容进行逻辑(或算术) 的左移操作, 按操作数所指定的数量向左移位,低位用零来填充。其中,操作数可以是通用寄存器,也可以是立即数()。操作示例, , ;将中的内容左移两位后传送到中。、的格式为:通用寄存器,操作数可完成对通用寄存器中的内容进行右移的操作,按操作数所指定的数量向右移位,左端用零来填充。其中,操作数可以是通用寄存器,也可以是立即数()。操作示例:, , ;将中的内容右移两位后传送到中,左端用零来填充。、的格式为:通用寄存器,操作数可完成对通用寄存器中的内容进行右移的操作,按操作数所指定的数量向右移位,左端用第位的值来填充。其中,操作数可以是通用寄存器,也可以是立即数()。操作示例:, , ;将中的内容右移两位后传送到中,左端用第位的值来填充。、的格式为:通用寄存器,操作数可完成对通用寄存器中的内容进行循环右移的操作,按操作数所指定的数量向右循环移位,名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 10 页,共 21 页 - - - - - - - - - 11 / 21 左端用右端移出的位来填充。其中,操作数可以是通用寄存器,也可以是立即数() 。显然,当进行位的循环右移操作时,通用寄存器中的值不改变。操作示例:, , ;将中的内容循环右移两位后传送到中。、的格式为:通用寄存器,操作数可完成对通用寄存器中的内容进行带扩展的循环右移的操作,按操作数所指定的数量向右循环移位,左端用进位标志位来填充。其中,操作数可以是通用寄存器,也可以是立即数 ()。操作示例:, , ;将中的内容进行带扩展的循环右移两位后传送到中。九、协处理器指令、指令指令的格式为:条件 协处理器编码,协处理器操作码,目的寄存器,源寄存器,源寄存器,协处理器操作码。指令用于处理器通知协处理器执行特定的操作,若协处理器不能成功完成特定的操作,则产生未定义指令异常。其中协处理器操作码和协处理器操作码为协处理器将要执行的操作,目的寄存器和源寄存器均为协处理器的寄存器,指令不涉及处理器的寄存器和存储器。指令示例:, , , , ,;该指令完成协处理器的初始化、指令指令的格式为:条件 协处理器编码,目的寄存器,源寄存器 指令用于将源寄存器所指向的存储器中的字数据传送到目的寄存器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。其中, 选项表示指令为长读取操作,如用于双精度数据的传输。指令示例:, , ;将处理器的寄存器所指向的存储器中的字数据传送到协处理器的寄存器中。、指令指令的格式为:条件 协处理器编码,源寄存器,目的寄存器 指令用于将源寄存器中的字数据传送到目的寄存器所指向的存储器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。其中, 选项表示指令为长读取操作,如用于双精度数据的传输。指令示例:, , ;将协处理器的寄存器中的字数据传送到处理器的寄存器所指向的存储器中。、指令指令的格式为:条件 协处理器编码,协处理器操作码,源寄存器,目的寄存器,目的寄存器,协处理器操作码。指令用于将处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码和协处理器操作码为协处理器将要执行名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 11 页,共 21 页 - - - - - - - - - 12 / 21 的操作,源寄存器为处理器的寄存器,目的寄存器和目的寄存器均为协处理器的寄存器。指令示例:, , , , ,;将处理器寄存器中的数据传送到协处理器的寄存器和中。、指令指令的格式为:条件 协处理器编码,协处理器操作码,目的寄存器,源寄存器,源寄存器,协处理器操作码。指令用于将协处理器寄存器中的数据传送到处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码和协处理器操作码为协处理器将要执行的操作,目的寄存器为处理器的寄存器,源寄存器和源寄存器均为协处理器的寄存器。指令示例:, , , , ,;该指令将协处理器的寄存器中的数据传送到处理器寄存器中。十、异常产生指令、指令指令的格式为:条件 位的立即数指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。操作系统在的异常处理程序中提供相应的系统服务,指令中位的立即数指定用户程序调用系统例程的类型,相关参数通过通用寄存器传递,当指令中位的立即数被忽略时,用户程序调用系统例程的类型由通用寄存器的内容决定,同时,参数通过其他通用寄存器传递。指令示例:;该指令调用操作系统编号位的系统例程。、指令指令的格式为:位的立即数指令产生软件断点中断,可用于程序的调试。汇编伪指令在汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。在 的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令 、宏指令以及其他伪指令。一、符号定义()伪指令符号定义伪指令用于定义汇编程序中的变量、 对变量赋值以及定义寄存器的别名等操作。常见的符号定义伪指令有如下几种: 用于定义全局变量的、 和 。 用于定义局部变量的、 和 。 用于对变量赋值的、 、 。 为通用寄存器列表定义名称的。、 、 和语法格式:( 或 )全局变量名、 和 伪指令用于定义一个程序中的全局变量,并将其初始化。其中:名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 12 页,共 21 页 - - - - - - - - - 13 / 21 伪指令用于定义一个全局的数字变量,并初始化为;伪指令用于定义一个全局的逻辑变量,并初始化为(假);伪指令用于定义一个全局的字符串变量,并初始化为空;由于以上三条伪指令用于定义全局变量,因此在整个程序范围内变量名必须唯一。使用示例:;定义一个全局的数字变量,变量名为。;将该变量赋值为。;定义一个全局的逻辑变量,变量名为。 ;将该变量赋值为真。;定义一个全局的字符串变量,变量名为。“” ;将该变量赋值为 ” 。、 、 和语法格式:( 或)局部变量名、 和 伪指令用于定义一个程序中的局部变量,并将其初始化。其中:伪指令用于定义一个局部的数字变量,并初始化为;伪指令用于定义一个局部的逻辑变量,并初始化为(假);伪指令用于定义一个局部的字符串变量,并初始化为空;以上三条伪指令用于声明局部变量,在其作用范围内变量名必须唯一。使用示例:;声明一个局部的数字变量,变量名为。;将该变量赋值为。;声明一个局部的逻辑变量,变量名为。 ;将该变量赋值为真。;定义一个局部的字符串变量,变量名为。“” ;将该变量赋值为 ” 。、 、 和语法格式:变量名( 或)表达式伪指令、 、 用于给一个已经定义的全局变量或局部变量赋值。伪指令用于给一个数学变量赋值;伪指令用于给一个逻辑变量赋值;伪指令用于给一个字符串变量赋值;其中,变量名为已经定义过的全局变量或局部变量,表达式为将要赋给变量的值。使用示例:;声明一个局部的数字变量,变量名为。;将该变量赋值为。;声明一个局部的逻辑变量,变量名为。 ;将该变量赋值为真。、语法格式:名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 13 页,共 21 页 - - - - - - - - - 14 / 21 名称 寄存器列表 伪指令可用于对一个通用寄存器列表定义名称,使用该伪指令定义的名称可在指令中使用。 在指令中, 列表中的寄存器访问次序为根据寄存器的编号由低到高,而与列表中的寄存器排列次序无关。使用示例: , , ;将寄存器列表名称定义为,可在指令中通过该名称访问寄存器列表。二、数据定义()伪指令数据定义伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。常见的数据定义伪指令有如下几种:用于分配一片连续的字节存储单元并用指定的数据初始化。 ()用于分配一片连续的半字存储单元并用指定的数据初始化。()用于分配一片连续的字存储单元并用指定的数据初始化。 ()用于为双精度的浮点数分配一片连续的字存储单元并用指定的数据初始化。 ()用于为单精度的浮点数分配一片连续的字存储单元并用指定的数据初始化。 ()用于分配一片以字节为单位的连续的存储单元并用指定的数据初始化。用于分配一片连续的存储单元。用于定义一个结构化的内存表首地址。用于定义一个结构化的内存表的数据域。、语法格式:标号表达式伪指令用于分配一片连续的字节存储单元并用伪指令中指定的表达式初始化。其中,表达式可以为的数字或字符串。也可用 “”代替。使用示例:“ ” ;分配一片连续的字节存储单元并初始化。、 (或)语法格式:标号(或) 表达式(或)伪指令用于分配一片连续的半字存储单元并用伪指令中指定的表达式初始化。其中,表达式可以为程序标号或数字表达式。用分配的字存储单元是半字对齐的,而用分配的字存储单元并不严格半字对齐。使用示例:, , ;分配一片连续的半字存储单元并初始化。、 (或)语法格式:标号(或)表达式(或)伪指令用于分配一片连续的字存储单元并用伪指令中指定的表达式初始化。其中,表达式可以为程序标号或数字表达式。也可用; ” 代替。用分配的字存储单元是字对齐的,而用分配的字存储单元并不严格字对齐。使用示例:, , ;分配一片连续的字存储单元并初始化。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 14 页,共 21 页 - - - - - - - - - 15 / 21 、 (或)语法格式:标号(或)表达式(或)伪指令用于为双精度的浮点数分配一片连续的字存储单元并用伪指令中指定的表达式初始化。每个双精度的浮点数占据两个字单元。用分配的字存储单元是字对齐的,而用分配的字存储单元并不严格字对齐。使用示例:, ;分配一片连续的字存储单元并初始化为指定的双精度数。、 (或)语法格式:标号(或)表达式(或)伪指令用于为单精度的浮点数分配一片连续的字存储单元并用伪指令中指定的表达式初始化。每个单精度的浮点数占据一个字单元。用分配的字存储单元是字对齐的,而用分配的字存储单元并不严格字对齐。使用示例:, ;分配一片连续的字存储单元并初始化为指定的单精度数。、(或)语法格式:标号(或)表达式(或) 伪指令用于分配一片以个字节(双字 )为单位的连续存储区域并用伪指令中指定的表达式初始化。用分配的存储单元是字对齐的,而用分配的存储单元并不严格字对齐。使用示例:;分配一片连续的存储单元并初始化为指定的值。、语法格式:标号表达式伪指令用于分配一片连续的存储区域并初始化为。其中,表达式为要分配的字节数。也可用 “ ” 代替。使用示例:;分配连续字节的存储单元并初始化为。、语法格式:表达式 ,基址寄存器 伪指令用于定义一个结构化的内存表的首地址。也可用“ ” 代替。表达式可以为程序中的标号或数学表达式,基址寄存器为可选项,当基址寄存器选项不存在时,表达式的值即为内存表的首地址,当该选项存在时,内存表的首地址为表达式的值与基址寄存器的和。伪指令通常与伪指令配合使用来定义结构化的内存表。使用示例:, ;定义结构化内存表首地址的值为。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 15 页,共 21 页 - - - - - - - - - 16 / 21 、语法格式:标号表达式伪指令用于定义一个结构化内存表中的数据域。也可用 “” 代替。表达式的值为当前数据域在内存表中所占的字节数。伪指令常与伪指令配合使用来定义结构化的内存表。伪指令定义内存表的首地址,伪指令定义内存表中的各个数据域,并可以为每个数据域指定一个标号供其他的指令引用。注意和伪指令仅用于定义数据结构,并不实际分配存储单元。使用示例:; 定义结构化内存表首地址的值为。; 定义的长度为字节,位置为。; 定义的长度为字节,位置为。;定义的长度为字节,位置为。三、汇编控制()伪指令汇编控制伪指令用于控制汇编程序的执行流程,常用的汇编控制伪指令包括以下几条:、 、 、 、语法格式:逻辑表达式指令序列指令序列、 、伪指令能根据条件的成立与否决定是否执行某个指令序列。当后面的逻辑表达式为真,则执行指令序列,否则执行指令序列。其中,及指令序列可以没有,此时,当后面的逻辑表达式为真,则执行指令序列,否则继续执行后面的指令。、 、伪指令可以嵌套使用。使用示例:;声明一个全局的逻辑变量,变量名为指令序列指令序列、 、语法格式:逻辑表达式指令序列名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 16 页,共 21 页 - - - - - - - - - 17 / 21 、伪指令能根据条件的成立与否决定是否循环执行某个指令序列。当后面的逻辑表达式为真,则执行指令序列,该指令序列执行完毕后,再判断逻辑表达式的值,若为真则继续执行,一直到逻辑表达式的值为假。、伪指令可以嵌套使用。使用示例:;声明一个全局的数学变量,变量名为;由变量控制循环次数; 指令序列、 、语法格式:$ 标号宏名$ 参数,$ 参数,指令序列、伪指令可以将一段代码定义为一个整体,称为宏指令,然后就可以在程序中通过宏指令多次调用该段代码。其中,$标号在宏指令被展开时,标号会被替换为用户定义的符号,宏指令可以使用一个或多个参数,当宏指令被展开时,这些参数被相应的值替换。宏指令的使用方式和功能与子程序有些相似,子程序可以提供模块化的程序设计、节省存储空间并提高运行速度。但在使用子程序结构时需要保护现场,从而增加了系统的开销,因此,在代码较短且需要传递的参数较多时,可以使用宏指令代替子程序。包含在和之间的指令序列称为宏定义体,在宏定义体的第一行应声明宏的原型(包含宏名、所需的参数) ,然后就可以在汇编程序中通过宏名来调用该指令序列。在源程序被编译时,汇编器将宏调用展开,用宏定义中的指令序列代替程序中的宏调用,并将实际参数的值传递给宏定义