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

【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,AXMOV  AX,XADD  AX,YMOV  RESULT,AXJMP $
CODE  ENDSEND  START

编译:

 编译通过:

 调试:

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

 F11单步调试:

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

 

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

CODE  SEGMENT
ASSUME      CS:CODE,DS:DATA  START:MOV   AX,DATA MOV   DS,AXMOV  AX,XADD  AX,YMOV  RESULT,AXJMP $
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.lryc.cn/news/204754.html

相关文章:

  • 大数据之LibrA数据库常见术语(四)
  • Docker基础知识
  • swoole 是什么?
  • 我想要一个勋章
  • 微信小程序设计之主体文件app-json-pages
  • C语言-面试题实现有序序列合并
  • Android12 启动页适配
  • 【微服务保护】初识 Sentinel —— 探索微服务雪崩问题的解决方案,Sentinel 的安装部署以及将 Sentinel 集成到微服务项目
  • 20231023 比赛总结
  • Vite创建vue3+ts+pinia+vant项目起步流程
  • JVM 类的加载子系统
  • 什么是1024程序员节
  • spark获取hadoop服务token
  • Simulink 最基础教程(一)
  • 微信小程序:单行输入和多行输入组件
  • 1024程序员
  • 【Segment Anything Model】八:修改SAM源码做分类任务
  • Java后端开发——实现登录验证程序
  • CSS高频面试题
  • 解决matlab报错“输入参数的数目不足”
  • 使用python_opencv比较图像差异/使用python_opencv找出两张图像的差异范围
  • NOIP2023模拟1联测22 爆炸
  • http post协议实现简单的rpc协议,WireShark抓包分析
  • 1024程序员节
  • 嵌入式--->怎样选择编译语言,C C++或是Rust?
  • 一起学数据结构(12)——归并排序的实现
  • 读书笔记之《敏捷测试从零开始》(一)
  • 视频亮度太低了,如何调高
  • Xubuntu16.04系统中安装create_ap创建无线AP
  • WPF 设置全局静态参数