汇编语言程序设计实验篇emu8086
- 格式:docx
- 大小:910.33 KB
- 文档页数:35
1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。
它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。
该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。
利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。
1.1.1创建程序 TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“COM template-simple and tiny executable , pure machine code.”后,单击按钮。
在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。
输入全部指令后,单击按钮,保存相应的程序段。
2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“EXE template-advanced executable : relocation, checksum.”后,单击按钮。
在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。
输入全部指令后,单击按钮,保存相应的程序。
[公司名称]实验一EMU8086使用及指令系统熟悉微机原理上机实验[日期]一、实验要求1.熟悉并掌握EMU8086 汇编语言调试环境;2.学习8086的指令系统,输入简单的指令,观察各寄存器、内存相关单元以及处理器标志位的变化(数据传送类指令,算数运算类指令,逻辑运算类指令,标志处理和CPU控制类指令,移位和循环移位类指令,处理器控制类指令等,要求每类指令至少一个用例。
具体用例自行设计,可参考教材用例);3.学习汇编语言程序设计的基本步骤和方法;4.学会使用EMU8086 debug调试程序;5.编写一个简单的程序:将“This is my first ASM program-姓名(汉语拼音各人的姓名)”放在DS=1000H,BX=0000H开始的存储器单元中,然后将该内容搬移到BX=0100H开始的单元中,最后将该字符串通过DOS功能调用显示在屏幕上。
二、实验目的1.学习EMU8086仿真开发环境的使用,理解和掌握汇编语言编程的基本步骤;2.熟悉8086指令系统;3.熟悉变量、常量及伪指令的使用;4.熟悉内存单元的存储结构,字符串的处理以及简单的编程。
三、实验过程(调试分析)3.1熟悉并掌握EMU8086汇编调试环境此为EMU8086新建汇编源程序的界面,对应有四种模板可以挑选:①COM——无需分段,所有内容均放在代码段中,程序代码默认从ORG 0100H开始②EXE——需要分段,内容按代码段、数据段、堆栈段划分,编译器自动完成空间的分配③BIN——二进制文件,适用于所有用户定义的结构类型④BOOT——适用于在软盘中创建的文件⑤empty workspace可以创建空的文档此为一个EXE的模板3.2测试几类简单的指令3.2.1数据传送指令①测试一name "test mov"org 100hMOV AX, 1234HMOV BH, 12HMOV BL, 34HMOV CX, 12MOV DX, CXMOV SP, AX②测试二name "test mov2"org 100hMOV AX, 2000HMOV DS, AXMOV [1000H], 'A'MOV [1001H], 'B'MOV SI, 1000HMOV AX, [SI]HLT3.2.2算数运算指令计算a*b+c-18其中a=34H, b=56H, c=0E7Hdata segmentDAT1 DB 34HDAT2 DB 56HDAT3 DB 0E7HDATY DW ?endsstack segmentdw 128 dup(0)endscode segmentstart:ASSUME DS:DATA, SS:STACK, CS:CODE MOV AX, STACKMOV SS, AXMOV AX, DATAMOV DS, AXMOV AL, DAT1MOV BL, DAT2IMUL BLMOV BX, AXMOV AL, DAT3CBWADD AX, BXSUB AX, 18MOV DATY, AXendsend start3.2.3逻辑运算指令通过单步调试可以追踪到每一条指令执行所产生的效果,此处指放出最后结果的截图name 'test logic operation'org 100hMOV AX, 45FCHMOV BX, 0034HAND AL, 0FHOR BX, 000FHXOR AH, 0FHNOT BHHLT3.2.4标志处理和CPU控制类指令name 'test control and flags'org 100hCLC;0-->CFCMC;^CF-->CFSTD;1-->DFCLI;0-->IFNOPNOP;blankHLT;pause3.2.5循环和移位类指令name "test circle replacement"org 100hMOV BL, 01110010BSTC;1-->CFMOV CL, 3RCR BL, CLHLT算数移位三次后结果应该为BL=10101110B=AEH3.3编写一个简单的程序实现字符串的储存、搬移和显示①不分段,仅使用代码代码段,使用逐个字符存入name "FIRST PROGRAM"org 100h; set segment register:MOV AX, 1000HMOV DS, AXMOV BX, 0000H; print "This is my first ASM program-YongRongFeng"MOV [02h], 'T'MOV [04h], 'h'MOV [06h], 'i'MOV [08h], 's'MOV [0ah], ' 'MOV [0ch], 'm'MOV [0eh], 'y'MOV [10h], ' 'MOV [12h], 'f'MOV [14h], 'i'MOV [16h], 'r'MOV [18h], 's'MOV [1ah], 't'MOV [1ch], ' 'MOV [1eh], 'A'MOV [20h], 'S'MOV [22h], 'M'MOV [24h], ' 'MOV [26h], 'p'MOV [28h], 'r'MOV [2ah], 'o'MOV [2ch], 'g'MOV [2eh], 'r'MOV [30h], 'a'MOV [32h], 'm'MOV [34h], '-'MOV [36h], 'Y'MOV [38h], 'a'MOV [3ah], 'n'MOV [3ch], 'g'MOV [3eh], 'R'MOV [40h], 'o'MOV [42h], 'n'MOV [44h], 'g'MOV [46h], 'F'MOV [48h], 'e'MOV [4ah], 'n'MOV [4ch], 'g'MOV CX, 38 ; times of moving characters MOV BX, 0002H;move stringmove:MOV AX, [BX]MOV [BX+0100H], AXADD BX, 2LOOP move;print screenMOV BX, 0102HMOV CX, 38print:MOV DL, [BX]MOV AH, 02HINT 21HADD BX, 2LOOP print;return DOSMOV AH, 4CHINT 21Hret②分段并使用字符串输入,字符串显示name "FIRST PROGRAM USE HEX"data segmentHEX DB 'This is my first ASM program-YangRongFeng','$' endsstack segmentdw 128 dup(0)endscode segmentstart:;You need to correspond the segmentASSUME CS:CODE, DS:DATA, SS:STACK MOV AX, STACKMOV SS, AXMOV SP, 100MOV AX, DATAMOV DS, AX;print hex on the screenMOV DX, OFFSET HEXMOV AH, 9INT 21HMOV AH, 4CHINT 21H;return DOSendsend start。
【微机原理作业】实验一emu8086软件使用与指令练习实验一EMU8086 软件使用与指令练习实验目的:进行指令验证,并熟悉EMU8086软件的使用。
注意:MOV AX ,[BX] [SI] 与MOV AX ,[BX+SI] 同等,MOV BP,2 [BX+DI] 与MOV BP,[BX+DI+2] 同等。
连续执行以下指令,填写指令执行结果,并上机验证结果。
M代表存储单元物理地址[Reg]代表寄存器间接寻址的存储单元内容FLAGL代表标志寄存器低字节SRC代表源操作数DST代表目标操作数MOD代表寻址方式填空时:IM代表立即寻址方式DRT代表直接寻址方式R代表寄存器寻址方式RIN代表寄存器间接寻址方式IDX代表变址寻址方式B&IDX代表基址加变址寻址方式。
MOV AX,2000H ;AH=20H MOD=IMMOV DS,AX ;AL=00H DS=2000H MOD=R MOV SS,AX ;SS=2000H AX=2000HMOV BX,2050H ;BH=20H BL=50HMOV SI,BX ;SI=2050HMOV DI,3050H ;DI=3050HMOV SI,DI ;SI=3050HMOV SP,5FFFH ;SP=5FFFHMOV CL,25 ;CL=19H 。
25 为十进制数,下面的64、256均为十进制数。
MOV BL,CL ;BL=19HMOV AH,0F0H ;AH=F0HMOV CH,AH ;CH=F0HMOV BYTE PTR [DI],64 ;[DI]=40H M=23050H SRCMOD=IM MOV WORD PTR [SI],256 ;[SI]=00H [SI+1]=01H M=23050H ;DST MOD=RINMOV DL,[SI+1] ;DL=01H M=23051H SRC MOD=IDX MOV DH,1[SI] ;DH=01H M=23051H SRC MOD=IDX MOV AL,1[SI] ;AL=01H M=23051HMOV WORD PTR [BX] [SI],34H ;[BX+SI]=34H DST MOD=B&IDX;[BX+SI+1]=00 HMOV [BX+SI+4],BX ;[BX+SI+4]=19H M=25069HMOV 2[BX+SI],BX ;DST MOD=B&IDXMOV BP,2[BX+DI] ;BP=2019H M=2506BH SRC MOD=B&IDXMOV [BP][DI],BX ;[BP][DI]=2019H M=25069HMOV AX,[BP][DI] ;AX=2019H M=25069HMOV BL,AL ;BL=19HMOV ES,BX ;ES=2019HPUSH BX ;SP=5FFDH [SP]=19H [SP+1]=20H PUSH DI ;SP=5FFBH [SP]=50H [SP+1]=30H POP CX ;SP=5FFDH CX=3050H POP DX ;SP=5FFFH DX=2019HXCHG AX,BP ;AX=2019H BP=2019HXCHG DH,BL ;DH=19H BL=20HSAHF ;FLAGL=00X0X0X0 AH=20HCMC ;CF= 1LAHF ;FLAGL=00X0X0X1 AH=03HSTD ;DF= 1CLI ;IF=0PUSHF ;SP=5FFDH [SP]=03H [SP+1]=04H CLD ;DF=0 POPF ;SP=5FFFH FLAGL=00X0X0X1NOP ;空指令NOP。
实验一显示程序实验1.emu8086介绍Emu8086-Assembler and Microprocessor Emulator是一个可在Windows 环境下运行的8086CPU汇编仿真软件,Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,它优于一般编译器的地方在于提供了一个虚拟的80x86环境,拥有自己一套独立的“硬件”,可以完成一些纯软件编译器无法完成的功能例如Led显示,交通灯,步进电机等等,而且动态调试(DEBUG)时非常方便一.软件启动启动界面如图1所示,用户可以选择新建文本、程序实例、启动指南、近期文档。
注册的用户名随意,密码112,即可成功。
二.新建文件单击图1中的“New”选项,软件会弹出如图2所示的选择界面。
●COM模板——适用于简单且不需分段的程序,所有内容均放在代码段中,程序代码默认从ORG 0100H开始;●EXE模板——适用于需分段的复杂程序,内容按代码段、数据段、堆栈段划分。
需要注意的是采用该模板时,用户不可将代码段人为地设置为ORG 0100H,而应由编译器自动完成空间分配;●BIN模板——二进制文件,适用于所有用户定义结构类型;●BOOT模板——适用于在软盘中创建文件。
此外,若用户希望打开一个完全空的文档,则可选择empty workspace的选项。
三.编译和加载程序用户可根据上述选择的模板中编写程序,如图3所示。
该编辑界面集文档编辑、指令编译、程序加载、系统工具、在线帮助为一体,其菜单功能如表1所示。
编写完程序后,用户只需单击工具栏上的“compile”按钮,即可完成程序的编译工作,并弹出如图4所示的编译状态界面。
若有错误则会在窗口中提示,若无错误则还会弹出保存界面,让用户将编译好的文件保存相应的文件夹中。
默认文件夹为…\emu8086\MyBuild\,但您可以通过菜单中assembler/ set output directory对默认文件夹进行修改。
Emu8086软件的使用一、实验目的:(1)熟悉汇编语言开发环境。
(2)掌握Emu8086软件使用方法。
(3)了解汇编语言的程序结构、调试一个简单的程序。
(4)理解寻址方式的意义。
二、实验内容及要求:1、Emu8086的使用(1)打开桌面上的Emu8086的图标,出现如图所示的对话框,选择【继续……】首次打开软件,界面中默认已有一段小程序。
该程序实现在屏幕上显示三段字符串的功能。
若用户需要自己重新编程,可点击工具栏的【新建】图标,出现如图所示的对话框,选择编程所采用的模板。
选择不同的模板,在程序源代码中会出现如下标记:#MAKE_COM# 选择COM模板#MAKE_BIN# 选择BIN模板#MAKE_EXE# 选择EXE模板#MAKE_BOOT# 选择BOOT模板#MAKE_COM#最古老的一个最简单的可执行文件格式。
采用此格式,源代码应该在100H后加载(即:源代码之前应有ORG 100H)。
从文件的第一个字节开始执行。
支持DOS和Windows命令提示符。
#MAKE_EXE#一种更先进的可执行文件格式。
源程序代码的规模不限,源代码的分段也不限,但程序中必须包含堆栈段的定义。
您可以选择从新建菜单中的EXE模板创建一个简单的EXE程序,有明确的数据段,堆栈段和代码段的定义。
程序员在源代码中定义程序的入口点(即开始执行的位置),该格式支持DOS和Windows命令提示符。
这两种模板是最常用的模板(2)选择COM模板,点击【确定】,软件出现源代码编辑器的界面,如图所示:在源代码编辑器的空白区域,编写如下一段小程序:MOV AX, 5MOV BX, 10ADD AX, BXSUB AX, 1HLT代码编写结束,点击菜单【文件】【另存为……】,将源代码换名保存。
本例将源代码保存为001.asm。
点击工具栏的【模拟】按钮,如果程序有错误不能编译,出现如图所示的界面:点击错误提示,即可选择源代码中相应的错误的行,在此处更改源代码。
实验二熟悉8086仿真器emulator的使用一、实验目的:1、熟悉汇编语言程序设计的基本结构,熟悉汇编语言的上机过程。
2、熟悉8086仿真器(emu8086)的使用过程。
二、实验内容:1.用8086仿真器(emu8086)编辑下面的程序1,根据实验步骤汇编成可执行程序,并观察执行结果。
程序1:data segmentm1 db ' Hello,classmate!',13,10,36m2 db ' Let us to learn assembler language!',13,10,36 data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset m1mov ah,9int 21hmov dx,offset m2mov ah,9int 21hmov ah,4chint 21hcode endsend start2.调试运行附录中的程序,观察结果。
三、实验步骤:1、打开8086仿真器,建立一个空白文档,输入或拷贝事先编制好的源程序。
2、单击emulate(仿真)按钮,可以生成可执行程序,并出现多个窗口分别显示源程序的代码、每行代码对应的机器码、机器码在内存中存放的位置及各个寄存器的内容。
如果源程序有错误,则会在仿真时提示。
3、单击run(运行)按钮可以查看程序执行结果。
注:单击single step(单步执行)按钮可以查看程序每一步的执行情况。
Step back按钮可以查看上一步的执行情况。
四、实验要求调试、运行程序时熟悉8086仿真器的菜单、功能按钮及各部分的功能。
五、实验结果实验结果如图,会正确出现程序运行结果Hello,classmate!'Let us to learn assembler language!六、实验总结经过这次实验,我接触到了8086仿真器,了解到了8086仿真器的基本功能,也通过8086仿真器对于课堂上所学到的内容进行了复习。
实验一:8086汇编语言上机调试及基本操作(验证性)1、实验目的:(1)掌握常用DEBUG命令: G,D,R,T,U,Q。
(2)掌握工具软件EMU8086。
(3)掌握完整程序设计方法的格式,能正确书写数据段,代码段等。
(4)掌握简单的数值转换算法2、实验说明:计算机中的数值有各种表达方式,这是计算机的基础。
掌握各种数制之间的转换是一种基本功。
3、程序框图:对于0-999(即000H-3E7H)范围内的二进制数4、参考程序:; 将AX中的三位数拆为三个BCD码, 并存入Result 开始的三个单元DATA SEGMENT; 数据段RESULT_1 DB 1RESULT_2 DB 1RESULT_3 DB 1DATA ENDSSTACK SEGMENT STACK ; 堆栈段STA DB 64 DUP(0)STACK_TOP DB 0STACK ENDSCODE SEGMENT; 代码段ASSUME CS:CODE , DS:DATA , ES:DATA , SS:STACKSTART:MOV AX, DATAMOV DS, AX ; 设置数据段MOV AX, STACKMOV SS, AX ; 设置堆栈段LEA SP, STACK_TOP ; 设置栈顶指针MOV AX, 2afHMOV CL, 100DIV CLMOV RESULT_1, AL ; 除以100, 得百位数MOV AL, AHMOV AH, 0MOV CL, 10DIV CLMOV RESULT_2, AL ; 余数除以10, 得十位数MOV RESULT_3, AH ; 余数为个位数MOV AX,4C00H ; 返回DOSINT 21H ;CODE ENDSEND START ; 最后一行要按回车键5、实验及报告要求:1)用合适的编辑软件编辑以上源文件并存入合适目录;要求补充注释未注释的伪指令和指令;2)分别在DOS和Windows下编译、连接生成可执行文件,比较两个环境下生成的机器码的长度和内容;试指出第2、5、7、10、14条指令的IP和机器码。
Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,它优于一般编译器的地方在于提供了一个虚拟的80x86环境,拥有自己一套独立的“硬件”,可以完成一些纯软件编译器无法完成的功能例如Led显示,交通灯,步进电机等等,而且动态调试(DEBUG)时非常方便。
简单的例子:安装完成后选择菜单栏中的文件examples stepper motor在编辑框出现了相应的源码。
点击compile编译选择一个文件保存保存完之后会弹出一个对话框点击run按钮则程序开始运行调试时主控界面如下:再次点击run可以停止运行单击reload可以从头开始执行程序单击single step 可以单步调试。
单击step back可以返回到上一条指令(这个功能也是一般调试器没有的)。
界面左边是寄存器栏,这里可以动态的观察每一步的执行结果点击主控界面下面的screen可以显示模拟输出窗口单击source可以查看源码窗口Reset相当于上面的reload键。
单击aux会出现一个菜单选择第一项memory可以观察程序内存区数值的变化。
选择stop on condition 可以设置条件断点:上面的设定当ax的值是0x0006是断下来单击run按钮可以看到断下来的时候ax值正好等于6单击vars可以查看运行过程中变量的变化。
Debug可以更详细的显示每一步的调试结果通过Stack(堆栈)可以观察函数调用的过程Flags显示标志寄存器的值。
如果刚刚执行的那一条指令修改了哪个标志位的值则以红色显示。
可以到这个网址去下载:/soft/16859.htm目前网上很多人找这个软件的破解版。
其实根本不用破解。
只要在用户名一栏输入任意的字符注册码的前三位输入“112”就可以绕过注册认证了。
至于为什么我就不多说了有兴趣的可以看一下我在看雪论坛发表的一篇文章:/showthread.php?t=119741下面是在百度文库下载的一篇基础教程希望能对大家有所帮助。
实验一显示程序实验1.emu8086介绍Emu8086—Assembler and Microprocessor Emulator是一个可在Windows 环境下运行的8086CPU汇编仿真软件, Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,它优于一般编译器的地方在于提供了一个虚拟的80x86环境,拥有自己一套独立的“硬件”,可以完成一些纯软件编译器无法完成的功能例如Led显示,交通灯,步进电机等等,而且动态调试(DEBUG)时非常方便一.软件启动启动界面如图1所示,用户可以选择新建文本、程序实例、启动指南、近期文档。
注册的用户名随意,密码112,即可成功。
二.新建文件单击图1中的“New”选项,软件会弹出如图2所示的选择界面。
● COM模板——适用于简单且不需分段的程序,所有内容均放在代码段中,程序代码默认从ORG 0100H开始;● EXE模板--适用于需分段的复杂程序,内容按代码段、数据段、堆栈段划分。
需要注意的是采用该模板时,用户不可将代码段人为地设置为ORG 0100H,而应由编译器自动完成空间分配;● BIN模板--二进制文件,适用于所有用户定义结构类型;● BOOT模板—-适用于在软盘中创建文件。
此外,若用户希望打开一个完全空的文档,则可选择empty workspace的选项。
三.编译和加载程序用户可根据上述选择的模板中编写程序,如图3所示。
该编辑界面集文档编辑、指令编译、程序加载、系统工具、在线帮助为一体,其菜单功能如表1所示.编写完程序后,用户只需单击工具栏上的“compile”按钮,即可完成程序的编译工作,并弹出如图4所示的编译状态界面.若有错误则会在窗口中提示,若无错误则还会弹出保存界面,让用户将编译好的文件保存相应的文件夹中。
默认文件夹为…\emu8086\MyBuild\,但您可以通过菜单中assembler/ set output directory对默认文件夹进行修改。
摘要微机原理与接口技术课程的主要内容是微机系统的工作原理。
《微机原理与接口技术》作为计算机专业及其相关专业的一门基础课,其重要性是不言而喻的,而Emu8086是学习微机原理(汇编语言)必不可少的工具,它结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。
该软件包含了学习汇编语言的全部内容。
Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,可以辅助学习微型计算机的知识。
而通过实验的上机使学生更加了解汇编,最终能够熟练掌握关键字 Emu8086 微机原理汇编语言正文:1、EMU8086简介:EMU8086是Digital River公司推出的16位CPU8086的仿真软件,它将汇编语言程序设计和虚拟接口技术有机地结合起来,其内部集成了汇编程序编译器、连接器、参考例程、学习指南,并提供了交通灯、机器人、步进电机争E 个虚拟外设,是学习Intel 8086微处理器的理想工具。
E—MU8086的工作界面为纯WINDOWS,界面友好,由菜单栏、快捷按钮栏和用户工作区构成,它能模拟真实微处理器工作的每一步骤,通过单步调试显示指令执行后CPU内部寄存器、存储器、堆栈、变量和标志寄存器的当前值,操作简单直观,通过学习它可以很快掌握汇编程序设计和接口技术等知识。
这个模拟器是在一台"虚拟"的电脑上运行程序的,它拥有自己独立的“硬件”,这样你程序就同诸如硬盘与内存这样的实际硬件完全隔离开,动态调试(DEBUG)时非常方便.8086的机器代码同INTEL下一代微处理器完全兼容,包括Pentium II 和Pentium 4,这意味着8086代码具有很广泛的应用范围,它在老式的和最新的计算机系统上都能工作8086指令的另外一个优点是它的指令集非常小,这样学起来会容易得多。
Emu8086同主流汇编程序相比,语法简单得多,但是它能生成在任何能兼容8086机器语言的代码。
第1章 Emu8086汇编软件使用一. 实验目的1. 熟悉汇编语言开发环境2. 掌握Emu8086软件使用方法和调试方法3. 熟悉汇编语言的编辑、汇编、连接、运行的全过程4. 调试简单的程序二. 实验条件安装有Emu8086仿真软件的电脑一台。
三. 预习要求预习Emu8086的使用方法和汇编语言指令。
Emu8086是一个可在Windows 环境下运行的8086CPU汇编仿真软件。
它集成了文本编辑器、编译器、反编译器、仿真调试、虚拟设备和驱动器为一体,并具有在线使用指南,对于学习汇编语言的人是一个很有用的工具。
软件提供的实例中包含了几十种典型的程序代码,其中包括:数值计算、逻辑运算、屏幕显示、键盘输入、文件打印、马达控制、温度控制、交通灯控制等。
在软件提供的快速指南中提供了多种在线帮助工具,包括:文件索引、8086CUP指令使用指南、系统中断调用列表以及用法等。
用户可以通过该工具快速地掌握8086CPU指令体系和emu8086汇编真软件的使用。
1. 软件启动打开桌面上的EMU8086的图标,出现如图1.1所示的启动界面,可选择new,建立新的汇编语言程序,也可打开code examples读取示例程序。
微微机原理与接口技术实用教程2图 1.1 启动界面2. 新建文件单击图1.1中的“new”选项,建立新的汇编程序,软件弹出如图1.2所示对话框,选择代码的文本格式,共有4种模板。
图1.2 新建文本格式选择z COM 模板:适用于简单且不需分段的程序,所有内容均放在代码段中,程序代码默认从ORG 0100H 开始;z EXE 模板:适用于需分段的复杂程序,内容按代码段、数据段、堆栈段划分。
需要注意的是采用该模板时,用户不可将代码段人为地设置为ORG 0100H ,而应由编译器自动完成空间分配;z BIN 模板:二进制文件,适用于所有用户定义结构类型,一般不用,因为不能正确解释伪指令;z BOOT 模板:适用于在软盘中创建文件,数据段的段地址为07C0H 。
2010年1月下 第3期(总第189期)1 前言有很多人认为汇编语言的应用范围很小,由此忽视它的重要性。
其实汇编语言对每一个希望学习计算机科学与技术的人来说都是非常重要的,是不能不学习的语言。
汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能够直接控制硬件的唯一语言[1]。
Emu8086是8086微处理器的仿真软件,完全兼容Intel 和Amd系列,内部集成了汇编程序编译器、连接器和丰富的参考资料、例程、学习指南等。
该款软件可模拟真实微处理器运行程序的详细步骤,不仅能够显示寄存器、存储器、堆栈、标志寄存器以及变量的值,而且还可通过双击鼠标来改变存储器的值。
除此之外,通过Emu8086可模拟显示器、直流步进电机、交通红绿灯和LED等外设[2]。
2 Emu8086和Debug的应用对比对于Emu8086,可在工作区输入并编辑源程序。
单击工具栏上的“emulate”按钮,Emu8086便会自动完成对源程序的编译和连接;如无错误,将会进入指令调试界面。
通过该软件提供的单步调试方式,可以方便观察当时寄存器值和状10.3969/j.issn.1671-489X.2010.03.064基于Emu8086的汇编语言程序设计探讨*邢江湖北师范学院计算机科学与技术学院 湖北黄石 435002摘 要 简单介绍Emu8086功能,通过汇编程序实例调试,对比Emu8086和Debug在汇编语言程序设计中的应用。
可以看出,Emu8086的使用使得汇编语言程序的编译、执行变得更加直观和清晰,有助于提高初学者的学习兴趣。
关键词 Emu8086;汇编语言;Debug中图分类号:TP368.1 文献标识码:B 文章编号:1671-489X(2010)03-0064-02Exploration of Assemble Language Program Design based on Emu8086//Xing JiangAbstract Firstly functions of Emu8086 are introduced. A program of assemble language is debugged. Emu8086 and debug are contrasted in it. The beginner can make use of Emu8086.Because compiling and running of assemble language program became clearly and easily by Emu8086.Key words Emu8086; assemble language; DebugAuthor’s address College of Computer Science & Technology, Hubei Normal University, Huangshi, Hubei, China 435002∗基金项目:2008年湖北师范学院教研项目“基于Internet的计算机组成与结构虚拟实验系统的设计与实现”。
现代计算机!总第二八一期"!"#$%&’"!()*+%,--!."!"#$%$&在汇编语言教学中的使用胡安明!广东技术师范学院天河学院计算机系"广州#$%#&%#摘要#关键词#汇编语言!!"!#!$%&!"!’收稿日期"("")*+(*(!修稿日期"(""!*",*"+作者简介"胡安明#+-!(*$%男%湖北荆州人%助教%本科%研究方向为软件工程在汇编语言实验教学过程中%传统的教学软件是./0&1配合234%来进行教学%但是使用这种搭配方式却存在诸多不足&通过讨论在汇编语言实验教学中所遇到的难点问题%提出如何利用$%&!5!’模拟器来解决&%引言汇编语言程序设计作为计算机专业的一门重要的专业课"也是$微机原理%&$接口技术%等课程的重要先修课"在计算机的教学环节中占有重要的地位’$汇编语言程序设计%的教学过程中"实验教学占有很大的比例"实验教学对于学生的动手能力"以及对理论知识的运用和实践&创新等能力的培养有着不可替代的作用(现今的大学已将实验教学提高到同理论教学同一高度"由此可见实验教学的重要性(然而担任这门课的教师都会有体会"教师难教"学生难学"实验难做"更主要的原因是实验难做(’教学难点汇编语言教学过程可以分为两个部分"即前半部分讲解!%!’指令系统"后半部分讲解中断以及汇编语言程序设计(而前半部分的指令又可分为寻址&传送&算术&移位&转移&循环&字符串指令等(而讲解时基本上是使用()*+,演示"而()*+,本身是个纯命令模式的环境"不论是教师演示还是学生实验使用起来都感觉不方便"给学习带来困难(使用()*+,调试汇编语言程序的局限性有-./)*$#在()*+,状态下运行的程序不能使用宏汇编程序中的宏指令"大部分伪指令也不能使用"因此只能把程序分段调试+*.#不能调试太长的程序"只能分块调试进行程序设计"这样给程序编写和调试带来很大的不方便(*0#在()*+,下调试的程序不能形成可执行文件12)3)4"因此调试好的程序只能转到其他编译中去编译"然后生成15)3)4(后半部分的中断以及汇编语言的程序设计"利用6789进行调试效果也不直观"加上在:;<=>?8.%%%以后的版本中(@A 都是在由0.位的BCD(6虚拟机系统模拟出的$’位环境下执行"所以很多汇编语言实验做不出来"或者是做出来了也难有结果(不论是教师教学还是学生实验都很不方便"学生很难对理论知识有充分的理解和应用(为此"本文推荐E9+!%!’模拟器"并结合教学心得论述利用E9+!%!’模拟器来解决汇编语言实验中所存在的问题((!"#$%$&E9+!%!’全称E9+!%!’F6;GH>IH>G)88>H E9+J7/K>H "是一种先进的IL 虚拟软件(它是集编辑器,组译器&反组译器&编译器&除错等功能"纯:;<=>?8界面的软件集成开发环境(在这个集成开发环境中可以方便快速地编写$’或0.位汇编语言代码编译&调试以及在模拟的!%!’LIM 上执行"而且可以得到所写即所见"所见即所得的效果(E9+!%!’界面简单直观"容易上手"通过它学生可以很快地掌握汇编语言的开发技术()实例下面以一个汇编语言程序开发的实例来说明在E9+!%!’模拟器上的执行(利用(@A 中断中的.#N 功能和0ON 功能"修改!"现代计算机!总第二八一期"!#!$%&’的$()中断!功能变为在屏幕上显示一字符串"*+,-,-./0123$().45"#分析$中断出来程序大部分都是由6178和978系统所提供的!当用户编写自己的中断处理程序时!需考虑到使用的中断号码是否已经被使用%由于中断涉及到对硬件底层的直接操作!难度较高%而且从:,2;40-<###开始系统采用纯=<位模式!978模式都由=<系统来模拟出来!所以修改中断难以实现!程序也难以通过编译#利用>?’!#!$模拟器可以通过模拟的方式进行编译!实现修改中断的效果#操作过程如下$&@’打开>AB!#!$输入代码!如图@所示#C4;/-/DA/23E--BA/C-FC4;/G;-FC4;/-3EH3F A4I EJG$(+%取出原有$(号中断保存A4I EJG=(+,23<@+KB-+/-KB-+LMA4I EMG-/D J,-3A4I;-GEMA4I;MG4NN-/3J,-3A4I EJG$(+A4I E+G<(+%指定新的中断地址,23<@+,23$(+A4I E+G"C+,23<@+-3H,2D;L O*+,-,-123$(+.45OG#;+G#E+GO¥OJ,-3KH4C%中断处理子程序KB-+EMKB-+LMKB-+CMKB-+;MKB-+-,KB-+;,KB-+LKKB-+;-KB-+/--3,KB-+C-KB-+;-A4I;MG4NN-/3-3H,2DA4I E+G#P+,23<@+CJ,K4K/-K4K;-K4K LKK4K;,K4K-,K4K;MK4K CMK4K LMK4K EM,H/3J,-3/2;KC4;//2;-/2;-3EH3&<’将输入的代码存盘!然后在>AB!#!$中编译!其优点是如果语法上有错误可以方便的显示出错误所在行号以及错误的类型!如图@所示#图@&=’编译之后便可模拟执行代码!点击>AB!#!$工具栏上的/ABJE3/按钮!随即>AB!#!$强大的模拟功能即展现出来了#如图<所示#图<从这个界面中可以看到>AB!#!$%&’模拟器!整体上分成"个功能模块$!"!"#$%&’"!()*+%,--!."现代计算机!总第二八一期"!"#$%&’"!()*+%,--!."!"#$%&’()*+,+-./01%2""%)3456#/$*#$%7%891./$#$%&’()&*!+,(-./0120-31/(0&/45)3&60+,770*048.3&*9,&*:,7;/0<6&)<37=,1(37$&)>01?)/;48.3&*@6,.ABCA"C "23"0:890#;%5<&:="#%??0(D7;E3&*.3*0F !C!GF H(.!C!GI&/60/03<6)&*,J 3??0(D7;73&*.3*04/139)/),&37-1,<0??,J 09.<3/),&37?,J/K310)?20D.*3&9L3?(4D.//6)?(0/6,963?(3&;)&390M.3<)0?N 561,.*69)?<.??)&*/609)JJ)<.7/)0?(3;0&<,.&/01)&/03<6)&*,J 3??0(D7;73&*.3*04-1,-,?0?6,K /,.?0H(.!C!G ?)(.73/,1/,,7>0/60?09)JJ)<.7/)0?NB 号模块#是H(.!C!G 模拟器$整个程序的执行控制都在这里%从这个窗口可以看到$当前正在执行的机器指令$以及编译后的汇编语言指令的执行情况$也可看到"个通用寄存器&"个段寄存器以及指针寄存器的数据变化情况%同时在这个窗口中还可控制程序实现的单步执行和全部执行’O 号模块#是显示当前正在执行指令与之相对应的源程序%P 号模块#是H(.!C!G 模拟的输入输出屏幕"号模块#是H(.!C!G 模拟的20D.*%在教学中$使用单步执行效果很好$因为可以让学生全面的看到!C!G +:$内部执行$所产生的变化以及各个值之间的传递与计算的情况%!""点击Q)&*70?/0-按钮程序单步执行$可以看到正在执行的指令$如图P 所示%图P在程序执行时看到$到什么地方需要输入$以及输入后%E$的处理和寄存器值的变化$如图"所示%!A "在H(.!C!G 中调试好的程序$仍可生成0R0文件$一般在编译之后就可以生成0R0%图">()*+,+-的不足H(.!C!G 模拟器毕竟是模拟+:$的执行$那么在这个环境下有些汇编语言实验是做不出来的$例如文件的操作&STIQ 部分中断调用%H(.!C!G 是一个软件$同样也存在有D.*的%结语通过实验教学中使用H(.!C!G 模拟器$可以向学生清楚展现+:$内部执行的每一个环境$以及期间的数据所发生的变化$这样即可以提高学生对学习这门的兴趣$又可以让学生迅速地将在课堂上所学习的理论知识$运用到实验中来%较好地解决了汇编语言这门在教学过程中的所遇到的难教$难学和实验难的问题%参考文献UBV 沈美明N ISL /:+汇编语言程序设计第O 版ULVN 北京#清华大学出版社UOV 马力妮N !CR!G 汇编语言程序设计ULVN 北京#机械工业出版社!"。