Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 将汇编指令更改为更详细的指令-我做得对吗?_Assembly_Processor_Instructions_Addressing Mode - Fatal编程技术网

Assembly 将汇编指令更改为更详细的指令-我做得对吗?

Assembly 将汇编指令更改为更详细的指令-我做得对吗?,assembly,processor,instructions,addressing-mode,Assembly,Processor,Instructions,Addressing Mode,给出了以下assember指令: SUB[R1], 8[-R2] 本指令的计算形式为: op1 = op1 - op2 第一个操作数被寻址为“间接寄存器”。第二个是用预减量(n[-Rx])寻址的“寄存器索引” 我已将其改为: add #7, R2 sub [R1], [R2] sub #8, R2 我试着解释我为什么会这样: 8[-R2]也是这样写的:R2-1+8=R2+7,所以我在开头的R2中添加了7 下一行是明确的 最后一行我从R2中删除了8,因为它说的是“预减量” 我希望一切都好吗

给出了以下assember指令:

SUB[R1], 8[-R2]
本指令的计算形式为:

op1 = op1 - op2
第一个操作数被寻址为“间接寄存器”。第二个是用预减量(
n[-Rx]
)寻址的“寄存器索引”

我已将其改为:

add #7, R2
sub [R1], [R2]
sub #8, R2
我试着解释我为什么会这样:

8[-R2]
也是这样写的:
R2-1+8=R2+7
,所以我在开头的
R2
中添加了
7

下一行是明确的

最后一行我从R2中删除了8,因为它说的是“预减量”


我希望一切都好吗?我希望我对我们个人的写作方式描述得足够好(我知道还有其他的写作方式,但我们使用这个…)


这不是家庭作业,我只是要求理解它,我把这个任务作为我自己的学习任务。

我在你的定义中发现了几个问题

首先,指令具有
[-R2]
,因此该指令的计算形式必须包括该副作用:

op1 = op1 - op2
r2 = r2 - 1
您的说明中的另一个问题是,它没有明确定义尺寸。看起来你假设它是一个字节。您可能想看看68000处理器,它具有递增和递减以及定义良好的大小(与Intel处理器相反,Intel处理器具有许多隐含的大小)

例如,要在堆栈上保存D1,做一些工作,然后将值弹出回堆栈,.L定义大小(长,4字节):


在这种情况下,
SP
寄存器将递减4,然后再递增4,因为该指令正在处理一个长的寄存器。在你的情况下,我们真的不知道。

这是什么指令集?我也不明白是什么意思?如果表示什么是#,则表示我们使用常量。在每次持续使用之前,我们都会写入#,那么#constant什么样的CPU应该能够执行您显示的指令?汇编语言不是一种单一的语言,有数百种,所以如果你不能告诉我们你使用的是哪种汇编语言,我们也帮不了你。如果有帮助的话,看起来你使用的汇编语言不是用于真正的CPU,而是用于教学目的的虚拟CPU。这里有问题吗?您似乎正在为自己的CPU创建自己的汇编语法。只有你才能知道这个程序集是否与你想象中的CPU能力相匹配。你所说的“隐含大小”是程序集语法设计的问题,而不是CPU设计的问题。如果您讨论的是
和i.l#$ffff,d0
与eax,0xffff
之间的区别,那么请注意AT&T语法(GNU
as
)版本是
和l$0xffff,%eax
(其中
l
指定32位操作数大小)。当然,与32位模式具有相同机器代码格式的16位模式的存在确实意味着在机器代码/CPU设计意义上,x86中存在大量隐式大小的内容。ARM寻址模式很有趣,允许通过元素大小IIRC以外的值进行前/后递增/递减。(同样,在ARM模式下允许所有四种组合,IIRC。在thumb模式下仅允许post inc和pre dec,至少使用压缩编码。)例如,
STR R2、[R4],#-16
在使用R4作为存储地址后不允许
R4-=16
MOV.L D1, -(SP)
...
MOV.L (SP)+, D1