汇编语言程序的设计实验篇(emu8086)

合集下载

汇编语言程序设计实验篇emu8086

汇编语言程序设计实验篇emu8086

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的汇编语言程序设计探讨

基于Emu8086的汇编语言程序设计探讨

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的计算机组成与结构虚拟实验系统的设计与实现”。

8086汇编语言程序设计 微机实验报告

8086汇编语言程序设计 微机实验报告

微机实验报告第一部分:8086汇编语言程序设计一、实验目的通过上机练习,初步掌握8086的指令系统,熟悉8086汇编语言程序的编写格式,学会编写简单的汇编语言应用程序,初步学会使用DEBUG调试工具。

二、实验题目(一)编程实现从字符串中查找特定的字符,记录特定字符的个数,并将结果在屏幕上显示,同时退出并返回DOS。

(要求字符串从键盘上输入)1、流程图2、实验程序及注释DATA SEGMENTBUFSIZE DB 20 ;数据段ACTCHAR DB ? ;定义字符串CHARTEXT DB 20 DUP(?) ;给输入字符分配内存DB '$'CNT DB 0 ;给计数器分配内存STRING1 DB 'PLEASE INPUT THE STRING:','$'STRING2 DB 0AH,0DH,'INPUT THE WORD YOU WANT TO CHECK:','$' STRING3 DB 0AH,0DH,'THE NUMBER OF THE WORD IS:','$'DATA ENDS ;数据段结束COSEG SEGMENT ;代码段ASSUME CS:COSEG,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRING1 ;显示提示语:请输入字符串MOV AH,09H ;输出字符串STRING1INT 21HMOV DX,OFFSET BUFSIZE ;从键盘输入字符串存入BUFSIZEMOV AH,0AH ;并送显INT 21HMOV DX,OFFSET STRING2 ;显示提示语:想查询的字符是MOV AH,09H ;输出字符串STRING2INT 21HMOV AH,01H ;从键盘上输入字符到AL中并送显INT 21HMOV BX,OFFSET CHARTEXT ;将字符串首地址存入BXMOV CL,ACTCHAR ;置循环次数CX=字符串长度XOR CH,CHLP1: CMP AL, [BX] ;字符串从头开始与键入字符AL比较JZ LP2 ;相等则转入LP2INC BX ;指针指向字符串下一个字符DEC CX ;循环次数减一JNZ LP1 ;若还有未比较的字符,继续循环LP1JMP FINI ;若全部比较完毕,跳转FINILP2: INC CNT ;计数器增一INC BX ;指针指向字符串下一个字符DEC CX ;循环次数减一JNZ LP1 ;若还有未比较的字符,跳至LP1 FINI: MOV DX,OFFSET STRING3 ;显示提示语:所查询的字符个数:MOV AH,09HINT 21HMOV AL,CNT ;将计数器的值送ALAAM ;将此值转换成非压缩BCD码ADD AH,30H ;将BCD码转换为ASCⅡ码MOV DL,AH ;高位送显MOV AH,02HINT 21HMOV AL,CNT ;再将计数器的值送ALAAMADD AL,30H ;将BCD码转换为ASCⅡ码MOV DL,AL ;低位送显MOV AH,02HINT 21HMOV AH,4CH ;结束INT 21HCOSEG ENDS ;代码段结束END START ;程序结束3、运行结果PLEASE INPUT THE STRING(先输入字符串):ASDFAAD↙INPUT THE WORD YOU WANT TO CHECK(输入待查找字符): A↙THE NUMBER OF THE WORD IS(数量为):3↙PLEASE INPUT THE STRING(先输入字符串):ASDFAAD↙INPUT THE WORD YOU WANT TO CHECK(输入待查找字符):9↙THE NUMBER OF THE WORD IS(数量为):0↙PLEASE INPUT THE STRING(先输入字符串):ASDFAAD↙INPUT THE WORD YOU WANT TO CHECK(输入待查找字符): S↙THE NUMBER OF THE WORD IS(数量为):1↙4、程序改进○1循环次数的改进原来的程序:MOV CX,19改进原因:此程序表明无论输入的字符串多长,即使没有达到限定的最大字符串的长度,也要循环19次。

【微机原理作业】实验一emu8086软件使用与指令练习

【微机原理作业】实验一emu8086软件使用与指令练习

【微机原理作业】实验一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。

Emu8086软件的使用

Emu8086软件的使用

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。

点击工具栏的【模拟】按钮,如果程序有错误不能编译,出现如图所示的界面:点击错误提示,即可选择源代码中相应的错误的行,在此处更改源代码。

80X86汇编语言程序设计 实验报告2

80X86汇编语言程序设计 实验报告2

80X86汇编语言程序设计实验报告专业:班级:日期:成绩:第二次试验指导老师:学生姓名:学号:一、实验目的(1) 加深对一些常用的汇编指令的理解;(2) 加深对常用DOS功能调用指令的理解;(3) 进一步熟悉TD的使用。

二、实验内容1、《80X86汇编语言程序设计》教材中 P45的 2.3题。

要求:(1) 分别记录执行到“MOV CX,10”和“INT 21H”之前的(BX), (BP),(SI),(DI)各是多少。

(2) 分别记录程序执行初期与退出之前数据段开始40个字节的内容,指出运行结果是否与设想的一致。

2、《80X86汇编语言程序设计》教材中 P45的 2.4题。

要求:(1) 实现的功能不变。

(2) 内存单元中数据的访问采用变址寻址方式。

(3) 记录程序执行到退出之前数据段开始40个字节的内容,检查程序运行结果是否与设想的一致。

3、编写程序利用DOS 10号功能调用输入一个字符串,统计字符串中字符0、1、…、9出现的次数并显示出来(假设每个字符最多出现9次,若大于9次则显示为x)。

三、实验步骤及结果1、输入源程序,如下:.386STACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSDA TA SEGMENT USE16BUF1 DB 0,1,2,3,4,5,6,7,8,9BUF2 DB 10 DUP(0)BUF3 DB 10 DUP(0)BUF4 DB 10 DUP(0)DA TA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DA TA,SS:STACKSTART: MOV AX,DA TAMOV DS,AXMOV SI,OFFSET BUF1MOV DI,OFFSET BUF2MOV BX,OFFSET BUF3MOV BP,OFFSET BUF4MOV CX,10LOPA: MOV AL,[SI]MOV [DI],ALINC ALMOV [BX],ALADD AL,3MOV DS:[BP],ALINC SIINC DIINC BPINC BXDEC CXJNZ LOPAMOV AH,4CHINT 21HCODE ENDSEND START(1)进行单步调试。

实验一 emu8086软件使用与指令练习(学生)

实验一 emu8086软件使用与指令练习(学生)

实验一EMU8086软件使用与指令练习一、实验目的:进行指令验证,并熟悉EMU8086软件的使用。

二、实验内容:1、连续执行以下指令,填写指令执行结果,并上机验证结果。

MOV AX,2000H ;AH=AL=源操作数寻址方式为MOV DS,AX ;DS=源操作数寻址方式为MOV SS,AX ;SS=MOV BX,2050H ;BH=BL=MOV SI,BXMOV DI,3050H ;DI=MOV SI,DI ;SI=MOV SP,5FFFH ;SP=MOV CL,25 ;CL=MOV BL,CL ;BL=MOV AH,0F0HMOV CH,AH ;CH=MOV BYTE PTR [DI],64 ;[DI]=存储单元物理地址=MOV WORD PTR [SI],256 ;[SI]=[SI+1]=存储单元物理地址=;目的操作数寻址方式为MOV DL,[SI+1] ;DL=存储单元物理地址=源操作数寻址方式为MOV DH,1[SI] ;DH=存储单元物理地址=源操作数寻址方式为MOV WORD PTR [BX] [SI],34H ;[BX+SI]=[BX+SI+1]=;目的操作数寻址方式为;存储单元物理地址=MOV [BX+SI+4],BX ;[BX+SI+4]=目的操作数寻址方式为 MOV BP,2[BX+DI] ;BP=M=MOV [BP][DI],BX ;[BP][DI]=存储单元物理地址=MOV AX,[BP][DI] ;AX=存储单元物理地址=MOV BL,AL ;BL=MOV ES,BX ;ES=PUSH BX ;SP=[SP]=[SP+1]=PUSH DI ;SP=[SP]=[SP+1]=POP CX ;SP=CX=POP DX ;SP=DX=XCHG AX,BP ;AX=BP=XCHG DH,BL ;DH=BL=SAHF ;FLAGL=AH=CMC ;CF=LAHF ;FLAGL=AH=STD ;DF=CLI ;IF=PUSHF ;SP=[SP]=[SP+1]=CLD ;DF=POPF ;SP=FLAGL=NOP ;空指令2、新建COM模板文件,在编辑窗口输入如下代码序列,试分析各指令执行结果:org 100h ;[0100H]——[0113H]:MOV AX,[010EH] ;AX=MOV BX ,[0110H] ; BX=ADD AX,BX ;AX=MOV [0112H],AX ; [0112H]=INT 20HDW 2222HDW 8888HDW 03、在下面程序的括号中分别填入如下指令:①LOOP XH ②LOOPNE XH ③LOOPE XH问在这三种情况下,当程序执行完后,AX、BX、CX、DX四个寄存器中的内容分别是什么?START:MOV AX,04MOV BX,02MOV CX,03MOV DX,05XH:INC AXADD BX,AXSHR DX,1()HLT。

实验五 80x86汇编语言程序设计

实验五 80x86汇编语言程序设计

计算机组成原理与汇编元程序设计实验报告实验五 80x86汇编语言程序设计1.按要求编写一个汇编语言程序,实现下面的功能:1)在计算机屏幕上输出自己的学号和姓名拼音;2)在计算机屏幕上输出99乘法表。

1*1=1 1*2=2 1*3=3……1*8=8 1*9=92*1=2 2*2=4 2*3=6……2*8=16 2*9=183*1=3 3*2=6 3*3=7……3*8=24 3*9=27………………8*1=8 8*2=16 8*3=24 ……8*8=64 8*9=729*1=9 9*2=18 9*3=27 ……9*8=72 9*9=813)从键盘输入任意两个一位10进制数据,按99乘法表的格式输出这两个数据的乘法运算表达式;2. 编写设计一个2,10,16进制的码制转换程序,程序输入某进制的数据,转换为其他两种进制数据输出,要求:1) 程序可以输入<65536的任意进制的数据;2) 保证输入的数据为正确的进制数据,如果输入不正确,给出错误提示,然后要求重新输入;(比如要输入10进制数据,输入的必须是0-9,如果输入其他,则错误)3)程序执行输入输出的时请先给出一定的提示,比如“please input 4 bit decimal number:”“output decimal data:”等;要求:1. 提供算法与程序框图;2. 提供源程序,在源程序空白位置,对重要的源程序进行必要的注释;3. 将源程序以你学号后6位为文件名进行保存,并进行编译、链接生成exe文件,执行生成的exe文件,并验证程序的各个功能;提供截图,在截图空白位置,进行简单的说明;计算机组成原理与汇编元程序设计实验报告云南大学软件学院实验报告指导教师 (签名):1.乘法程序程序功能:利用int 21的9号功能输出保存在data段中的学号和姓名字符;利用两层循环控制输出9*9乘法表;接收被乘数和乘数,计算结果并输出表达式。

程序框图:源程序:运行结果:2.进制转换程序功能:输入二,十,十六进制任意一种数据,通过计算转化为另外两种类型的数据并输出,数据范围最大不超过65535程序框图:源代码:运行结果:输入二进制输入十进制输入十六进制。

Emu8086在汇编语言教学中的使用

Emu8086在汇编语言教学中的使用

现代计算机!总第二八一期"!"#$%&’"!()*+%,--!."!"#$%$&在汇编语言教学中的使用胡安明!广东技术师范学院天河学院计算机系"广州#$%#&%#摘要#关键词#汇编语言!!"!#!$%&!"!’收稿日期"("")*+(*(!修稿日期"(""!*",*"+作者简介"胡安明#+-!(*$%男%湖北荆州人%助教%本科%研究方向为软件工程在汇编语言实验教学过程中%传统的教学软件是./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 北京#机械工业出版社!"。

实验一-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 汇编语言图形绘制

emu8086 汇编语言图形绘制
微机接口报告
汇编语言图形绘制
题目要求:
微机接口图形绘制,实现下面的目标
1、将screen设置为图形显示模式;
2、程序开始提示绘制:直线、矩形还是三角形;
3、根据2的选择,进一步通过键盘输入直线、矩形或三角形的参数(即直线端点或▲、■的各个顶点坐标);
4、步骤3要求的图形绘制结束以后,再进入第2步。
提示:
call get_string
ret
DrawRect endp
ShowTip proc
mov al, 13h
mov ah, 0
int 10h
jmp ShowTipBeg
tip0 db "please choose the shapeto draw:",0ah,0dh,'$'
tip1 db "1 draw line",0ah, 0dh,'$'
call scan_num
mov [bx+si+4],cx
sub cx,[bx+si+2]
ret
DrawLine endp
DrawRect proc
print 0ah,0dh
print "you want to draw rect!"
print 0ah,0dh
print"pleaseenter cord(x0,y0,x1,y1):"
movx2,axmov y2,bx
mov al,13h
mov ah,0
int 10h
call oblique
;按1返回到start
GOTOXY 10,1
mov dx, offset msg10

实验一 Debug和Emu8086软件的使用

实验一 Debug和Emu8086软件的使用

实验一Debug和Emu8086软件的使用一、实验目的:(1)熟悉Debug软件和汇编语言开发环境。

(2)掌握Emu8086软件使用方法。

(3)了解汇编语言的程序结构、调试一个简单的程序。

(4)理解寻址方式的意义。

二、实验内容及要求:1、Debug的使用根据课本104页的实验1中的预备知识的说明,学习使用Debug软件。

编程实现:在显示器上显示字符串Welcome to TianHe college!两个64位无符号数相加2、Emu8086的使用(1)打开桌面上的Emu8086的图标,出现如图所示的对话框,选择【继续……】首次打开软件,界面中默认已有一段小程序。

该程序实现在屏幕上显示三段字符串的功能。

若用户需要自己重新编程,可点击工具栏的【new】图标,出现如图所示的对话框,选择编程所采用的模板。

选择不同的模板,在程序源代码中会出现如下标记:#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模板,点击【确定】,软件出现源代码编辑器的界面,如图所示:在源代码编辑器的空白区域,编写如下一段小程序:DATAS SEGMENTSTRING DB 'Welcome to TianHe college!', 0AH,0DH,'$'DATAS ENDSCODES SEGMENTASSUME CS:CODE,DS:DATASSTART:MOV AX,DATASMOV DS,AXLEA DX,STRINGMOV AH,9INT 21HMOV AH,4CHINT 21HCODES ENDSEND START代码编写结束,点击菜单【文件】【另存为……】,将源代码换名保存。

8086汇编语言程序设计

8086汇编语言程序设计

.实验1简单汇编语言程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。

2.掌握简单汇编语言程序的设计方法。

3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。

二、实验内容依照以下要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,考据程序的正确性。

若X、Y、R、W是存放8位带符号数字节单元的地址,Z是16位字单元的地址。

试编写汇编程序,完成Z ((W X) 5Y)(R 2)。

2.试编写一个程序,测试某数是否是奇数。

如该数是奇数,则把DL的第0地址1,否则将该地址0。

三、实验报告要求1.程序算法流程图。

2.源程序清单。

3.程序运行结果。

4.调试过程中遇到的问题和解决的方法。

..实验2分支及循环程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。

2.掌握分支程序和循环程序的设计方法。

3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。

二、实验内容依照以下要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,考据程序的正确性。

1.编写汇编程序,统计某储藏区若干个数据中英文字母的个数,并将结果在屏幕上显示。

2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。

参照加密方法是:每个数乘以2。

(说明:本题的加密方法,同学们可以自己拟订)三、实验报告要求1.程序算法流程图。

2.源程序清单。

3.程序运行结果。

4.调试过程中遇到的问题和解决的方法。

..实验3子程序程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。

2.掌握子程序的设计方法。

3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。

二、实验内容依照以下要求,编写汇编源程序,并利用DEBUG工具调试程序,考据程序的正确性。

1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。

2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。

微机原理Emu8086仿真软件实验讲义剖析

微机原理Emu8086仿真软件实验讲义剖析

实验一显示程序实验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仿真软件实验讲义

(完整版)微机原理Emu8086仿真软件实验讲义

实验一显示程序实验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对默认文件夹进行修改。

80X86汇编语言程序设计 实验报告3

80X86汇编语言程序设计 实验报告3

80X86汇编语言程序设计实验报告专业:班级:日期:成绩:第三次试验指导老师:学生姓名:学号:一、实验目的(1) 加深对一些常用的汇编指令的理解;(2) 掌握基本的程序设计方法;(3) 进一步熟悉TD的使用。

二、实验内容1、《80X86汇编语言程序设计》教材中 P96的 3.11 题。

(1)请事先指出程序运行结束后,显示器显示的内容。

(2)若将NUM的定义改成如下形式:NUM DB 35显示的结果是什么?(3)若将NUM的定义改成如下形式:NUM DB 59显示的结果是什么?(4)若将NUM的定义改成如下形式:NUM DB 75显示的结果是什么?(5)修改该程序,使之能够以16进制形式显示NUM单元中的内容。

2、设在一个缓冲区BUF1中存放了一个串“123GOOD”, 将其以相反顺序拷贝到另一个缓冲区BUF2中。

(用TD观察程序执行前后的数据区,并记录下来)3、输入一个十进制数字串(假定是无符号的),以四位十六进制的形式输出该串对应的值。

例如:Input: 123↙Output: 007BH要求:(1) 画出程序流程图,给出寄存器、存储单元的分配方法;(2) 给出完整的程序清单,有必要的注释。

三、实验步骤及结果1、(1)、程序运行完之后,得到的结果为:(NUM)=39H。

(2)、程序运行完之后,得到的结果为:(NUM)=23H。

(3)、程序运行完之后,得到的结果为:(NUM)=3;H。

(4)、程序运行完之后,得到的结果为:(NUM)=4;H。

(5)、修改后的程序段如下:C1 SEGMENT USE16 ASSUME DS:A1, SS:B1, CS:C1 BEGIN: MOV AX,A1MOV DS,AXLEA DI,BUF0MOV AL,NUMSHR AL,4CMP AL,0AHJAE L1OR AL,30HMOV [DI],ALL2: INC DIMOV AL,NUMAND AL,0FHCMP AL,0AHJAE L3OR AL,30HMOV [DI],ALL4: INC DIMOV BYTE PTR [DI],'H'INC DIMOV BYTE PTR [DI],'$'LEA DX,BUFMOV AH,9INT 21HMOV AH,4CHINT 21HL1: MOV BYTE PTR [DI],'0'INC DISUB AL,0AHADD AL,'A'MOV [DI],ALJMP L2L3: SUB AL,0AHADD AL,'A'MOV [DI],ALJMP L4C1 ENDSEND BEGIN运行后的结果如下:①、当NUM为35时:②、当NUM为59时:③、当NUM为75时:④、当NUM为0ACH时:2、编写的程序如下:.386DATA SEGMENT USE16BUF1 DB '123GOOD$'BUF2 DB 0DATA ENDSSTACK SEGMENT USE16 STACK STACK ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXMOV DI,OFFSET BUF1MOV BX,OFFSET BUF2MOV CL,[BX]LOPA: MOV DL,[DI]CMP DL,'$'JE L1INC DIJMP LOPAL1: CMP DI,0JE EXITDEC DIMOV DL,[DI]MOV CL,DLMOV [BX],CLINC BXJMP L1EXIT: MOV CL,'$'MOV [BX],CLLEA DX,BUF2MOV AH,9INT 21HMOV AH,4CHINT 21HCODE ENDSEND START运行后的结果如下:运行程序前数据区显示为:运行程序后数据区显示为:3、①、画出流程图如下:开始输入一个数字串将输入的数字串转化为10进制数存储。

《微机原理及应用》实验指导书123

《微机原理及应用》实验指导书123

《微机原理及应用》实验指导书实验一汇编&仿真软件EMU8086的认识实验实验目的:熟悉EMU8086的开发环境,为后续的汇编语言程序设计与调试运行做好准备。

实验内容:1、熟悉EMU8086开发环境的菜单命令以及工具栏按钮的功能。

2、熟悉汇编程序的编辑、编译、仿真运行及调试的基本过程。

实验步骤:1、进入EMU8086的开发环境,新建一个文件,使用“COMTemplate”选项。

2、在编辑窗口中的ORG 100h后键入如下程序:3、使用Emulate仿真功能编译程序并进入Emulator仿真界面。

如果编译过程中报错,请根据提示信息除错,然后重新编译直到通过。

4、在仿真界面中使用Single Step单步执行程序,观察程序的运行状况及各寄存器的变化(蓝色高亮显示)。

利用ALU和FLAGS 按钮可以查看运算过程及各标志位的变化情况。

5、程序运行结束后记录AX、BL和CX的值。

(重新加载程序请使用RELOAD按钮)6、更改源程序里AX的初始值为7FF8H,重复步骤3~5。

比较两次结果的不同之处,解释原因。

(数值转换查看功能在MATH 菜单中)7、对已讲授的各类汇编指令用上面的步骤调试运行,加深对指令功能及要点的掌握。

思考题:无符号数和有符号数在汇编程序里如何区分?实验二汇编语言程序设计1:统计程序实验目的:进一步掌握8086的指令系统以及汇编程序的基本设计方法。

实验内容:附录中有一英文段落。

编写汇编程序,统计26个英文字母在其中出现的频率(不区分大小写),结果存放到result开始的26字节存储单元里。

实验步骤:1.进入EMU8086的开发环境,新建一个文件,使用“COM Template”选项。

2.在编辑窗口中的ORG 100h后键入事先编好的程序。

3.使用Emulate仿真功能编译、调试及运行。

4.记录程序和正确的统计结果。

附录:1.待统计文本:Because registers are located inside the CPU, they are much faster than memory. Accessing a memory location requires the use of a system bus, so it takes much longer. Accessing data in a register usually takes no time. Therefore, you should try to keep variables in the registers. Register sets are very small and most registers have special purposes which limit their use as variables, but they are still an excellent place to store temporary data of calculations.2.字符与ASCII码的对照关系:A~Z:41H~5AHa~z:61H~7AH3.屏幕输出待显示字符:例子:mov dl, 'a'mov ah,2int 21h4.程序模板:ORG 100hjmp start;;;数据定义sample DB "AAaa00...zzZ" result DB 26 dup (0)in_order DW 26 dup (0) ;;;数据定义结束start:;;;;;;添加sample字符串的统计程序;;;实验三汇编语言程序设计2:子程序设计-冒泡排序实验目的:掌握子程序和多重循环的基本设计方法。

汇编--输入输出程序设计

汇编--输入输出程序设计

一、实验目的和内容1. 掌握输入输出指令的使用;2. 上网查3相步进电机的工作原理;3. 用emu8086工具运行步进电机程序;4. 对步进电机程序进行改进,精确控制其转速。

二、实验原理及基本技术路线图(方框原理图)步进电机的工作原理:三、所用仪器、材料(设备名称、型号、规格等)1. 操作系统平台:Windows 72. 汇编环境:emu8086四、实验方法、步骤1. 打开emu8086汇编开发环境;2. 打开emu8086例子程序中的步进电机的源程序:D:\emu8086\examples\stepper_motor.asm3. 运行该程序,观察运行情况,并结合步进电机的工作原理,阅读并理解程序的执行逻辑,读懂程序中的注释;4. 尝试修改该程序,以精确控制步进电机的转速;5. 运行修改后的程序,观察运行结果,并分析;6. 记录实验过程,并完成实验报告。

五、实验过程原始记录(数据、图表、计算等)1. 打开步进电机的控制程序:2. 运行调试该程序,观察结果:3. 阅读该程序,并添加注释(下面为了保存原版程序,打开程序的一个副本进行修改):添加注释后的源代码如下:; 这是一个输出控制的例子; 它向虚拟的I/O端口输出值; 以控制步进电机; d:\emu8086\devices\stepper_motor.exe 在7号端口#start=stepper_motor.exe#name "stepper"#make_bin#steps_before_direction_change = 20h ; 十进制的32jmp start; ========= 数据 ===============; 二进制的数据用以控制步进电机; 顺时针以半步循环方式(半个步距角)转动:datcw db 0000_0110b ;BC-->C-->AB-->B-->BCdb 0000_0100bdb 0000_0011bdb 0000_0010b; 二进制的数据用以控制步进电机; 逆时针以半步循环方式(半个步距角)转动:datccw db 0000_0011b ;AB-->A-->BC-->B-->ABdb 0000_0001bdb 0000_0110bdb 0000_0010b; 二进制的数据用以控制步进电机; 顺时针以整步循环方式(一个步距角)转动:datcw_fs db 0000_0001b ;A-->AB-->BC-->0-->Adb 0000_0011bdb 0000_0110bdb 0000_0000b; 二进制的数据用以控制步进电机; 逆时针以整步循环方式(一个步距角)转动:datccw_fs db 0000_0100b ;C-->BC-->AB-->0-->C db 0000_0110bdb 0000_0011bdb 0000_0000bstart:mov bx, offset datcw ; 开始以顺时针半步循环方式执行mov si, 0mov cx, 0 ; 初始化计数器next_step:; 获取步进电机控制信号最高位, 若为1, 则表示就绪wait: in al, 7test al, 10000000bjz waitmov al, [bx][si]out 7, alinc sicmp si, 4jb next_stepmov si, 0inc cxcmp cx, steps_before_direction_changejb next_stepmov cx, 0add bx, 4 ; 下一组控制数据cmp bx, offset datccw_fsjbe next_stepmov bx, offset datcw ; 返回顺时针半步循环方式执行jmp next_step4. 尝试修改该程序,以精确控制步进电机的转速:修改说明:在原程序的OUT 7, AL一句后面加入如上图所示的代码,试图通过调用DOS系统中的INT 15H的86H号功能,即延时功能来控制步进电机每一步转动的时间,这里为了观察方便,设置每一秒转动一步(半步或整步)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 file format, pure machine code.”后,单击按钮。

在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。

输入全部指令后,单击按钮,保存相应的程序段。

2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。

打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。

在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。

在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。

输入全部指令后,单击按钮,保存相应的程序。

1.1.2执行程序在编辑界面中,如图所示,单击按钮,自动完成源程序的编译和。

在“emulator”对话框中(),左边部分列出了寄存器的当前值,右边部分是已经输入的程序段,中间部分是右边每条指令的物理地址和对应的机器代码,中间的文本框中列出了当前指令的CS和IP。

单击按钮,可以单步执行一条指令;单击按钮,可以一次执行完所有程序;单击按钮,可以重新回到第一条指令的位置处;单击按钮,可以重新加载另一个程序。

修改“emulator”对话框中文本框的容,也可以观察其它段的容,在图所示界面中,DS=0700H,若要察看该数据段中偏移地址为6000H位置处的存单元容,可以在文本框中输入0700:6000,显示结果如图所示,中间部分依次列出从该地址开始的所有字节的容。

在“emulator”对话框的底部,单击按钮,可以观察栈的容;单击按钮,可以观察标志寄存器中标志位的容。

在“emulator”对话框中,选择“view”菜单中的“memory”菜单项,也可以观察存的情况。

在“Random Access Memory”对话框中,可以修改文本框中的值可以确定所要观察的地址,该值由段基地址:段偏移地址构成,如图所示,当前要观察的存地址为(6000:0010)。

在显示结果中,左边是逻辑地址,中间是从该地址的开始连续16个字节的容,右边是每个字节对应的字符。

在该对话框中,也可以直接修改存储器单元的值,如图所示,从60010H开始的连续4个字节的容已经被修改为12H,34H,56H和78H。

1.2基础实验1.2.1数据传送指令1.实验目的1)熟悉8086指令系统的数据传送指令及8086的寻址方式。

2)利用emu8086调试工具调试汇编程序。

2.实验设备微型计算机、emu80863.实验原理通用数据传送指令包括:1)通用数据传送指令,如MOV,PUSH,POP,XCHG,CBW,CWD;2)目标地址传送指令,如LDS,LES;3)标志传送指令,如LAHF,SAHF,PUSHF,POPF;4)输入输出指令,如IN,OUT,LEA 寻址方式包括:1)立即寻址;2)直接寻址;3)寄存器寻址;4)寄存器间接寻值;5)寄存器相对寻址;6)基址-变址寻址;7)基址—变址—相对寻址;8)隐含寻址4.实验容(1)创建COM TEMPLATE程序,输入以下程序段,观察程序的执行情况,程序段如下:MOV BL,08H ;BX=?MOV CL,BL ;CL=?MOV AX,03FFH ;AX=?MOV BX,AX ;BX=?MOV DS:[6000H],BX ;DS:[6000H]=?(提示:在emulator对话框中间的文本框中输入段基地址:段偏移地址,可以观察其它逻辑段相应存储单元的容)(2)创建COM TEMPLATE程序,用以下程序段将一组数据压入PUSH堆栈区,然后通过三种不同方式出栈。

观察栈的变化情况(提示:在emulator对话框中,单击按钮可以察看栈中容)以及出栈后数据的变化情况,并把结果填入表1-1中。

程序段如下:MOV AX,0102HMOV BX,0304HMOV CX,0506HMOV DX,0708HPUSH AXPUSH BXPUSH CXPUSH DX第—种出栈方式的指令序列:POP DXPOP CXPOP BXPOP AX第二种出栈方式的指令序列(注:替换掉第—种出栈方式的指令序列):POP AXPOP BXPOP CXPOP DX第三种出栈方式的指令序列(注:替换掉第二种出栈方式的指令序列):POP CXPOP DXPOP AXPOP BX寄存器的值第一种出栈方式第二种出栈方式第三种出栈方式(AX)=(3值(提示:在“emulator”对话框中,可以直接修改寄存器的值;选择“view”菜单中的“memory”菜单项可以设置存单元的值),其中BX=0010H,SI=0001H,[60010H]=12H,[60011H]=34H,[60012H]=56H,[60013H]=78H,[60120H]=0ABH,[60121H]=0CDH,[60122H]=0EFH,观察指令执行后AX中的容。

1)MOV AX,1200H2)MOV AX,BX3)MOV AX,[0120H]4)MOV AX,[BX]5)MOV AX,0110H[BX]6)MOV AX,[BX][SI]7)MOV AX,0110H[BX][SI](4)创建COM TEMPLATE程序,试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,将DS:6000H字节存储单元中的容传送到DS:6020H单元中。

(5)设AX=1111H,BX=2222H,[DS:6010H]=3333H。

试编写COM TEMPLATE程序,将AX的容与BX的容交换,然后再将BX的容与DS:6010H单元的容进行交换。

(6)若[DS:6000H]=0EEFFH,[ES:7000H]=0CCDDH,请编写COM TEMPLATE程序,将两个存储单元的容交换。

5.实验习题指出下列指令的错误并加以改正,并在emu8086中验证。

1)MOV [BX],[SI]2)MOV AH,BX3)MOV AX,[SI][DI]4)MOV BYTE PTR[BX],2000H5)MOV CS,AX6)MOV DS,2000H6.实验报告要求1)整理源程序段和运行结果。

2)给出几种在emu8086中察看存单元的方法。

1.2.2算术逻辑运算指令1.实验目的1)熟悉算术逻辑运算指令的功能。

2)了解标志寄存器中各标志位的意义以及指令执行对它的影响。

2.实验设备微型计算机、emu80863.实验原理算术运算指令包括:1)加法指令,如ADD,ADC,INC;2)减法指令,如SUB,SBB,DEC,NEG,CMP;3)乘法指令,如MUL,IMUL;4)除法指令,如DIV,IDIV。

逻辑运算指令包括:AND,OR,NOT,XOR,TEST4.实验容(1)创建COM TEMPLATE程序,输入以下程序段,单步执行并记录标志位的变化情况(提示:在emulator对话框中,单击按钮察看标志寄存器的值)。

程序段及结果表格如表1-2。

CF ZF SF OF PF AF标志位程序程序段1 0 0 0 0 0 0 MOV AX, 1018HMOV SI, 230AHADD AX, SIADD AL, 30HMOV BX, 3FFHADD AX,BXMOV [20H], 1000HADD [20H], AXPUSH AXPOP BX程序段2 0 0 0 0 0 0 MOV AX, 0A0AHADD AX, 0FFFFHMOV CX, 0FF00HADC AX, CXSUB AX, AXINC AXOR CX, 0FFHAND CX, 0F0FHMOV [10H], CX程序段3 0 0 0 0 0 0(2、04H、30H),计算存单元中这三个数的和,并将和放在0013H单元中,再求出这三个数的乘积,并将乘积存入0014单元中,写出完成此功能的COM TEMPLATE程序。

(3)创建COM TEMPLATE程序,写出完成下述功能的程序段,并指出程序运行后AX =?1)将15H传送到AL;2)再将AL的容乘以2;3)将15H传送到BL;4)把AL的容乘以BL的容。

(4)创建以下两个程序段的COM TEMPLATE程序并上机验证。

1)给数据段中从偏移地址1000H开始的12个字存储单元的容赋值,请将第4条比较指令填写完整(划线处)。

MOV SI,1000HNEXT: MOV WORD PTR[SI],1ADD SI,2CMP SI,JNE NEXT2)假定要按高地址到低地址的顺序进行清除操作(高地址从1016H开始),则上述程序段应如何修改?5.实验习题简要说明ADD、SUB、AND、OR指令对标志位的影响。

6.报告要求1)整理源程序段和运行结果,回答实验中的问题。

1.2.3移位指令1.实验目的1)熟悉移位指令的功能。

2)了解标志寄存器中各标志位的意义以及指令执行对它的影响。

2.实验设备微型计算机、emu80863.实验原理移位指令包括:1)非循环移位指令,如SAL,SAR,SHL,SHR;2)循环移位指令,如ROL,ROR,RCL,RCR4.实验容(1)创建COM TEMPLATE程序,输入以下程序段,单步执行并记录标志位的变化情况(提示:在emulator对话框中,单击按钮可以察看标志寄存器的值)。

程序段及结果表格如表1-3。

CF ZF SF OF PF AF标志位程序程序段0 0 0 0 0 0MOV AX, 0DEC AXADD AX, 3FFFHADD AX, AXNOT AXSUB AX, 3OR AX, 0FBFDHAND AX, 0AFCFHSHL AX,1RCL AX,1(2?1)传送数据2058H到[DS:1000H]单元中,数据12H到DS:1002H单元中;2)把DS:1000H单元中的数据传送到AX寄存器;3)把AX寄存器的容算术右移二位;4)再把AX寄存器的容除以DS:1002H字节单元中的数;5)最后把商存入字节单元DS:1003H中。

相关文档
最新文档