Proteus-8086调试汇编格式的一点心得

这阵子开始做汇编的微机实验(微机原理与接口技术题解及实验指导,吴宁版本13章),中间出了挺多问题,解决后记录下。

先上电路图

用子电路来仿真发现仿真的时候子电路这块根本没有高低电平输出,只好把子电路拿出来连接了,有高手知道这块的话可以分享下解决办法。

下面是自己的一点经验。

Proteus内置汇编源代码调试,建议用这种结构

CODE    SEGMENT PUBLIC 'CODE'
MAIN PROC FARASSUME CS:CODE, SS:SSEG
START:; Write your code hereMOV AX,SSEGMOV SS,AX;这里输入代码
.
.RET
MAIN ENDPDELAY PROC
.
.RET
DELAY ENDP
CODE    ENDSSSEG SEGMENTDB 100 DUP(?)
SSEG ENDSEND MAIN

代码段写在前面,如果先写其他段,仿真时会出现,no source line at pc address pc=005D的问题,目前没找到解决办法。

但是代码段写在前面有个隐患,因为8086的内存Internal Memroy Size网上很多把他定义成0X10000,所以比如定义了堆栈段,SS被赋值成0003,然后主过程里面调用了一个子过程,SP=FFFE,那么LA=1002E,超出了10000的范围,所以RET的时候会出现,错误unknow 2-byte opcode at/unknow 1-byte opcode at,所以要把Internal Memroy Size设置大一点,比如0x20000。

不定义堆栈段也能调用子过程的谜团解开了

背景是我的8086的Internal Memroy Size定义成了0X10000,并且用了这段代码。

CODE    SEGMENT PUBLIC 'CODE'ASSUME CS:CODE;
START:; Write your code hereMOV DX, 1000H
LP0:MOV BX,0E001H
LP1:MOV AL, BLOUT DX,ALMOV AH,1CALL DELAYCMP BL,0JZ LP2ROL BX,1JMP LP1
LP2:MOV AH,8CALL DELAYJMP LP0DELAY PROC
AGAIN:MOV CX,30000
D:	LOOP DDEC AHJNZ AGAINRET
DELAY ENDP
CODE    ENDSEND START

可以的看到这里堆栈段没有定义,仿真的时候可以调用近过程,没有报错。

原因是定义堆栈段的话,就在进子过程的时候系统按照SS和SP的值正常的压入断点,比如SS=0003H,SP=0000H,那么压入之后就变成,SP=FFFEH,物理地址LA=1002EH

而没有定义堆栈段的话,系统会以SS=0000H来压栈,所以SP=FFFEH,物理地址LA是0FFFEH。因为我之前把Internal Memroy Size定义成了0X10000的容量,所以刚好压在顶部,这里因为调用的是同代码段的近过程,所以只会压入IP,就是0FFFEH和0FFFFH这两个字节的值就是压入的IP。

如果容量没有这么大,比如设置成0x8000,刚进子过程系统自动压入IP的那步不会报错(这个不知道原因),子过程RET的时候会出现错误unknow 2-byte opcode at/unknow 1-byte opcode at,因为要出栈的地址已经超过了设置的内存地址了。

题外话:调用过程到底是只压入IP还是压入CS和IP?

调用远过程,都是压入CS和IP

调用近过程,在同一代码段里面,不管是在这种MAIN远过程里面调用,还是不写MAIN而是START做标号开始的这种常规代码里面调用,都只压入IP

调用近过程,在不同代码段,要压入CS和IP。

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

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

相关文章

跨界融合:人工智能与区块链如何重新定义数据安全?

引言:数据安全的挑战与现状 在信息化驱动的数字化时代,数据已成为企业和个人最重要的资产之一。然而,随着网络技术的逐步优化和数据量的爆发式增长,数据安全问题也愈变突出。 数据安全现状:– 数据泄露驱动相关事件驱…

机器人碳钢去毛刺,用大扭去毛刺主轴可轻松去除

在碳钢精密加工的最后阶段,去除毛刺是确保产品质量的关键步骤。面对碳钢这种硬度较高的材料,采用大扭矩的SycoTec去毛刺主轴,成为了行业内的高效解决方案。SycoTec作为精密加工领域的领军品牌,其生产的高速电主轴以其卓越的性能&a…

Oracle概述

Oracle概述 Oracle是世界领先的信息管理软件开发商,因其复杂的关系数据库产品而闻名。以下是对Oracle的详细介绍: 一、公司背景与概况 成立时间与地点 :Oracle公司成立于1977年,总部位于美国加州红木滩市(Redwood Shores)。创始人 :由劳伦斯埃里森(Lawrence J. Ellis…

大疆上云API连接遥控器和无人机

文章目录 1、部署大疆上云API关于如何连接我们自己部署的上云API2、开启无人机和遥控器并连接自己部署的上云API如果遥控器和无人机没有对频的情况下即只有遥控器没有无人机的情况下如果遥控器和无人机已经对频好了的情况下 4、订阅无人机或遥控器的主题信息4.1、订阅无人机实时…

LLM的数据并行DDP,模型分片FSDP技术

LLM的数据并行DDP,模型分片FSDP技术: DDP(DistributedDataParallel)技术简介 概念: DDP是PyTorch中用于分布式训练的一种技术。它的核心思想是在多个进程(通常是在多个GPU上)之间并行地训练模型,每个进程都有一份完整的模型副本。这些副本在训练过程中会同步它们的梯度…

[OPEN SQL] 限定选择行数

本次操作使用的数据库表为SCUSTOM&#xff0c;其字段内容如下所示 航班用户(SCUSTOM) 该数据库表中的部分值如下所示 指定查询多少行数据&#xff0c;我们可以使用语法UP TO n ROWS来实现对数据前n项的查询 语法格式 SELECT * FROM <dbtab> UP TO n ROWS 参数说明 db…

机器视觉3-线性分类器

机器视觉3-线性分类器 前言一、整体流程二、其他相关内容 图像的表示图像类型黑白图像灰度图像彩色图像 图像表示为向量一、基本概念二、表示方法三、优点四、局限性五、应用场景 线性分类器一、神经网络的层级结构形成非线性模型二、支撑向量机的高维映射形成非线性模型 线性分…

JavaScript基础概述:脚本定义、输出方式与数据类型

JavaScript是网页开发中的核心技术之一&#xff0c;它赋予网页交互功能和动态效果。 1. JavaScript脚本的定义方式 JavaScript脚本可以通过内联方式或外联方式嵌入到HTML页面中。 内联JS 直接将JavaScript代码写在<script>标签中&#xff1a; <!DOCTYPE html>…

解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题

解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题 问题描述 本人在使用zotero中的zotero one&#xff08;青柠学术插件&#xff09;的时候&#xff0c;使用插件跳转obsidian中的对应笔记&#xff0c;出现上图情况。&#xff08;错误中提到的…

增量导入和全量导入的区别是什么?

定义 全量导入&#xff1a;是指将数据源中的所有数据一次性全部导入到目标系统中。例如&#xff0c;一个电商公司要将其旧数据库中的所有商品信息&#xff08;包括商品名称、价格、库存等&#xff09;全部迁移到新的数据库系统中&#xff0c;这个过程就是全量导入。这种方式会覆…

【数据结构高阶】B-树

目录 一、常见的搜索结构 二、B树 2.1 B树的概念 2.2 B树插入数据的分析 2.3 B树的性能分析 2.4 模拟实现B树 2.4.1 B树节点的定义 2.4.2 B树数据的查找 2.4.3 B树节点的数据插入 2.4.4 B树的遍历 2.4.5 模拟实现B树实现的完整代码 三、B树 3.1 B树的概念 3.2 B树…

《CPython Internals》阅读笔记:p97-p117

《CPython Internals》学习第 7 天&#xff0c;p97-p117 总结&#xff0c;总计 21 页。 一、技术总结 1.词法分析(lexical analysis) 根据《Compilers-Principles, Techniques, and Tools》(《编译原理》第2版)第 5 页&#xff1a;The first phase of a compiler is called …

2.两数相加--力扣

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

第31章 汇编语言--- 安全性考量

汇编语言是一种低级编程语言&#xff0c;它与特定的计算机架构紧密相关。编写安全的汇编代码是至关重要的&#xff0c;因为汇编代码直接操作硬件和内存&#xff0c;任何错误都可能导致严重的后果&#xff0c;如系统崩溃、数据泄露或被恶意利用。在第31章中讨论汇编语言的安全性…

2501d,d作者,炮打C语言!

原文 标准C定期改进,现在为C23.但是还是没有解决一些怪东西.Dlang社区在D语言编译器中嵌入了一个C编译器,这样可编译C. 该C编译器(又名ImportC)是从头开始构建的.它提供了使用现代编译器技术来修复这些缺点的机会.为什么标准C不修复它们? 1,计算常式 2,编译时单元测试 3,前…

口碑很好的国产LDO芯片,有哪些?

在几乎任何一个电路设计中&#xff0c;都可能会使用LDO&#xff08;低压差线性稳压器&#xff09;这个器件。 虽然LDO不是什么高性能的IC&#xff0c;但LDO芯片市场竞争异常激烈。最近几年&#xff0c;诞生了越来越多的精品国产LDO&#xff0c;让人看得眼花缭乱。 业内人士曾经…

搜索引擎的设计与实现【源码+文档+部署讲解】

目 录 目 录 1 绪论 1.1 项目背景 1.2 国内外发展现状及分类 1.3 本论文组织结构介绍 2 相关技术介绍 2.1什么是搜索引擎 2.2 sqlserver数据库 2.3 Tomcat服务器 3 搜索引擎的基本原理 3.1搜索引擎的基本组成及其功能 3.2搜索引擎的详细工作流程 4 系统分析与…

计算机系统组成(计算机组成原理 基础)

文章目录&#xff1a; 一&#xff1a;体系结构 1.系统组成 1.1 硬件系统 1.2 软件系统 2.工作原理 2.1 冯诺依曼体系 2.2 指令和指令系统 3.性能指标 二&#xff1a;硬件系统 1.主机 1.1 CPU 1.2 内存 2.外设 2.1 外存 2.2 输入设备 2.3 输出设备 2.4 适配器 …

一些计算机零碎知识随写(25年1月)-1

我原以为世界上有技术的那批人不会那么闲&#xff0c;我错了&#xff0c;被脚本真实了。 今天正隔着画画呢&#xff0c;手机突然弹出几条安全告警通知。 急忙打开服务器&#xff0c;发现问题不简单&#xff0c;直接关服务器重装系统..... 首先&#xff0c;不要认为小网站&…

Go Ebiten小游戏开发:贪吃蛇

贪吃蛇是一款经典的小游戏&#xff0c;玩法简单却充满乐趣。本文将介绍如何使用 Go 语言和 Ebiten 游戏引擎开发一个简单的贪吃蛇游戏。通过这个项目&#xff0c;你可以学习到游戏开发的基本流程、Ebiten 的使用方法以及如何用 Go 实现游戏逻辑。 项目简介 贪吃蛇的核心玩法是…