汇编语言学习笔记

汇编语言学习笔记

ID:33737179

大小:626.00 KB

页数:63页

时间:2019-02-28

汇编语言学习笔记_第1页
汇编语言学习笔记_第2页
汇编语言学习笔记_第3页
汇编语言学习笔记_第4页
汇编语言学习笔记_第5页
资源描述:

《汇编语言学习笔记》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、汇编语言学习笔记---傻瓜学汇编前言当我在学汇编的时候发现一到了实际编程就发现学过的那些指令串不起来,什么浮点数啊整数啊,怎么跳转啊,怎么循环啊,脑袋立马变成浆糊。下面的文档是我的学习经历,希望对初学者在学习加密解密,软件调试,单片机编程有点帮助。目录1.编程环境的搭建2.深入理解汇编语言的数据3.顺序程序设计4.分支结构程序设计5.循环6.数组及指针7.函数8.结构9.综合运用10.参考文献一:编程环境的搭建首先装好masm32v10和windbg,和editplus,然后在editplus中输入下面的程序,具体的请参考罗云彬的那本书,里面

2、有详尽的说明,编译运行看看:.386.modelflat,stdcalloptioncasemap:noneincludelibmsvcrt.libprintfprotoC:VARARG.datamsgdb"hello,thisisthefirsttestprogram!",0dh,0ah,0.codestart:callmainretmainprocpushoffsetmsgcallprintfaddesp,4pushoffsetmsgcallprintfaddesp,4retmainendpendstart下面是运行结果:这里输出两行消息

3、主要是我在写这个最简单的程序的时候发现他不换行,于是我在数据定义后面我加了“0ah,0dh”,呵呵,就是回车换行的十六进制表示,你也可以用其他方法试试,程序就不多解释了,后面会有更多的解释,不过你一定要走到这以步,才能进行下一章。2.深入理解汇编语言的数据整数常量及变量,先看一段很简单的汇编程序:.386.modelflat,stdcalloptioncasemap:noneincludelibmsvcrt.libprintfprotoC:VARARG.dataPRICEEQU30msg1db"total=%d",0dh,0ah,0.code

4、start:callmainretmainproclocalnum:dwordlocaltotal:dwordmovnum,10moveax,numimuleax,eax,PRICEmovtotal,eaxpushoffsetmsg1callprintfaddesp,4retmainendpendstart程序的意思很简单就是在屏幕上打印出某个东西的价格,如过要你拿笔和纸算,拿你肯定很快就能算出来,但你让电脑怎么算呢?当电脑执行到第一个语句的时候,也就是num=10,它就把10放到某个地方并且记住这个值,寄存器或者内存,呵呵,它也就这两个地方

5、,为什么要这么做呢?因为后面要用它来计算啊,为了算出这个值,电脑好的办法就是放在它的内存里,为什么不是寄存器?因为寄存器太少了,就那么几个,呵呵,所以了它就把10存在一个叫num的内存里,注意了哦,num是程序里的变量名,是存中里的一个位置的名称,它的值是10,你可能会问,不起名不行么?行,等下在调试器中你看到的就是没名的。来看看它在调试器中的样子:num变成了[ebp-4]了,现在你想象有个几千行的程序如果都用[ebp-4]这样的名字的话,那我们会疯的,所以汇编程序就让我们给程序里面的变量起个直观的名字,而不是用具体的数字去让你去记住变量内

6、存的位置。程序中imuleax,eax,1eh中的1eh就是个整形常量,也就是30.现在你应该对常量和变量有点感觉了吧。再看个例子:.386.modelflat,stdcalloptioncasemap:noneincludelibmsvcrt.libprintfprotoC:VARARG.dataadb12hbdw1234hc1dd12345678hmsg1db"thenumberis=%xh",0dh,0ah,0.codestart:callmainretmainprocmoval,acbwcwdepusheaxpushoffsetmsg

7、1callprintfaddesp,8movax,wordptracwdepusheaxpushoffsetmsg1callprintfaddesp,8moveax,dwordptrapusheaxpushoffsetmsg1callprintfaddsp,8retmainendpendstart首先,你得想a,b,c1三个变量在程序中到底是怎么存的,是12123412345678,还是78563412341212呢?呵呵,用调试器载入程序看看就知道了:哈哈,看到了没,正确的是这个:00403000:1234127856341274-68,这

8、是为什么?还有就是这个程序打印的三个结果又是什么呢?是12h和0012h和00000012h吗?如果是,那你就错了哦,应该是:thenumberis=12hthen

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。