Assembly 机器编码输出有问题。利用教学虚拟环境
我正在自学一门开放大学的课程,我们正在使用这个简单化的定制虚拟机来教授基本的机器编码概念。它有基本的pile命令来生成子代码,比如pop和push。我有一个程序代码,我正试图填补,但我似乎无法使它的工作,无论我尝试 这是第一个预先写好的部分: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
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。