跳转指令微型计算机,哪种类型的汇编程序跳转指令最有用?
Ira Baxter..
5
(我已經(jīng)為匯編程序編寫(xiě)了40多年;實(shí)際上在20世紀(jì)70年代早期設(shè)計(jì)并構(gòu)建了一個(gè)生產(chǎn)多寄存器16位機(jī)器).真正有用的是CMP指令和指定該條件的JMP相對(duì).
我建議你讓算術(shù)指令產(chǎn)生狀態(tài)位
零結(jié)果
從結(jié)果出發(fā)
結(jié)果的標(biāo)志
溢出(簽名)
我們稱之為"條件位".你會(huì)發(fā)現(xiàn)它們都很有用.
你的比較指令基本上應(yīng)該做一個(gè)減法,然后把答案扔掉,設(shè)置條件位.
您的JMP指令應(yīng)使用16個(gè)操作碼之一,3位條件選擇器和PC的9位相對(duì)偏移量,例如,與PC的跳轉(zhuǎn)相對(duì)條件.短相對(duì)分支在代碼中非常有用.
3位條件選擇器應(yīng)使用兩位來(lái)選擇4個(gè)條件中的一個(gè),并使用一位來(lái)選擇"反轉(zhuǎn)".這樣你可以有"jmp zero","jmp not zero"等.
您可以將"跳過(guò)無(wú)溢出"視為"始終跳躍"; 這些代碼非常方便.(我不明白你怎么想"jmp無(wú)條件"和"從子程序返回"可以是同一條指令).
從討論中的評(píng)論來(lái)看,似乎你沒(méi)有任何注冊(cè).從代碼緊湊性(特別是16位指令)和性能(寄存器訪問(wèn)速度總是快于內(nèi)存)來(lái)看,這是一個(gè)嚴(yán)重的錯(cuò)誤.在操作碼命名寄存器后,我會(huì)使用2或3或12位.
Aha:在編輯中,OP注意到他有A和B寄存器,可能是由操作碼隱式選擇的.我設(shè)計(jì)的機(jī)器受PDP-11的啟發(fā),但有16個(gè)基本操作碼和8個(gè)寄存器(留下9位"操作數(shù)"),它在編碼方面確實(shí)有所不同.大多數(shù)指令將這9位分為尋址模式和偏移:直接(使用第二個(gè)字作為地址),立即(第二個(gè)字),立即(7位,意味著機(jī)器可以輕松處理ASCII文本),間接第二個(gè)寄存器自動(dòng) - 增量,間接第二個(gè)寄存器自動(dòng)遞減,相對(duì)于第二個(gè)寄存器的短偏移,以及相對(duì)于寄存器的第二個(gè)字偏移.它沒(méi)有堆棧,但您可以使用auto-inc/decrement指令輕松實(shí)現(xiàn)一個(gè)堆棧,這樣就不會(huì)丟失.很高興為您編碼.(它還具有帶陷阱的虛擬內(nèi)存,以及寄存器集和VM映射之間的硬件上下文切換).
雖然所有這些聽(tīng)起來(lái)都需要復(fù)雜的邏輯來(lái)解碼,但事實(shí)并非如此.我們?cè)O(shè)法用~~ 120個(gè)所謂的"中等規(guī)模"芯片(每個(gè)芯片4個(gè)門,多路復(fù)用器,4位加法器片等)實(shí)現(xiàn)這臺(tái)機(jī)器.這些天我希望你能夠在一個(gè)FPGA中實(shí)現(xiàn)整個(gè)過(guò)程.
術(shù)語(yǔ)混淆,我的壞.GOTO和GOSUB不是一回事,我要在黑板上寫(xiě)幾百遍. (3認(rèn)同)
@Psvedman:在硬件復(fù)雜性的完整另一端,可變長(zhǎng)度指令集可以提供高代碼密度,同時(shí)仍然允許大量的操作碼和大量的立即數(shù)."轉(zhuǎn)義序列"操作碼充當(dāng)下一個(gè)操作碼的修飾符.無(wú)論如何,并不是說(shuō)你想要實(shí)現(xiàn)這樣的東西,而是[Agner Fog最近的博客文章提出了高性能計(jì)算的指令集.](http://www.agner.org/optimize/blog/read. php?i = 421#470)有一些沒(méi)有設(shè)定的想法.他試圖保留一些x86的好處,同時(shí)放棄壞處. (2認(rèn)同)
總結(jié)
以上是生活随笔為你收集整理的跳转指令微型计算机,哪种类型的汇编程序跳转指令最有用?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 百度地图怎么ar导航(登录百度帐号)
- 下一篇: 解释人生苦短及时行乐的意思(这两句话的出