寒假学习笔记1.17

一、 内存间接寻址实现

  1. 扩展寻址模式
    直接寻址 vs 间接寻址
    python

原直接寻址:地址为立即数

def direct_addressing(addr):
"""直接寻址:[5] 表示内存地址5"""
return MEMORY[int(addr)]

新增间接寻址:地址来自寄存器

def indirect_addressing(reg):
"""间接寻址:[BX] 表示内存地址为BX寄存器中的值"""
addr = REGISTERS[reg]
if 0 <= addr < len(MEMORY):
return MEMORY[addr]
else:
raise MemoryError(f"无效内存地址: {addr}")
2. 增强MOV指令
python
def mov_enhanced(target, source):
"""增强的MOV指令,支持多种寻址模式"""

# 获取源操作数值
if source in REGISTERS:src_value = REGISTERS[source]
elif source.startswith('[') and source.endswith(']'):# 处理内存寻址inner = source[1:-1]if inner in REGISTERS:# 间接寻址:如 [BX]src_value = indirect_addressing(inner)elif inner.isdigit():# 直接寻址:如 [5]src_value = direct_addressing(inner)else:raise ValueError(f"无效内存寻址: {source}")
elif source.isdigit() or (source.startswith('-') and source[1:].isdigit()):# 立即数src_value = int(source)
else:raise ValueError(f"无效源操作数: {source}")# 设置目标操作数
if target in REGISTERS:REGISTERS[target] = src_value
elif target.startswith('[') and target.endswith(']'):inner = target[1:-1]if inner in REGISTERS:# 间接寻址目标:如 [BX]addr = REGISTERS[inner]if 0 <= addr < len(MEMORY):MEMORY[addr] = src_valueelse:raise MemoryError(f"无效内存地址: {addr}")elif inner.isdigit():# 直接寻址目标:如 [5]MEMORY[int(inner)] = src_valueelse:raise ValueError(f"无效目标操作数: {target}")
else:raise ValueError(f"无效目标操作数: {target}")

二、 中断系统实现

  1. 中断向量表
    python

中断向量表:中断号 -> 处理程序入口地址

IVT = {} # Interrupt Vector Table

定义系统调用中断号

SYS_INT_PRINT = 0x10 # 打印字符串
SYS_INT_READ = 0x16 # 读取输入
SYS_INT_EXIT = 0x21 # 程序退出

初始化中断向量表

def init_interrupts():
IVT[SYS_INT_PRINT] = 'INT_PRINT_HANDLER'
IVT[SYS_INT_READ] = 'INT_READ_HANDLER'
IVT[SYS_INT_EXIT] = 'INT_EXIT_HANDLER'

# 注册中断处理程序标签
LABELS['INT_PRINT_HANDLER'] = len(程序)  # 假设已定义程序列表
LABELS['INT_READ_HANDLER'] = len(程序) + 20  # 示例偏移
LABELS['INT_EXIT_HANDLER'] = len(程序) + 40
  1. 中断触发机制
    python

中断状态管理

INTERRUPT_FLAGS = {
'IF': 1, # 中断允许标志,1=允许中断
'NMI': 0, # 不可屏蔽中断请求
'IRQ': [] # 中断请求队列
}

def trigger_interrupt(int_num):
"""触发指定中断"""
if INTERRUPT_FLAGS['IF'] == 0 and int_num not in [0, 1, 2]: # 某些中断不可屏蔽
return

# 将中断号加入请求队列
INTERRUPT_FLAGS['IRQ'].append(int_num)

def check_interrupts():
"""检查并处理中断请求"""
if INTERRUPT_FLAGS['IF'] == 1 and INTERRUPT_FLAGS['IRQ']:
int_num = INTERRUPT_FLAGS['IRQ'].pop(0)
handle_interrupt(int_num)
3. 中断处理流程
python
def int_instruction(int_num):
"""INT指令:软件中断"""
# 保存现场
push(str(PC)) # 返回地址
push(str(REGISTERS['AX'])) # 保存寄存器
push(str(REGISTERS['BX']))
push(str(REGISTERS['CX']))
push(str(REGISTERS['DX']))

# 关中断,防止嵌套(简化模型)
old_if = INTERRUPT_FLAGS['IF']
INTERRUPT_FLAGS['IF'] = 0# 跳转到中断处理程序
if int_num in IVT:handler_label = IVT[int_num]global PCPC = LABELS[handler_label] - 1  # -1因为执行后会PC+1
else:raise ValueError(f"未定义的中断号: {int_num}")# 中断返回时会恢复现场
  1. 中断返回指令
    python
    def iret():
    """中断返回指令"""

    恢复寄存器

    pop('DX')
    pop('CX')
    pop('BX')
    pop('AX')

    恢复返回地址

    pop('AX') # 临时存储到AX
    global PC
    PC = REGISTERS['AX'] - 1 # -1因为执行后会PC+1

    恢复中断标志

    INTERRUPT_FLAGS['IF'] = 1
    三、 输入输出系统

  2. 端口映射I/O
    python

I/O端口模拟

PORTS = {
0x60: None, # 键盘数据端口
0x64: 0, # 键盘状态端口
0x3F8: '', # 串口数据
0x3F9: 0, # 串口状态
}

IN/OUT指令

def in_instruction(port, reg):
"""从端口读取数据到寄存器"""
port_num = int(port, 16) if isinstance(port, str) else port
if port_num in PORTS:
REGISTERS[reg] = PORTS[port_num]
else:
REGISTERS[reg] = 0

def out_instruction(port, source):
"""从寄存器写入数据到端口"""
port_num = int(port, 16) if isinstance(port, str) else port
if source in REGISTERS:
value = REGISTERS[source]
elif source.isdigit():
value = int(source)

if port_num in PORTS:PORTS[port_num] = value
  1. 系统调用模拟
    python

中断处理程序:系统调用实现

系统调用程序 = [
# INT 0x10 处理程序 - 打印字符串
'INT_PRINT_HANDLER:',
'PUSH AX', # 保存寄存器
'PUSH BX',
'PUSH CX',

'MOV CX, 0',      # 字符串长度计数器
'MOV BX, DX',     # DX中为字符串地址(通过寄存器传递参数)'PRINT_LOOP:',
'MOV AL, [BX]',   # 读取一个字符
'CMP AL, 0',      # 检查字符串结束符
'JE PRINT_DONE',# 输出字符(简化为打印到控制台)
'OUT 0x3F8, AL',  # 输出到串口(模拟)
'ADD BX, 1',      # 下一个字符
'ADD CX, 1',
'JMP PRINT_LOOP','PRINT_DONE:',
'POP CX',
'POP BX',
'POP AX',
'IRET',# INT 0x16 处理程序 - 读取键盘输入
'INT_READ_HANDLER:',
'PUSH AX',
'IN AL, 0x60',    # 从键盘端口读取
'MOV [DI], AL',   # 存储到DI指向的内存(参数传递)
'POP AX',
'IRET',# INT 0x21 处理程序 - 程序退出
'INT_EXIT_HANDLER:',
'MOV [0xFFF], 1', # 设置退出标志
'IRET'

]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1190811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机大数据毕设实战-基于Django+大数据的学习资源推送系统基于大数据+django+mysql的学习资源推送系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

‌构建“大模型测试沙箱”:隔离、监控、审计的工程实践指南

‌一、背景&#xff1a;为何传统测试范式在大模型时代失效&#xff1f;‌大模型&#xff08;LLM&#xff09;的非确定性、黑盒性与高资源消耗&#xff0c;彻底颠覆了传统软件测试的底层假设&#xff1a;‌输出不可复现‌&#xff1a;相同输入在不同会话中可能产生语义一致但文本…

寒假学习笔记1.18

一、 编译器前端:词法分析与语法分析词法分析器(Lexer) 词法单元定义 python import re from enum import Enumclass TokenType(Enum): # 标识符和常量 IDENTIFIER = 1 INTEGER = 2 HEX = 3 STRING = 4 # 指令和伪指…

含分布式电源的配电网日前两阶段优化调度模型-无功优化Matlab代码

✅作者简介&#xff1a;热爱数据处理、建模、算法设计的Matlab仿真开发者。&#x1f34e;更多Matlab代码及仿真咨询内容点击 &#x1f517;&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码获取及仿真咨询内容私信。&#x1f447; 关注我…

多模态RAG不止知识问答:文搜图与图搜图的四种实现方案

引言 在传统的RAG系统中&#xff0c;我们主要处理文本到文本的检索场景。然而&#xff0c;现实世界的知识库往往包含大量图片、图表等视觉信息。如何让用户通过自然语言查询找到相关图片&#xff08;文搜图&#xff09;&#xff0c;或者通过一张图片找到相似图片&#xff08;图…

大数据计算机毕设之基于Django的在线学习资源分享与推荐系统基于Django+大数据的学习资源推送系统(完整前后端代码+说明文档+LW,调试定制等)

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

kotlin 类委托

写个demo测试下&#xff1a;interface IWorker {fun work(): String }class Worker(val name: String): IWorker { // 工人override fun work(): String {return "我起早贪黑工作。"} }class Contractor(val name: String, work: IWorker) : IWorker by work // Cont…

‌大模型测试必须包含“多轮对话压力测试”

‌一、为何多轮对话压力测试是大模型测试的“生死线”‌在大模型从Demo走向生产的关键阶段&#xff0c;‌功能正确性已不再是唯一标准‌。多轮对话压力测试&#xff08;Multi-Turn Dialogue Stress Testing, MT-DST&#xff09;已成为评估模型在真实交互场景中‌稳定性、一致性…

58、IMX6ULL 裸机开发实战:从汇编启动代码到 LED 闪烁(Ubuntu 篇)

IMX6ULL 裸机开发实战&#xff1a;从汇编启动代码到 LED 闪烁&#xff08;Ubuntu 篇&#xff09;一、 开发平台与硬件信息 1.1 核心参数 开发板&#xff1a;正点原子 i.MX6ULL-Mini&#xff08;核心板 底板模式&#xff09;。CPU&#xff1a;NXP i.MX6ULL (Cortex-A7)&#xf…

【完整版代码】含分布式电源的配电网日前两阶段优化调度模型Matlab代码

✅作者简介&#xff1a;热爱数据处理、建模、算法设计的Matlab仿真开发者。&#x1f34e;更多Matlab代码及仿真咨询内容点击 &#x1f517;&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码获取及仿真咨询内容私信。&#x1f447; 关注我…

如何自动化检查服务器的高危端口

现在属于互联网时代&#xff0c;很多服务器都暴露在互联网的世界里&#xff0c;如果有高危端口开放&#xff0c;服务器非常容易被黑客攻击&#xff0c;严重威胁服务器的数据安全。下面介绍一个使用shell脚本检查服务器漏洞的案例。只要启动脚本&#xff0c;会扫描出高危端口&am…

‌如何测试AI的“长上下文记忆”?

长上下文记忆测试的本质是“信息持久性验证”‌ AI的“长上下文记忆”并非真正记忆&#xff0c;而是模型在单次推理中对输入序列的‌上下文窗口内信息的保持与推理能力‌。测试目标不是验证“记住”&#xff0c;而是验证‌关键信息在超长对话链中是否可被准确召回、正确引用、…

Flutter---Scrollable

概念Scrollable是Flutter中处理滚动的抽象类abstract class Scrollable extends StatefulWidget {final AxisDirection axisDirection;final ScrollController? controller;final ScrollPhysics? physics;final ViewportBuilder viewportBuilder; }层次结构Scrollable├── …

基于蒙特卡洛的风电功率/光伏功率场景生成方法Matlab代码

✅作者简介&#xff1a;热爱数据处理、建模、算法设计的Matlab仿真开发者。&#x1f34e;更多Matlab代码及仿真咨询内容点击 &#x1f517;&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码获取及仿真咨询内容私信。&#x1f447; 关注我…

大数据毕设项目:基于django的蔬菜销售分析与预测可视化系统(源码+文档,讲解、调试运行,定制等)

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

告别GPU依赖:深度剖析AI推理芯片市场,谁将主宰终端智能?

导言&#xff1a;推理之战&#xff0c;为何是终端的主战场&#xff1f; "部署于云端的大模型&#xff0c;其推理成本约占总运营成本的70%-90%。"——这一触目惊心的数据并非推测&#xff0c;而是Amazon AWS 2023年官方技术报告对大模型服务&#xff08;如Claude、Ti…

Python 实战:将 HTML 表格一键导出为 Excel(xlsx)

在数据采集、网页解析或自动化报表场景中&#xff0c;我们经常会遇到这样一个需求&#xff1a; 从 HTML 页面中提取表格数据&#xff0c;并导出为 Excel 文件 本文将使用 BeautifulSoup Pandas OpenPyXL&#xff0c;实现一个通用、简单、可复用的工具函数&#xff0c;把 HTML…

Python毕设项目推荐-基于Python的网络小说分析系统设计与实现【附源码+文档,调试定制服务】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

2026必备!10个AI论文工具,专科生轻松搞定论文写作!

2026必备&#xff01;10个AI论文工具&#xff0c;专科生轻松搞定论文写作&#xff01; AI 工具助力论文写作&#xff0c;专科生也能轻松应对 随着人工智能技术的不断进步&#xff0c;越来越多的 AI 工具被引入到学术写作领域&#xff0c;帮助学生和研究人员提高效率、降低重复率…

REST 不仅仅是 CRUD:从 Roy Fielding 六大原则重识 API 设计的“灵魂”

引言&#xff1a;当“RESTful”沦为标签&#xff0c;我们失去了什么&#xff1f;在当今的软件工程实践中&#xff0c;“RESTful API”几乎成了现代 Web 接口开发的默认代名词。然而&#xff0c;一个令人不安的事实是&#xff1a;大多数自称“RESTful”的接口&#xff0c;实际上…