本帖最后由 慢慢思考 于 2018-4-27 08:59 編輯
51單片機(jī)為8位機(jī),所以其機(jī)器指令最多只能有256條。每一條機(jī)器指令在芯片內(nèi)對(duì)應(yīng)著一套硬件實(shí)現(xiàn)電路以達(dá)到快速運(yùn)行的目的。 匯編指令是依據(jù)機(jī)器指令而編制的計(jì)算機(jī)編程語(yǔ)言,但我們?cè)谥噶畋碇锌梢钥闯鏊鼈儾⒉皇且灰粚?duì)應(yīng)關(guān)系,所以有匯編指令111條而機(jī)器指令為255條的說(shuō)法。如”MOV A,Rn”是一條匯編指令,但對(duì)應(yīng)的就是8個(gè)Rn均有不同的機(jī)器指令也即其對(duì)應(yīng)8條機(jī)器指令,這8條機(jī)器指令同樣也是各自對(duì)應(yīng)一套硬件電路。 因此,在機(jī)器指令表中查不到的動(dòng)作,你想實(shí)現(xiàn)就得自己編程,用已有的機(jī)器指令運(yùn)行多次后來(lái)實(shí)現(xiàn)。 不要認(rèn)為助記符本身就是匯編語(yǔ)言中的命令,”MOV A,R0”寫(xiě)全了才是一條完整的命令,什么叫完整?這條語(yǔ)句的執(zhí)行全部是芯片里的硬件實(shí)現(xiàn),所以它只有一個(gè)時(shí)鐘周期就執(zhí)行完了,它獨(dú)占著一個(gè)機(jī)器指令。 對(duì)于SETB bit位操作,在這里面,SETB是一條完整的命令,它對(duì)應(yīng)著一條機(jī)器指令,所以它先執(zhí)行這條機(jī)器指令,然后再去處理bit;我們?cè)倏?/font>SETB C,它也是位操作,但在這里就不能把SETB看作一條完整的指令,它與C合起來(lái)才是一條完整的指令,所以我們?cè)谥噶畋碇锌吹剿鼏为?dú)對(duì)應(yīng)一條機(jī)器指令,執(zhí)行周期是一個(gè)時(shí)鐘周期,而SETB bit是兩個(gè)時(shí)鐘周期,這樣設(shè)計(jì)的目的不說(shuō)自明。 前面說(shuō)過(guò),八位機(jī)機(jī)器指令最多只能做到256條,所以我們看到有些類(lèi)匯編指令可以對(duì)R0、R1進(jìn)行操作而對(duì)其它Rn不能操作,就是這個(gè)數(shù)量限制的原因,包括上面例子中說(shuō)的位操作未能都按SETB C的規(guī)格做成一條機(jī)器指令,也是同樣的原因。 結(jié)論:所以學(xué)匯編一定要熟悉了解機(jī)器指令。 擴(kuò)展指令是怎么擴(kuò)展的,沒(méi)研究過(guò)。16位機(jī)理論上可以做到更多,但是,因?yàn)?/font>16位而可能會(huì)影響速度。 以上所說(shuō)僅供參考,我所看的書(shū)上沒(méi)有細(xì)說(shuō),也不知對(duì)不對(duì)。 |