當前位置:首頁 » 比特幣問答 » gnu匯編btc指令

gnu匯編btc指令

發布時間: 2021-04-13 07:44:53

『壹』 按照GNU匯編程序文件格式,用ARM匯編語言編寫程序,求三個數(x,y,z)

請按右下角展開,不然的話網路把回答的內容壓縮的很難看.

#地址送入寄存器

ldr r0,x
ldr r1,y
ldr r2,z

#比較x和y誰最小

cmp r0, r1
movle r5,r0 le的意思是less equal,指令的意思是if(x<=y) r5=r0(即x)

movgt r5,r1 gt的意思是greater than,指令的意思是if(x>y) r5=r1(即y)

#r5寄存器保存x,y中的最小值,只要r5和z的值比較一下即可知道最小值
cmp r5,r2
movgt r5,r2 #if(r5 > z) r5=z; 表示若min{x,y} > z,則表示z的值才是最小的,r5=z

這時便可求得最小值並保存在r5寄存器中,知道了最小值怎麼寫,其實最大值也是依葫蘆畫瓢,我就不累贅了.上面的代碼我沒有通過編譯器驗證,可能存在少量語法問題.但思路就是這樣.要進行判斷先要用cmp進行比較(arm內部會把比較的結果保存在cpsr中),然後對寫下要執行的指令(如mov),並在指令後面添加執行條件(eq,ne,lt,gt等).
還有一個方法,如果C語言不會寫,你可以寫成C語言的代碼,通過gcc -S選項讓其編譯輸出成匯編代碼,可以參考編譯器是怎麼做的.

『貳』 GNU-ARM匯編問題

只懂ARMV7 指令集,編譯器arm-none-eabi 。
網路這里沒有搞 GNU ARM的。

『叄』 請問匯編andl指令做什麼用的,例如andl $-16, %esp是什麼意思(gnu匯編器)

and 是將後邊兩個操作數按位求&,加l表示後邊兩個操作數是4個位元組32bit的

第一個$-16就是一個數-16,4位元組int表示為0xfffffff0,第二個%esp是一個寄存器,里邊存放的是棧指針所指向的內存地址(4個位元組),該命令表示將寄存器里存的4位元組地址與0xfffffff0按位就&,並將結果存在寄存器%esp中。
作用應該是調整棧指針的地址

『肆』 ARM GNU匯編的.syntax unified是什麼意思

.syntax unified 是一個指示,說明下面的指令是ARM和THUMB通用格式的
8位元組對齊可以提高訪問速度

『伍』 在GNU,ARM匯編語言中出現的「b.」是什麼意思

B指令
B指令的格式為:
B{條件} 目標地址
B指令是最簡單的跳轉指令。一旦遇到一個 B 指 令,ARM 處理器將立即跳轉到給定的目標地址,從那裡繼續執行。注意存儲在跳轉指令中的實際值是相對當前PC值的一個偏移量,而不是一個絕對地址,它的值由匯編器來 計算(參考定址方式中的相對定址)。它是 24 位有符號數,左移兩位後有符號擴展為 32 位,表示的有效偏移為 26 位(前後32MB的地址空間)。以下指令:
B Label ;程序無條件跳轉到標號Label處執行
CMP R1,#0 ;當CPSR寄存器中的Z條件碼置位時,程序跳轉到標號Label處執行
BEQ Label

goodluck 請參考一下arm匯編指令吧

『陸』 gnu匯編 Error: suffix or operands invalid for ***

有兩種可能
1、pop/push指令沒選對。Linux下的as命令來自 GNU binutils,用的是AT&T匯編語法。根據操作數大小的不同,壓棧時應選擇push、pushw、pushl、pushq中需要的指令,而不是像Intel匯編那樣不管什麼東西,全用push來做。
pop指令同樣存在類似的popw、popl、popq指令。

2、操作數是不是有問題(AT&T匯編下的表示法和Intel匯編有差別,比如用$來引立即數,這個很可能是你遇到錯誤的原因)。

要麼去用支持Intel匯編語法的匯編程序(如nasm),要麼學一下AT&T匯編(如果真打算在Linux下幹活,建議學AT&T匯編)。

『柒』 匯編語言分幾種分別是什麼作用

人與電腦的溝通主要是通過匯編語言來完成,匯編語言具體為

匯編語言(AssemblyLanguage)是面向機器的程序設計語言。在匯編語合中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變成了匯編語言。於是匯編語言亦稱為符號語言。使用匯編語言編寫的程序,機器不能直接識別,要由一種程序將匯編語言翻譯成機器語言,這種起翻譯作用的程序叫匯編程序,匯編程序是系統軟體中語言處理系統軟體。匯編程序把匯編語言翻譯成機器語言的過程稱為匯編。

要注意的是,匯編語言和機器的cpu是有很大聯系的,當然匯編語言也並不全是cpu的指令。

不同架構的CPU指令並不相同,如x86,powerpc,ARM各有各的指令系統;甚至同一種架構的CPU有幾套指令集,典型的如arm除了有32位的指令集外,還有一套16位的thumb指令集。但是作為開發語言的匯編,本質上是一套語法規則和助記符的集合,它可以包容不同的指令集。如果從CPU體系來劃分,常見的匯編有兩種:IBM PC匯編和ARM匯編。

  1. IBM PC匯編也就是Intel的匯編,因為IBM最早推出PC機,後來的體系很多都要和它兼容,所以也使用了相同的匯編語言。ARM壓根沒考慮過兼容,它的指令集和x86完全是兩個體系,所以匯編語言也獨立發展出一套。

  2. CPU只是限定了機器碼,作為開發語言的匯編,其實還和編譯器息息相關。匯編語言出現的早,沒有像C語言一樣定義出標准,所以編譯器的廠商各搞一套。到現在,最有名的也是兩家:MASM和GNU ASM。前者是微軟的,只支持x86,用在DOS/Windows平台中;後者是開源產品,主要用在Linux中,基本上支持大部分的CPU架構。這兩者的區別在於偽指令的不同,偽指令是用來告訴編譯器如何工作的,和編譯器相關,和CPU無關。

『捌』 利用ARM指令具有條件執行的功能寫出下列C代碼對應的匯編代碼。要求按照ARM匯編程序語法書寫。

小學文化胡編一個

.equ a, 1 @ GNU binutils
.equ b, 4
ldr r0, = a

ldr r1, = b

cmp r0, r1
ite gt
addgt r0, r1, # 1
addle r1, r0, # 1
sub r0, r1

.equ i, 0
a: .byte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
ldr r2, = a

ldr r3, = i
yanshi1:

add r3, # 1

add r4, r2, r3
ldr r5, [r4]
str r4, [r5]

cmp r3, # 10
bne yanshi1

『玖』 匯編 sub 指令 操作順序是怎樣的sub $0x8,%esp 如何解釋書上沒有這種寫法

這是at&t匯編格式 和intel的格式不一樣 具體請網路at&t匯編

gnu的東西很多用的是這個at&t格式 比如as gcc內嵌匯編等 當然也有用intel格式的 比如nasm

補充一句 因為你看的書教的是intel格式的 而這個和intel格式不一樣 所以你看不懂 正常現象

『拾』 GNU ARM匯編的ittt指令是什麼意思

如果r2小於r3執行ittt it下面的三條。

it指令有啊,仔細查查指令吧

熱點內容
比特幣技術指標kdj 發布:2025-06-07 06:11:55 瀏覽:997
區塊鏈技術的特點是去中心化 發布:2025-06-07 05:53:24 瀏覽:934
以太坊交易所最小交易單位 發布:2025-06-07 05:51:45 瀏覽:216
區塊鏈代碼如何編寫 發布:2025-06-07 05:46:51 瀏覽:852
算力480多久能挖一個比特幣 發布:2025-06-07 05:33:53 瀏覽:817
一天能挖幾個以太坊幣 發布:2025-06-07 05:29:08 瀏覽:705
比特幣私鑰如何保密 發布:2025-06-07 05:14:31 瀏覽:375
比特幣區塊鏈民法中的貨幣 發布:2025-06-07 05:00:36 瀏覽:464
挖出比特幣是偶然還是必然 發布:2025-06-07 05:00:34 瀏覽:574
區塊鏈與大數據無關對m 發布:2025-06-07 04:57:53 瀏覽:939