假设我将3个数字值加载到三个不同的寄存器。我想找到中间数字。
AREA median, CODE, READONLY
EXPORT main
first EQU 3
middle EQU 3
last EQU 9
ENTRY
main
MOV R0, #first
MOV R1, #middle
MOV R2, #last
----------
Here i would like to compare these 3 values and find the middle number. (in this case, 3)
我试过像CMP R1, R2
这样的东西,但是我无法在寄存器中存储我想要的值。这就是我试图找到两个中较小或较大的一个。
main:
mov r1, #3 /* setting up initial variable a */
mov r2, #9 /* setting up initial variable b */
cmp r1, r2 /* comparing variables to determine which is bigger */
blt r1_lower /* jump to r1_lower in case r2 is bigger */
mov r0, r1 /* if branching/jumping did not occur, r1 is bigger (or the same) so store r1 into r0 */
b end /* proceed to the end */
r1_lower:
mov r0, r2 /* end up here because r1 was smaller than r2, so move r2 into r0 */
b end /* proceed to the end */
有什么想法吗 ?
具体而言,对于三个数字,有两种基本方法:
r0
大于r1
,使用r0
作为临时寄存器,交换r1
和r3
:
cmp r0, r1 # if (r0 > r1)
movgt r3, r1 # r2 = r1
movgt r1, r0 # r1 = r0
movgt r0, r3 # r0 = r1
r0
,r1
和r2
中,则可以通过以下方式完成:
cmp r0, r1 # if (r0 > r1)
movgt r3, r0 # then r3 = r0 (r3 is max)
movgt r4, r1 # then r4 = r1 (r4 is min)
movle r3, r1 # else r3 = r1
movle r4, r0 # else r4 = r0
cmp r2, r3 # if (r2 > r3)
movgt r3, r2 # then r3 = r2
cmp r4, r2 # if (r4 > r2)
movgt r4, r2 # then r4 = r2
add r5, r0, r1 # r5 = r0 + r1 (r5 is middle)
add r5, r5, r2 # r5 = r5 + r2
sub r5, r5, r3 # r5 = r5 - r3
sub r5, r5, r4 # r5 = r5 - r5