1、用arm組合語言實現以下c程式段的功能。
(1)y=a×(b+c)
thumb ; 表示接下來的**為 thumb 指令集
preserve8 ; 表示接下來的**保持 8 位元組棧對齊
area init1, code, readonly ; 宣告**段
entry
code32
start mov r0, #9 ;載入a到r0
mov r1, #1 ;載入b到r1
mov r2, #1 ;載入c到r2
add r1,r2 ;b與c相加結果儲存到r1中
mul r0,r1 ;結果a*(b+c)的結果儲存到r0中
end
(2)if(x<3)
y=3×x+66;
else if(x<100)
y=100×x+88;
else
y=0;
thumb ; 表示接下來的**為 thumb 指令集
preserve8 ; 表示接下來的**保持 8 位元組棧對齊
area init2, code, readonly ; 宣告**段
entry
code32
cmp r0, #3 ;與 3 比較
blt cond1 ;則跳轉到 cond1 處理
cmp r0, #100
blt cond2 ;大於3但是小於100 則跳轉到 cond1 處理
mov r0, #0 ;都不是,則把r0賦值為0
b finish ;跳轉到結束
cond1 mul r0, #3 ;r0=r0*3,小於3
add r0, #66 ;r0=r0+66
b finish ;跳轉到結束
cond2 mul r0, #100 ;大於3但是小於100,r0=r0*100
add r0, #88 ;r0=r0+88
finish end
(3)for(i=0;i<10;i++)
x[i]=a[i]+b[i]
area blockdata,data,readwrite ;定義資料段
data1 dcd 2,5,0,3,-4,5,0,10,9,5 ;陣列 data1
data2 dcd 3,5,4,-2,0,8,3,-10,5,6 ;陣列 data2
sum dcd 0,0,0,0,0,0,0,0,0,0 ;陣列 sum
area init3,code,readonly ;定義**段
entry
code32
start ldr r1,=data1 ;陣列 data1 的首位址存入到 r1
ldr r2,=data2 ;陣列 data2 的首位址存入到 r2
ldr r3,=sum ;陣列 sum 的首位址存入到 r3
mov r0,#0 ;計數器 r0 的初始值置 0
loop ldr r4,[r1],#04 ;取 data1 陣列的乙個數 , 同時修改位址指標
ldr r5,[r2],#04 ;取 data1 陣列的乙個數 , 同時修改位址指標
adds r4,r4,r5 ;相加並影響標誌位
add r0,r0,#1 ;計數器加 1
str r4,[r3],#04 ;儲存結果到 sum 中 , 同時修改位址指標
bne loop ;若相加的結果不為 0 則迴圈
end
2、編寫c語言函式int fact(int n),求n的階乘,要求用for迴圈來完成。
(1)將函式中的乘法部分,用嵌入彙編來實現。
嵌入彙編部分
__asm int
multi
(int x1,
int x2)
函式fact呼叫multi做乘法
int
fact
(int n)
return sum;
}
(2)將函式中的乘法部分,用內聯彙編來實現。
int
fact
(int n)
}return sum;
}
Golang基礎知識 十安辰
sdk就是軟體開發工具包。做go開發之前,我們需要先安裝配置好sdk 編寫 就是敲 編譯 go build 原始碼檔案 生成.exe二進位制可執行檔案 執行 1 對於可執行檔案執行 exe 2 對於原始碼 go run 原始碼檔案 這種方式可以一步執行,但是寫大型專案時候速度較慢,不推薦,一般只用於...
Go 語言 陣列使用 十安辰
package main import fmt 注意 陣列長度小於容量時,會自動填充 func main fmt.println iarr 1 2 3 4 0 var sarr 3 string 3 string fmt.println sarr a 方式二 使用型別推導,系統自行判斷 barr 3...
二分查詢 Go語言 十安辰
思想 遍歷陣列,判斷每乙個元素是否與要查詢元素匹配,簡單,略 首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以...