%----------最详细的emu教程--------%
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显示标志寄存器的值。如果刚刚执行的那一条指令修改了哪个标志位的值则以红色显示。
可以到这个网址去下载:
https://www.sodocs.net/doc/bc4634417.html,/soft/16859.htm
目前网上很多人找这个软件的破解版。。其实根本不用破解。。
只要在用户名一栏输入任意的字符
注册码的前三位输入“112”就可以绕过注册认证了。。
至于为什么我就不多说了有兴趣的可以看一下我在看雪论坛发表的一篇文章:https://www.sodocs.net/doc/bc4634417.html,/showthread.php?t=119741
下面是在百度文库下载的一篇基础教程希望能对大家有所帮助。。。。
如何运行?
1.在开始菜单选在它的图标,或者直接运行Emu8086.EXE
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 right. &bitwise AND. ^bitwise XOR. | bitwise OR. 二进制必须有“b”作结尾,例如00011011b 十六进制必须有"h"作结尾,另外,当地一位是字母时,最前面必须加上0,例如:0ABCDh八进制必须有"o"作结尾,例如:77o 什么是汇编语言? 汇编语言是底层编程语言。为了学习这门语言,你需要对于计算机结构有所了解。计算机系统模型如下: 系统总线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。 当你修改其中任意8位值,整个16位寄存器的值同样改变。同样对于其他的3个寄存器,“H”表示高8位,“L”表示低8位。寄存器在CPU内部,访问中它们速度远远超过内存。因为,访问内存需要经过系统总线,所以时间要长一些。而访问寄存器中的数据几乎不需要时间。于是,编程中,应当尽量在寄存器中保存数据。虽然寄存器很小,并且这些寄存器都有具体用途,但他们依然是存放计算中临时数据的好地方。 段寄存器 ?CS代码段寄存器,用来存放当前正在运行的指令 ?DS数据段寄存器,用来存放当前运行程序所用的数据 ?ES附加段寄存器,由程序员决定用途 ?SS堆栈段寄存器,指出堆栈所在区域 尽管容许在段寄存器中存放任何数据,但是这决不是 一个好主意。段寄存器有着非常特别的目的--指出可以访问内存块的地址。段寄存器与通用寄存器协同工作就可以访问任意的内存区域。例如,如果我们打算访问物理地址是12345h (十六进制)的内存单元,我们应设置DS = 1230h SI = 0045h 这样以来,我们便能访问超过一个寄存器(16位)所能表示的内存地址的范围。CPU 计算物理地址的方法是将段寄存器乘以10H 在加上一个特定 的通用寄存器。(1230h * 10h + 45h = 12345h): 这种,由两个寄存器生成的地址被称为有效地址 (effective address ) 默认下,BX, SI 及 DI 与 DS 协同工作,BP SP 与 SS 寄存器协同工作。其余的通用寄存器不能形成有效地址!同样,尽管BX 可以形成有效地址,但是BH BL 不能!控制寄存IP 指令指针寄存器 instruction pointer 、Flags Register 状态标志寄存器 IP 始终同CS 协同工作,指出当前执行的指令。 Flags Register 完成一次数学运算后,由CPU 自动修改,通过它可以得到当前结果类型,也可以作为跳转语句条件。通常你无法直接访问它们。 寻址方式 我们可以通过下面的四个寄存器来寻址 BX, SI, DI, BP . 通过计算[]符号中的值,我们可以访问到不同内存单元的值。具体组合请看下表: [BX + SI] [BX + DI] [BP + SI] [BP + DI] [SI] [DI] d16 (variable offset only) [BX] [BX + SI] + d8 [BX + DI] + d8 [BP + SI] + d8 [BP + DI] + d8 [SI] + d8 [DI] + d8 [BP] + d8 [BX] + d8 [BX + SI] + d16 [BX + DI] + d16 [BP + SI] + d16 [BP + DI] + d16 [SI] + d16 [DI] + d16 [BP] + d16 [BX] + d16 d8 - 表示8位偏移量d16 - 表示16位偏移量 偏移量可以是一个立即数或者是一个变量的偏移,或者二者兼备。这取决于编译器如何计算单独的立即数。偏移量可以在[]符号里面或者外面,这不影响编译器生成相同的机器码。偏移量是一个有符号数,可以是正数或者负数。一般说来,8位或者16位,对于编译后的结果是有影响的。例如,假定DS = 100, BX = 30, SI = 70。 如下寻址方式[BX + SI] + 25 计算物理地址为100 * 16 + 30 + 70 + 25 = 1725 默认下,DS 寄存器应用在除了BP寄存器之外的所有物理地址计算中,寄存器是和SS寄存器一起工作的。用过下面的表,你可以和轻松记住谁和谁是关联在一起使用的。 上表中,你可以从每一列中选择一个或者忽略任意一个列。比如,可以看到,BX 和BP始终不会选到一起。SI 和DI不会选到一起。这是一个计算地址模式[BX+5] 段寄存器(CS, DS, SS, ES) 中数值被称作"段偏移" 。目的寄存器(BX, SI, DI, BP) 中数值被称作"偏移量" 比如,ds中数值为1234h,si中数值为7890h,可以记作1234:7890 物理地址为1234h * 10h + 7890h = 19BD0h在编译过程中使用如下声明数据类型 BYTE PTR - 表示字节;WORD PTR - 表示字(2个字节) 例如:BYTE PTR [BX] ;按字节访问;WORD PTR [BX] ;按字访问 Emu8086 容许使用如下更简洁的前缀 b. - 等价于上面的BYTE PTR ;w. - 等价于上面的WORD PTR 有时,编译器可以自动计算出数据类型,但是如果一个参与运算的数是立即数,这种方法就不可靠了。 MOV 指令 将第二个操作数(源)拷贝到第一个操作数(目的)指定位值,源操作数可以是立即数,通用寄存器或者内存单元,目的寄存器可以是通用寄存器或者内存单元,源和目的必须是同样大小,要么都是字节要么都是字 操作类型如下: MOV REG, memory MOV memory, REG MOV REG, REG MOV memory, immediate MOV REG, immediate REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP. memory: [BX], [BX+SI+7],变量, 等等 immediate: 5, -24, 3Fh, 10001101b, 等等. mov 指令只支持如下段寄存器: MOV SREG, memory MOV memory, SREG MOV REG, SREG MOV SREG, REG SREG: DS, ES, SS, 注意CS 只能作操作源 REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP. memory: [BX], [BX+SI+7], variable, 等等 MOV指令不能用来设置CS和IP寄存器的值。 下面是一个使用MOV 指令的例子: #MAKE_COM# ; 表示,这个是一个com程序 ORG 100h ;COM 程序必须的 MOV AX, 0B800h ; 将ax设置为B800h. MOV DS, AX ; 将AX 值拷贝到DS. MOV CL, 'A' ; 将ASCII 码'A'的值传送到cl,这个值是41h. MOV CH, 01011111b ; 将ch设置为二进制的01011111b MOV BX, 15Eh ; 将BX 设置成15Eh. MOV [BX], CX ; 将CX 放到bx 指出的内存单元B800:015E RET ; 返回操作系统 你可以将上面的程序贴入Emu8086代码编辑器,接下来按下[complie and emulate] (或者按F5) 模拟窗口将显示这个程序已经调入,点击[single step]观察寄存器数值变化,你可以猜到";" 表示注释,编译器忽略在";"后面的一切,程序结束后,你可以看到如下窗口 事实上,上面程序是将字符直接写入显示内存。 通过上面的例子,你可以发现MOV 指令是非常有用的。 变量 变量是一个内存地址。对于编程者来说,使用诸如名称为“var1”这样的变量保存数据远远比使用5a73:235b这样的地址容易的多。特别是当你使用10个以上的变量的时侯。编译器支持这两种变量BYTE 和WORD.(字节和字) 声明变量的方法: name DB value 名称DB 值 name DW value 名称DW 值 DB - stays for Define Byte. DW - stays for Define Word. name -可以是任何字母与数字构成,但是必须由字母开头。可以通过不命名来声明一个没有名称的的变量(这个变量只有地址,没有名称) value - 可以是任何数值支持三种进制(十六进制,二进制和十进制),你可以使用"?"符号表示初始值没有确定。 你可能从第二章了解到,MOV 指令是将数值从源拷贝到目的。让我们再看一个MOV 指令的例子 #MAKE_COM# ORG 100h MOV AL, var1 MOV BX, var2 RET ; stops the program. VAR1 DB 7 var2 DW 1234h 将上面的代码拷贝到emu8086源程序编辑器中,按下F5键编译并在模拟器中执行。你会看到如下画面 从画面可以看出,反编译后的代码同源程序很相似,不同的是变量被具体的内存地址取代。当编译器生成机器代码它会自动将变量名称用该变量的便宜量代替。默认情况下,DS 寄存器存放段偏移(当执行com文件的时侯,DS 寄存器的值同CS 寄存器(代码段)的值一样)。内存第一列是偏移(offset),第二列是一个十六进制值(hexadecimal value),第三列是十进制(decimal value),最后一列是ASCII 字符。编译器是非大小写敏感的,所以“VAR1” 同“var1” 都是同一个变量。 VAR1变量的偏移是0108h,物理地址是0b56:0108 var2 变量的偏移是0109h,物理地址是0b56:0109 这个变量是字,它占用2字节。这里假定低字节存放在低地址,所以34h位于12h前面。你可以看到,在RET指令后面还有一些指令,这样是因为反编译工具无法判断数据从什么 地方开始。同样,你可以写出直接使用DB的程序. #MAKE_COM# ORG 100h DB 0A0h DB 08h DB 01h DB 8Bh DB 1Eh DB 09h DB 01h DB 0C3h DB 7 DB 34h DB 12h 将上面的代码拷贝到emu8086原代码编辑器,按下F5键编译,并在模拟器中运行,你可以看到同样的反汇编结果,得到同样的功能。根据上面,你可以猜测,编译器将源程序转化为一些字节的集合,这个集合被称作机器代码(machine code),处理器懂得他们,并且执行它们。ORG 100是一个编译指令(它告诉编译器如何处理源代码)当你使用变量的时侯,这条指令特别重要。它通知编译器可执行程序将被调入偏移量是100h(256字节)的位置,有了它,编译器就可以计算出所有变量的正确地址,然后用这些地址(偏移量)来代替变量名称。上面的这些指令不会真正的编译为任何机器代码。为何可执行程序总是被装入偏移量 附录Emu8086模拟器的使用说明 一、编写源程序 1、进图编辑界面 1)点击桌面图标,得到图1; 图1 2)点击,得到图2。 图2 3)点击选中:,打开界面图3。 图3 二、编写源程序及编译 1、在图3中输入指令,保存源程序,后缀为.ASM。如图4。 图4 程序输入后,再次保存。 图5 2、点击“编译”,编译程序。 1)若程序有语法错误,则出现图6。 图6 在窗口中显示出错指令所在的行,错误的类型。改正后,再次点击,直到出现图7,显示指令没有语法错误。(程序不一定正确。) 2)若程序没有语法错误,则出现图7。 图7 图8 3)保存可执行程序(文件名可以默认),如图8。 三、查看变量数据及程序运行 1、点击按钮,再点击,得到界面如图9所示。 2、调试、运行程序窗口说明: (a) (b) 图10 调试、运行程序窗口 3、查看存储单元的内容 1)点击“aux”,选中“memory”,如图11所示。 图11 2)出现如图12所示的窗口。该窗口显示的是当前代码段中的信息,每行显示 16个存储单元的内容。地址和数据内容均默认为16进制数。 图12 3)查看数据段中的变量信息。单步执行完“MOV DS,AX”指令后,查看DS 寄存器的内容,如图13所示。 再输入新的逻辑地址,点击,如图14所示。 图14 4)查看其他段的存储信息。如“查看数据段”的方法。单步执行完段寄存器 的赋值指令后,查看段寄存器的内容,再在图14中输入新的逻辑地址,点击 4、程序运行 1)若要正常执行程序,则点击“”。 2)若要分析每条指令执行的结果,则点击“”。 5、查看标志寄存器 点击“flags”按钮即可查看状态标志位的信息。 今天我们详细说下emu8086教程而且是追码实例说明 【详细过程开始】 先简单介绍一下这一款软件的注册原理: 这个软件在注册时,会同时在注册表中和自己的根目录中写下注册信息。 在启动时候会先判断注册表,然后判断根目录下的reg.ini文件看哪一个是成功的。 只要有一个是成功的就不再继续判断了,也就是只要有一处是成功的,软件就算是注册成功版了。 下面开始了: -------------------------------------注册流程---------------------------------- 005D4B01.83BD08FFFFFF00cmp dword ptr ss:[ebp-F8],0;就先断在此处,开始往下调 005D4B08.7D26jge short emu8086.005D4B30 005D4B0A.68A0000000push0A0 005D4B0F.68B8454400push emu8086.004445B8 005D4B14.8B850CFFFFFF mov eax,dword ptr ss:[ebp-F4] 005D4B1A.50push eax 005D4B1B.8B8D08FFFFFF mov ecx,dword ptr ss:[ebp-F8] 005D4B21.51push ecx 005D4B22.FF15B0104000call dword ptr ds:[<&MSVBVM60.__vbaHresultChec>;MSVBVM60.__vbaHresultCheckObj 005D4B28.898570FEFFFF mov dword ptr ss:[ebp-190],eax 005D4B2E.EB0A jmp short emu8086.005D4B3A 005D4B30>C78570FEFFFF00000000mov dword ptr ss:[ebp-190],0 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, 5 MOV BX, 10 ADD AX, BX SUB AX, 1 HLT 实验一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, 5 MOV BX, 10 ADD AX, BX SUB AX, 1 HLT 如何运行? 1.在开始菜单选在它的图标,或者直接运行Emu8086.EXE 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)对应一位十六进制如下表 E m u8086使用指南 如何运行? 1.在开始菜单选在它的图标,或者直接运行Emu8086.EXE 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 Emu8086在《微机原理与接口技术》中的应用摘 要:《微机原理与接口技术》作为计算机专业及其相关专业的一门基础课,其重要性是不言而喻的,若在该门课程的教学中能灵活运用EMU8086仿真软件进行演示及实验教学,则能让学生直观地理解的工作原理和工作过程,提高学生的学习兴趣,较好地解决了微机原理课程教学中存在的难题。针对微机原理教学中存在的问题,提出了用EMU8086仿真软件来解决的办法,并通过实例说明了该软件在汇编程序设计和接口技术方面的应用。 关键词:微机原理 EMU8086 教学实验Debug 正文: 《微机原理与接口技术》课程是目前高校计算机专业及其相关专业学生必修的一门专业基础课,是学生学习后续课程、毕业设计和今后工作的重要技术基础。该课程的任务是以美国Intel公司生产的 16位CPU8086为主线,介绍微型计算机的硬件结构、工作原理、汇编语言程序设计方法及微型计算机的接口技术。由于该门课程对实践动手能力要求高,涉及的信息量大、知识点多、教学内容较抽象,学生普遍反映该门课很难学。微型计算机从诞生至今已有30余年,其应用已涉及各个领域。与此同时,微机原理与接口技术也得到了飞速发展。微型计算机是当今发展速度最快、应用最为普及的计算机类型。显然,掌握微机原理与接口技术是对计算机及自动控制等专业人才的基本要求。 本书以培养学生应用能力为主线,理论与实际相结合。它可以细分为PC服务器、NT工作站、台式计算机、膝上型计算机、笔记本型计算机、掌上型计算机、可穿戴式计算机以及问世不久的平板电脑等多种类型。习惯上人们将尺寸小于台式机的微型计算机统称为便携式计算机。 微型计算机原理与接口技术主要是介绍以Intel8086/8088为CPU的16位机的结构、组成原理、指令系统,编程方法和接口技术等,以 8086/8088CPU为基本出发点,详尽地论述有关微处理器及其指令系统的概念和程序设计方法,介绍构成微型计算机的存储器、各类可编程接口芯片、总线等各项技术。掌握先进微处理器芯片结构、微型计算机实现技术、计算机主板构成、各种接口技术原理及其应用编程方法;掌握汇编语言程序的编写方法,尤其掌握接口访问的方法。了解微机技术新的发展趋势,系统科学地获得分析问题和解决问题的训练;提高分析和设计接口的能力。不仅要学习微机各种接口电路的原理与作用,熟悉PC 系列机接口电路,而且还要掌握常用接口的设计与分析方法,学会使用 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\MyBuild\,但您可以通过菜单中assembler/set output directory对默认文件夹进行修改。用户保存的文件类型与第一阶段所选择的模板有关。 完成编译和保存文件后,用户可按下图4中的“close”按钮先关闭该窗体,再利用工具栏上的“emulate”按钮打开真器界面和原程序界面进行真调试,也可以按下图4中的Run按钮运行直接程序。 如何利用proteus来仿真emu8086下编写的EXE程序 1.安装proteus和emu8086,都采用默认安装方式 2.打开proteus,在其中设置emu8086编译器 1)打开“源代码”菜单中的“设定代码生成工具” 弹出下面所示对话框 2)选中上面所示对话框中左下角的“新建”按钮,然后打开c盘下emu8086文件夹,选中emu8086.exe。 3)按照下图所示,填写源程序扩展名为“ASM”目标代码扩“EXE”,命令行“%1”,然后点击确定。 2.使用emu8086,生成可执行文件 1)打开emu8086,会出现下图所示,在其中选择NEW 2)单击new按钮后会弹出如下所示对话框,选择empty workspace 3)再出现的空白编辑区部分敲入代码如:实验二中给的EX2_1.ASM 4)利用FILE菜单中的save as对源程序进行存盘,利用assembler菜单下并编译,注意文件名和路径,请注意生成的可执行文件EXE一定要和仿真电路图DSN在同一文件夹下。 5)如果编译时提示有错误,则修改反色部分,再重新编译,直至没有错误编译成功生成可执行EXE文件为止。 3.打开仿真电路图,设置仿真运行环境。 1)以EX2_1.DSN为例,双击电路图中U1:8086单元 2)弹出如下图所示对话框 3)双击第三行program file 右侧打开按钮,选择同文件夹下EX2_1.EXE,其他参数如上图设置。 4)下面如下图所示,设置内部存储器的容量Internal Memory Size 为0x1f0h,(注:内部存储器的容量还可以加大,根据情况设置即可,但因为本实验中用得到了外部扩展存储器,所以注意不能超过4000H)又因为本程序中有INT 3;断点中断,故要设置断点Stop on int 3 YES %----------最详细的emu教程--------% 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显示标志寄存器的值。如果刚刚执行的那一条指令修改了哪个标志位的值则以红色显示。 可以到这个网址去下载: https://www.sodocs.net/doc/bc4634417.html,/soft/16859.htm 目前网上很多人找这个软件的破解版。。其实根本不用破解。。 只要在用户名一栏输入任意的字符 注册码的前三位输入“112”就可以绕过注册认证了。。 至于为什么我就不多说了有兴趣的可以看一下我在看雪论坛发表的一篇文章:https://www.sodocs.net/doc/bc4634417.html,/showthread.php?t=119741 1.汇编语言程序设计实验篇 1.1.汇编系统软件简介 Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。 1.1.1创建程序 https://www.sodocs.net/doc/bc4634417.html, 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”部分可以分别输入相应的变量定义和指令。 [公司名称] 实验一 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的模板 实验一Debug和Emu8086软件的使用 一、实验目的: (1)熟悉Debug软件和汇编语言开发环境。 (2)掌握Emu8086软件使用方法。 (3)了解汇编语言的程序结构、调试一个简单的程序。 (4)理解寻址方式的意义。 二、实验内容及要求: 1、Debug的使用 根据课本35页的实验1中的预备知识的说明,学习使用Debug软件。 2、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, 5 MOV BX, 10 ADD AX, BX SUB AX, 1 HLTEmu8086模拟器的使用说明1
emu8086教程而且是追码实例说明
Emu8086软件的使用
实验01 Emu8086软件的使用
Emu8086使用指南
Emu8086使用指南教案资料
Emu8086 在《微机原理与接口技术》中的应用
Emu8086仿真软件_使用手册
如何利用proteus来仿真emu8086下编写的EXE程序
Emu8086教程
汇编语言程序设计实验篇(emu8086)
微机原理:EMU8086使用及指令系统熟悉
实验指导书1_Debug和EMU8086软件的使用