[翻译]汇编基础练习 运用Debug和汇编指令将两个数字相加
最近被JB拉丫姐姐弄的想学overflow 但是发觉自己C没好好学 汇编也没好好学 只好又看一遍 于是发现这个文章不错 就详细翻译了一下 收益还是有的 图是我重新自己机器上抓的 所以很清楚 修改补充太多 一致于都快成原创了 tnnd文章翻译:冰血封情[E.S.T]
信息来源:邪恶八进制 中国([url]www.EvilOctal.com[/url])
本文将通过使用汇编代码和debug命令将两个数字相加求和 很适合菜鸟学习的说 冰血封情在翻译的过程中又做了很多说明和自己抓的图 并且做了加工 这样充分适合我们中国比偶更菜的菜鸟
汇编语言是基础的基础 这个小文章又是便于你更好的理解debug命令的好帮手 至少我们学校在开8086的课的时候 是讲debug的 不知道其他学校如何
既然是用debug命令将两个数字相加 你首先总得先把debug给我弄出来吧?通过依次选择[开始]->[运行] 然后在对话匡里输入cmd 进入命令提示符后输入debug 这样你会看见一个图1那样的黑框:
[attach]7761[/attach]
好 现在debug已经运行了 输入一个R然后回车 然后你将看见下面这个图:
[attach]7762[/attach]
AX BX CX和DX都是寄存器 而且现在都是空的 没有任何数据在里面
SP是堆栈指针寄存器 它可以和其他的寄存器联合使用来确定堆栈段中的某一存储单元地址 呆会我们要用它来帮助我们累加变量的
IP是指令指针寄存器 它是用来存放代码段中的偏移地址 始终指向我们将加载和执行的下一条指令的首地址
好了 现在我们往寄存器里输入一些数据
输入r AX 后回车
输入8 后回车
输入r BX 后回车
输入A 后回车
现在8和A已经被我们放到了AX和BX里 现在我们看一下 是不是这么回事儿 用前面的R命令来查看 你可以看见下面这张死脸:
[attach]7763[/attach]
看见了图3里的AX=0008 BX=000A了么?嘿嘿 那就咱爷们儿刚放里的 明白的说?来 往下 GO ON!
现在我们需要把IP指向这个指令 准备把这两个寄存器相加 完事儿了 咱们还可以再检查一下是不是整对了(什么什么?忘记啥是IP了?回头看前边就明白了 我TM也是刚学了就忘 一毛病)
现在依次输入:
e 100 回车
01 回车
e 101 回车
D8 回车
上面我们刚输入的就是"ADD AX, BX"这个指令 现在我们查看一下是不是:
[attach]7764[/attach]
看到没有?我用红线框起来的那部分 看见下面这样的字了吧?
0E14:0100 01D8 ADD AX,BX
嘿嘿 0E14:0100是指令的内存地址 01D8是AX加BX的机器码
ADD AX,BX就是汇编语言里把AX和Bx相加的指令(其实冰血封情这样翻译不是很妥当 因为这种加 谁加谁可以是分的很清楚的 不过将就将就了)
现在指令已经放好了 我们就差执行他了 IP已经指到了偏移地址0100H 现在代码运行已经准备就绪 我们输入t执行命令
[attach]7765[/attach]
现在AX里面是12 而BX里还是A 这就是前面我说我那种翻译不是很妥当的原因 因为是把BX加到AX里 BX是不变的 那么为什么是12呢 这里冰血封情给广大菜鸟解释一下
因为这里是以16进制相加8和A都是看作16进制数字 A在16进制里是10个单位 那么8加A自然就是12了 如果还不明白也只好自己去找进制的资料看看了 如果想方便对比 这里有张图
[url]http://www.eviloctal.com/tools/ascii.htm[/url]
上面的图是个ASC编码表 你对比一看就明白了 我不会删除它的 如果你访问不了 那就是人品问题了:P
But also you can see that the IP is now set to 0102, which is not the address we want it to point to. So now we re-set it back to 0100.
现在咱们在注意看看 现在IP指向了0102了 我们可不想让它往那指 所以要修改它 让他指向0100 为什么指向0100呀 因为那是我们刚才的指令地址呀 怎么这么快忘记了呀 老弟:)
通过如下命令就可以达到我们的目的了
输入
r IP
0100 回车
执行完了你可以看到如图6
[attach]7766[/attach]
现在如果再输入t命令 那么将再次执行相加命令 通过使用汇编代码和debug命令将两个数字相加求和
文章的最后 我把所有的全过程给大家抓了个图 谢谢观赏
[attach]7767[/attach]
末尾 咱怕爷们翻译的不好 所以呢 把英文原版上传 不过我自己编造的部分已经把文章搞的面目全非了 哈哈 压缩包里还有txt的文章和png的图片 谢谢
[url=http://weblog.eviloctal.com/attachment/1105571277.rar]点这里下载[/url]
至于其他的汇编基础 请参见我的笔记 希望有所帮助 姐姐说前几章就可以了 我就懒
[attach]7768[/attach]
补充说明:
为什么这里输入是这样子的
文章中为什么要这样输入?[code]e 100 回车
01 回车
e 101 回车
D8 回车[/code]我tm怎么知道01D8是加法?
其实不用这样麻烦的说...换个方法演示一下如何算1+2=3 大家就明白了
[attach]11147[/attach]
看到了没有 其实那里我们直接输入汇编代码也可以达到同样的效果 而且可以看见01D8出现 哈哈 汇编你别问我 嘿嘿 这里有个叫冰什么浪狐狸的男人素粉牛di说 呵呵,我汇编已经考了,考前自己想自己能拿到至少90多分的,靠,已经那个时候天天玩玩更本就没有考试的状态,我真是晕,老有觉得辜负那个好老师的感觉!呵呵,反正不管了,考完拉倒:) 考试也不会考debug指令吧?一般都比这难多了....这例子唯一的作用就是让你熟悉寄存器和一些相关的基础知识:) [quote]引用第5楼死水之枫于2007-12-16 00:06发表的 :
me2...
这个图片还有么?[/quote]
一个工作日内通知主题作者恢复文章中图片,然后通过删除非技术回复带的通知提示您们,请稍等。:) 我们正学微机原理呢
除了汇编就是存储器那些的
汇编还好
存储器我就弄不明白了饿
模电和数电对于我来说就是空白 电路都看不懂
页:
[1]