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

            99久久免费国产特黄| 欧美午夜A∨大片久久| 久久夜色精品国产噜噜亚洲AV| 久久精品亚洲精品国产色婷| 久久久久99精品成人片三人毛片 | 亚洲国产一成久久精品国产成人综合| 久久只有这精品99| 国产亚洲精久久久久久无码AV| 麻豆AV一区二区三区久久| 99热成人精品热久久669| 一本大道久久东京热无码AV| 日产精品99久久久久久| 久久久久国产| 久久ZYZ资源站无码中文动漫| 国产精品久久久久…| 国内精品久久久久影院亚洲| 久久中文精品无码中文字幕| 丰满少妇人妻久久久久久4| 久久精品亚洲精品国产色婷| 亚洲精品综合久久| 国产一区二区精品久久凹凸| 精品综合久久久久久888蜜芽| 国产Av激情久久无码天堂| 久久久精品人妻无码专区不卡| 亚洲精品国产美女久久久| 伊人久久大香线蕉综合影院首页| 久久只有这里有精品4| 国产午夜精品久久久久九九| av无码久久久久不卡免费网站| 亚洲日韩中文无码久久| 精品久久久一二三区| 国产精品中文久久久久久久 | 亚洲国产成人乱码精品女人久久久不卡| yy6080久久| 国产精品久久久久免费a∨| 无码国内精品久久人妻麻豆按摩| 国产综合精品久久亚洲| 狠狠精品久久久无码中文字幕 | 无码国内精品久久人妻蜜桃| 久久AV高潮AV无码AV| 久久亚洲国产精品一区二区|