diff --git a/mpact/sim/util/asm/MPACT-Sim Assembler.pdf b/mpact/sim/util/asm/MPACT-Sim Assembler.pdf
new file mode 100644
index 0000000..e3c2b33
--- /dev/null
+++ b/mpact/sim/util/asm/MPACT-Sim Assembler.pdf
Binary files differ
diff --git a/mpact/sim/util/asm/simple_assembler.cc b/mpact/sim/util/asm/simple_assembler.cc
index f9f948e..f6f1c82 100644
--- a/mpact/sim/util/asm/simple_assembler.cc
+++ b/mpact/sim/util/asm/simple_assembler.cc
@@ -488,6 +488,11 @@
   return absl::OkStatus();
 }
 
+absl::Status SimpleAssembler::SetEntryPoint(uint64_t value) {
+  entry_point_ = value;
+  return absl::OkStatus();
+}
+
 // Top level function that writes the ELF file out to disk.
 absl::Status SimpleAssembler::Write(std::ostream &os) {
   if (entry_point_.empty()) return absl::NotFoundError("Entry point not set");
diff --git a/mpact/sim/util/asm/simple_assembler.h b/mpact/sim/util/asm/simple_assembler.h
index 5250b28..d020583 100644
--- a/mpact/sim/util/asm/simple_assembler.h
+++ b/mpact/sim/util/asm/simple_assembler.h
@@ -51,9 +51,8 @@
 
 class SimpleAssembler {
  public:
-  explicit SimpleAssembler(int os_abi, int type, int machine,
-                           uint64_t base_address,
-                           OpcodeAssemblerInterface *opcode_assembler_if);
+  SimpleAssembler(int os_abi, int type, int machine, uint64_t base_address,
+                  OpcodeAssemblerInterface *opcode_assembler_if);
   SimpleAssembler(const SimpleAssembler &) = delete;
   SimpleAssembler &operator=(const SimpleAssembler &) = delete;
   virtual ~SimpleAssembler();
@@ -62,6 +61,7 @@
   absl::Status Parse(std::istream &is);
   // Set the entry point. Either pass a symbol or an address.
   absl::Status SetEntryPoint(const std::string &value);
+  absl::Status SetEntryPoint(uint64_t value);
   // Write out the ELF file.
   absl::Status Write(std::ostream &os);
 
diff --git a/mpact/sim/util/asm/test/BUILD b/mpact/sim/util/asm/test/BUILD
index 1e7763d..38287ba 100644
--- a/mpact/sim/util/asm/test/BUILD
+++ b/mpact/sim/util/asm/test/BUILD
@@ -59,11 +59,9 @@
     name = "riscv64x_encoder",
     testonly = True,
     srcs = [
-        "riscv64x_assembler.cc",
         "riscv64x_bin_encoder_interface.cc",
     ],
     hdrs = [
-        "riscv64x_assembler.h",
         "riscv64x_bin_encoder_interface.h",
         "riscv_bin_setters.h",
         "riscv_getter_helpers.h",
diff --git a/mpact/sim/util/asm/test/riscv64x_assembler.cc b/mpact/sim/util/asm/test/riscv64x_assembler.cc
deleted file mode 100644
index 9b8efca..0000000
--- a/mpact/sim/util/asm/test/riscv64x_assembler.cc
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2025 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "mpact/sim/util/asm/test/riscv64x_assembler.h"
-
-#include <cstdint>
-#include <tuple>
-
-#include "absl/log/check.h"
-#include "absl/status/statusor.h"
-#include "absl/strings/string_view.h"
-#include "mpact/sim/util/asm/resolver_interface.h"
-#include "mpact/sim/util/asm/test/riscv64x_bin_encoder_interface.h"
-#include "mpact/sim/util/asm/test/riscv64x_encoder.h"
-
-namespace mpact {
-namespace sim {
-namespace riscv {
-
-using ::mpact::sim::util::assembler::ResolverInterface;
-
-RiscV64XAssembler::RiscV64XAssembler() {
-  bin_encoder_interface_ = new isa64::RiscV64XBinEncoderInterface();
-  matcher_ = new isa64::Riscv64xSlotMatcher(bin_encoder_interface_);
-  CHECK_OK(matcher_->Initialize());
-}
-
-RiscV64XAssembler::~RiscV64XAssembler() {
-  delete bin_encoder_interface_;
-  delete matcher_;
-}
-
-absl::StatusOr<std::tuple<uint64_t, int>> RiscV64XAssembler::Assemble(
-    uint64_t address, absl::string_view text, ResolverInterface *resolver) {
-  return matcher_->Encode(address, text, 0, resolver);
-}
-
-}  // namespace riscv
-}  // namespace sim
-}  // namespace mpact
diff --git a/mpact/sim/util/asm/test/riscv64x_assembler.h b/mpact/sim/util/asm/test/riscv64x_assembler.h
deleted file mode 100644
index 14a64f0..0000000
--- a/mpact/sim/util/asm/test/riscv64x_assembler.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2025 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef MPACT_SIM_UTIL_ASM_TEST_RISCV64X_ASSEMBLER_H_
-#define MPACT_SIM_UTIL_ASM_TEST_RISCV64X_ASSEMBLER_H_
-
-#include <cstdint>
-#include <tuple>
-
-#include "absl/status/statusor.h"
-#include "absl/strings/string_view.h"
-#include "mpact/sim/util/asm/resolver_interface.h"
-#include "mpact/sim/util/asm/test/riscv64x_bin_encoder_interface.h"
-#include "mpact/sim/util/asm/test/riscv64x_encoder.h"
-#include "mpact/sim/util/asm/test/riscv64x_enums.h"
-
-namespace mpact {
-namespace sim {
-namespace riscv {
-
-using ::mpact::sim::util::assembler::ResolverInterface;
-
-class RiscV64XAssembler {
- public:
-  using SlotEnum = isa64::SlotEnum;
-  using OpcodeEnum = isa64::OpcodeEnum;
-
-  RiscV64XAssembler();
-  virtual ~RiscV64XAssembler();
-
-  absl::StatusOr<std::tuple<uint64_t, int>> Assemble(
-      uint64_t address, absl::string_view text, ResolverInterface *resolver);
-
- private:
-  isa64::RiscV64XBinEncoderInterface *bin_encoder_interface_ = nullptr;
-  isa64::Riscv64xSlotMatcher *matcher_ = nullptr;
-};
-
-}  // namespace riscv
-}  // namespace sim
-}  // namespace mpact
-
-#endif  // MPACT_SIM_UTIL_ASM_TEST_RISCV64X_ASSEMBLER_H_
