题主的问题,跟COM/EXE格式其实没关系。
早年MSDOS的命令集里,分两种:内部命令和外部命令。
内部命令就是集成在http://COMMAND.COM里的,不是单独的一个文件,直接运行就是了,代表的命令有:DIR/CD/MK/RD/COPY/DEL等;
外部命令是单独的一个EXE或者COM文件,具体是EXE还是COM要看具体是什么命令。
比如DOSKEY命令对应的是DOSKEY.COM,SYS命令对应的是SYS.COM,类似的还有FORMAT等命令。
但有些命令是用EXE实现的,比如FDISK/XCOPY等,对应就是FDISK.EXE,XCOPY.EXE
具体是用EXE还是用COM文件,其实区别不太大,至少在MSDOS 6的时代区别是不大的。COM文件的格式限制比EXE更多一些,EXE格式的文件更复杂。
就文件效果来说COM文件和EXE文件最终在MSDOS环境里,都是二进制代码,都是真正做事情的,并不是你说的“执行的任务是其它程序完成”。
而对于内部命令,是由http://COMMAND.COM这个程序完成的,你看到的MSDOS的SHELL(命令行)也是COMMAND.COM
下图是MSDOS6.22软盘的内容:有COM也有EXE
到了Windows时代,Windows事实上对COM格式支持的已经不是很好了,就内容而言,COM本身是无格式的,第一个字节就是二进制机器指令,所以COM文件需要自己初始化代码段,数据段等,但EXE文件是有格式的,可执行程序加载器是可以为EXE做一些必要的初始化工作,所以EXE对于操作系统而言,更友好一些(操作系统知道你要干啥)。
COM文件最大通常不能超过64KB(也就是16位模式下的一个segment),但EXE没有这个限制,我截图里的http://EDIT.COM,实际上是一个EXE格式,而非COM格式。
COM格式的二进制文件,本身是无格式的,MSDOS(包括其他版本的DOS)加载的时候,先找到一个空闲的segment(64KB),之后,把COM文件原封不动的加载到偏移量0x100的位置上,设置各个段寄存器指向这个segment,IP=0x100,然后就开始执行。前256字节(0x100)是MSDOS的控制头(PSP),所以,如果写COM格式的文件,在用汇编编译器编译的时候,都要写一句org 100h的字样
EXE格式的二进制文件,是MZ或者PE格式的,MSDOS里是MZ开头的,其中有一个MSDOS header,里面描述了具体的段信息,IP入口等,具体的,百度上有很多,不再详细说明(内容较多):