下面这段代码的功能是在显存0xb800:0 写入“1+2+3+...+100=5050”这个字符串,没有什么难度。
;代码清单7-1;文件名:c07_mbr.asm;文件说明:硬盘主引导扇区代码;创建日期:2011-4-13 18:02jmp near startmessage db '1+2+3+...+100='start:mov ax,0x7c0 ;设置数据段的段基地址 mov ds,axmov ax,0xb800 ;设置附加段基址到显示缓冲区mov es,ax;以下显示字符串 mov si,message mov di,0mov cx,start-message@g:mov al,[si]mov [es:di],alinc dimov byte [es:di],0x07inc diinc siloop @g;以下计算1到100的和 xor ax,axmov cx,1@f:add ax,cxinc cxcmp cx,100jle @f;以下计算累加和的每个数位 xor cx,cx ;设置堆栈段的段基地址mov ss,cxmov sp,cxmov bx,10xor cx,cx@d:inc cxxor dx,dxdiv bxor dl,0x30push dxcmp ax,0jne @d;以下显示各个数位 @a:pop dxmov [es:di],dlinc dimov byte [es:di],0x07inc diloop @ajmp near $ times 510-($-$$) db 0db 0x55,0xaa
实验结果:
实验体会:
这个结构已经很具有代表性,写其它程序可以参考这个程序的框架,注意这里把栈设置到0:0 这个地方,因为这里没有用,所以是可以的,还要这个栈的使用方法很巧妙,注意体会。