4.2源程序
简短的公式 指令 含义和作用 例如
XXXX(段名) Segment 中文 部分;片段 Codes segment ;告诉编译器这是一个“段”的开始
……
……
……
Codes ends
end
作用 告诉编译器这是一个“段”的开始
指令 含义和作用 例如
XXX(段名)ends 含义 一个段的结束 Codes segment ;告诉编译器这是一个“段”的开始
……
……
……
Codes ends
end
作用
指令 含义和作用 例如
End 含义 表示一个程序的结束 Codes segment ;告诉编译器这是一个“段”的开始
……
……
……
Codes ends
end
作用 这个很重要,不然编译器不知道在哪里结束;我们要养成一开始就要写一个end在后面
指令 含义和作用 例如
Assume 含义 “假设” Assume CS:codes ; “codes”和寄存器CS有练习;或者说“codes”段需要CS寄存器的支持
Codes segment ;告诉编译器这是一个“段”的开始
……
……
……
Codes ends
end
作用 他假设某一,段寄存器和程序中某一个用“segment….ends”定义的段相关联。通过assume说明这种关联,在需要的情况下编译程序可以将段寄存器和某一个具体的段相联系。Assume并不是一条非要深入理解不可的伪指令,以后我们编程时,记得用assume将有特定用途的段和相关的寄存器相关联起来即可。
指令 含义和作用 例如
Int(21H) 含义 程序返回 Mov ax;4c00h
Int 21h ;其中“21h”指的是要返回的地址
作用 一个程序P2在可执行文件中,则必须有一个正在运行的程序P1将P2从可执行文件中加载到内存后,CPU将控制权交给P2,P2才得以运行。P2开始运行后,P1暂停运行。当P2运行完毕后,应将CPU的控制权交个让他得以运行的P1,此后P1继续运行;这种行为叫做“程序返回”
重要的概念 Q:什么是伪指令和汇编指令?
A:在汇编语言中有两种指令,一种是汇编指令,另一种是伪指令
汇编指令是指编译连接器能够把它变成机器码的指令。
伪指令是指连接编译器不能把它编译成机器码的指令。
Q:伪指令的作用?
A:编译器根据伪指令来进行相关的操作;end指令;就是告诉编译器程序结束了。
Q:“段”的概念?
A:一个汇编程序有多个段组成,这些断背用来存放代码,数据或当做栈空间来使用。我们在前面的课程所讲到的“段”的概念,在汇编源程序中得到了应用和体现,一个源程序中所有将被计算机所处理的信息:指令,数据,栈被划分到了不同的段中。
Q:什么是操作系统外壳程序?
A:操作系统是由多个功能模块组成的庞大的,复杂的软件系统。任何通用操作系统,都要提供一个称之为Shell(外壳)的程序,用户(操作人员)使用这个程序来操作计算机系统进行工作。
Q:什么是程序入口?
A:cpu的CS:IP指向程序的第一条指令。详情请见《汇编语言 第二版》90页
Q:command.com?
A:windows外壳程序的一种和DOS有关。
Q:汇编程序从写出到运行的过程
A:见表:
编程 1.asm 编译 1.obj 连接 1.exe 加载 内存中的程序 运行
(edit) (asm) (link) (command)
有一点需要注意 汇编中的一些概念:
1. 源程序中的“程序”;
“程序”是指源程序中最终被计算机执行,处理的指令和数据,称为程序。也就是指汇编指令和能够变成机器码的数据
2. 标号;
除了伪指令之外还有一个标号;比如上面例程当中的“codes”。一个标号只带了一个地址。比如codes在segment前面就是指一个段的名称,这个段的名称终将被编译。
3. 程序返回
不明白的地方
还需要的前置知识
对这一小节的评论 一个源程序中所有将被计算机所处理的信息:指令,数据,栈被划分
由此看出,一个汇编源程序是由一个一个的段组成的,这就好像我们高级语言中的“模块化”编程思想是一样的。
4.9程序执行过程的跟踪
简短的公式
重要的概念 Q:跟踪程序执行过程有啥用呢?
A:我们写程序在逻辑上不一定总是正确,对于简单的错误,仔细检查一下源程序就能发现;对于隐藏较深的错误,就必须对程序执行过程进行分析才容易发现。
Q:如何知道我们的程序装载到内存的什么地方?
A:这里有一个简短的公式:用段地址和偏移地址来表示就是;SA(ds寄存器中的数据)+10h(这个是操作系统的PSP;它是必须的。我们不用理他,知道这个世界有它存在就行了
请见《汇编语言 第二版》 的92页
有一点需要注意
不明白的地方
还需要的前置知识
对这一小节的评论
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)