vscode上编程,dosbox模拟环境
assume cs:codesg, ds:datasg, ss:stacksg
datasg segment
;显示内容:welcome to masm
content db 'welcome to masm'
;显示模式:依次为红底绿字、红底闪烁绿字、红底高亮绿字、黑底白字、白底蓝字
mode db 42h, 0c2h, 4ah, 7h, 71h
datasg ends
stacksg segment
dw 0, 0
stacksg ends
codesg segment
start: mov ax, datasg
mov ds, ax ;初始化ds:数据段(显示内容、显示模式)
mov ax, stacksg
mov ss, ax ;初始化ss:栈段(临时存储cx)
mov ax, 0b872h
mov es, ax ;初始化es:显存,坐标(12,33)
xor si, si ;显示模式索引清零
mov cx, 5 ;设置外层循环次数(cx)
s1: push cx ;外层循环次数(cx)入栈
xor bx, bx ;显示内容索引清零
xor bp, bp ;显存偏移地址清零
mov cx, 15 ;设置内层循环次数(cx)
s2: mov al, content[bx]
mov es:[bp], al ;向显存写入显示内容
inc bp ;显存地址+1
inc bx ;显示内容索引+1
mov al, mode[si]
mov es:[bp], al ;向显存写入显示模式
inc bp ;显存地址+1
loop s2
inc si ;显示模式索引+1
mov ax, es
add ax, 0ah ;一行0a0h(160)个字节,段寄存器+0a0h/10h
mov es, ax ;显存行数+1
pop cx ;外层循环次数(cx)出栈
loop s1
mov ax, 4c00h
int 21h
codesg ends
end start
dosbox上亲测