学习8086CPU汇编语言需要在32位系统DOS环境中进行调试,目前的操作系统一般都是64位且升级到Windows10,最近我也在无数次系统提醒之下按下了Window11更新,这些都无法启动debug.exe。
因此,我们可以使用DOSBox工具,可以在多种操作系统中支持DOS环境,首先下载好DOSBox和debug.exe,我将这两个可执行文件放到桌面文件夹asm中。
双击DOSBox安装包,一路下一步流畅无脑安装。然后双击启动:
挂载目录:
然而,每次启动都要执行命令,比较麻烦,可以直接找到下面文件:
文件位置(需要设置显示隐藏文件):C:\Users\Cat\AppData\Local\DOSBox\C:\Users\Cat\AppData\Local\DOSBox
在最后面加上指令:[autoexec]# Lines in this section will be run at startup.# You can put your MOUNT lines here.mount c: c:/Users/Cat/Desktop/asmc:
调整界面大小:
# windowresolution=original# output=surfacewindowresolution=1080x800output=opengl
编程:
编程:
……pop axpop bx
在10000H处写入字型数据2266H,可以使用如下程序实现:
下面,要求不使用mov 内存单元,寄存器指令实现此功能。
思考,利用入栈操作,设置栈段和栈顶指针再将数据入栈。
将masm.exe和link.exe放入asm文件夹,并创建t.asm文件,写入程序:
如果觉得编译链接过程比较繁琐,可以在配置文件中直接写好,每次执行文件重启DOSBox就可以,可以把DOSBox固定到桌面下方任务栏,文件名指定,比如t.asm,需要测试其他文件就要将新的程序复制过来。
计算ffff:0~ffff:b单元中的数据的和,结果存储在dx中。
注意:
1.单元中数据为8位,不能直接累加到16位寄存器中;
2.可以使用一个16位寄存器做中介,将内存单元中的8位数据赋值到一个16位寄存器ax中,再累加到dx上。
assume cs:codesgcodesg segmentstart:mov ax,0ffffH mov ds,ax mov bx,0 mov dx,0 mov cx,12 s:mov al,[bx] mov ah,0 add dx,ax inc bx loop s mov ax,4c00H int 21Hcodesg endsend start
测试时使用4个单元数据累加,用计算器进行验证,最终DX寄存器中的数值也是1BCH。
联系客服