%----------最详细的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显示标志寄存器的值。如果刚刚执行的那一条指令修改了哪个标志位的值则以红显示。
可以到这个网址去下载:
whua/soft/16859.htm
目前网上很多人这个软件的破解版。。其实根本不用破解。。
只要在用户名一栏输入任意的字符
注册码的前三位输入“112”就可以绕过注册认证了。。
至于为什么我就不多说了有兴趣的可以看一下我在看雪论坛发表的一篇文章:bbs.pediy/showthread.php?t=119741
下面是在百度文库下载的一篇基础教程希望能对大家有所帮助。。。。
如何运行?
1.在开始菜单选在它的图标,或者直接运行Emu8086二进制转换10进制快捷方法.EXE
2.在"FILE"菜单中选择"SAMPLE"
3.点击"Compile and Emulate"按纽(或者按快捷键F5)
4.点击"Single Step"按纽(或者按快捷键F8),可以查看代码如何运行.
1.在开始菜单选在它的图标,或者直接运行Emu8086二进制转换10进制快捷方法.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
二进制
目前使用最多的是十进制.十进制系统有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,计算方法如下:
习惯上在一串二进制后面加上“b”,这样,我们可以知道101b是二进制表示十进制的5。
二进制10100101b表示十进制的165,计算方法如下:
十六进制系统
十六进制系统使用16个数字0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F基底是 16. 十六进制非常紧凑,便于阅读。将二进制转换为十六进制很容易,半字节(4bits) 对应一位十六进制如下表
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||
习惯上我们在一个十六进制数的后面加上 "H",以便和其他进制区别, 这样我们就知道 5Fh是一个十六进制数表示十进制的 95。习惯上,我们也在以字母开头(从A到F)的十六进制数前面 加上"0" 例如: 0E120h. 十六进制 1234h 等于 4660:
十进制到另外进制的换算
在换算中,将十进制数不断除以目标进制的基底,每一次都要记录下商和余数,直到商0。 余数用来表示结果。
下面是一个十进制39(基底是10)到十六进制(基底是16)的换算:
结果为 27H
十进制到另外进制的换算
在换算中,将十进制数不断除以目标进制的基底,每一次都要记录下商和余数,直到商0。 余数用来表示结果。
下面是一个十进制39(基底是10)到十六进制(基底是16)的换算:
结果为 27H
上例中所有的余数都小于10,不必使用字母。再举一个更复杂的例子:十进制 43868 换算为十六进制:
结果是 0AB5Ch, 使用 上面提到的表 将大于9的数字替换成字母。 运用同样的原理,我们可以换算为二进制(用2作除数),或者是先换算成十六进制,再用上面的表 换算成二进制:
于是,得到二进制: 1010101101011100b
结果是 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!
对于十六进制数 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 (数制转换)可以实现任意数制之间的转换。在文本框中填写源
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
什么是汇编语言?
汇编语言是底层编程语言。为了学习这门语言,你需要对于计算机结构有所了解。计算机
系统模型如下:
系统总线 system bus(图中黄部分)是将计算机各个部分连接到一起的部件。CPU是计算机的心脏,大部分的运算都是在CPU中完成的。RAM是读取并且存放将要执行的程序的地方。
CPU内部
通用寄存器
8086CPU有8个通用寄存器,每一个寄存器都有自己的名称:
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内部,访问中它们速度远远超过内存。因为,访问内存需要经过系统总线,所以时间要长一些。而访问寄存器中的数据几乎不需要时间。于是,编程中,应当尽量在寄存器中保存数据。虽然寄存器很小,并且这些寄存器都有具体用途,但他们依然是存放计算中临时数据的好地方。
段寄存器
段寄存器
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论