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_Machine Code - Fatal编程技术网

Assembly 机器编码输出有问题。利用教学虚拟环境

Assembly 机器编码输出有问题。利用教学虚拟环境,assembly,machine-code,Assembly,Machine Code,我正在自学一门开放大学的课程,我们正在使用这个简单化的定制虚拟机来教授基本的机器编码概念。它有基本的pile命令来生成子代码,比如pop和push。我有一个程序代码,我正试图填补,但我似乎无法使它的工作,无论我尝试 这是第一个预先写好的部分: y dc 5000 res dc 0 main load r1, =1 load r2, =2 load r3, =3 ; call function f(x+4,20,x+y) and store result to r

我正在自学一门开放大学的课程,我们正在使用这个简单化的定制虚拟机来教授基本的机器编码概念。它有基本的pile命令来生成子代码,比如pop和push。我有一个程序代码,我正试图填补,但我似乎无法使它的工作,无论我尝试

这是第一个预先写好的部分:

y dc 5000
res dc 0

main  load  r1, =1
      load  r2, =2
      load r3, =3

; call function f(x+4,20,x+y) and store result to res
之后是我写的部分:

las dc 0     
load r4, x
add r4, =4
store r4, las
push sp, =las

viite dc 20
push sp, =viite

las dc 0     
load r4, x
add r4, =4
store r4, las
push sp, =las

lask dc 0
load r5, x
add r5, y
store r5, lask
push sp, =lask

pop sp, r5
store r5, res

这是预先编写的子代码:

; use data calculated in f
      load r0, res
      add  r0, r1
      add  r0, r2
      add r0, r3
      out r0, =crt

      svc sp, =halt

; int function f(a,b,c)
; a,b,c are all by-reference parameter
; f returns value 30a+b+54c
fres  equ -5
pa    equ -4
pb    equ -3
pc    equ -2

f     pushr  sp ; save regs

      load  r1, @pa(fp)  ; compute result
      mul  r1, =30
      add  r1, @pb(fp)
      load r2, @pc(fp)
      mul  r2, =54
      add r1, r2
      store r1, fres(fp)

      popr sp     ; restore regs
      exit sp, =3

推入桩中的所有值应为参考值。当我运行代码时,输出给我值:“45”。教学程序说“res”值错误,输出也错误。我很抱歉,如果这不是组装相关的,但我很不确定这属于哪一类。感谢所有有时间阅读本文的人

我建议为真正的处理器学习真正的汇编语言,而不是这种可笑的讨厌的东西。这会更容易,也更有用。“堆”?在英语中,我想你的意思是“stack”,push/pop指令通过stack指针寄存器与之交互的内存。此外,“指令”是首选的现代术语,而不是“命令”,但至少“命令”在某种程度上是公认的汇编指令用法。(与“堆”不同。我从未听说过有人把计算机堆栈描述为一堆,只能从上下文中理解你在说什么。)EOF:如果可以,我会的,但在这种情况下,如果我不学习这个讨厌的东西,我就无法通过重要的大学课程。这门课程因过时而臭名昭著,30年来一直没有改变。这是教我们初学者的基础知识。嗯,我们没有尝试这门课程:)所以我们无法判断你所做的是否正确。我们可以推断出语法和语义,但并不完全清楚。电话在哪里,我看不见。在代码之间声明数据,对吗?似乎您已经为
las
多复制粘贴了一次代码?看起来你可以调试代码,堆栈上的参数正确吗?是的。。。昨天我非常想把这件事做完,现在我在等待我的老师在本周的某一天回复我的留言。另外,这门课程完全是芬兰语的,所以我不得不临时用英语编写术语,因为我还没有学会正确的英语术语,所以谢谢你指出Peter。