我在使用汇编语言时遇到了一些困难,不幸的是,当我在Google上搜索信息时,找不到任何可以帮助我解决问题的信息。我已经编写了这段代码,我正在寻求帮助,以查看是否有一种方法可以使它更简单(如果可能)。另外,如果评论有误,请让我知道。
NAME main
PUBLIC main
SECTION .text: CODE (2)
THUMB
main
LDR R4, =0x0097 ; R4 = 97 in hex
BL SUBROUTINE ; Go to Subroutine
STOP B STOP
SUBROUTINE
MOV R1, #1 ; Initialize R1 to 1
MOV R2, #0 ; Initialize R2 to 0
MOV R0, #0 ; Initialize R0 to 0
PUSH {R4}
LOOP
CMP R0, #8 ; Bits counter
BEQ DONE ; Go to DONE R0 = 8
ADD R0, R0, #1 ; Calculates the bits
AND R3, R4, R1 ; Checks if R3 = R4
CMP R3, #1 ; Comparing result with 1
BEQ ONE ; Jump to ONE
LSR R4, R4, #1 ; Right shift by 1
B LOOP
ONE
ADD R6, R6, #1 ; Saving #1 in R6
LSR R4, R4, #1 ; Right shift by 1
B LOOP
RETURN0
MOV R2, #0
POP {R4}
B STOP
RETURN1
MOV R2, #1
POP {R4}
B STOP
DONE
CMP R6, #2
BEQ RETURN0
CMP R6, #4
BEQ RETURN0
CMP R6, #6
BEQ RETURN0
CMP R8, #8
BEQ RETURN0
B RETURN1
END
任务如下:该子例程在寄存器R4中具有输入参数,并提供返回值寄存器R2中的值。该子例程将检查8个最小的奇偶校验输入参数的有效位。如果奇偶校验为偶数,则值为0为返回,如果奇偶校验为奇数,则返回值1。均等意味着一的数目是偶数,一的数目是奇数奇偶校验很奇怪。
提前感谢
下一次使用CODE(编辑器中的花括号)代替打印屏幕(例如,您无法从prtscn复制粘贴)。我从未使用过ARM汇编语言,但会使用这种方法:
这是我的方法。不过,我不确定这是否是最好的。应该更简单。如果ARM有任何一种方式可以进行进位轮换,那么它将更加容易(如果进位位为零,则可以跳过计数器的递增操作)。