汇编语言学习笔记 下载本文

内容发布更新时间 : 2024/5/17 15:31:00星期一 下面是文章的全部内容请认真阅读。

汇编语言学习笔记 ---傻瓜学汇编

前言

当我在学汇编的时候发现一到了实际编程就发现学过的那些指令串不起来,什么浮点数啊整数啊,怎么跳转啊,怎么循环啊,脑袋立马变成浆糊。下面的文档是我的学习经历, 希望对初学者在学习加密解密,软件调试,单片机编程有点帮助。

目录

1. 编程环境的搭建

2. 深入理解汇编语言的数据 3. 顺序程序设计 4. 分支结构程序设计 5. 循环

6. 数组及指针 7. 函数 8. 结构 9. 综合运用 10. 参考文献

一:编程环境的搭建

首先装好masm32v10 和windbg,和editplus,然后在editplus中输入下面的程序,具体的请参考罗云彬的那本书,里面有详尽的说明,编译运行看看: .386 .model flat,stdcall option casemap:none

includelibmsvcrt.lib

printf proto C :VARARG .data

msg db \

.code start: call main ret main proc push offset msg call printf add esp,4 push offset msg

end call printf add esp,4 ret

mainendp start 下面是运行结果:

这里输出两行消息主要是我在写这个最简单的程序的时候发现他不换行,于是我在数据定义后面我加了“0ah,0dh”,呵呵,就是回车换行的十六进制表示,你也可以用其他方法试试, 程序就不多解释了,后面会有更多的解释,不过你一定要走到这以步,才能进行下一章。

2.深入理解汇编语言的数据

整数常量及变量,先看一段很简单的汇编程序: .386

.model flat,stdcall option casemap:none

includelibmsvcrt.lib

printf proto C :VARARG .data

PRICE EQU 30 msg1 db \.code start: call main ret main proc local num:dword local total:dword mov num,10 mov eax,num imul eax,eax,PRICE mov total,eax push offset msg1 call printf add esp,4 ret main endp end start

程序的意思很简单就是在屏幕上打印出某个东西的价格,如过要你拿笔和纸算,拿你肯定很快就能算出来,但你让电脑怎么算呢?当电脑执行到第一个语句的时候,也就是num=10, 它就把10放到某个地方并且记住这个值,寄存器或者内存,呵呵,它也就这两个地方,为什么要这么做呢?因为后面要用它来计算啊,为了算出这个值,电脑好的办法就是放在它的内存里,为什么不是寄存器?因为寄存器太少了,就那么几个,呵呵,所以了它就把10存在一个叫num的内存里,注意了哦,num是程序里的变量名,是存中里的一个位置的名称,它的值是10,你可能会问,不起名不行么?行,等下在调试器中你看到的就是没名的。来看看它在调试器中的样子: