全部评论 3

  • #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <functional>
    #include <memory>
    #include <stdexcept>
    #include <type_traits>
    #include <utility>
    #include <tuple>
    #include <array>
    #include <deque>
    #include <list>
    #include <forward_list>
    #include <set>
    #include <map>
    #include <unordered_set>
    #include <unordered_map>
    #include <stack>
    #include <queue>
    #include <iterator>
    #include <numeric>
    #include <limits>
    #include <cmath>
    #include <cctype>
    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    #include <ctime>
    #include <climits>
    #include <cwchar>
    #include <cwctype>
    #include <exception>
    #include <locale>
    #include <codecvt>
    #include <fstream>
    #include <iomanip>
    #include <ios>
    #include <iosfwd>
    #include <istream>
    #include <ostream>
    #include <sstream>
    #include <streambuf>
    #include <complex>
    #include <valarray>
    #include <bitset>
    #include <regex>
    #include <random>
    #include <chrono>
    #include <initializer_list>
    #include <system_error>
    #include <future>
    #include <thread>
    #include <mutex>
    #include <condition_variable>
    #include <atomic>
    #include <cfenv>
    #include <cinttypes>
    #include <cstdint>
    #include <cuchar>
    #include <new>
    #include <typeinfo>
    #include <ratio>
    #include <scoped_allocator>
    #include <ciso646>
    #include <clocale>
    #include <cstdarg>
    #include <cstdbool>
    #include <cstddef>
    #include <csetjmp>
    #include <csignal>
    #include <cfloat>
    #include <cerrno>
    class VM32{
        public:
            using u32=uint32_t;
            enum Registers{EAX,EBX,ESP,EIP,REG_COUNT};
            enum OpCode:u32{HALT=0x00000000,IN=0x0B000000,OUT=0x0C000000,ADD_REG=0x04000000};
            static constexpr size_t MEM_SIZE=16*1024*1024;
        VM32(){
            registers.fill(0);
            registers[ESP]=MEM_SIZE-4;
            memory.resize(MEM_SIZE,0);
        }
        void load_program(const std::vector<u32>&p,size_t s){
            if(s>memory.size())throw std::runtime_error("Program too large");
            for(size_t i=0;i<s;++i)memory[i]=p[i];
        }
        void run(){
            while(1){
        
    

    1周前 来自 上海

    0
    •             u32 eip=registers[EIP];
                  if(eip>=memory.size())throw std::runtime_error("EIP out of bounds");
                  u32 inst=memory[eip];registers[EIP]+=1;
                  u32 op=inst&0xFF000000;u32 args=inst&0x00FFFFFF;
                  switch(op){
                      case HALT:return;
                      case IN:{u32 r=args&0xFF;if(r>=REG_COUNT)throw std::runtime_error("Invalid reg");u32 v;std::cin>>v;registers[r]=v;break;}
                      case OUT:{u32 r=args&0xFF;if(r>=REG_COUNT)throw std::runtime_error("Invalid reg");std::cout<<registers[r]<<std::endl;break;}
                      case ADD_REG:{u32 s=(args>>16)&0xFF;u32 d=args&0xFF;if(s>=REG_COUNT||d>=REG_COUNT)throw std::runtime_error("Invalid reg");registers[d]+=registers[s];break;}
                      default:
                          throw std::runtime_error("Invalid opcode");
                  }
              }
          }
          private:
              std::array<u32,REG_COUNT>registers;
              std::vector<u32>memory;
      };
      int main(){
          try{
              VM32 vm;
              std::vector<VM32::u32>p={0x0B000000|VM32::EAX,0x0B000000|VM32::EBX,0x04000000|(VM32::EBX<<16)|VM32::EAX,0x0C000000|VM32::EAX,0x00000000};
              vm.load_program(p,5);vm.run();
          }catch(const std::exception&e){
              std::cerr<<"VM Error: "<<e.what()<<std::endl;
              return 1;
          }
          return 0;
      }
      

      真是太逊了

      1周前 来自 上海

      0
  • 哈哈哈哈哈AI太好用了,不过我说的问题AI没发觉,问了他好几遍全是错的代码,飞鸿植物(1字与4字)AI,不好用

    2025-10-10 来自 上海

    0
  • 我直接复制的,结果出问题了,显示错误

    2025-07-16 来自 上海

    0
暂无数据

提交答案之后,这里将显示提交结果~

首页