本章主要是编码实现1+2+3+…+100的和,并显示到屏幕上。依旧是加载到主引导扇区,此外也引入了栈段的知识点。
;文件名:c07_01_mbr.asm
;文件说明:硬盘主引导扇区代码
;参考书:《x86汇编语言:从实模式到保护模式》李忠 著
;代码功能:计算1+2+3+……+100,并把结果显示到屏幕
jmp near start ;跳过数据区
text:
db '1+2+3+...+100='
start:
;把"1+2+3+...+100="字符串从0x07c0:text传送到0xb800:0000
mov ax,0x07c0
mov ds,ax
mov si,text
mov ax,0xb800
mov es,ax
mov di,0
mov cx,start-text
@d:
mov al,[si]
mov [es:di],al
inc di
mov byte [es:di],0x07
inc di
inc si
loop @d
;求1+2+3+……+100的累加和
xor ax,ax
mov cx,1 ;用cx用作临时变量
@a:
add ax,cx
inc cx
cmp cx,100
jle @a
;分离累加和的每个数位,压入栈中
xor cx,cx
mov ss,cx ;栈段基地址和偏移地址都是0
mov sp,cx
mov cx,10 ;除数
xor bx,bx ;记录共多少个非0数位
@b:
inc bx
xor dx,dx
div cx
or dl,0x30 ;数字转成对应的字符
push dx
cmp ax,0
jne @b
;把累加和显示到屏幕
mov cx,bx ;前面用的是bx记录数位个数的。。
@c:
pop dx
mov [es:di],dl
inc di
mov byte [es:di],0x07
inc di
loop @c
jmp near $
times 510-($-$$) db 0
db 0x55,0xaa
参考资料
[1] 《x86汇编语言:从实模式到保护模式》李忠 著
[2] 《汇编语言》王爽 著