鱼C论坛

 找回密码
 立即注册
查看: 3676|回复: 8

[技术交流] 汇编入门

[复制链接]
发表于 2011-7-2 23:03:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
汇编入门   
计算机是一门纯操作性的学科,编程也是如此,  
不要被那些枯燥的理论锈蚀了头脑,让我们动手  
来做做,就会感到无穷的乐趣   
  
   
作者: 弱小  2006-1-7 03:01   回复此发言     
  
--------------------------------------------------------------------------------
  
2 第1课   
这一课很简单,用汇编来计算 2+3 等于多少  
1. 打开debug.exe程序:  
   开始菜单: "开始"→"运行(R)"  
   输入: debug  
   回车后打开 debug.exe 程序  
2. debug.exe 是一个DOS界面的程序,  
   输入: aa0  
   回车  
   输入: mov dx,2  
   回车  
   输入: add dx,3  
   回车  
   回车  
   输入: t=a0  
   回车  
   输入: t   
  
   
作者: 弱小  2006-1-7 03:35   回复此发言     
  
--------------------------------------------------------------------------------
  
3 第1课(1)   
3. 你必须按我所说的去做,当然如果你很厉害可以不那样做,  
我给那些操作编个号:  
步骤1: 输入: aa0  
步骤2: 回车  
步骤3: 输入: mov dx,2  
步骤4: 回车  
步骤5: 输入: add dx,3  
步骤6: 回车  
步骤7: 回车  
步骤8: 输入: t=a0  
步骤9: 回车  
步骤10:输入: t  

要注意步骤6和步骤7都是回车,就是连着回了两次车,  
现在来看一下屏幕信息,你们对照一下,看对不对:  

-aa0  
0B08:00A0 mov dx,2  
0B08:00A3 add dx,3  
0B08:00A6  
-t=a0  

AX=0000 BX=0000 CX=0000 DX=0002 SP=FFEC BP=0000 SI=0000 DI=0000  
DS=0B08 ES=0B08 SS=0B08 CS=0B08 IP=00A3 NV UP EI PL NZ NA PO NC  
0B08:00A3 83C203      ADD    DX,+03  
-t  

AX=0000 BX=0000 CX=0000 DX=0005 SP=FFEC BP=0000 SI=0000 DI=0000  
DS=0B08 ES=0B08 SS=0B08 CS=0B08 IP=00A6 NV UP EI PL NZ NA PO NC  
0B08:00A6 6F          DB     6F  

需要说明的是你显示的可能和我显示的有点区别,  
我显示屏上的那些0B08,你的显示可能并不是这个,而是另外一个值,   
  
   
作者: 弱小  2006-1-7 04:06   回复此发言     
  
--------------------------------------------------------------------------------
  
4 第1课(2)   
4. 查看显示结果  
我们都知道3+2=5,可这个5显示在什么地方呢?  
在步骤10里, 输入: t 然后回车,可以看到显示一大堆东西,  
你仔细找找显示的信息,找到DX这个东西,它是这样的: DX=0005  
0005就是计算的结果,当然,它总是用4位数来表示的,所以前面  
有三个0, 0005就是5,前面的三个0没用的,占个位置而已   
  
   
作者: 弱小  2006-1-7 04:14   回复此发言     
  
--------------------------------------------------------------------------------
  
5 第1课(3)   
5. 验证  
当然一次不足以说明DX=0005中的0005就是计算结果,也许是一种巧合呢,  
你可以试试其它的数字,看对不对   
  
   
作者: 弱小  2006-1-7 04:16   回复此发言     
  
--------------------------------------------------------------------------------
  
6 第1课(4)   
6. 进制:  
"开始"→"运行",输入:debug,回车后打开 debug.exe 程序  
然后按下面的步骤操作:  
   步骤1: 输入: aa0  
   步骤2: 回车  
   步骤3: 输入: mov dx,7  
   步骤4: 回车  
   步骤5: 输入: add dx,8  
   步骤6: 回车  
   步骤7: 回车  
   步骤8: 输入: t=a0  
   步骤9: 回车  
   步骤10:输入: t  
   步骤11: 回车  
你猜猜计算结果会是多少呢?我现在是7+8,我想当然的认为是15,  
那就是: DX=0015 ,可真的是这样吗,执行完步骤11后,看看步骤11  
输出的信息,找到DX的值,非常奇怪的竟然是 DX=000F  
000F是十六进制的,十六进制的F就是十进制的15,明白000F是十六  
进制就行了   
  
   
作者: 弱小  2006-1-7 04:35   回复此发言     
  
--------------------------------------------------------------------------------
  
7 第1课(4)   
6. 进制:  
  "开始"→"运行",输入:debug,回车后打开 debug.exe 程序  
  然后按下面的步骤操作:  
   步骤1: 输入: aa0   
   步骤2: 回车   
   步骤3: 输入: mov dx,11   
   步骤4: 回车   
   步骤5: 输入: add dx,3  
   步骤6: 回车   
   步骤7: 回车   
   步骤8: 输入: t=a0   
   步骤9: 回车   
   步骤10:输入: t   
   步骤11: 回车   
你猜猜计算结果会是多少呢?我现在是11+3,我想当然的认为是14,  
不过有了前一个7+8的例子的经验,我知道要把它转换成16进制度,  
14的16进制是E,所以应该显示: DX=000E  
然而,我发现显示的竟然是: DX=0014  
其实在这样的汇编程序里,所有的数字都是十六进制的,  
上面的11是十六进制的11,3也是十六进制的3,  
所以如果用十进制来算:十六进制的11用10进制来表示是17,  
17+3=20,然后把20转换成十六进制是14,  
当然也可以直接做十六进制的加法:  
      11  
    +  3  
  --------  
      14  
只要记住是逢16进1就行了,如十六进制的17+5:  
      17  
    +  5  
  --------  
      1C   
  
   
作者: 弱小  2006-1-7 04:50   回复此发言     
  
--------------------------------------------------------------------------------
  
8 回复:汇编入门   
哎,已经5点了,快天亮了,时间过的真快   
  
   
作者: 弱小  2006-1-7 04:53   回复此发言     
  
--------------------------------------------------------------------------------
  
9 debug.exe的命令符   
看一下:  
   步骤1: 输入: aa0   
   步骤2: 回车   
   步骤3: 输入: mov dx,11   
   步骤4: 回车   
   步骤5: 输入: add dx,3   
   步骤6: 回车   
   步骤7: 回车   
   步骤8: 输入: t=a0   
   步骤9: 回车   
   步骤10:输入: t   
   步骤11: 回车   
上面的11个步骤里,哪些是汇编代码呢?  
汇编代码只有两行:  
   mov dx,11  
   add dx,3  
那aa0和t是作什么用的?  
aa0和t是debug.exe的两个命令符  
想必大家对DOS命令不陌生吧,比如: ping 127.0.0.1  
这就是一个大家再熟悉不过的ping命令符,它接了一个IP地址参数,  
当然你还可以接其他的参数, 如: ping 127.0.0.1  
a是debug.exe的命令符,a的作用就是进入汇编编辑状态,aa0后面的a0  
是a的参数,你可以写成a a0或者a   a0,和aa0是同一个意思,  
那这个参数a0是什么意思呢?  
当输入aa0回车后,看到下一行显示:  
0B08:00A0  
一个冒号隔开两个十六进制的数,前面那个可能不是0B08,不同的计算机  
可能不同,但后面的一定是00A0,00A0就是参数a0,  
你可以在打开debug.exe后输入: a100 ,就会看到:  
0B08:0100  

那t这个命令拿来作什么的?  
当执行完步骤7后,结束了汇编指令编辑,回到了debug.exe的命令符状态,  
编辑汇编指令就好比绘制工程蓝图,而 t 就是把工程蓝图交给施工队去施工,  
t=a0,那=a0是什么意思,t这个命令可以接参数,等号后面的a0就是参数,  
表示从地址a0开始执行, 那地址a0在哪里呢?  
0B08:00A0  
地址a0就是冒号后面的00A0,  
你看看 00A0 后面的是什么汇编指令:  
0B08:00A0 mov dx,11  
00A0后面的指令是 mov dx,11  
所以就从 mov dx,11开始执行,  
但是得明白 t 是单步执行的, 单步的意思是每次只执行一条汇编指令,  
所以输入 t=a0 并回车后,计算机就执行 mov dx,11  
执行完这条指令后就停止了,  
接着你再输入 t 然后回车, 计算机就执行下一条汇编指令 add dx,3  
就这么简单   
  
   
作者: 222.216.54.*  2006-1-7 16:25   回复此发言     
  
--------------------------------------------------------------------------------
  
10 测试   
上面学了 debug.exe 的两个命令符 a 和 t  
还学了两个汇编指令 mov 和 add  
这四个东西可以组合成几百几千、无数种用法,你们尽量多测试,  
测试不同的用法,也可以试些奇怪的用法,如 ta0 命令符...   
  
   
作者: 222.216.54.*  2006-1-7 16:32   回复此发言     
  
--------------------------------------------------------------------------------
  
11 负数   
1.运行下面汇编指令:   
   mov dx,8  
   add dx,-4  
  运行结果显示: DX=00004  
  这样写够简单了,没什么疑问吧   
  本文转自互联网,相关权限本人不做任何解释

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
loop + 2 + 2 非常不错的文章,简而易懂~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-3 00:33:19 | 显示全部楼层
真能够坚持的!!不知道会不会出到整本教材?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-4 03:38:40 | 显示全部楼层
真强大,期待科学发达有个知识传递器就好了,HUHU~~两声甲鱼老湿的知识就传我这来了。:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-4 09:14:56 | 显示全部楼层
楼上无耻。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-25 12:18:43 | 显示全部楼层
新手来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-7-2 16:38:03 | 显示全部楼层
看帖,就必须回帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-2 17:29:20 | 显示全部楼层
看起来是不错:D:D:D
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-4 08:20:59 | 显示全部楼层
{:1_1:}看帖,就必须回帖 :dizzy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-4 09:05:45 | 显示全部楼层
看起来是不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 09:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表