- 1、本文档共63页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编语言学习笔记.doc.doc
汇编语言学习笔记
---傻瓜学汇编
前言
当我在学汇编的时候发现一到了实际编程就发现学过的那些指令串不起来,什么浮点数啊整数啊,怎么跳转啊,怎么循环啊,脑袋立马变成浆糊。下面的文档是我的学习经历,
希望对初学者在学习加密解密,软件调试,单片机编程有点帮助。
目录
编程环境的搭建
深入理解汇编语言的数据
顺序程序设计
分支结构程序设计
循环
数组及指针
函数
结构
综合运用
参考文献
一:编程环境的搭建
首先装好masm32v10 和windbg,和editplus,然后在editplus中输入下面的程序,具体的请参考罗云彬的那本书,里面有详尽的说明,编译运行看看:
.386
.model flat,stdcall
option casemap:none
includelib msvcrt.lib
printf proto C :VARARG
.data
msg db hello,this is the first test program!, 0dh ,0ah,0
.code
start:
call main
ret
main proc
push offset msg
call printf
add esp,4
push offset msg
call printf
add esp,4
ret
main endp
end start
下面是运行结果:
这里输出两行消息主要是我在写这个最简单的程序的时候发现他不换行,于是我在数据定义后面我加了“0ah,0dh”,呵呵,就是回车换行的十六进制表示,你也可以用其他方法试试,
程序就不多解释了,后面会有更多的解释,不过你一定要走到这以步,才能进行下一章。
2.深入理解汇编语言的数据
整数常量及变量,先看一段很简单的汇编程序:
.386
.model flat,stdcall
option casemap:none
includelib msvcrt.lib
printf proto C :VARARG
.data
PRICE EQU 30
msg1 db total=%d,0dh,0ah,0
.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,你可能会问,不起名不行么?行,等下在调试器中你看到的就是没名的。来看看它在调试器中的样子:
num变成了[ebp-4]了,现在你想象有个几千行的程序如果都用[ebp-4]这样的名字的话,那我们会疯的,所以汇编程序就让我们给程序里面的变量起个直观的名字,而不是用具体的数字去让你去记住变量内存的位置。程序中imul eax,eax,1eh中的1eh就是个整形常量,也就是30.现在你应该对常量和变量有点感觉了吧。
再看个例子:
.386
.model flat,stdcall
option casemap:none
includelib msvcrt.lib
printf proto C :VARARG
.data
a db 12h
b dw 1234h
c1 dd
msg1 db the number is=%xh,0dh,0ah,0
.code
start:
call main
ret
main proc
mov al,a
cbw
cwde
push eax
push offset msg1
call printf
add esp,8
mov ax,word ptr a
cwde
push eax
push offset msg1
call printf
add
文档评论(0)