本实验关注的重点是如何显示一个二维的数据,很自然是使用二重循环,汇编二重循环也有一个套路,具体看下面的代码,几乎所有的二重循环都是下面这个套路。值得强调的是,两层循环直接进出一定要注意上下文切换,这里已经体现出一点操作系统指令切换的雏形。
assume cs:codesg, ds:datasgdatasg segmentdb 'welcome to masm!', 0db 00000010bdb 00100100bdb 01110001b
datasg endscodesg segment
start: mov ax, datasgmov ds, axmov bx, 0mov si, 0 ;ds:si指向数据mov ax, 0b800hmov es, axmov di, 160*12+40*2 ;es:di指向显存去mov cx, 3
s0: push cxpush sipush dis: xor cx, cxmov cl, ds:[si]jcxz okmov ch, ds:[bx+17]mov es:[di], clmov es:[di+1], chadd si, 1add di, 2jmp sok: pop dipop sipop cxinc bxadd di, 160loop s0mov ax, 4c00hint 21hcodesg ends
end start
实验结果: