assume cs:codesg codesg segment mov ax,0123H mov bx,0456H add ax,bx add ax,ax mov ax,4c00H int 21H condesg ends end
终于学到了编程部分了,期待许久了。
这个程序里有3个伪指令segment和ends是一对伪指令,用来说明段的开始和结束
还有一个是end说明汇编结束
assume代表程序中某一段和寄存器,对应的这里cs是指令寄存器,codesg在代码写codesg segment那定义了位置那。
codes是标号,一个标号代表一个地址,这里的codes在segment的前面,说明codesg是一个段的名称,这个段的名称最终被编译、连接程序处理为一个段的段地址。
汇编编译完后需要连接生成可执行文件。
————————————————————————————————————————————————————
第一个是源文件文件名
第二个是生成的目标文件
第三个和第四个都是编译为目标文件过程中产生的中间结果,第三个是列表文件,第四个是交叉引用文件
如果编译出错是得不到目标文件的。一般来说,有两类错误使我们得不到所期望的目标文件:程序中有“Severe Errors”和找不到所给出的源程序文件
编译完后,那么就要生成可执行文件了
从图中可以看出它也让你填四个东西。
第一个文件是目标文件的文件名
第二个是执行文件的文件名
第三个是输入映象文件的名称
第四个是对于这个程序连接了哪些库文件
————————————————————————————————————————————————————
连接的作用:
1.当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件;
2.程序中调用了某一个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;
3.一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这些内容处理为最终的可执行信息。所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须要用连接程序对目标文件进行处理,生成可执行文件。
————————————————————————————————————————————————————
当你用debug file.exe来调试某个程序时
运行到返回程序也就是上面程序的int 21那时,要用p命令执行,不能用t命令执行,否则退不出去(试了下)
这是PSP的内容,可以看到ds的值为075A所以而程序在的段地址是076A所以PSP占了256个字节,并且在程序执行过程中DS指向的是PSP的地址。
DOS要利用PSP来和被加载的程序进行通信;