当前位置:首页 » 比特币问答 » 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