TI指令集学习(一)

该文档描述了处理器的 算术右移(ASR)指令,重点介绍了其语法和功能:
主要特性:
-
指令名称:ASR AX, #1...16
该指令对指定的 AX 寄存器(高寄存器 AH 或低寄存器 AL)进行算术右移操作,移位的数量由#1-16字段指定(即移位的位数为 1 到 16 位)。 -
操作码:触发 ASR 操作的操作码是
1111 1111 101A SHIFT。 -
操作数:
- AX:执行算术右移操作的寄存器,可以是累加器高(AH)或累加器低(AL)寄存器。
- #1-16:指定移位的位数(从 1 到 16 位)。
-
操作:
- 该移位是算术移位,意味着值会进行符号扩展。当位移出时,最后移出的位会存储在进位标志位(C)中,其他移出的位会被丢弃。
-
标志位和模式:
- N(负标志):如果移位后 AX 的第 15 位为 1,则设置该标志;否则,清除该标志。
- Z(零标志):如果移位后 AX 为 0,则设置该标志;否则,清除该标志。
- C(进位标志):存储从 AX 移出的最后一位。
-
重复执行:该指令不可重复执行。如果它跟随 RPT(重复)指令执行,则会重置重复计数器(RPTC),并且只执行一次。
示例:
文中给出的示例展示了如何使用 ASR 指令来进行带符号的除法计算。计算公式为 (VarA + VarB) >> 2,具体执行步骤如下:
- MOV AL, @VarA:将 VarA 的内容加载到 AL 寄存器中。
- ADD AL, @VarB:将 VarB 加到 AL 中。
- ASR AL, #2:将 AL 寄存器的内容右移 2 位(相当于除以 4)。
- MOV @VarC, AL:将结果存储到 VarC 中。
总结:
ASR 指令用于对寄存器内容进行带符号的右移,适用于算术运算如除法。移位后的标志位(N、Z 和 C)会根据移位的结果进行更新。该指令是不可重复执行的,除非显式重置。
算术右移操作:该操作对指定的 AX 寄存器(可以是高寄存器 AH 或低寄存器 AL)进行右移,移位的数量由“移位值”(shift value)字段给定。
符号扩展:在进行右移操作时,移位过程会进行 符号扩展。这意味着,如果原值是负数(即符号位为 1),移位过程中左侧会补充符号位(1);如果是正数,左侧补充 0。
进位标志:在移位操作过程中,最后移出 AX 寄存器的位(即最右边被移出的位)将被存储到 进位标志位(Carry flag, C) 中。这是因为在算术右移时,位移过程中被丢弃的最右边的位通常包含重要的符号信息,因此存储到进位标志中。
1. +XAR7[0] 中的 + 的含义:
在这条指令中,+ 是 地址计算操作符,用于表示地址加法。在汇编语言中,它经常出现在 寻址模式 中,指示如何计算最终的内存地址。
-
+XAR7[0]:这里的+符号表示使用 XAR7 寄存器中存储的值作为地址,并没有进行任何偏移或修改。它本质上是 加上 0,所以+XAR7[0]和XAR7[0]是等效的,指向的是 XAR7 寄存器中的地址。- 也就是说,
+在此并没有实际的偏移效果,它只是表明该寻址方式是从寄存器值开始计算地址。
- 也就是说,
2. 偏移量的含义:
在汇编语言的寻址模式中,偏移量(通常表示为 [0]、[1]、[N] 等)是指在指定的 基址 地址上添加的一个值,用来计算 目标内存地址。
-
XAR7[0]:表示 XAR7 寄存器存储的地址加上一个 偏移量 0。所以,这里的偏移量就是 0,意味着不会改变 XAR7 中存储的基地址。- 也可以理解为:
XAR7[0]就是直接使用 XAR7 寄存器的值作为内存地址,而没有额外的偏移。
- 也可以理解为:
总结:
+的作用:表示寻址模式使用了 XAR7 寄存器中的值作为基址,没有进行额外的偏移操作,+XAR7[0]和XAR7[0]的效果相同。- 偏移量:指在寻址时给定的偏移值,表示从基地址开始偏移多少位置。在此例中,偏移量为 0,意味着直接使用 XAR7 的值作为目标地址。

浙公网安备 33010602011771号