一个源程序从写到执行的过程
- 编写
- 编译连接
- 执行
源程序
伪指令:没有对应的机器指令,最终不会被CPU执行,由编译器执行,编译器根据伪指令来进行相关的编译工作
汇编指令:是有对应的机器码的指令,可被编译为机器指令,最终为CPU执行。
常见的三种伪指令
- XXX segment
XXX ends - end:是一个汇编程序结束标记
- assume:关联XXX与寄存器
程序的结构
小程序可以直接在Debug中写
大程序太麻烦要用汇编
汇编程序中的基本要素和汇编程序的简单框架=>
编写源程序
assume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,ax
abc ends
end
程序返回
mov ax,4c00H int 21H
编辑源程序
进入DOS方式
运行edit
在Edit中编辑源程序
保存源程序(.asm)
编译
进入DOS方式
运行masm
输入源程序文件名(输入源文件名的时候一定要指明它所在的路径)
一直回车
得到目标文件(.obj)
连接
进入DOS命令
进入mash
进入link.exe
输入文件名
得到程序(.exe)
以简化的方式进行编译和连接
link 文件名之后加分号
exe的执行
masm>文件名执行
谁将可执行文件中的程序装载进入内存并使它运行
操作系统的外壳
操作系统是由多个功能模块的庞大,复杂的软件系统。任何通用的操作系统,都要提供一个称为shell的程序
汇编程序从写出到执行的过程
编程->1.asm->编译->1.obj->连接->1.exe->加载->内存中的程序->运行
程序执行过程的跟踪
使用Debug模式将程序加载入内存,设置CS:IP指向程序的入口,Debug并不放弃对CPU的控制,这样就可以用Debug相关命令来单步执行程序
- 用t命令单步执行
- 用P命令执行int 21代码
实验三
编程、编译、连接、跟踪
assume cs:codesg
codesg segment
mov ax,2000h
mov ss,ax
mov sp,0
add sp,10
pop ax
pop bx
push ax
push bx
pop ax
pop bx
mov ax,4c00h
int 21h
codesg ends
end生成可执行文件 t1.exe
用Debug 跟踪t1.exe 的执行过程
PSP的头两个字节是CD20,用Debug加载t1.exe,查看PSP的内容