汇编语言程序设计实验篇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和机器码。