如果我有一個格式字符串是這樣的:臂組件傳遞一個字符串作爲參數
fmtPrintSphere:.string "Sphere %s\n"
.global main
.balign 4
和其他格式的字符串這樣
fmtName1:.string "First"
.global main
.balign 4
當我打電話的拳頭之一,我該怎麼辦添加第二個字符串作爲參數?即
adrp x0, fmtPrintSphere
add x0, x0, :lo12:fmtPrintSphere
mov x1, fmtName1 <-- this causes a segmentation fault
bl 'printf'
UPDATE: 這是我如何調用該函數
add x0, x29, fmtName1
add x1, x29, origin_offset
bl printSphere
這是我迄今爲止在功能
printSphere:
stp x29, x30, [sp, alloc]!
mov x29, sp
mov x1, x0
adrp x0, fmtPrintSphere
add x0, x0, :lo12:fmtPrintSphere
bl printf
mov w0, 0
ldp x29, x30, [sp], -alloc
ret
這不會引發任何錯誤但輸出正好:Sphere 應該是:Sphere First
UPDATE X2: 這是我想要做的一個例子 -
void printSphere(char *name, struct sphere *s){
printf("Sphere %s origin = (%d, %d, %d) radius = %d\n", name, s->origin.x, s->origin.x, s->origin.y, s->rad)
}
輸入: printSphere( 「someName」,$ sphereStruct)
輸出: 球someName =(2,3,4)半徑= 10
什麼'fmtName'(不是 「不'fmtName1'」 等)? – Notlikethat
對不起,這是一個錯字它應該是fmtName1,我會改變這種情況,該函數可以將fmtName1或fmtName2作爲第一個參數 – Sentinel