《x86汇编语言:从实模式到保护模式》(第7章---比高斯更快的计算)

本章主要是编码实现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] 《汇编语言》王爽 著

发布了323 篇原创文章 · 获赞 193 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/ccnuacmhdu/article/details/103584945
今日推荐