亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lldvrm.asm

?? C語言庫函數的原型,有用的拿去
?? ASM
字號:
        title   lldvrm - signed long divide and remainder routine
;***
;lldvrm.asm - signed long divide and remainder routine
;
;       Copyright (c) Microsoft Corporation. All rights reserved.
;
;Purpose:
;       defines the signed long divide and remainder routine
;           __alldvrm
;
;*******************************************************************************


.xlist
include cruntime.inc
include mm.inc
.list

;***
;lldvrm - signed long divide and remainder
;
;Purpose:
;       Does a signed long divide and remainder of the arguments.  Arguments are
;       not changed.
;
;Entry:
;       Arguments are passed on the stack:
;               1st pushed: divisor (QWORD)
;               2nd pushed: dividend (QWORD)
;
;Exit:
;       EDX:EAX contains the quotient (dividend/divisor)
;       EBX:ECX contains the remainder (divided % divisor)
;       NOTE: this routine removes the parameters from the stack.
;
;Uses:
;       ECX
;
;Exceptions:
;
;*******************************************************************************

        CODESEG

_alldvrm PROC NEAR
.FPO (3, 4, 0, 0, 1, 0)

        push    edi
        push    esi
        push    ebp

; Set up the local stack and save the index registers.  When this is done
; the stack frame will look as follows (assuming that the expression a/b will
; generate a call to alldvrm(a, b)):
;
;               -----------------
;               |               |
;               |---------------|
;               |               |
;               |--divisor (b)--|
;               |               |
;               |---------------|
;               |               |
;               |--dividend (a)-|
;               |               |
;               |---------------|
;               | return addr** |
;               |---------------|
;               |      EDI      |
;               |---------------|
;               |      ESI      |
;               |---------------|
;       ESP---->|      EBP      |
;               -----------------
;

DVND    equ     [esp + 16]      ; stack address of dividend (a)
DVSR    equ     [esp + 24]      ; stack address of divisor (b)


; Determine sign of the quotient (edi = 0 if result is positive, non-zero
; otherwise) and make operands positive.
; Sign of the remainder is kept in ebp.

        xor     edi,edi         ; result sign assumed positive
        xor     ebp,ebp         ; result sign assumed positive

        mov     eax,HIWORD(DVND) ; hi word of a
        or      eax,eax         ; test to see if signed
        jge     short L1        ; skip rest if a is already positive
        inc     edi             ; complement result sign flag
        inc     ebp             ; complement result sign flag
        mov     edx,LOWORD(DVND) ; lo word of a
        neg     eax             ; make a positive
        neg     edx
        sbb     eax,0
        mov     HIWORD(DVND),eax ; save positive value
        mov     LOWORD(DVND),edx
L1:
        mov     eax,HIWORD(DVSR) ; hi word of b
        or      eax,eax         ; test to see if signed
        jge     short L2        ; skip rest if b is already positive
        inc     edi             ; complement the result sign flag
        mov     edx,LOWORD(DVSR) ; lo word of a
        neg     eax             ; make b positive
        neg     edx
        sbb     eax,0
        mov     HIWORD(DVSR),eax ; save positive value
        mov     LOWORD(DVSR),edx
L2:

;
; Now do the divide.  First look to see if the divisor is less than 4194304K.
; If so, then we can use a simple algorithm with word divides, otherwise
; things get a little more complex.
;
; NOTE - eax currently contains the high order word of DVSR
;

        or      eax,eax         ; check to see if divisor < 4194304K
        jnz     short L3        ; nope, gotta do this the hard way
        mov     ecx,LOWORD(DVSR) ; load divisor
        mov     eax,HIWORD(DVND) ; load high word of dividend
        xor     edx,edx
        div     ecx             ; eax <- high order bits of quotient
        mov     ebx,eax         ; save high bits of quotient
        mov     eax,LOWORD(DVND) ; edx:eax <- remainder:lo word of dividend
        div     ecx             ; eax <- low order bits of quotient
        mov     esi,eax         ; ebx:esi <- quotient
;
; Now we need to do a multiply so that we can compute the remainder.
;
        mov     eax,ebx         ; set up high word of quotient
        mul     dword ptr LOWORD(DVSR) ; HIWORD(QUOT) * DVSR
        mov     ecx,eax         ; save the result in ecx
        mov     eax,esi         ; set up low word of quotient
        mul     dword ptr LOWORD(DVSR) ; LOWORD(QUOT) * DVSR
        add     edx,ecx         ; EDX:EAX = QUOT * DVSR
        jmp     short L4        ; complete remainder calculation

;
; Here we do it the hard way.  Remember, eax contains the high word of DVSR
;

L3:
        mov     ebx,eax         ; ebx:ecx <- divisor
        mov     ecx,LOWORD(DVSR)
        mov     edx,HIWORD(DVND) ; edx:eax <- dividend
        mov     eax,LOWORD(DVND)
L5:
        shr     ebx,1           ; shift divisor right one bit
        rcr     ecx,1
        shr     edx,1           ; shift dividend right one bit
        rcr     eax,1
        or      ebx,ebx
        jnz     short L5        ; loop until divisor < 4194304K
        div     ecx             ; now divide, ignore remainder
        mov     esi,eax         ; save quotient

;
; We may be off by one, so to check, we will multiply the quotient
; by the divisor and check the result against the orignal dividend
; Note that we must also check for overflow, which can occur if the
; dividend is close to 2**64 and the quotient is off by 1.
;

        mul     dword ptr HIWORD(DVSR) ; QUOT * HIWORD(DVSR)
        mov     ecx,eax
        mov     eax,LOWORD(DVSR)
        mul     esi             ; QUOT * LOWORD(DVSR)
        add     edx,ecx         ; EDX:EAX = QUOT * DVSR
        jc      short L6        ; carry means Quotient is off by 1

;
; do long compare here between original dividend and the result of the
; multiply in edx:eax.  If original is larger or equal, we are ok, otherwise
; subtract one (1) from the quotient.
;

        cmp     edx,HIWORD(DVND) ; compare hi words of result and original
        ja      short L6        ; if result > original, do subtract
        jb      short L7        ; if result < original, we are ok
        cmp     eax,LOWORD(DVND) ; hi words are equal, compare lo words
        jbe     short L7        ; if less or equal we are ok, else subtract
L6:
        dec     esi             ; subtract 1 from quotient
        sub     eax,LOWORD(DVSR) ; subtract divisor from result
        sbb     edx,HIWORD(DVSR)
L7:
        xor     ebx,ebx         ; ebx:esi <- quotient

L4:
;
; Calculate remainder by subtracting the result from the original dividend.
; Since the result is already in a register, we will do the subtract in the
; opposite direction and negate the result if necessary.
;

        sub     eax,LOWORD(DVND) ; subtract dividend from result
        sbb     edx,HIWORD(DVND)

;
; Now check the result sign flag to see if the result is supposed to be positive
; or negative.  It is currently negated (because we subtracted in the 'wrong'
; direction), so if the sign flag is set we are done, otherwise we must negate
; the result to make it positive again.
;

        dec     ebp             ; check result sign flag
        jns     short L9        ; result is ok, set up the quotient
        neg     edx             ; otherwise, negate the result
        neg     eax
        sbb     edx,0

;
; Now we need to get the quotient into edx:eax and the remainder into ebx:ecx.
;
L9:
        mov     ecx,edx
        mov     edx,ebx
        mov     ebx,ecx
        mov     ecx,eax
        mov     eax,esi

;
; Just the cleanup left to do.  edx:eax contains the quotient.  Set the sign
; according to the save value, cleanup the stack, and return.
;

        dec     edi             ; check to see if result is negative
        jnz     short L8        ; if EDI == 0, result should be negative
        neg     edx             ; otherwise, negate the result
        neg     eax
        sbb     edx,0

;
; Restore the saved registers and return.
;

L8:
        pop     ebp
        pop     esi
        pop     edi

        ret     16

_alldvrm ENDP

end

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区美女| 欧洲一区二区三区免费视频| 一本久久a久久精品亚洲| 亚洲国产成人va在线观看天堂| 美女mm1313爽爽久久久蜜臀| av电影在线观看一区| 欧美一区二区三区免费大片 | 久久蜜桃av一区精品变态类天堂| 亚洲摸摸操操av| 国产精品99久久久久久久女警 | 亚洲欧美一区二区在线观看| 日本欧美加勒比视频| 在线欧美小视频| 国产精品久久久久精k8| 久久99久久久久久久久久久| 欧美日韩国产综合一区二区| 亚洲精品国久久99热| 成人精品一区二区三区中文字幕| 精品国产免费视频| 麻豆成人91精品二区三区| 欧美日韩在线一区二区| 亚洲美女屁股眼交3| www.欧美精品一二区| 中文字幕日本乱码精品影院| 国产精品原创巨作av| 久久久亚洲欧洲日产国码αv| 蜜臀91精品一区二区三区| 在线电影院国产精品| 亚洲成av人**亚洲成av**| 欧美亚一区二区| 夜夜精品视频一区二区| 色婷婷久久99综合精品jk白丝| 亚洲色图一区二区三区| 91视频观看视频| 亚洲精品欧美在线| 日本道精品一区二区三区 | 免费欧美在线视频| 欧美一区二区三区四区五区| 日韩国产在线一| 91精品国产色综合久久久蜜香臀| 日韩国产在线观看| 精品成人私密视频| 国产一区欧美日韩| 国产精品久久久久7777按摩 | 免费看欧美女人艹b| 欧美一级在线观看| 国产综合色产在线精品| 国产亚洲精品aa午夜观看| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 精品久久久久久久久久久久久久久久久| 蜜桃av噜噜一区二区三区小说| 欧美一区二区在线观看| 国内久久精品视频| 中文字幕亚洲不卡| 欧美三级蜜桃2在线观看| 日本欧美肥老太交大片| 欧美tk丨vk视频| 成人av在线一区二区三区| 亚洲理论在线观看| 日韩你懂的在线观看| 国产麻豆视频一区二区| 亚洲视频小说图片| 欧美一区二区三区四区久久| 激情小说欧美图片| 一区二区欧美视频| 精品成a人在线观看| 91免费看片在线观看| 日韩vs国产vs欧美| 亚洲丝袜精品丝袜在线| 欧美一级高清片| 99麻豆久久久国产精品免费优播| 丝袜国产日韩另类美女| 久久久www成人免费毛片麻豆 | 一本大道久久a久久精品综合| 日本色综合中文字幕| 国产精品你懂的在线| 欧美欧美欧美欧美| 99久久精品费精品国产一区二区| 日韩成人免费电影| 亚洲精品第一国产综合野| 亚洲精品一区二区三区在线观看| 一本色道a无线码一区v| 久久成人免费网站| 亚洲成人av中文| 一色桃子久久精品亚洲| 日韩欧美一级片| 欧美日韩激情一区二区| 成人久久视频在线观看| 久久99精品国产| 日韩精品欧美成人高清一区二区| 国模套图日韩精品一区二区| 亚洲乱码精品一二三四区日韩在线| 欧美不卡一区二区| 欧美日韩中文字幕一区二区| 粉嫩嫩av羞羞动漫久久久| 午夜精品福利一区二区三区av | 久久久久久久久久久久电影| 欧美美女黄视频| 在线视频一区二区三| 波多野结衣中文字幕一区二区三区| 久久99精品视频| 秋霞午夜鲁丝一区二区老狼| 亚洲国产一区二区a毛片| 国产精品久久久久国产精品日日| 国产日本一区二区| 久久久蜜桃精品| 2023国产一二三区日本精品2022| 欧美日韩aaaaaa| 欧美另类videos死尸| 欧美在线一区二区三区| 欧美少妇性性性| 欧美日韩在线直播| 91精品久久久久久久99蜜桃 | 久久精品一区二区三区av| 精品国产污污免费网站入口 | 亚洲一区视频在线| 亚洲综合色区另类av| 亚洲精品老司机| 亚洲一二三四久久| 亚洲国产精品麻豆| 亚洲成在人线免费| 青青草成人在线观看| 日本欧美加勒比视频| 欧美日韩亚洲另类| 精品视频免费在线| 欧美一区二区视频在线观看2022| 9191精品国产综合久久久久久| 欧美一区二区三区四区久久| 精品少妇一区二区三区在线播放 | 国产精品18久久久久久久久| 国产成人av电影在线播放| 成人h动漫精品一区二区| 91网站最新地址| 欧美日韩国产综合久久| 91精品国产福利| 久久日韩精品一区二区五区| 国产精品拍天天在线| 亚洲另类中文字| 美女视频免费一区| 国产精品一区专区| 色先锋资源久久综合| 欧美精品在线观看播放| 亚洲精品在线免费播放| 综合激情成人伊人| 日韩黄色小视频| av福利精品导航| 91麻豆精品91久久久久同性| 久久这里只有精品6| 亚洲日本乱码在线观看| 奇米在线7777在线精品| 成人午夜免费av| 精品视频一区三区九区| 26uuu国产一区二区三区| 亚洲日本中文字幕区| 精品一区二区三区免费播放 | 亚洲美女区一区| 国产在线精品视频| 一本色道**综合亚洲精品蜜桃冫| 日韩美女视频一区二区在线观看| 国产精品美女久久久久aⅴ| 亚洲电影一区二区三区| 国产乱人伦偷精品视频免下载| 色94色欧美sute亚洲线路一久| 日韩免费一区二区| 亚洲永久精品国产| 国产盗摄女厕一区二区三区| 一区在线播放视频| 精品一区二区三区欧美| 欧美性生活久久| 国产精品久久久久久久久晋中 | 欧美三级在线看| 欧美国产精品中文字幕| 久久精品二区亚洲w码| 精品视频在线视频| 亚洲精品国产成人久久av盗摄 | 青青草97国产精品免费观看| 日本大胆欧美人术艺术动态| 亚洲理论在线观看| 视频在线观看91| 日本福利一区二区| 国产女人18水真多18精品一级做| 日本欧美在线看| 欧美日韩夫妻久久| 亚洲一区二区三区四区五区中文| 成人va在线观看| 国产精品美女一区二区在线观看| 久久av老司机精品网站导航| 91精品国产综合久久香蕉麻豆| 日韩一区在线看| 国产成人在线视频免费播放| 91精品国产欧美一区二区成人 | 亚洲视频电影在线| 成人免费电影视频| 国产精品无圣光一区二区| 国产麻豆一精品一av一免费| 久久久久久久久久电影| 精品一区二区三区在线观看| 精品国产露脸精彩对白| 国内精品视频一区二区三区八戒| 日韩三级免费观看|