首页 > 代码库 > 高斯数学

高斯数学

伟大的数学家高斯在9岁那年,用很短的时间完成了从1到100的累加。那原本是老师给学生们出的难题,希望他们能老老实实地待在教室里。
高斯的方法很简单,他发现这是50个101的求和:100+1、99+2、98+3、…、50+51,于是他很快算出结果是101×50=5050。


从1加到100,高斯发现了其中的规律,当然很快就能算出结果。但是计算机很蠢,它不懂什么规律,只能从1老老实实地加到100。
不过,它的强项就是速度,而且不怕麻烦,当高斯还在审题的时候,它就累加出结果了。



jmp near mycode

mydata:
db  ‘1+2+3+4+5...+100=‘

length:
db  0

 


mycode:
mov ax,0x07c0
mov ds,ax ;初始化数据段寄存器

mov ax,0xb800
mov es,ax ;初始化显存段寄存器


xor ax,ax;  把ax清0
mov cx,1 ; 

calc:
add ax,cx
inc cx
cmp cx,100
jbe calc


;5050 / 10 = 505   余数为0
;505  / 10 = 50    余数为5
;50   / 10 = 5     余数为0
;5    / 10 = 0     余数为5

;

mov bx,0x0000
mov ss,bx  ;初始化堆栈
mov sp,0x1234

mov si,10  ;初始化被除数

convert:
xor dx,dx  ;初始化除数
div si
push dx
inc byte[length]
cmp ax,0
jne convert

;movsb byte ptr [ES:DI],byte ptr [DS:SI]
mov di,0
mov si,mydata
mov cx,length-mydata


print1:
movsb
mov byte [es:di],0x7
inc di
loop print1

xor cx,cx
mov cl,byte [length]

print2:
pop ax
add ax,0x30
mov  [es:di],al
inc di
mov byte [es:di],0x7
inc di
loop print2


stop: jmp near stop
times 510-($-$$) db 0
dw 0xAA55

高斯数学