国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【ARM匯編】如何用匯編求最大公約數(shù)?

這篇具有很好參考價(jià)值的文章主要介紹了【ARM匯編】如何用匯編求最大公約數(shù)?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

匯編求最大公約數(shù),ARM嵌入式基礎(chǔ),arm,ARM匯編,嵌入式硬件,arm開(kāi)發(fā)

CSDN話題挑戰(zhàn)賽第1期
活動(dòng)詳情地址:話題PK賽
參賽話題:匯編知識(shí)分享
話題描述:我們的計(jì)算機(jī)知識(shí)就像一座金字塔,底層是數(shù)學(xué),上面是數(shù)字電路,然后是匯編,再往上是操作系統(tǒng)、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)、高級(jí)編程語(yǔ)言、框架等等…我們不可能精通這個(gè)金子塔的每一層, 但是想走的更遠(yuǎn)就必須要了解這個(gè)金字塔的底層。因此,學(xué)習(xí)匯編并不是為了用匯編在應(yīng)用層設(shè)計(jì)程序,而是為了深刻理解機(jī)器運(yùn)行程序的機(jī)理。就像對(duì)于人來(lái)說(shuō)不能沒(méi)有常識(shí)一樣,盡管常識(shí)不能直接掙錢吃飯,但它影響談吐,影響你的判斷力和決斷力,決定著你接受新事物和新知識(shí)的程度。匯編就是計(jì)算機(jī)語(yǔ)言里面的常識(shí)和基礎(chǔ)。

大家好,我是湯姆凱特。

匯編求最大公約數(shù),ARM嵌入式基礎(chǔ),arm,ARM匯編,嵌入式硬件,arm開(kāi)發(fā)

每篇前言

??作者簡(jiǎn)介:大家好我是湯姆凱特,大家可以叫我湯姆
??個(gè)人主頁(yè):IM湯姆凱特的CSDN博客
??系列專欄:【ARM嵌入式基礎(chǔ)】
??每日一句:

只有經(jīng)過(guò)長(zhǎng)時(shí)間完成其發(fā)展的艱苦工作,并長(zhǎng)期埋頭沉沒(méi)于其中的任務(wù),方可有所成就。——黑格爾


如何用匯編求最大公約數(shù)?

學(xué)習(xí)任何語(yǔ)言都逃不掉練習(xí)求解最大公因數(shù)的算法,C語(yǔ)言中我們有多種求解辦法——窮舉法——輾轉(zhuǎn)相除法——更相減損術(shù)。在匯編中我們都可以實(shí)現(xiàn),今天這篇文章給大家介紹用更相減損術(shù)求解最大公約數(shù)。

C語(yǔ)言實(shí)現(xiàn)方法

更相減損術(shù)

更相減損術(shù)是出自《九章算術(shù)》的一種求最大公約數(shù)的算法,它原本是為約分而設(shè)計(jì)的,但它適用于任何需要求最大公約數(shù)的場(chǎng)合。

? 1.先判斷兩個(gè)數(shù)的大小,如果兩數(shù)相等,則這個(gè)數(shù)本身就是就是它的最大公約數(shù)。
??2.如果不相等,則用大數(shù)減去小數(shù),然后用這個(gè)較小數(shù)與它們相減的結(jié)果相比較,如果相等,則這個(gè)差就是它們的最大公約數(shù),如果不相等,則繼續(xù)執(zhí)行2操作,直到兩個(gè)數(shù)相等時(shí)為兩個(gè)數(shù)的最大公約數(shù)。

圖解

匯編求最大公約數(shù),ARM嵌入式基礎(chǔ),arm,ARM匯編,嵌入式硬件,arm開(kāi)發(fā)

舉例

例:用更相減損術(shù)求98與63的最大公約數(shù)。

解:由于63不是偶數(shù),把98和63以大數(shù)減小數(shù),并輾轉(zhuǎn)相減:

98-63=35

63-35=28

35-28=7

28-7=21

21-7=14

14-7=7

所以,98和63的最大公約數(shù)等于7。

C語(yǔ)言代碼部分

//更相減損術(shù)
int gcd(int a, int b)
{
	if (a == b)
	{
		return a;
	}
	else if (a > b)
	{
		return gcd(a - b, b);
	}
	else
	{
		return gcd(b - a, a);
	}
}

匯編語(yǔ)言如何實(shí)現(xiàn)

在匯編中實(shí)現(xiàn)這個(gè)算法首先要知道匯編中的減法指令——SUB。SUB的使用方法跟ADD類似并且也可以加判斷后綴。

匯編語(yǔ)言實(shí)現(xiàn)整體分為三個(gè)步驟:1.讀取兩個(gè)數(shù)值。2.更相減損法運(yùn)算。3.顯示計(jì)算結(jié)果。

第一步

可以調(diào)用C的scanf函數(shù),讀取鍵盤上鍵入的數(shù)據(jù)。我們這里重點(diǎn)講解sub指令,所以簡(jiǎn)化鍵入步驟,直接用兩個(gè)寄存器存放兩個(gè)待求數(shù)據(jù)。

mov r4,#98
mov r5,#63

第二步

通過(guò)C的代碼我們也可以看出,整個(gè)算法包括——比較、相減、循環(huán)三個(gè)部分。

在寫匯編時(shí)可以先從框架入手,首先把循環(huán)構(gòu)造出來(lái),然后在循環(huán)中比較,然后根據(jù)比較的不同結(jié)果相減。

1.構(gòu)造循環(huán)

進(jìn)入循環(huán)之后,只要不滿足相等就繼續(xù)循環(huán)。

gcd:
	...
	bne gcd
2.兩數(shù)比較|作差

cmp本質(zhì)是用前面數(shù)減后面數(shù),下面sub減語(yǔ)言加了后綴,為比較的結(jié)果做出反應(yīng),gt表大于(即:當(dāng)r4大于r5,用r4-r5結(jié)果存到r4),lt表小于(即:當(dāng)r4小于r5,用r5-r4結(jié)果存到r5)。

    cmp r4,r5
    subgt r4,r5
    sublt r5,r4

第三步

當(dāng)滿足兩數(shù)相等,循環(huán)相減完成,那么此時(shí)r4=r5的值且為兩數(shù)的最大公因數(shù),任意將r4或r5的值傳給r1,調(diào)用printf輸出即可。

調(diào)用printf,必須現(xiàn)在全局變量中定義輸出的格式串。

.data
    fmt:.asciz "\n  gcd=%d\n"
 main:    
    ......
    ldr r0,=fmt
    mov r1,r4
    bl printf

匯編源碼

//輾轉(zhuǎn)相減法求最大公約數(shù)

//輾轉(zhuǎn)相減法求最大公約數(shù)
.data
    fmt:.asciz "\n  gcd=%d\n"
.text
.globl main
main:
    push {lr}
    mov r4,#98
    mov r5,#63
gcd:
    cmp r4,r5
    subgt r4,r5
    sublt r5,r4
    bne gcd
    ldr r0,=fmt
    mov r1,r4
    bl printf
    mov r0,#0
    pop {lr}
    mov pc,lr
.end

運(yùn)行調(diào)試

匯編求最大公約數(shù),ARM嵌入式基礎(chǔ),arm,ARM匯編,嵌入式硬件,arm開(kāi)發(fā)


總結(jié)

  • SUB是不帶借位的減法指令,功能是(OP1)←(OP1)-(OP2)。
  • 再寫匯編程序時(shí),可以先把整體框架寫出,再把循環(huán)框架寫出,然后再往框架中添加想要實(shí)現(xiàn)的功能
  • 在匯編中輾轉(zhuǎn)相減使用循環(huán)、CMP、SUB指令即可完成算法功能。

本期內(nèi)容就結(jié)束了,如果內(nèi)容有誤,麻煩大家評(píng)論區(qū)指出!
如有疑問(wèn)可以在評(píng)論區(qū)留言!
下期預(yù)告: 【ARM匯編】分支結(jié)構(gòu)

CSDN話題挑戰(zhàn)賽第1期
活動(dòng)詳情地址:話題PK賽文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-822134.html

到了這里,關(guān)于【ARM匯編】如何用匯編求最大公約數(shù)?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++ 最大公約數(shù)與最小公倍數(shù)

    C++ 最大公約數(shù)與最小公倍數(shù)

    (一)簡(jiǎn)單的兩個(gè)正整數(shù)? 求 最大公約數(shù) (引入專題) 思路: 根據(jù) “歐幾里得算法”? ,即 “輾轉(zhuǎn)相除法” 原理如下: 題意: 求出? ?a? , b? 兩個(gè)正整數(shù)的最大公約數(shù) 設(shè)? k = a / b,? ?r = a % b 即? ? a = k * b + r 又設(shè)? d? 為 a 和 b 的一個(gè)公約數(shù) 那么由? r = a - k * b,? 可

    2024年02月06日
    瀏覽(21)
  • 【算法】輾轉(zhuǎn)相除法求最大公約數(shù)

    輾轉(zhuǎn)相除法 ,又稱 歐幾里德算法(Euclidean Algorithm) ,是求兩個(gè)數(shù)的 最大公約數(shù)(greatest?common?divisor) 的一種方法。用較大的數(shù)除以較小的數(shù),再以除數(shù)和余數(shù)反復(fù)做除法運(yùn)算,當(dāng)余數(shù)為0時(shí),取當(dāng)前算式除數(shù)為最大公約數(shù)。 求30和18的最大公約數(shù): 30 /? 18? = 1 余? 12 18?

    2024年02月14日
    瀏覽(16)
  • C語(yǔ)言—最大公約數(shù)和最小公倍數(shù)

    C語(yǔ)言—最大公約數(shù)和最小公倍數(shù)

    作者主頁(yè): paper jie的博客_CSDN博客-C語(yǔ)言,算法詳解領(lǐng)域博主 本文作者: 大家好,我是paper jie,感謝你閱讀本文,歡迎一建三連哦。 本文錄入于 《算法詳解》專欄,本專欄是針對(duì)于大學(xué)生,編程小白精心打造的。筆者用重金(時(shí)間和精力)打造,將算法基礎(chǔ)知識(shí)一網(wǎng)打盡,希望

    2024年02月13日
    瀏覽(25)
  • 輾轉(zhuǎn)相除法——求最大公約數(shù)(易懂詳解)

    輾轉(zhuǎn)相除法——求最大公約數(shù)(易懂詳解)

    定義 最大公因數(shù):也稱最大公約數(shù)、最大公因子,指兩個(gè)或多個(gè)整數(shù)共有約數(shù)中最大的一個(gè)。 輾轉(zhuǎn)相除法:歐幾里得算法又稱輾轉(zhuǎn)相除法,是指用于計(jì)算兩個(gè)非負(fù)整數(shù)a,b的最大公約數(shù)。應(yīng)用領(lǐng)域有數(shù)學(xué)和計(jì)算機(jī)兩個(gè)方面。計(jì)算公式gcd(a,b) = gcd(b,a mod b)。 舉例理解 比如現(xiàn)在要

    2024年02月16日
    瀏覽(20)
  • 嵌入式:ARM內(nèi)嵌匯編及C和ARM匯編相互調(diào)用

    在C程序中嵌入?yún)R編程序可以實(shí)現(xiàn)一些高級(jí)語(yǔ)言沒(méi)有的功能,并可以提高執(zhí)行效率。armcc和armcpp內(nèi)嵌匯編器支持完整的ARM指令集;tcc和tcpp用于Thumb指集。但是內(nèi)嵌匯編器并不支持諸如直接修改PC實(shí)現(xiàn)跳轉(zhuǎn)的底層功能。 內(nèi)嵌的匯編指令包括大部分的ARM指令和Thumb指令,但是不能直

    2024年02月02日
    瀏覽(22)
  • C語(yǔ)言—求最大公約數(shù)(4種算法思路)

    如果大數(shù)可以整除小數(shù),那么最大公約數(shù)為小數(shù)。如果不能整除小數(shù),那么這兩個(gè)數(shù)就按大到小依次對(duì)比小數(shù)小的數(shù)求余,遇到都能夠整除的,就是最大公約數(shù)。 用a對(duì)b求余,若余數(shù)為0,則除數(shù)b為最大公約數(shù)。若余數(shù)不為0,將此余數(shù)r作為新的除數(shù),b作為新的被除數(shù),重新

    2024年04月13日
    瀏覽(25)
  • 【C語(yǔ)言】求最大公約數(shù)和最小公倍數(shù)

    【C語(yǔ)言】求最大公約數(shù)和最小公倍數(shù)

    方法一:利用 定義法 求最大公因數(shù)和最小公倍數(shù) 方法二:最小公倍數(shù)求法同上, 最大公約數(shù)方法不同 方法一方法二的結(jié)果示例如下 ? 方法三:利用 輾轉(zhuǎn)相除法 求最大公約數(shù)和最小公倍數(shù) 法(1)結(jié)果示例如下: ?法(2)示例結(jié)果如下: ?以上就是用C語(yǔ)言循環(huán)和循環(huán)之前的

    2024年02月07日
    瀏覽(94)
  • P1029 最大公約數(shù)和最小公倍數(shù)問(wèn)題

    3 2 1 上題目鏈接: P1029 [NOIP2001 普及組] 最大公約數(shù)和最小公倍數(shù)問(wèn)題 本小蒟蒻的原始思路就是枚舉所有范圍內(nèi)的數(shù),分別求出他們的最大公約數(shù)和最小公倍數(shù),再看是否滿足題意。 于是就有了以下一言難盡的東西(;′⌒`)↓ 皇天不負(fù)有心人,收到了2個(gè)TLE,其他全WA 自我反

    2024年02月19日
    瀏覽(24)
  • 最大公約數(shù)的三種求法——(C語(yǔ)言)

    如何求解最大公約數(shù),首先了解什么是最大公約數(shù), 如果有一個(gè)自然數(shù)a能被自然數(shù)b整除,則稱a為b的倍數(shù),b為a的約數(shù)。幾個(gè)自然數(shù)公有的約數(shù),叫做這幾個(gè)自然數(shù)的公約數(shù)。公約數(shù)中最大的一個(gè)公約數(shù),稱為這幾個(gè)自然數(shù)的最大公約數(shù)。 例: 在2、4、6中,2就是2,4,6的最

    2024年02月02日
    瀏覽(24)
  • 【Python 隨練】求最大公約數(shù)和最小公倍數(shù)

    輸入兩個(gè)正整數(shù) m 和 n,求其最大公約數(shù)和最小公倍數(shù)。 在本篇博客中,我們將解決一個(gè)常見(jiàn)的數(shù)學(xué)問(wèn)題:求兩個(gè)正整數(shù)的最大公約數(shù)和最小公倍數(shù)。我們將提供問(wèn)題的解析,并給出一個(gè)完整的代碼示例來(lái)計(jì)算最大公約數(shù)和最小公倍數(shù)。 給定兩個(gè)正整數(shù)m和n,我們需要求它們

    2024年02月09日
    瀏覽(39)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包