• <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

            久久久91人妻无码精品蜜桃HD| 中文字幕久久精品无码| 久久99精品国产99久久6男男| 久久九九精品99国产精品| 国产产无码乱码精品久久鸭| 精品久久久久久99人妻| 亚洲av伊人久久综合密臀性色| 久久er热视频在这里精品| 免费精品国产日韩热久久| 久久精品国产亚洲AV无码偷窥| 久久久中文字幕日本| 亚洲国产视频久久| 国产精品久久久久久久| 久久久久久国产精品美女| 2021国产成人精品久久| 久久精品亚洲精品国产色婷| 久久免费国产精品| 久久精品嫩草影院| 久久精品国产亚洲av高清漫画 | 久久免费的精品国产V∧| 久久中文字幕视频、最近更新 | 久久九色综合九色99伊人| 国产精品久久国产精品99盘| 久久亚洲电影| 久久人人爽人爽人人爽av| 久久综合综合久久狠狠狠97色88 | 日本强好片久久久久久AAA| 一本久久a久久精品综合香蕉 | 亚洲国产精品无码久久一线| 中文字幕精品无码久久久久久3D日动漫 | 99久久这里只有精品| 亚洲国产精品久久电影欧美| 精品多毛少妇人妻AV免费久久| 久久中文精品无码中文字幕| 日韩影院久久| 怡红院日本一道日本久久 | 久久国产成人| 久久精品国产亚洲AV不卡| 久久国产免费直播| 日韩影院久久| 亚洲中文字幕无码久久2020|