汇编语言(第三版,王爽)读书笔记
一个源程序从写出到执行的过程
- 使用文本编辑器编写汇编源程序
- 对源程序进行编译产生目标文件,再用连接程序对目标文件进行连接,生成可执行文件
- 操作系统依据可执行文件中的描述信息,将机器码和数据载入内存,并进行初始化设置(如CS:IP的设置)
可执行文件包括两部分:
- 程序(翻译的机器码)和数据(源程序中定义的数据)
- 相关的描述信息(程序占用内存空间等等)
源程序
一段简单的汇编语言源程序:
assume cs: codesg
codesg segment
mov ax, 0123H
mov bx, 0456H
add ax, bx
add ax, ax
mov ax, 4c00H
int 21H
codesg ends
end
伪指令
汇编指令被编译成机器指令,伪指令由编译器来执行
(1)segment…ends:定义一个段
XXX segment
...
XXX ends
(2)end:结束对源程序的编译,放在整个程序的结尾
(3)assume:假设某一寄存器和程序的某一段(segment…ends)相关联,非必须
用assume将有特定用途的段和相关段寄存器相关联
标号
汇编源程序中除了汇编指令和伪指令外,还有一些标号,比如“codesg”。一个标号指代一个地址,codesg最终将被处理为一个段的段地址。
程序返回
mov ax, 4c00H
int 21H
所实现的功能就是程序返回
段结束、程序结束、程序返回的区别:
目的 | 相关指令 | 指令性质 | 指令执行者 |
---|---|---|---|
通知编译器一个段结束 | 段名 ends | 伪指令 | 编译时,由编译器执行 |
通知编译器程序结束 | end | 伪指令 | 编译时,由编译器执行 |
程序返回 | mov ax,4c00H int 21H | 汇编指令 | 执行时,由cpu执行 |
编辑、编译、连接、执行
一个程序p2在可执行文件中,则必须要有一个正在运行的p1程序将p2加载到内存后,p2才能运行。
执行程序时,是操作系统的shell程序将可执行文件加载到内存中,执行完成后返回到shell里。
程序的加载:
- 程序加载后,ds中存放着程序所在内存区的段地址,这个内存区的偏移地址为0,程序所在的内存区地址为ds:0
- ds:0后面256(100H)字节存放PSP(DOS中用来和程序进行通信),256字节之后存放的是程序,所以CS=DS+10
汇编程序从写出到执行的过程:
编程(Edit) →.asm文件→编译(masm)→.obj文件→连接(link)→.exe文件→加载(command)→内存中的程序→运行(cpu)