寒假学习笔记1.14

一、 基本概念与模型设计

  1. 核心概念映射
    寄存器模拟:用Python字典模拟CPU内部寄存器,如AX、BX等,作为临时数据存储单元。

内存模拟:用Python列表模拟RAM,每个索引代表一个内存地址,可存储数据。

指令集:定义可执行的操作命令,每个命令对应一个Python函数。

  1. 虚拟机初始化

硬件资源抽象

REGISTERS = {'AX': 0, 'BX': 0, 'CX': 0, 'DX': 0} # 通用寄存器
MEMORY = [0] * 16 # 16个内存单元,地址0-15
PC = 0 # 程序计数器,指向当前执行指令
二、 基础指令实现

  1. 数据移动指令(MOV)
    功能:在寄存器、内存、立即数之间传输数据

寻址模式:

立即数寻址:MOV AX, 5

寄存器寻址:MOV AX, BX

内存直接寻址:MOV AX, [2]

寄存器间接寻址:MOV [0], AX

  1. 算术运算指令(ADD)
    功能:将源操作数加到目标寄存器

操作限制:目标必须是寄存器,源可以是寄存器或立即数

示例:ADD AX, BX 实现 AX = AX + BX

  1. 程序结构

指令序列示例:计算(5+3)*2

指令集 = [
'MOV AX, 5', # 加载立即数5到AX
'MOV BX, 3', # 加载立即数3到BX
'ADD AX, BX', # AX = 8
'MOV CX, 2', # 加载乘数
'MUL AX, CX', # AX = 16(假设已实现乘法)
'MOV [0], AX' # 结果存储到内存0地址
]
三、 控制流指令引入

  1. 标签与跳转
    标签定义:为代码位置命名,如START:

无条件跳转:JMP LABEL 直接跳转到标签处

实现机制:通过维护标签到指令索引的映射

  1. 条件跳转指令
    比较指令:CMP A, B 比较两个操作数,设置标志位

条件跳转:

JE LABEL # 相等时跳转

JNE LABEL # 不相等时跳转

JG LABEL # 大于时跳转

  1. 循环结构实现

用汇编思维实现循环:计算1+2+...+5

指令集 = [
'MOV AX, 0', # 累加器清零
'MOV CX, 1', # 计数器从1开始
'LOOP_START:',
'CMP CX, 6', # 比较CX和6
'JE END', # 如果CX=6则跳转到END
'ADD AX, CX', # 累加
'ADD CX, 1', # 计数器加1
'JMP LOOP_START',# 继续循环
'END:',
'MOV [0], AX' # 存储结果
]

posted @ 2026-01-15 20:53  头发少的文不识  阅读(4)  评论(0)    收藏  举报