From 7b49d17f90f26394a116348befb5edcdffcedcb6 Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Sat, 17 Oct 2020 17:37:50 +0200 Subject: Add ret and int --- test-asm.cpp | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 test-asm.cpp (limited to 'test-asm.cpp') diff --git a/test-asm.cpp b/test-asm.cpp new file mode 100644 index 0000000..882f998 --- /dev/null +++ b/test-asm.cpp @@ -0,0 +1,92 @@ +#include "asm/chunk.h" +#include "asm/assembler.h" +#include "asm/segment.h" +#include "asm/intel64/all_ops.h" + +#include "minicc.h" + +#include + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std::string_literals; +namespace fs = std::filesystem; + +class AsmTest: public ::testing::Test +{ +protected: + AsmTest() { + //debug = true; + } + ~AsmTest() { + } + void SetUp(){ + } + void TearDown(){ + } +}; + +TEST_F(AsmTest, Intel64_int_0) { + Segment segment; + AsmArgs args{{Immediate8(0)}}; + segment.push_back(makeOp("int", args)); + + ASSERT_EQ(segment.size(), 1); + ASSERT_EQ(segment.getCode(), std::vector{0xCE}); +} + +TEST_F(AsmTest, Intel64_int_1) { + Segment segment; + AsmArgs args{{Immediate8(1)}}; + segment.push_back(makeOp("int", args)); + + ASSERT_EQ(segment.size(), 1); + ASSERT_EQ(segment.getCode(), std::vector{0xF1}); +} + +TEST_F(AsmTest, Intel64_int_5) { + Segment segment; + AsmArgs args{{Immediate8(5)}}; + segment.push_back(makeOp("int", args)); + + ASSERT_EQ(segment.size(), 1); + ASSERT_EQ(segment.getCode(), std::vector({0xCD, 0x05})); +} + +TEST_F(AsmTest, Intel64_nop) { + Segment segment; + segment.push_back(makeOp("nop")); + + ASSERT_EQ(segment.size(), 1); + ASSERT_EQ(segment.getCode(), std::vector{0x90}); +} + +TEST_F(AsmTest, Intel64_ret) { + Segment segment; + segment.push_back(makeOp("ret")); + + ASSERT_EQ(segment.size(), 1); + ASSERT_EQ(segment.getCode(), std::vector{0xC3}); +} + +TEST_F(AsmTest, Intel64_multiple) { + Segment segment; + segment.push_back(makeOp("nop")); + AsmArgs args{{Immediate8(5)}}; + segment.push_back(makeOp("int", args)); + segment.push_back(makeOp("ret")); + + ASSERT_EQ(segment.size(), 3); + ASSERT_EQ(segment.getCode(), std::vector({0x90, 0xCD, 0x05, 0xC3})); +} -- cgit v1.2.3