• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            coreBugZJ

            此 blog 已棄。

            Divisor Summation, SPOJ 74

            74. Divisor Summation

            Problem code: DIVSUM

            Given a natural number n (1 <= n <= 500000), please output the summation of all its proper divisors.

            Definition: A proper divisor of a natural number is the divisor that is strictly less than the number.

            e.g. number 20 has 5 proper divisors: 1, 2, 4, 5, 10, and the divisor summation is: 1 + 2 + 4 + 5 + 10 = 22.

            Input

            An integer stating the number of test cases (equal to about 200000), and that many lines follow, each containing one integer between 1 and 500000 inclusive.

            Output

            One integer each line: the divisor summation of the integer given respectively.

            Example

            Sample Input:
            3
            2
            10
            20

            Sample Output:
            1
            8
            22


            使用輸入輸出緩存,第一次使用字符串數組指令STOSD,LOOP循環命令,相對基址變址操作數。
            教訓:函數調用一定要注意保存寄存器。

              1 ; spoj74.s
              2 
              3 %define  L   500009
              4 %define  BL  4096
              5 
              6 section .bss
              7         bufIn : resb BL
              8         pBufInI : resd 1
              9         pBufInN : resd 1
             10 
             11         bufOut : resb BL
             12         pBufOutN : resd 1
             13 
             14         ans : resd L
             15 
             16 section .text
             17         global _start
             18 
             19 _start : 
             20         mov dword[pBufInI], 0x0
             21         mov dword[pBufInN], 0x0
             22         mov dword[pBufOutN], 0x0
             23         call init
             24         call inInt
             25         mov ecx, eax
             26 CASE : 
             27         push ecx
             28 
             29         call inInt
             30         mov eax, [eax*4+ans]
             31         call outIntLn
             32 
             33         pop ecx
             34         loop CASE
             35 EXIT : 
             36         call flushOut
             37 
             38         mov eax, 0x1
             39         mov ebx, 0x0
             40         int 0x80
             41 
             42 
             43 ; func
             44 init : 
             45         xor eax, eax
             46         mov edi, ans
             47         mov ecx, L
             48         cld
             49         rep stosd
             50 
             51         mov ecx, L
             52         shr ecx, 1
             53 initA : 
             54         mov eax, ecx
             55 initC : 
             56         add eax, ecx
             57         cmp eax, L
             58         jge initB
             59         mov ebx, [eax*4+ans]
             60         add ebx, ecx
             61         mov [eax*4+ans], ebx
             62         jmp initC
             63 initB : 
             64         loop initA
             65         ret
             66 
             67 ; func eax
             68 inChar : 
             69         mov eax, [pBufInI]
             70         cmp eax, [pBufInN]
             71         jne inCharA
             72         mov eax, 0x3
             73         mov ebx, 0x0
             74         mov ecx, bufIn
             75         mov edx, BL
             76         int 0x80
             77         mov [pBufInN], eax
             78         mov dword [pBufInI], 0x0
             79         xor eax, eax
             80 inCharA : 
             81         mov bl, [eax+bufIn]
             82         inc eax
             83         mov [pBufInI], eax
             84         movzx eax, bl
             85         ret
             86 
             87 ; func eax
             88 outChar : 
             89         mov ebx, [pBufOutN]
             90         mov [ebx+bufOut], al
             91         inc ebx
             92         mov [pBufOutN], ebx
             93         cmp ebx, BL
             94         jne outCharA
             95         call flushOut
             96 outCharA : 
             97         ret
             98 
             99 ; func
            100 flushOut : 
            101         mov eax, 0x4
            102         mov ebx, 0x1
            103         mov ecx, bufOut
            104         mov edx, [pBufOutN]
            105         int 0x80
            106         mov dword [pBufOutN], 0x0
            107         ret
            108 
            109 ; func eax
            110 inInt : 
            111 inIntA : 
            112         call inChar
            113         cmp al, '0'
            114         jb inIntA
            115         cmp al, '9'
            116         ja inIntA
            117         xor ebx, ebx
            118         push ebx
            119 inIntB : 
            120         mov ebx, eax
            121         sub ebx, '0'
            122         pop eax
            123         xor edx, edx
            124         mov ecx, 0xA
            125         mul ecx
            126         add eax, ebx
            127         push eax
            128         call inChar
            129         cmp al, '0'
            130         jb inIntC
            131         cmp al, '9'
            132         ja inIntC
            133         jmp inIntB
            134 inIntC : 
            135         pop eax
            136         ret
            137 
            138 ; func eax
            139 outIntLn : 
            140         ; eax == 0
            141         test eax, eax
            142         jnz outIntLnA
            143         mov eax, '0'
            144         call outChar
            145         mov eax, 0xA
            146         call outChar
            147         ret
            148 
            149         ; eax != 0
            150 outIntLnA : 
            151         push ebp
            152         mov ebp, esp
            153         sub esp, 0x40
            154         mov ebx, ebp
            155 outIntLnB : 
            156         test eax, eax
            157         jz outIntLnC
            158         xor edx, edx
            159         mov ecx, 0xA
            160         div ecx
            161         add edx, '0'
            162         dec ebx
            163         mov [ebx], dl
            164         jmp outIntLnB
            165 outIntLnC : 
            166         cmp ebx, ebp
            167         je outIntLnD
            168         movzx eax, byte [ebx]
            169         push ebx ; !!!!!!!!!!!!!!!!
            170         call outChar
            171         pop ebx  ; !!!!!!!!!!!!!!!!
            172         inc ebx
            173         jmp outIntLnC
            174 outIntLnD : 
            175         mov eax, 0xA
            176         call outChar
            177         mov esp, ebp
            178         pop ebp
            179         ret
            180 

            posted on 2011-05-19 20:25 coreBugZJ 閱讀(630) 評論(0)  編輯 收藏 引用 所屬分類: Assemble

            精品久久久久久国产牛牛app| 久久乐国产精品亚洲综合| 久久久噜噜噜久久| 久久久久亚洲精品男人的天堂| 久久精品成人欧美大片| 久久夜色精品国产噜噜麻豆| 久久狠狠一本精品综合网| 久久久久久综合网天天| 久久人妻少妇嫩草AV无码蜜桃 | 精品一二三区久久aaa片| 久久久精品2019免费观看| 色播久久人人爽人人爽人人片AV| 亚洲国产成人久久综合一| 久久91精品国产91久久麻豆| 久久精品国产精品亚洲毛片| 国产精品久久久久乳精品爆| 中文字幕亚洲综合久久2| 婷婷久久五月天| 尹人香蕉久久99天天拍| 理论片午午伦夜理片久久| AV狠狠色丁香婷婷综合久久| 国产精品对白刺激久久久| 久久久久久久久66精品片| 国产成人综合久久精品尤物| 乱亲女H秽乱长久久久| 亚洲国产天堂久久综合| 国产精品青草久久久久福利99| 亚洲国产精品成人久久| 99久久久国产精品免费无卡顿| 日本精品久久久久影院日本 | 久久99精品久久久久久久不卡 | 国产毛片欧美毛片久久久| 日日噜噜夜夜狠狠久久丁香五月| 久久伊人中文无码| 久久996热精品xxxx| 国产91久久综合| 狠狠色伊人久久精品综合网 | 91麻豆国产精品91久久久| 亚洲精品久久久www| 亚洲人成无码www久久久| 2020久久精品亚洲热综合一本|