• <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 閱讀(638) 評論(0)  編輯 收藏 引用 所屬分類: Assemble

            欧美日韩精品久久久久| 精品99久久aaa一级毛片| 影音先锋女人AV鲁色资源网久久| 亚洲精品美女久久久久99| 日日躁夜夜躁狠狠久久AV| 久久AAAA片一区二区| 国产A三级久久精品| 国产精品成人久久久久三级午夜电影 | 久久精品一区二区| 色婷婷久久久SWAG精品| 国产精品免费福利久久| 亚洲国产成人久久一区久久| 久久久综合九色合综国产| 久久99精品国产麻豆宅宅| 国产精品永久久久久久久久久| 亚洲AV日韩AV永久无码久久| 欧美久久久久久精选9999| 国产一级做a爰片久久毛片| 久久久久99这里有精品10| 国产精品久久久久久久久久免费| 久久亚洲精品中文字幕| 精品久久久无码21p发布| 久久亚洲sm情趣捆绑调教| 免费精品久久久久久中文字幕 | 久久精品夜色噜噜亚洲A∨ | 午夜精品久久久久久99热| 亚洲另类欧美综合久久图片区| 国产福利电影一区二区三区久久老子无码午夜伦不 | 国产巨作麻豆欧美亚洲综合久久| 99久久99久久精品免费看蜜桃| 一本一本久久a久久综合精品蜜桃| 日韩美女18网站久久精品| 色婷婷噜噜久久国产精品12p| 久久激情亚洲精品无码?V| 99久久免费只有精品国产| 国产真实乱对白精彩久久| 国产AⅤ精品一区二区三区久久 | 久久久噜噜噜久久中文字幕色伊伊| 久久精品国产免费| 久久er国产精品免费观看8| 狠狠人妻久久久久久综合蜜桃|