⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 div.s

📁 SecuDe是一个由安全应用程序接口组成,对验证机制、证件处理、PEM、X.400报文处理和密钥管理提供支持。SecuDe提供DES、 RSA杂凑函数、密钥生成以及数字签名的生成和核实等多种密码机制。
💻 S
📖 第 1 页 / 共 2 页
字号:
   ADD     SP,6   MOV     BX,[6+BP]   ; DAS GLEICHE FUER   PUSH    BX          ; DEN DIVISOR   MOV     CX,SFAKTOR   PUSH    CX   PUSH    BX   CALL    _SSHIFT   ADD     SP,6;;--------------------------------------;;                                      ;; DRITTER SCHRITT: DIVISION            ;;                                      ;;--------------------------------------;;STARTDIV:   MOV     BX,[6+BP]   ; ADRESSE DIVISOR   MOV     SI,[BX]     ; INDEXREGISTER                       ; FUER SCHLEIFEN                       ; UEBER DEN DIVISOR   MOV     AX,[BX+SI]  ; HOECHSTWERTIGSTE   MOV     FIRSTDIGIT,AX                       ; ZIFFER DES                       ; DIVISORS WIRD                       ; DAUERND GEBRAUCHT   MOV     DI,DIVIDENT ; ZAHL DER DIVISIONS-   SUB     DI,SI       ; SCHRITTE BESTIMMEN                       ; 'DI' IST INDEX-                       ; REGISTER FUER                       ; 'QUOTIENT'   PUSH    BP          ; 'BP' RETTEN   LEA     BP,[DIVIDENT+DI]                       ; 'BP' IST BASIS-                       ; REGISTER FUER                       ; 'DIVIDENT'   MOV     WORD PTR [2+BP+SI],0                       ; DIESE ZIFFER WIRD                       ; IN DER ERSTEN DIVI-                       ; SION GEBRAUCHT;;--------------------------------------;;                                      ;; SCHLEIFE ZUR DIVISION:               ;;                                      ;;--------------------------------------;;MAINLOOP:   MOV     DX,[2+BP+SI];HOECHSTWERTIGSTE                       ; ZIFFER DES DIVI-                       ; DENTEN LADEN   CMP     DX,FIRSTDIGIT                       ; FALLS GLEICH,   JNE     DODIVIDE    ; DIVISION NICHT                       ; MOEGLICH   MOV     ZQUOT,-1    ; DAS IST DANN DIE                       ; AKTUELLE ZIFFER                       ; DES QUOTIENTEN   JMP     DOTESTDODIVIDE:   MOV     AX,[BP+SI]  ; ZWEITHOECHSTE                       ; ZIFFER DES DIVI-                       ; DENTEN LADEN   DIV     FIRSTDIGIT  ; UND DIVIDIEREN   MOV     ZQUOT,AX    ; ERGIBT AKTUELLE                       ; ZIFFER DES                       ; QUOTIENTEN;;--------------------------------------;;                                      ;; NAEHERUNG FUER DEN QUOTIENTEN WIRD   ;; AN ZWEI ZIFFERN GETESTET             ;;                                      ;;--------------------------------------;;DOTEST:   MOV     AX,[-2+BX+SI]                       ; ZWEITHOECHSTE                       ; ZIFFER DES                       ; DIVISORS   MUL     ZQUOT       ; MULTIPLIZIEREN                       ; MIT DER                       ; GEFUNDENEN                       ; ZIFFER DES                       ; QUOTIENTEN   MOV     CX,DX       ; UEBERTRAG MERKEN   MOV     TEST,AX   MOV     AX,FIRSTDIGIT                       ; HOECHSTWERTIGSTE                       ; ZIFFER DES                       ; DIVISORS   MUL     ZQUOT   ADD     AX,CX       ; UEBERTRAG ADDIEREN   JNC     NOCARRY1    ; DABEI KOENNTE ES   INC     DX          ; EINEN NEUEN UEBER-                       ; TRAG GEBENNOCARRY1:   MOV     TEST+2,AX   ; ERGEBNIS SPEICHERN   MOV     TEST+4,DX   ; IM TESTFELD;;--------------------------------------;;                                      ;; DER VERGLEICH DER DES TESTFELDES     ;; MIT DEN ZIFFERN DES DIVIDENTEN MUSS  ;; BYTEWEISE ERFOLGEN, DA DER 'CMP'-    ;; BEFEHL DAS VORZEICHEN BERUECKSICHTIGT;;                                      ;;--------------------------------------;;   XOR     AX,AX       ; LOESCHEN FUER   XOR     DX,DX       ; DEN BYTEWEISEN                       ; VERGLEICH   PUSH    DI          ; 'DI' WIRD                       ; BENOETIGT   LEA     DI,[3+SI]   ; SCHLEIFE ZUM   MOV     SI,5        ; VERGLEICH   MOV     CX,6        ; VORBEREITENLOOPCMP:   MOV     AL,BYTE PTR [TEST+SI]                       ; EIN BYTE DES TEST-                       ; FELDES LADEN   MOV     DL,[BP+DI]  ; EIN BYTE DES DIVI-                       ; DENTEN LADEN   CMP     AX,DX       ; VERGLEICHEN   JL      OKAY   JG      DOCORRECT   DEC     SI          ; ZEIGER   DEC     DI          ; FORTSCHALTEN   LOOP    LOOPCMP   JMP     OKAYDOCORRECT:   DEC     ZQUOT       ; PROBEQUOTIENT                       ; MUSS VERKLEINERT                       ; WERDEN;;--------------------------------------;;                                      ;; DIVISOR * QUOTIENT WIRD NUN VOM      ;; DIVIDENTEN ABGEZOGEN                 ;;                                      ;;--------------------------------------;;OKAY:   POP     DI          ; 'DI' ZURUECKHOLEN   MOV     SI,2        ; ZEIGER SETZEN   XOR     CX,CX       ; UEBERTRAG LOESCHENLOOPSUB:   MOV     AX,[BX+SI]  ; ZIFFER DES                       ; DIVISORS LADEN   MUL     ZQUOT       ; MULTIPLIZIEREN   ADD     AX,CX       ; UEBERTRAG ADDIEREN   JNC     NOCARRY2    ; DABEI KANN EIN   INC     DX          ; NEUER UEBERTRAG                       ; AUFTRETENNOCARRY2:   SUB     [BP+SI],AX  ; VON DER ENTSPRECH-                       ; ENDEN ZIFFER DES                       ; DIVIDENTEN ABZIEHEN   JNC     NOCARRY3    ; WIEDER KANN EIN   INC     DX          ; UEBERTRAG ENT-                       ; STANDEN SEINNOCARRY3:   MOV     CX,DX       ; UEBERTRAG MERKEN   ADD     SI,2        ; ZEIGER FORTSCHALTEN   CMP     SI,[BX]     ; ALLE ZIFFERN DES                       ; QUOTIENTEN BEAR-   JNG     LOOPSUB     ; BEITET ?;;--------------------------------------;;                                      ;; NUN ENTSCHEIDET SICH, OB DER         ;; QUOTIENT ZU GROSS WAR:               ;;                                      ;;--------------------------------------;;   SUB     [BP+SI],CX  ; LETZTEN UEBERTRAG                       ; SUBTRAHIEREN   JNC     NOREADD;;--------------------------------------;;                                      ;; DIVISOR MUSS EINMAL AUF DEN DIVI-    ;; DENTEN AUFADDIERT WERDEN             ;;                                      ;;--------------------------------------;;   DEC     ZQUOT       ; ZIFFER DES QUO-                       ; TIENTEN VERMINDERN   MOV     SI,2        ; NEUE SCHLEIFE   MOV     CX,[BX]     ; INITIALISIEREN   SHR     CX,1   CLC                 ; UEBERTRAG LOESCHENLOOPREADD:   MOV     AX,[BX+SI]  ; ZIFFER DES QUO-                       ; TIENTEN LADEN   ADC     [BP+SI],AX  ; AUF ENTSPRECHENDE                       ; ZIFFER DES DIVI-                       ; DENTEN ADDIEREN   INC     SI          ; ZEIGER WEITER-   INC     SI          ; SCHALTEN, OHNE                       ; CARRYBIT ZU AENDERN   LOOP    LOOPREADD   MOV     WORD PTR [BP+SI],0                       ; HIER MUSS NUN 0 HIN;;--------------------------------------;;                                      ;; HAUPTSCHLEIFE FAST BEENDET: ZEIGER   ;; WIRD NOCH WEITERGESCHALTET UND DIE   ;; ZIFFER DES QUOTIENTEN EINGETRAGEN    ;;                                      ;;--------------------------------------;;NOREADD:   MOV     AX,ZQUOT   MOV     [QUOTIENT+2+DI],AX   SUB     BP,2   MOV     SI,[BX]   SUB     DI,2   JS      ENDDIV   JMP     MAINLOOP;;--------------------------------------;;                                      ;; ENDE DER DIVISION: LAENGE DES        ;; QUOTIENTEN UND DES RESTES - ER       ;; STEHT IM FELD 'DIVIDENT' - BESTIMMEN ;;                                      ;;--------------------------------------;;ENDDIV:   MOV     SI,[BX]     ; DIE LAENGE DES   MOV     DI,[2+BP]   ; QUOTIENTEN IST BIS   SUB     DI,SI       ; AUF EINE STELLE                       ; FESTGELEGT   CMP     WORD PTR [QUOTIENT+2+DI],0   JE      NOCORRQ2   ADD     DI,2NOCORRQ2:   MOV     QUOTIENT,DILOOPCHKLGTH:           ; LAENGE DER RESTES                       ; KANN NICHT VORHER-                       ; GESAGT WERDEN UND                       ; MUSS IN EINER                       ; SCHLEIFE BESTIMMT                       ; WERDEN.   CMP     WORD PTR [DIVIDENT+SI],0   JNE     FOUND   SUB     SI,2   JNZ     LOOPCHKLGTHFOUND:   MOV     DIVIDENT,SI;;--------------------------------------;;                                      ;; ERWEITERUNG RUECKGAENGIG MACHEN      ;;                                      ;;--------------------------------------;;   POP     BP   CMP     SFAKTOR,0   JE      NORESHIFT   MOV     SI,SFAKTOR   NEG     SI   PUSH    BX          ; ERSTER AUFRUF   PUSH    SI          ; VON 'SHIFT' FUER   PUSH    BX          ; DEN DIVISOR   CALL    _SSHIFT   ADD     SP,6   LEA     BX,DIVIDENT   PUSH    BX          ; ZWEITER AUFRUF VON   MOV     SI,SFAKTOR  ; 'SHIFT' FUER DEN   NEG     SI          ; REST DER DIVISION   PUSH    SI   PUSH    BX   CALL    _SSHIFT   ADD     SP,6;;--------------------------------------;;                                      ;; ERGEBNISSE UEBERTRAGEN; QUOTIENT     ;; KOMMT ZUERST DRAN UND WIRD DABEI     ;; EVENTUELL UEBERSCHRIEBEN VOM REST.   ;;                                      ;;--------------------------------------;;NORESHIFT:   MOV     CX,QUOTIENT   SHR     CX,1   INC     CX   MOV     DI,[8+BP]   LEA     SI,QUOTIENT   REP     MOVSW   MOV     CX,DIVIDENT   SHR     CX,1   INC     CX   MOV     DI,[10+BP]   LEA     SI,DIVIDENT   REP     MOVSW   XOR     AX,AXRETURN:   POP     SI   POP     DI   MOV     SP,BP   POP     BP   RET_SDIV      ENDP_TEXT      ENDS_DATA      SEGMENT   PUBLIC  TEST,SFAKTOR,ZQUOT   PUBLIC  QUOTIENT,FIRSTDIGIT,DIVIDENTTEST       DW      3 DUP(?)SFAKTOR    DW      0ZQUOT      DW      0QUOTIENT   DW      RSAINT  DUP(?)OPER1      DW      RSAINT  DUP(?)           DW      RSAINT  DUP(?)OPER2      DW      RSAINT  DUP(?)OPER3      DW      RSAINT  DUP(?)OPER4      DW      RSAINT  DUP(?)FIRSTDIGIT DW      0DIVIDENT   DW      RSAINT  DUP(?)           DW      RSAINT  DUP(?)_DATA      ENDS           END;-------------------------------------------------------------;; E N D   O F   P R O C E D U R E   DIV                       ;;-------------------------------------------------------------;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -