fix(interpreter): wrong le byte order on pop
This commit is contained in:
@@ -257,5 +257,18 @@ impl fmt::Display for Computer {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
// use super::*;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_push() {
|
||||
let mut c = Computer::new();
|
||||
let val = ImmediateOperand::Word(0x1234);
|
||||
c.push_stack(val).unwrap();
|
||||
|
||||
let target = PopTarget::Register(crate::register::Register::AX);
|
||||
c.pop_stack(target).unwrap();
|
||||
|
||||
assert_eq!(val, c.regs.read(crate::register::Register::AX))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ impl Memory {
|
||||
.get((idx + 1) as usize)
|
||||
.ok_or(InterpreterError::MemoryOutOfBound(idx))?
|
||||
.to_owned();
|
||||
Ok(Word::from_be_bytes([b1, b2]))
|
||||
Ok(Word::from_be_bytes([b2, b1]))
|
||||
}
|
||||
|
||||
/// Write an [`ImmediateOperand`] to a memory location indexed by a [`MemoryIndex`].
|
||||
|
||||
@@ -31,7 +31,7 @@ impl Register {
|
||||
|
||||
/// Decrement stack pointer
|
||||
pub fn push(&mut self) -> Result<(), InterpreterError> {
|
||||
if self.sp <= 2 {
|
||||
if self.sp < 2 {
|
||||
return Err(InterpreterError::InvalidRegisterState(*self));
|
||||
} else {
|
||||
self.sp -= 2;
|
||||
@@ -41,7 +41,7 @@ impl Register {
|
||||
|
||||
/// Increment stack pointer
|
||||
pub fn pop(&mut self) -> Result<(), InterpreterError> {
|
||||
if self.sp >= 0xffff - 2 {
|
||||
if self.sp > 0xffff - 2 {
|
||||
return Err(InterpreterError::InvalidRegisterState(*self));
|
||||
} else {
|
||||
self.sp += 2;
|
||||
|
||||
Reference in New Issue
Block a user