偉大的數學家高斯在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