汇编语言--编译器成为可执行文件*.exe
伪指令由编译器执行!无对应的机器码
1>定义一个段
段名 segment
:
段名 ends
一个汇编程序由多个段组成
这些段被用来存放代码,数据,或当作栈空间来使用
指令,数据,栈被划分到了不同的段中
一个由意义的汇编程序中至少要有一个段,这个段用来存放代码
2>end
结束整个源代码,编译器认为程序结束
区别:
源程序:源程序中的所有内容
程序:将源程序中最终由计算机执行,处理的指令或数据
程序经编译,连接转为机器码,存储在可执行的文件中
3>assume
假设:将有特定用途的段和相关的段寄存器关联起来即可
4>标号
code segment
:
code ends
code就是标号,这个段的名称最终被编译,连接程序处理为一个段的段地址
5>程序的结构
源程序一般由段组成,不同的段用来存放数据,代码,等
assume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,ax
mov ax,4c00h
int 21h
abc ends
end
6>程序返回
编程->1.asm ->编译->1.obj->连接->1.exe->加载->内存中的程序->运行
command cpu
程序执行过程更中
dos系统中.exe文件中的程序的加载过程
step1:
找到起始地址为SA:0000H,偏移为0H,容量足够的内存空间
step2:
在这段内存空间中的前256B,创建一个成为程序段的前缀psp的数据区
dos要利用psp来和 加载程序进行通信
step3:
在256B后面,将程序装入,程序的地址为sa+10h:0
{空闲sa:0开始!0-255为psp,从256开始为程序
dos为了更好的区分他们,将他们划分不同的段
空闲内存区sa:0 =={写入的ds}
psp区:sa:0
程序区sa+10h:0}
psp区和程序区,虽然物理地址连续,但有不同的段地址
step4:
将该内存区的段地址sa存入ds,初始化其他寄存器后,设置cs:ip指向程序的入口 (程序区sa+10h:0)ds=sa
///////
debug 1.exe
ds=0B4A cs=0B5a ip=0000 要执行的是第一条指令
psp:ds:0
程序区:cs:ip 或ds+10:0
实验3 编程 编译 连接 跟踪
阅读(610) | 评论(1) | 转发(0) |