汇编语言基础知识
程序语言分类
机器语言:二进制指令
汇编语言:在机器语言的基础上加入助记符等
高级语言
应用领域
- 加密解密
- 逆向分析
- 病毒分析与防治
- 网络安全领域
- 驱动程序的开发
基础构成(以hello world为例)
.model tiny;指定程序规模tiny\small\compact等
.code;创建代码段
.startup;指定程序开始执行起始点
mov dx,offset string;将string字符串首地址送入dx寄存器中,offset的功能就是得到标号到数据段起始地址的距离
mov ah,9;调用9号显示字符串功能
int 21h;调用中断服务程序
.exit 0;程序结束指令
string db 'Hello,World!',0dh,0ah,'$';定义字符串,0dh、0ah分别是回车(行结束)、换行的ASCII码值
end;汇编语言程序结束标志
####A little question
为什么字符串定义中既然有换行了,还要输入回车?
我综合了一下网上的解释:
0dh代表的回车:回到行首\标志该行的结束(有争议)
0ah代表的换行:进入下一行
那么回车的作用到底是什么呢?不如一起去实验一下
在asm文件中,我删除了字符串定义末尾的0dh,即删掉了回车功能,如下图所示:
.model tiny
.code
.startup
mov dx,offset string
mov ah,9
int 21h
.exit 0
string db 'Name:yuanmengyao',0ah
db 'Number:201886013',0dh,0ah
db 'Emai:971180567',0dh,0ah,'$'
end
运行之后的输出结果如下:
!!!竟然没有变化
我推测是换行符0ah发挥了作用,因此我删除了换行符,只保留回车符
.model tiny
.code
.startup
mov dx,offset string
mov ah,9
int 21h
.exit 0
string db 'Name:yuanmengyao',0dh
db 'Number:201886013',0dh,0ah
db 'Emai:971180567',0dh,0ah,'$'
end
输出结果如下
可见,第一行的name被覆盖了,因此我更倾向于0dh的作用是将光标移至行首
生成可执行文件
- 编译汇编源文件:Masm.exe Hello.asm
- 链接生成可执行文件:Link.exe Hello.obj/tiny
- 运行可执行文件,检查结果:Hello.com
需要注意的是,在使用DOSBOX的时候,路径中应包含所需的masm.exe等所有exe文件,否则无法运行。即下示doswork路径中,应包含所有的exe文件。
mount c: e:\doswork\
c:
作业
.model tiny
.code
.startup
mov dx,offset string
mov ah,9
int 21h
.exit 0
string db 'Name:yuanmengyao',0dh,0ah
db 'Number:201886013',0dh,0ah
db 'Phone:13079893635',0dh,0ah
db 'Email:971180567@dlut.edu.cn',0dh,0ah,'$'
end