emu8086介绍解析

合集下载

8086指令系统精析解析

8086指令系统精析解析

8086指令系统精析3.1基本数据类型1.IA-32结构的基本数据类型是字节(8位)、字(16位)、双字(32位)、四字(64位,486中引入的)和双四字(128位,Pentium3中引入的)。

2.低字节占用内存中的最低地址,该地址也是此操作数的地址。

图:P44 图3-13.字、双字、四字的自然边界是偶数编号的地址,字的自然边界是偶数编号的地址,双字和四字的自然边界地址要分别能被4和8除尽。

4.数据结构要尽可能在自然边界上对齐5.对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访问,只要进行一次存储访问操作。

6.数字数据类型(学生自学)PPT3.28086的指令格式一、指令格式Label(标号):mnemonic(助记符)argument1(参数1),argument2(参数2),argument3(参数3)其中:1.标号是一个标识符,后面跟有冒号2.助记符是一类具有相同功能的指令操作码的保留名3.操作数的三个参数是任选的,可以有零到三个操作数,操作数参数的数量取决于操作码4.操作数参数可能是文字或数据项的标识符,也可能是寄存器的保留名或在程序的另一部分声明的赋予数据项的标识符。

5.在算术和逻辑指令中存在两个操作数时,右边的操作数是源,左边的操作数是目的。

例如:LOADREG: MOV AX, SUBTOTAL 功能是把由SUBTOTAL表示的源操作数传送至AX寄存器。

3.38086/8088指令的操作数寻址方式寻找操作数,操作数能定位在指令中、寄存器中、存储单元中以及I/O端口中。

1.立即数用包含在指令中的操作数作为源操作数,这些操作数即为立即操作数。

立即数可以是8位或16例1 MOV AX , 2056H结果( AH ) = 20H ( AL ) = 56H例2 MOV AL , 78 H结果( AL ) = 78H2.寄存器操作数操作数在寄存器中,指令中指定寄存器名8 位操作数,用8 位寄存器: AH、AL、BH、BL、CH、CL、DH、DL16 位操作数,用16 位寄存器: AX、BX、CX、DX、SP、BP、SI、DICS、DS、SS、ES例1 MOV AX , 2056H执行后:(AX)=2056H例2 MOV BL , AH执行前:(BL) = 12H, (AH) = 78H执行后:(BL) = 78H (AH) = 78H▲立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。

详解实模式,保护模式,虚拟8086模式

详解实模式,保护模式,虚拟8086模式
详解实模式,保护模式,虚拟8086模式
2014年11月29日 0:59
• 80x86处理器有三种工作模式:实模式,保护模式和虚拟8086模式
• 历史 ○ DOS时代,汇编凭借着特权可以随时访问系统内核,直接操作硬件,对系统安全造成威胁 ○ Windows时代的到来,不仅给我们带来了华丽的界面,更多的是给我们带来了“保护机 制”。将系统内核层层封装,用户仅能通过Windows提供的接口访问内核。即保护模式 ○ 为了兼容以前的MS-DOS程序,虚拟86模式应运而生。虚拟8086模式是以任务形式在保护模式 上执行的, 在80386上可以同时支持由多个真正的80386任务和虚拟8086模式构成的任务 ○ 其实,实模式和虚拟8086模式是为了向下兼容而设置的. 而保护模式是我们的主角, 是我们现
实际上, 80386就是通过在实模式下初始化控制寄存器, GDTR, LDTR, IDTR与TR等管理寄存 器以及页表, 然后再通过加载CR0使其中的保护模式使能位置位而进入保护模式的. 当然, 实模式下不支持硬件上的多任务切换
实模式下的中断处理方式和8086处理器相同, 也用中断向量表来定位中断服务程序地址 中断向量表的结构也和8086处理器一样: 每4个字节组成一个中断向量, 其中包括两个字节
○ 虚拟8086模式是以任务形式在保护模式上执行的, 在80386上可以同时支持由多个真正的 80386任务和虚拟8086模式构成的任务。虚拟8086模式以保护模式为基础, 它的工作方式实际 上是实模式和保护模式的混合
• 实模式
○ 以8086架构进行讲解,8086上一代8088 CPU中的寄存器都是8位的。而8086是16位的,是
显示的视频缓冲区和BIOS的地址空间
• 而在内存低端, 安排了中断向量表和BIOS数据区; 剩下从

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

emu8086

emu8086

微机接口图形绘制,实现下面的目标1、将screen设置为图形显示模式;2、程序开始提示绘制直线、矩形还是三角形;3、根据2的选择,进一步通过键盘输入直线、矩形或三角形的参数(即直线端点或▲、■的各个顶点坐标);4、步骤3要求的图形绘制结束以后,再进入第2步。

实现过程首先分析老师上课给的程序org 100hmov al,13hmov ah,0int 10hmov si,20loopdx:mov cx,30 ;column列mov al,1000b ;pixel colorloopcx:inc almov dx,si ;row行mov ah,0chint 10hloop loopcxinc sicmp si,30jnz loopdxRet看它实现的效果它是通过打印每排然后列加在打印实现的我便通过它得到写直线的方程org 100hmov al,13hmov ah,0int 10hmov si,20mov cx,30 ;column列mov al,1000b ;pixel colorloopcx:mov dx,si ;row行mov ah,0chint 10hinc cxcmp si,30jnz loopcxRet同理竖线也可画出在看画斜线老师要求写直线算法函数但我看了网上的直线算法之后觉得太复杂,感觉做不了,便只实现45,135度角直线画法,因为比较简单org 100hmov al,13hmov ah,0int 10hmov si,20loopdx:mov cx,20 ;column列mov al,1000b ;pixel color loopcx:dec simov dx,si ;row行mov cx,simov ah,0chint 10hloop loopcxRet然后关于输入选择打印不同的图就要用到过程proc于是我建立了三个过程zhixiang juxing sanjiaoxing又要输入坐标之后打印图形则要用到输入函数同时还要保存数据留待后用于是我用了scan_num 同时push到堆栈然后用时pop到所需寄存器下面以直线过程为例include emu8086.inc org 100hzhixian proc GOTOXY 1,6lea si,msg6call print_string GOTOXY 1,7call scan_num ;x1 push cxGOTOXY 4,7call scan_num ;y1 push cxGOTOXY 1,8call scan_num ;x1 push cxGOTOXY 4,8call scan_num ;y2 push cx mov ah, 0mov al, 13hint 10hmov al,1000b mov ah,0chpop cx ;y2 pop dx ;x1 pop si ;y1 pop dx ;x1 loopcx:int 10hdec cxcmp cx,sijnz loopcxcall xianshiretzhixian endpDefine_scan_num又要在屏幕上显示各种信息便创建一个xianshi proc 同时可以通过调用该过程实现循环输入打印不同图形include emu8086.inc org 100hxianshi proc mov al, 02h mov ah,00h int 10hGOTOXY 1,1LEA SI, msg1 CALL print_string GOTOXY 1,2LEA SI, msg2 CALL print_string GOTOXY 1,3LEA SI, msg3 CALL print_string GOTOXY 1,4LEA SI, msg4 CALL print_string GOTOXY 1,5LEA SI, msg5 CALL print_stringmsg1 DB 'input 1 to paint a StraightLine', 0msg2 DB 'input 2 to paint a rectangle', 0msg3 DB 'input 3 to paint a Triangle', 0msg4 DB 'input 4 to Exit',0msg5 DB 'Enter the number : ', 0msg6 DB 'Enter the parameters of plot: ', 0xianshi endpdefine_scan_numdefine_print_stringEND选择调用不同过程通过将中的值与规定值比较CALL scan_numcmp cx,1je zhixiancmp cx,2je juxingcmp cx,3je sanjiaoxingcmp cx,4je Exit这样就构成了程序各个部件再组合就成了完整程序include emu8086.inc org 100hxianshi proc mov al, 02h mov ah,00h int 10h GOTOXY 1,1LEA SI, msg1CALL print_stringGOTOXY 1,2LEA SI, msg2CALL print_stringGOTOXY 1,3LEA SI, msg3CALL print_stringGOTOXY 1,4LEA SI, msg4CALL print_stringGOTOXY 1,5LEA SI, msg5CALL print_stringCALL scan_numcmp cx,1je zhixiancmp cx,2je juxingcmp cx,3je sanjiaoxingcmp cx,4je Exitretmsg1 DB 'input 1 to paint a StraightLine', 0msg2 DB 'input 2 to paint a rectangle', 0 msg3 DB 'input 3 to paint a Triangle', 0 msg4 DB 'input 4 to Exit',0msg5 DB 'Enter the number : ', 0msg6 DB 'Enter the parameters of plot: ', 0xianshi endpzhixian procGOTOXY 1,6lea si,msg6call print_stringGOTOXY 1,7call scan_num ;x1push cxGOTOXY 4,7call scan_num ;y1push cxGOTOXY 1,8call scan_num ;x1 push cxGOTOXY 4,8call scan_num ;y2 push cxmov ah, 0mov al, 13hint 10hmov al,1000bmov ah,0chpop cx ;y2 pop dx ;x1 pop si ;y1pop dx ;x1 loopcx:int 10hdec cxcmp cx,sijnz loopcxcall xianshiretzhixian endpjuxing proc GOTOXY 1,6lea si,msg6call print_string GOTOXY 1,7call scan_numpush cxGOTOXY 4,7call scan_numpush cxGOTOXY 1,8call scan_numpush cxGOTOXY 4,8call scan_numpush cxGOTOXY 1,9call scan_numpush cxGOTOXY 4,9call scan_numpush cxGOTOXY 1,10call scan_numpush cxGOTOXY 4,10call scan_numpush cxmov al,13hmov ah,0int 10hmov al,1000b ;pixel color mov ah,0chpop cx ;y1pop ds ;x2mov dx ,dspop si ;y2loopdx:int 10hinc cxcmp cx,sijnz loopdx ;(x2,y1)~(x2,y2)mov cx,sipop dx ;x2pop cx ; y2pop si ;x1loopdx1:int 10hdec dxcmp dx,sijnz loopdx1 ;(x2,y2)~(x1,y2)mov dx,sipop si ;y1loopcx1:int 10hdec cxcmp cx,sijnz loopcx1 ;(x1,y2)~(x1,y1) pop dxmov si,dsloopcx2:int 10hinc dxcmp dx,sijnz loopcx2 ;(x1,y1)~(x2,y1) call xianshiretjuxing endpsanjiaoxing proc GOTOXY 1,6lea si,msg6call print_string GOTOXY 1,7call scan_numpush cxGOTOXY 4,7call scan_numpush cxGOTOXY 1,8call scan_numpush cxGOTOXY 4,8call scan_numpush cxGOTOXY 1,9call scan_numpush cxGOTOXY 4,9call scan_numpush cxmov al,13hmov ah,0int 10hmov al,1000b ;pixel color mov ah,0chpop ds ;y3mov cx,dspop dx ;x2pop si ;y2loopxie:int 10hinc cxcmp cx,sijnz loopxie ;(x2,y3)~(x2,y2)pop dx ;x2pop si ;y1loopxie1:int 10hdec dxdec cxcmp cx,sijnz loopxie1 ;(x2,y2)~(x1,y1)pop dx ;x1mov si,dsloopxie2:int 10hinc dxdec cxcmp cx,sijnz loopxie2 ;(x1,y1)~(x2,y3) call xianshiretsanjiaoxing endpexit procretexit endpdefine_scan_numdefine_print_stringEND实现效果先打印一条直线之后再显示开始界面从新开始本次打印一个矩形输出结果再输出三角形先输入坐标输出结果想退出则选择4遇到的困难及解决办法:在实现该程序的过程中,首先遇到的困难是如何给定直线的坐标,然后要将该坐标给寄存器,然后在读取它用来画直线。

[vip专享]Emu8086仿真软件_使用手册

[vip专享]Emu8086仿真软件_使用手册

Emu8086-Assembler and Microprocessor Emulator是一个可在Windows 环境下运行的8086CPU汇编仿真软件。

它集成了文本编辑器、编译器、反编译器、真调试、虚拟设备和驱动器为一体,并具有在线使用指南,这对刚开始学习汇编语言的人是一个很有用的工具。

您可以在真器中单步或连续执行程序,其可视化的工作环境让使用者操作更容易。

您可以在程序执行中动态观察各寄存器、标记位以及存储器中的变化情况。

仿真器会在模拟的PC中执行程序,以避免程序运行时到实际的硬盘或内存中存取数据。

此外,该软件完全兼容Intel新一代处理器,包括了PentiumⅢ、Pentium4的指令。

一.软件启动启动界面如图1所示,用户可以选择新建文本、程序实例、启动指南、近期文档。

注册的用户名随意,密码112,即可成功。

二.新建文件单击图1中的“New”选项,软件会弹出如图2所示的选择界面。

●COM模板——适用于简单且不需分段的程序,所有内容均放在代码段中,程序代码默认从ORG 0100H开始;●EXE模板——适用于需分段的复杂程序,内容按代码段、数据段、堆栈段划分。

需要注意的是采用该模板时,用户不可将代码段人为地设置为ORG 0100H,而应由编译器自动完成空间分配;●BIN模板——二进制文件,适用于所有用户定义结构类型;●BOOT模板——适用于在软盘中创建文件。

此外,若用户希望打开一个完全空的文档,则可选择empty workspace的选项。

三.编译和加载程序用户可根据上述选择的模板中编写程序,如图3所示。

该编辑界面集文档编辑、指令编译、程序加载、系统工具、在线帮助为一体,其菜单功能如表1所示。

编写完程序后,用户只需单击工具栏上的“compile”按钮,即可完成程序的编译工作,并弹出如图4所示的编译状态界面。

若有错误则会在窗口中提示,若无错误则还会弹出保存界面,让用户将编译好的文件保存相应的文件夹中。

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。

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

实验一 emu8086的使用

实验一emu8086软件的使用一. 实验目的1.熟悉汇编语言开发环境。

2.掌握Emu8086软件使用方法。

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

4.理解寻址方式的意义。

二. 实验环境硬件环境:奔3以上处理器,512MB以上内存空间软件环境:windowsXP以上操作系统,emu8086编译环境。

三.实验内容与完成情况1.实验程序例3.1程序:data segmentdata1 db 0f8h,60h,0ach,74h,3bhdata2 db 0c1h,36h,9eh,0d5h,20hpkey db "press any key...$"data endscode segmentassume cs:code,ds:datastart:mov ax, datamov ds, axmov es, axmov cx,5clclooper:mov al,data2[si]adc data1[si],alinc sidec cxjnz loopermov ax, 4c00hint 21hcode endsend start2.实验步骤首先打开Emu8086的软件,选择COM模板,将程序录入8086程序运行软件,点击保存扩展名为.asm,再单击模拟,再选择程序的单步执行模式,得到以下的操作图。

(1)开始执行(2)单步执行(3)结束四.出现的问题1.建立编码模板时出错;2.不知道如何执行程序。

五.对问题的解决方法1.在老师的提示下,知道.exe文件是需要用到的模板;2.与C++6.0的界面对比后,知道点击emulate可以打开运行界面,点击single step进行单步执行,点击run可以完全执行程序。

实验一 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。

8086指令系统精析解析

8086指令系统精析3.1基本数据类型1.IA-32结构的基本数据类型是字节(8位)、字(16位)、双字(32位)、四字(64位,486中引入的)和双四字(128位,Pentium3中引入的)。

2.低字节占用内存中的最低地址,该地址也是此操作数的地址。

图:P44 图3-13.字、双字、四字的自然边界是偶数编号的地址,字的自然边界是偶数编号的地址,双字和四字的自然边界地址要分别能被4和8除尽。

4.数据结构要尽可能在自然边界上对齐5.对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访问,只要进行一次存储访问操作。

6.数字数据类型(学生自学)PPT3.28086的指令格式一、指令格式Label(标号):mnemonic(助记符)argument1(参数1),argument2(参数2),argument3(参数3)其中:1.标号是一个标识符,后面跟有冒号2.助记符是一类具有相同功能的指令操作码的保留名3.操作数的三个参数是任选的,可以有零到三个操作数,操作数参数的数量取决于操作码4.操作数参数可能是文字或数据项的标识符,也可能是寄存器的保留名或在程序的另一部分声明的赋予数据项的标识符。

5.在算术和逻辑指令中存在两个操作数时,右边的操作数是源,左边的操作数是目的。

例如:LOADREG: MOV AX, SUBTOTAL 功能是把由SUBTOTAL表示的源操作数传送至AX寄存器。

3.38086/8088指令的操作数寻址方式寻找操作数,操作数能定位在指令中、寄存器中、存储单元中以及I/O端口中。

1.立即数用包含在指令中的操作数作为源操作数,这些操作数即为立即操作数。

立即数可以是8位或16例1 MOV AX , 2056H结果( AH ) = 20H ( AL ) = 56H例2 MOV AL , 78 H结果( AL ) = 78H2.寄存器操作数操作数在寄存器中,指令中指定寄存器名8 位操作数,用8 位寄存器: AH、AL、BH、BL、CH、CL、DH、DL16 位操作数,用16 位寄存器: AX、BX、CX、DX、SP、BP、SI、DICS、DS、SS、ES例1 MOV AX , 2056H执行后:(AX)=2056H例2 MOV BL , AH执行前:(BL) = 12H, (AH) = 78H执行后:(BL) = 78H (AH) = 78H▲立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。

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 北京#机械工业出版社!"。

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

emu8086EMU8086是学习汇编必不可少的工具,它结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。

该软件包含了学习汇编语言的全部内容。

Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug 的模拟器(虚拟机器)于一身,此外,还有循序渐进的教程。

目录软件简介使用方法如何运行十进制系统二进制系统十六进制系统十进制到另外进制的换算有符号数汇编语言通用寄存器段寄存器寻址方式MOV 指令数组常量中断运算与逻辑指令程序控制转移堆栈展开软件简介使用方法如何运行十进制系统二进制系统十六进制系统十进制到另外进制的换算有符号数汇编语言CPU内部通用寄存器段寄存器寻址方式MOV 指令数组常量中断运算与逻辑指令程序控制转移堆栈展开编辑本段软件简介EMU8086是你学习汇编必不可少的工具!Emu8086-MicroprocessorEmulator结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。

这对刚开始学组合语言的人会是一个很有用的工具。

它会在模拟器中一步一步的编译程序码并执行,视觉化的工作环境让它更容易使用。

你可以在程序执行当中检视暂存器、旗标以及记忆体。

模拟器会在虚拟PC中执行程序,这可以隔绝你的程序,避免它去存取实际硬体,像硬碟、记忆体,而在虚拟机器上执行组合程序,这可以让除错变得更加容易。

这个软件完全相容於Intel的下一代处理器,包括了PentiumII、Pentium4,而相信Pentium5也会继续支援8086的。

这种现象让8086程序码的可携性相当高,它可以同时在老机器以及现代的电脑是执行,8086的另一个优势是它的指令比较小且相当容易学习。

该软件包含了学习汇编语言的全部内容。

Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,此外,还有循序渐进的教程。

这套软件对于刚开始学习汇编语言的朋友非常有帮助.它能够编译源代码,并在模拟器上一步一步的执行。

可视化界面令操作易如翻掌.可以在执行程序的同时可观察寄存器,标志位和内存.算术和逻辑运算单元(ALU)显示中央处理器内部的工作情况.这个模拟器是在一台"虚拟"的电脑上运行程序的,它拥有自己独立的“硬件”,这样你程序就同诸如硬盘与内存这样的实际硬件完全隔离开,动态调试(DEBUG)时非常方便.8086的机器代码同INTEL下一代微处理器完全兼容,包括Pentium II 和Pentium 4,我相信Pentium 5同样也会支持8086指令.这意味着8086代码具有很广泛的应用范围,它在老式的和最新的计算机系统上都能工作.8086指令的另外一个优点是它的指令集非常小,这样学起来会容易得多.Emu8086同主流汇编程序相比,语法简单得多,但是它能生成在任何能兼容8086机器语言的代码。

注意:如果你不使用Emu8086编译程序,那你无法在运行的时候单步跟踪。

[1]编辑本段使用方法如何运行1.在开始菜单选在它的图标,或者直接运行Emu8086.EXEemu8086[2]2.在"FILE"菜单中选择"SAMPLE"3.点击"Compile and Emulate"按纽(或者按快捷键F5)4.点击"Single Step"按纽(或者按快捷键F8),可以查看代码如何运行.十进制系统目前使用最多的是十进制.十进制系统有10个数字0,1,2,3,4,5,6,7,8,9 利用这些数字能表示任何数值,例如754这些数字是由每一位数字乘以“基数”的幂累加而成的(上一个例子中基数是10 因为十进制中有十个数字)。

位置对于每一个数字是很重要的。

例如,你将上一个例子中的“7”放到结尾:547数值就成为:特别提醒:任何数字的0次幂都是1,0的0次幂也是1二进制系统计算机没有人类聪明(至少现在是这样),制造一个只有开关或者称为0,1 两种状态的电子机器很容易。

计算机使用二进制系统,只有两个数字0, 1基地为2每一位二进制数称作一位(BIT),4 BIT 组成一个半字节(NIBBLE),8BIT组成一个字节(BYTE),两个字节组成一个字(WORD),两个字组成一个双字(DOUBLE WORD)(很少使用):习惯上在一串二进制后面加上“b”,这样,我们可以知道101b是二进制表示十进制的5。

二进制10100101b表示十进制的165,计算方法如下:十六进制系统十六进制系统使用16个数字0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F基底是16. 十六进制非常紧凑,便于阅读。

将二进制转换为十六进制很容易,半字节(4bits)对应一位十六进制如下表Decimal (base 10) Binary (base 2) Hexadecimal (base 16) 0 0000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F习惯上我们在一个十六进制数的后面加上"H",以便和其他进制区别, 这样我们就知道5Fh是一个十六进制数表示十进制的95。

习惯上,我们也在以字母开头(从A到F)的十六进制数前面加上"0"例如:0E120h. 十六进制1234h 等于4660:十进制到另外进制的换算在换算中,将十进制数不断除以目标进制的基底,每一次都要记录下商和余数,直到商0。

余数用来表示结果。

下面是一个十进制39(基底是10)到十六进制(基底是16)的换算:结果为27H上例中所有的余数都小于10,不必使用字母。

再举一个更复杂的例子:十进制43868 换算为十六进制:结果是0AB5Ch, 使用上面提到的表将大于9的数字替换成字母。

运用同样的原理,我们可以换算为二进制(用2作除数),或者是先换算成十六进制,再用上面的表换算成二进制:于是,得到二进制:1010101101011100b有符号数对于十六进制数0FFh无法确定它是正数还是负数,因为它可以表示十进制的"255" 或者"- 1"。

8位可以表示256个状态,于是,我们可以假定前128个表示正数(从0到127),接下来的128个数(从128到256)表示负数。

如果想表示"- 5",我们从256中减去5,即256 - 5 = 251。

用这种复杂的方法表示一个负数有着数学依据的,数学上"- 5" 加上"5"等于0。

当我们将两个8位的数字 5 和251相加时,结果超过255,溢出处理为0!128到256高位始终是1,这个可以作为数字符号的标记对于字(16位),16位有65536个状态,头32768个状态(从0到32767)用来表示正数,下面的32768个状态(从32767到65535) 表示负数Emu8086带有数制转换工具,也可以计算各种数值表达式。

选择菜单Math 项:Number Convertor (数制转换)可以实现任意数制之间的转换。

在文本框中填写源数值,将自动转换到任意的数制。

可以作8 位或者16 位转换。

Expression Evaluator(表达式计算)可以用来计算不同数制的计算以及从一个进制到另一个进制的转换。

输入表达式,按下回车,结果就会以你选定的进制表示。

最长可以进行32位的计算。

当在Signed打钩选中时(除了八进制和双字),最前面的一位将被认作是符号位。

这样以来,0FFFFFFFFh将被认为是十进制的-1。

例如,你计算0FFFFh * 10h + 0FFFFh ( 8086 CPU所能访问的最大内存地址)。

如果你选中Signed 和Word选项,结果是-17(因为表达式被认为是(-1) * 16 + (-1) )。

如果想按照无符号数计算,请不要选择Signed表达式为65535 * 16 + 65535计算结果将是1114095 同样你可以使用Number Convertor将非十进制换算为有符号的十进制,然后根据十进制计算。

支持如下运算:~ not(inverts all bits).* multiply./ divide.% modulus.+ sum.- subtract (and unary -).<< shift left.>> shift right.& bitwise AND.^ bitwise XOR.| bitwise OR.二进制必须有“b”作结尾,例如00011011b 十六进制必须有"h"作结尾,另外,当地一位是字母时,最前面必须加上0,例如:0ABCDh 八进制必须有"o"作结尾,例如:77o编辑本段汇编语言汇编语言是底层编程语言。

为了学习这门语言,你需要对于计算机结构有所了解。

emu8086计算机系统模型如下:系统总线system bus(图中黄色部分)是将计算机各个部分连接到一起的部件。

CPU是计算机的心脏,大部分的运算都是在CPU中完成的。

RAM是读取并且存放将要执行的程序的地方。

编辑本段CPU内部通用寄存器8086CPU有8个通用寄存器,每一个寄存器都有自己的名称:AX 累加寄存器accumulator register(分为AH / AL). BX 基址寄存器base address register (分为BH / BL). CX 计数寄存器count register (分为CH / CL ). DX 数据寄存器data register (分为DH / DL). SI 源变址寄存器source index register. DI 目的变址寄存器destination index register. BP 基址指针寄存器base pointer. SP 堆栈寄存器stack pointer.编程中,由程序员决定通用寄存器的具体用途。

寄存器的主要目的是保存数值(变量)。

上面提到的寄存器是16位的,意思是: 0011000000111001b (二进制),或者12345(十进制形式)。

4个通用寄存器(AX, BX, CX, DX) 在使用时分为两个8位寄存器,例如假设AX= 0011000000111001b,AH=00110000b AL=00111001b。

相关文档
最新文档