另一個程序集問題!如何計算包含8位值的兩個數組的16位點積?
使用Arduino,我必須在我的計算機科學類的Atmel AVR Assembly中編寫一個函數,用於計算兩個數組的點積,並將其作爲16位整數返回。這些數組長度相等,每個數組都包含一組8位值。該函數應該將這兩個字節數組和一個表示數組長度的字節作爲參數。我被允許使用分支指令等。
這是我到目前爲止有:
.global dot
dot:
mov r18,r22
mov r19,r23
movw r26,r18
mov r30,r24
mov r31,r25
ldi r18,lo8(0)
ldi r19,hi8(0)
jmp exit_if
compute:
ld r25,Z+
ld r22,X+
muls r22,r25
movw r22,r0
clr r1
add r18,r22
adc r19,r23
exit_if:
mov r25,r30
sub r25,r24
cp r25,r20
brlt compute
movw r24,r18
ret
這是一個有點我知道怪物的......
出於某種原因,當我有數組字節[] = {7, 20,19,11,4}和字節b [] = {132,51,0,84,30},長度參數等於5(顯然),它不會像它應該返回的那樣返回2988。有誰知道發生了什麼問題?任何幫助將真誠感謝!
你可能想用註釋註釋你的代碼。即使假設我們知道指令集和ABI,但這並不表明你的子程序的預期參數是什麼。 –
爲什麼不使用C編譯器? AVR被設計成一個好的編譯器目標,所以編寫一個函數,該函數接受參數並返回結果,並查看gcc的輸出。 –
'b [0] = 132'與組件不匹配。乘法是有符號的,所以這是-124。 –