高斯数学
伟大的数学家高斯在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