分享一下自己的资源。。。
链接:https://pan.baidu.com/s/1z6zdi-szqWLFgzBhnPYXoQ 密码:638v
必备的知识储备
debug.exe
只是调试工具,不是汇编工具,不能将a.asm汇编连接生成可执行程序。
debug.exe
带有内置的汇编功能,但功能极弱,仅仅只能支持指令的汇编,不支持大多数常用伪指令的汇编。比如,它不支持变量名和语句标号的使用。它只能在进入debug
后用a
命令逐指令汇编
。
要将一个a.asm
这样的汇编语言源程序汇编成可执行文件,你必须要另外使用汇编和连接程序。常用的汇编连接工具有两种,一种是MASM
,另一种是TASM
。(上面的链接都有,其中TASM
的下载费了我两块大洋呢!!!)
MASM
需要至少两个文件:masm.exe
和link.exe
版本可以用5.0以上的。
TASM
需要tasm.exe
和tlink.exe
,还有一些辅助文件。版本可以用3.0或5.0 。
网上有一些建议使用TASM
,说它最大的优点是它配套的调试程序Turbo Debugger
功能比debug
强大很多、很多、很多倍,窗口界面,鼠标操作。。。。
强不强,现在初入汇编的我不敢妄言,等都使用过再来做定论!
关于MASM集成开发环境
当然我还下载了一款集成IDE,MASM for windows 2012
,看着还挺不错的,不过部分功能需要注册才能使用,但是作为初学者,免费的功能全会了应该也就差不多入门了呢!
emmm,,,其中我比较看好的是关于它调试的两种工具 工具->选项
怎么好了,我也说不上了,直觉。。。
Hello World编写
一门新的语言,依旧还是从我们的hello word开始吧,hello world的重要意义远不止表面!
;完整段的Hello World程序
DATAS SEGMENT
STRING DB 'Hello World!',13,10,'$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,STRING
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
注意了,字符串的名字本来起的是STR,然后死活不通过,突然发现STR是汇编的一个关键字。。。。
1.SEGMENT:表示段,段定义伪指令。
汇编中有数据段、代码段、堆栈段以及附加段
格式为: 段名 SEGMENT [定位类型][组合类型][类别名]
段名 ENDS
功能:把程序分段,实现存储器的分段管理
该程序由DATAS数据段和CODES的代码段两部分组成
2.STRING DB 13,10,‘Hello World!’,13,10,’$’
13
和10
分别表示回车符和换行符
的ASCII码,执行结果是回车换行
’$’
是结束标志,否则不加’$’
会出现乱码。
这句话相当于C的(char*)STRING=”\nHello World!\n”;
3.INT 21H是DOS中断功能调用的中断号;MOV AH,4CH功能是让你退出程序
其中
MOV AH,4CH
INT 21H
是程序结束时使用的模板,使用AH
来选择功能,其中4CH
号功能是退出程序的意思。这个中断告诉程序执行完毕后返回DOS。
更多关于DOS功能号的看<这里>.
4.MOV AH,9中9是打印字符串的命令号(09H对应的是显示字符串)
注意:课堂与许多教材中的第一个汇编实例:“123+456=sum
”的例子,都是没有输出语句的,必须使用debug
调试来显示程序的结果。
5. 将数据放入DS中
MOV AX , DATAS
MOV DS , AX
把数据段的起始地址装到DS
中,DATAS
是立即数,所以不能直接放入DS
这个段寄存器,需要借助通用寄存器。
6.
LEA DX , STRING ;字符串偏移起始DX
LEA :Loadeffective address
执行程序
还是上一节的老办法
masm
下如何进入调试模式呢?
如果输入td 2.exe
,在masm下是不行的,
只能debug 2.exe
但是如果在tasm
环境下,td
是可以的!!!
注意操作略有不一样。。。
这一篇暂时先到这里吧,寝室要门禁了,我要飞奔回去了!!!
2018年4月26日23:49:15