当前位置: 首页 > article >正文

【proteus】8086 写一个汇编程序并调试

参考书籍:微机原理与接口技术——基于8086和Proteus仿真(第3版)p103-105,p119-122.

参考程序是p70,例4-1

在上一篇的基础上: 

创建项目和汇编文件

写一个汇编程序并编译

 双击8086的元件图:

可以修改size 

比如这里修改成:

在asm中写一个简单的汇编程序:

DATA  SEGMENT		;定义数据段
    X  DW  2010H     	;定义被加数
    Y  DW  2011H	;定义加数
    RESULT  DW   ? ;分配和数存放单元;数据段定义结束
DATA  ENDS       
CODE  SEGMENT
ASSUME      CS:CODE,DS:DATA  
    START:
            MOV   AX,DATA 
            MOV   DS,AX
            MOV  AX,X
            ADD  AX,Y
            MOV  RESULT,AX
	    JMP $
CODE  ENDS
    END  START

编译:

 编译通过:

 调试:

选中内存和寄存器窗口(第一个和第二个):

 F11单步调试:

发现上述代码进入调试状态后会变成这样:

 

停止调试,把CODE段写在前面(注意end start仍然写在最后):

CODE  SEGMENT
ASSUME      CS:CODE,DS:DATA  
    START:
            MOV   AX,DATA 
            MOV   DS,AX
            MOV  AX,X
            ADD  AX,Y
            MOV  RESULT,AX
	    JMP $
CODE  ENDS
DATA  SEGMENT		;定义数据段
    X  DW  2010H     	;定义被加数
    Y  DW  2011H	;定义加数
    RESULT  DW   ? ;分配和数存放单元;数据段定义结束
DATA  ENDS  
    END  START

进入 调试:

 第二个按钮也可以实现单步调试:

单击一次该按钮后观察寄存器和内存:

 

 观察到内存发现数据段的首地址是0020,而AX被赋值为0002。(因为地址=段首址*10H+偏移地址,偏移地址由于是从0000开始,所以是正确的)

 继续单击:

 

 

 此时执行到这条语句:

先看一下result的内存内容(图的右侧),发现我们用?预留的空间并不是我们预料的是个随机数,而是00 00

 

继续调试:

可看出:低字节送入低地址,高字节送入高地址

jmp $ 构成无条件循环,可以保证仿真持续进行。$表示当前地址。

设置断点

双击某一行左侧:

重新进入调试状态点击第一个按钮:

 程序在断点处停止:


http://www.kler.cn/news/107125.html

相关文章:

  • ruoyi中xxl-job配置使用
  • 带有 Vagrant 和 Virtualbox 的 Elasticsearch 集群
  • Jmeter的接口自动化测试
  • 简化对象和函数写法
  • BUUCTF [GWCTF 2019]pyre 1
  • 本地websocket服务端暴露至公网访问【内网穿透】
  • 从零开始的LINUX(三)
  • Java设计模式之模板方法模式
  • 体育竞技分析
  • 服务器数据恢复-服务器系统损坏启动蓝屏的数据恢复案例
  • C++11的lambda表达式
  • 使用docker安装MySQL,Redis,Nacos,Consul教程
  • 【软考系统架构设计师】2020年系统架构师综合知识真题及解析
  • 什么是解构赋值?
  • macOS 12 Monterey v12.7.1正式版:开启全新的操作系统体验
  • 2023 MathorCup(妈妈杯) 数学建模挑战赛B题完整解题思路+模型+代码
  • Android11系统桌面隐藏指定APP图标
  • ab压力测试
  • 基于springboot实现校园疫情防控系统项目【项目源码+论文说明】
  • 【Python机器学习】零基础掌握BaggingClassifier集成学习
  • 爬虫、数据清洗和分析
  • User CSS 在性能优化方面的实践
  • JVM详解(InsCode AI 创作助手)
  • 第14期 | GPTSecurity周报
  • docker容器怎么设置开机启动
  • 线程状态,BLOCKED和WAITING 有什么区别
  • Ubuntu部署docker及docker常用操作
  • 计算机网络重点概念整理-第五章 传输层【期末复习|考研复习】
  • Spring Boot 依赖注入实现原理
  • NLP之RNN的原理讲解(python示例)