我试图理解汇编语言中的Stacks的使用和实现(Motorola 68k).
我知道MC 68k有8个地址寄存器,A7是特殊寄存器.因为它是两个堆栈指针,共享"系统堆栈指针"的名称.
我们有两个状态用户状态和主管状态.哪里:
user state-
certain system resources are blocked and A7 accesses the user stack pointer.
Run Code Online (Sandbox Code Playgroud)
supervisor state-
all system resources are available and A7 accesses the supervisor stack pointer
Run Code Online (Sandbox Code Playgroud)
现在我不确定如何回答这两个问题:
为什么68000有两个硬件堆栈指针?
写代码
将寄存器D1,D3,A2-A6的长字值保存在运行时堆栈中.
MOVEM D1-D3/A2-A6, -(A7)
Run Code Online (Sandbox Code Playgroud)这是正确的吗?
在这里,我不确定所谓的"运行时堆栈",我不确定(SP)和(A7)的真正区别.任何帮助将非常感激.
每次用户按下按钮(使用Swing)时,我都试图获取特定arraylist中的下一个值.
这是我的尝试:
private void BNextActionPerformed(java.awt.event.ActionEvent evt) {
int i = 0;
Parse p = new Parse();
temp = p.getTemp();
temp2 = p.getTemp2();
temp3 = p.getTemp3();
if (CBUniversities.getSelectedIndex() == 0) {
LNumStudents.setText("Number of students: " + temp);
Student s = p.getMacList().get(i+1);
jTextField2.setText(s.getFirstName());
TLastName.setText(s.getSurName());
jTextArea1.setText(s.getAddress());
i++;
}
}
Run Code Online (Sandbox Code Playgroud)
其中Parse是一个类,包含3个整数的getter方法temp,temp2,temp3, and a getter for an ArrayList.
Student s是Student类的一个对象,其中每个学生都有一个名字,姓氏和地址(在构造函数中初始化).
执行此if语句时,它会在指定的字段中显示学生信息,但这仅适用于前两个学生.在那之后,i价值似乎永远不会增加?
我试图println在if语句中检查它的值,但它只改变一次,奇怪的是.
我也尝试将它变成for循环,但这个值似乎只会改变一次(i).
Parse有我正在使用的这个getter方法
public ArrayList<Student> getMacList() {
return mac;
}
Run Code Online (Sandbox Code Playgroud)
CBUniversities也是一个变量:
private javax.swing.JComboBox CBUniversities;
Run Code Online (Sandbox Code Playgroud)
我不确定这里出了什么问题,有什么想法吗?