参考:https://blog.csdn.net/fanghailiang2016/article/details/83343773
从https://www.nasm.us/pub/nasm 选择相应的版本进行安装
从https://www.dosbox.com/download.php?main=1 选择相应的版本安装
在worksapce目录下新建helloworld.asm文件,写入如下内容:
org 0100h ;PSP前缀,程序从0100h开始运行
mov ax, cs ;初始化 ds和dx寄存器,为调用9号程序(显示字符串)做准备
mov ds, ax
mov dx, string ;取偏移地址,等价于MASM的 lea dx, string 或 mov dx, offset string
mov ah, 9
int 21h
MOV AH,4CH ;回到操作系统
INT 21H
string db "Hello, OS world!$"
nasm helloworld.asm -o helloworld.com
mount d D:\workspace
挂在目录
d:
切换到d盘
输入hello使用tab补全,运行:
不知道为什么使用helloworld.com会出错.
参考:https://blog.csdn.net/sxl18269199707/article/details/83315447
https://blog.csdn.net/emoheithree/article/details/51232793
在dosbox中debug程序需要debug工具.
感谢友军提供的工具链接:
https://pan.baidu.com/s/1m8ZZM1y1BHkMOQdFHSB61A
密码:mieg
首先在dosbox中挂载debug.exe(我的目录为D:\workspace\dosbox\tools)程序目录:
mount c D:\worksapce\dosbox\tools
再切换到c盘:
c:
然后就可以debug相应目录的程序了:
debug D:\pmtest1.com
部分debug命令参考:debug命令
至此,完成汇编开发环境的配置.nice!
参考:https://blog.csdn.net/xiunai78/article/details/2527885
“db 66”的本意是存储一个值为66H的字节。当在Debug反汇编时,它不能识别这个80386才引入的汇编指令,所以就如此显示。
“66”这个机器代码,是16、32位指令切换的前缀。例如,对于“mov ax,bx”指令,在16位段中的机器代码是“8B C3”;而在32位段中使用该指令,其机器代码是“66 8B C3”。32位段中机器代码“8B C3”对应的指令是“mov ax,ebx”,该指令用在16位段中,其机器代码是“66 8B C3”。
参考:https://www.cnblogs.com/xiaolongxia/articles/2673043.html
1、dos下,exe有个512字节的文件头,包含重定位信息,后面跟程序;com就是程序的内存映象,没有文件头,偏移地址固定100h;其它不知道
2、exe可以有独立的代码、数据和堆栈段,还可以有多个代码段或多个数据段,程序长度可以超过64KB,执行起始处可以任意指定…
com程序将代码、数据和堆栈段合一,结构紧凑,所有代码、数据都在一个逻辑段内,不超过64KB…
com文件存储在磁盘上是主存的完全影象,不包含重新定位的加载信息,与exe文件相比其加载速度更快,占用的磁盘空间也少…