终于到了自己编写一个完整的汇编语言源程序的时刻,生成可执行文件,但这要经历一个漫长的过程
下面将知识点总结如下:
一、汇编语言源程序中包含两种指令,一种是汇编指令(有对应的机器码,可被编译为机器指令,最终被CPU执行),一种是伪指令(无对应机器码,不能被CPU执行)
二、汇编源程序举例:
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
其中伪指令segment和ends成对使用,定义一个段,分别说明开始和结束,codesg是段标识,可自定义,最后将被编译masm、连接link为段地址
end为汇编程序结束标记
assume为假设某一寄存器和程序中某一个被定义的段相关联
mov ax,4c00h
int 21h
这两条指令实现程序返回(程序结束后,将CPU控制权交还给使它得以运行的程序)
三、编辑源程序时:1.用edit写好汇编程序 2.用masm编译得到目标文件 3.用link连接目标文件得到可执行文件(其中地址不想为默认可直接设置) 4.运行程序
在连接和运行程序之间还有一个加载过程,其具体是DOS种的command.com程序找到文件名,设置CS:IP入口,command停止,CPU运行程序,程序结束后逆向退回
四、程序跟踪时可以用debug 文件名.exe
debug可以将程序加载入内存,设置CS:IP入口,但不放弃对CPU控制
cx寄存器为程序的长度
五、加载时,ds先找内存,再在内存前256个字节中创建前缀PSP数据区域进行程序通讯,所以设置的CS:IP的段地址CS=DS+10H
加载顺序:command加载debug,debug加载文件.exe,程序结束逆向返回
六、对
int 21h
汇编程序执行时用p命令统一完成(t命令会将其分条完成,但是过程复杂)
原文地址:https://www.cnblogs.com/msag/p/9912124.html