实验一 汇编语言程序的建立、运行与调试

一、实验目的

  • 熟悉汇编语言开发环境。
  • 掌握EMU8086软件使用方法。
  • 了解汇编语言的程序结构、调试一个简单的程序。
  • 理解寻址方式的意义。

二、实验内容及要求

1.EMU8086的使用

(1)启动EMU8086程序,出现如下图所示的对话框,可选择new,建立新的汇编语言程序,也可打开code example读取示例程序。

图1.1 程序启动窗口

如点new建立新的汇编程序,弹出如下对话框,选择代码的模板。

图1.2 程序模板选择窗口

(2)选择EXE模板,点击ok,出现源代码编辑界面,如下图所示:

图1.3 模板创建的源程序编辑窗口

在底色为黑色的 ;add your code here文字下面输入自己的程序语句编辑源程序。

编辑完成后点save即可保存成以.asm为扩展名的汇编源文件。模板中给出的是完整段定义源程序格式,如果希望采用简化段定义格式,可在模板选择界面中按下图操作,建立空白模板。

图1.4 创建空白模板示意图

选择empty workspace,点击OK按钮,打开如下图所示的窗口。

图1.5 空白模板建立的源程序编辑窗口

在窗口中直接录入源程序代码,然后保存为扩展名为.asm的汇编语言源文件。

图1.6 在空白编辑窗口中录入源程序并保存

3)程序的汇编与运行

源程序编辑完成并保存后,点击上图中的compile按钮,则自动完成对程序的汇编与链接,生成主文件名与源文件相同的扩展名为 .EXE的可执行文件。

图1.7 汇编状态窗口

图1.8 工作目录及生成的文件列表

点击assembler status窗口中的run按钮即可运行可执行文件。

图1.9 程序运行状态信息

图1.10 程序模拟输出窗口

4)程序的调试

点击图1.6中的emulate按钮即可启动对程序的调试。具体调试方法请参阅“Emu8086仿真软件使用方法”(随软件压缩包一起提供)。

图1.11 仿真调试窗口

图1.12 源代码显示窗口

请自行在“Emu8086仿真软件使用方法”文件的指导下,理解图1.11仿真调试窗口中各菜单命令和功能按钮的功能和使用方法,学习调试工具的使用和汇编语言程序的调试方法。

2.实验要求

(1)认真学习Emu8086仿真程序的功能和使用方法;

(2)掌握8086汇编语言程序的建立过程和调试方法;

(3)掌握基本指令和伪指令语句的使用方法;

(4)理解寻址方式及逻辑地址和物理地址的变换。

(5)记录实验过程及结果,完成并提交实验报告。实验报告的格式请参见实验报告模板。

三、实验结果

输出结果:

寄存器数据:

将代码段的段地址存入DS和ES

将AX中的数据7777h和变量dvar中的数据1111h相加,结果存入ax

最后的寄存器数据

内存数据:

数据段的短地址从0710开始

四、实验总结

此次实验,我熟悉了汇编语言的开发环境,掌握了EMU8086的使用方法,怎么创建一个汇编语言程序,如何查看寄存器中的数据以及内存中的数据,单步操作以及设置断点。我根据教材写了一个简单的程序,程序中,定义了字节变量、字变量、双字变量还有常量,还在代码段中加入了mov、add、dec等指令。指令中也使用了直接寻址、立即寻址、寄存器相对寻址等多种寻址方式。

在实验中也遇到了各种各样的问题,如此软件无法识别’?’,当我在程序数据段中定义变量时,输入?时便会报错,只好将其代替为0。还有一个问题是array db 2 dup(2,3,2 dup(4)),这样定义变量时,正确的结果应该是定义8个字节空间,数据是02,03,04,04,02,03,04,04,但此软件运行的结果是02,03,02,02,03,02,没有识别出括号里的dup(4),此软件没法进行这样的嵌套定义。

这次实验让我对这门课的知识有了更深的理解,之前还很迷糊。但自己上手打这些代码时,立马就能理解了。这对于我学习后面的内容也有了很大的帮助。

附录

    ; multi-segment executable file template.data segment; add your data here!pkey db "press any key...$" bvar1 db 100,01100100b,64h,'d'minint=5bvar2 db -1,minint,minint+5db 0,2 dup(20h) wvar1 dw 2010h,4*4wvar2 dw 0dvar dd 12347777h,87651111h,0  ;dvar[0]为12h,而不是12347777habc db 'a','b','c',0    ;可以当作一个数组,abc[0]的值是61hmaxint equ 0ahstring db 'ABCDEFGHIJ'crlfs db 13,10,'$'     ;这里的$不是结束符,'$'=24harray1 dw maxint dup(0)array db 2 dup(2,3,2 dup(4));8个字节内容依次是02,03,04,04,02,03,;04,04,而此软件显示02,03,02,02,03,02,未能识;别括号中的dup(4)endsstack segmentdw   128  dup(0)endscode segmentstart:; set segment registers:mov ax, datamov ds, axmov es, ax; add your code here mov dl,bvar1 ;bvar1表示它的第一个数据100复制到DLdec bvar2+1 ;bvar2+1表示它的第二个数据5自减mov abc[3],dl  ;abc[3]和abc+3等价mov ax,word ptr dvar[0] ;表示取一个字,dvar[1]dvar[0],7777hmov dx,word ptr dvar[2] ;dvar[2]为34h,dvar[3]为12h,1234h,取了双字;到DX.AXadd ax,word ptr dvar[4] ;7777h+1111hadc dx,word ptr dvar[6] ;1234h+8765h+CF,完成了双字的运算mov word ptr dvar[8],ax ;mov word ptr dvar[10],dx ;双字和保存到dvar的第三个双字单元mov cx,maxint ;立即寻址mov bx,0again:add string[bx],3   ;寄存器相对寻址inc bxloop againlea dx,abc ;取abc[0]地址,从abc字符串开始显示,到后面遇到'$'结束mov ah,09hint 21hlea dx, pkeymov ah, 9int 21h        ; output string at ds:dx; wait for any key....   mov ah, 1int 21hmov ax, 4c00h ; exit to operating system.int 21h   endsend start ; set entry point and stop the assembler.

汇编语言程序的建立、运行与调试相关推荐

  1. 无法支持python程序的编辑运行和调试_python程序的调试方法

    本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python def debug_demo(val): if ...

  2. 无法支持python程序的编辑运行和调试_解决pycharm的Python console不能调试当前程序的问题...

    解决pycharm的Python console不能调试当前程序的问题 更新时间:2019年01月20日 10:22:39 作者:simpleshao 今天小编就为大家分享一篇解决pycharm的Py ...

  3. 【Python】Spyder编译器“updating indices”问题导致程序无法运行或调试

    按教程装好JetBrains PyCharm 2018.3 x64,并正常激活后,打开GitHub下载的工程.发现工程底部一直提示"scanning files to index" ...

  4. netbeans调试_从NetBeans运行和调试WildFly Swarm应用程序

    netbeans调试 使用NetBeans的Java EE开发人员习惯于直接在NetBeans所选择的应用程序服务器中运行和调试其瘦战应用程序. 在开发打包为über或镂空jars的微服务时,您期望使 ...

  5. 从NetBeans运行和调试WildFly Swarm应用程序

    使用NetBeans的Java EE开发人员习惯于直接在NetBeans所选择的应用程序服务器中运行和调试其瘦战应用程序. 在开发打包为über或镂空jars的微服务时,您期望使用相同的轻松方式进行运 ...

  6. 汇编实验三 汇编语言程序的调试与运行

    一.实验目的 1.熟练掌握编写汇编语言原程序的基本框架 2.熟悉在PC机上编辑.汇编.连接.调试和运行汇编语言程序的过程. 二.实验内容 一个汇编语言程序从写出到最终执行的简要过程如下: 1) 编辑 ...

  7. 汇编语言程序的调试与运行

    实验一 汇编语言程序的调试与运行 1.实验目的及要求 实验目的: ①学习数据传送和算术运算指令的用法 ②熟悉在PC机上编辑.汇编.连接.调试和运行汇编语言程序的过程. 实验要求: 编程实现 SUM=a ...

  8. Linux下C程序的编辑,编译和运行以及调试

                                                                                                        ...

  9. 汇编语言程序运行过程分析

    实验项目 程序运行过程分析 综合性实验 2020年11月 18日 一.实验综述 1.实验目的及要求 (1)掌握程序执行具体过程 (2)构建汇编语言的运行环境 (3)掌握汇编语言的编译连接过程 (4)掌 ...

最新文章

  1. 白话Elasticsearch29-IK中文分词之IK分词器配置文件+自定义词库
  2. 【通俗讲解】BP神经网络
  3. 一个nuxt(vue)+mongoose全栈项目聊聊我粗浅的项目架构
  4. java sql变更跟踪_如何使用Spring动态跟踪数据库更改?
  5. python判断是否为变位词_python实现对变位词的判断方法
  6. 针对新手的Java EE7和Maven项目-第3部分-定义ejb服务和jpa实体模块
  7. centos7安装php8,centos8安装php7.4
  8. JS实现滚动监听以及滑动到顶部
  9. oracle权限培训,Java培训-ORACLE数据库学习【2】用户权限
  10. 2018年最佳Linux服务器发行版
  11. 使用Eclipse构建GeoTools项目
  12. 浙江学生头戴“金箍”,上课走神自动通知家长
  13. 决策树、随机森林及代码实战
  14. 业务流程优化设计之思想和原则 (转载)
  15. python爬取其他人微信朋友圈_python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈...
  16. java-IOC(控制反转) 理论推导
  17. 计算机音乐b型谱简单,《神奇秘谱》琴曲的调弦法
  18. Anaconda/pip 更换阿里源,助力 conda create -n 虚拟环境搭建
  19. Mac 应用中支持Dark Mode(深色模式)
  20. wringPi 初始化GPIO 为上拉_敏矽微电子Cortex-M0学习笔记04-GPIO详解及应用实例

热门文章

  1. 网页设计作业成品下载Dreamweaver网页FrontPage网页html静态
  2. 基于Jeecgboot前后端分离的ERP系统开发数据库设计(二)
  3. 【LSTM时序预测】基于灰狼算法优化长短时记忆网络GWO-LSTM实现风电功率预测附Matlab代码
  4. php数字转人民币,php人民币数字转大写数字的简单示例
  5. 计算机学院 文化建设方案,计算机专业组文化建设和班级建设方案.doc
  6. 工作日志2009年、二
  7. 温湿度模块DHT22详解一:基础篇
  8. 解决Chrome无法加载Shockwave Flash
  9. matlab滤波器脉冲响应,【 MATLAB 】impz函数介绍(数字滤波器的脉冲响应)
  10. 从 C++ 定义 QML 类型