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

📄 mult.s

📁 SecuDe是一个由安全应用程序接口组成,对验证机制、证件处理、PEM、X.400报文处理和密钥管理提供支持。SecuDe提供DES、 RSA杂凑函数、密钥生成以及数字签名的生成和核实等多种密码机制。
💻 S
字号:
;;-------------------------------------------------------+-----;;                                                       | GMD ;;   PROC MULT                           VERSION 1.0     +-----;;                                          DATE 10.12.87      ;;                                            BY BOTT WOLFGANG ;;                                                             ;;                                                             ;;   DESCRIPTION MULTIPLIZIERT ZWEI LANGE ZAHLEN               ;;               OPERANDEN UND ERGEBNISFELDER KOENNEN GLEICH   ;;               SEIN.                                         ;;               POINTER AUF DIE OPERANDEN SIND 4 BYTE LANG.   ;;                                                             ;;   IN             DESCRIPTION                 ADR:           ;;     OP1            1. FAKTOR                   [BP] + 6     ;;     OP2            2. FAKTOR                   [BP] + 10    ;;                                                             ;;   INOUT                                                     ;;                                                             ;;   OUT                                                       ;;     ERGEBNIS       1. FAKTOR * 2. FAKTOR       [BP] + 14    ;;                                                             ;;-------------------------------------------------------------;;include asmtoken.h;;--------------------------------------;;                                      ;; BLOCKSTRUKTUR DEFINIEREN.            ;;                                      ;;--------------------------------------;;_TEXT      SEGMENT BYTE PUBLIC 'CODE'_TEXT      ENDS_DATA      SEGMENT WORD PUBLIC 'DATA'_DATA      ENDSCONST      SEGMENT WORD PUBLIC 'CONST'CONST      ENDS_BSS       SEGMENT WORD PUBLIC 'BSS'_BSS       ENDS;DGROUP     GROUP _DATA,_BSS,CONSTASSUME CS:_TEXT,DS:DGROUP,SS:DGROUP,ES:DGROUP;;--------------------------------------;;                                      ;; PROGRAMMTEXT:                        ;;                                      ;;--------------------------------------;;_TEXT      SEGMENT           PUBLIC  _MULT_MULT      PROC   FAR;;--------------------------------------;;                                      ;; ZUERST REGISTER RETTEN.              ;;                                      ;;--------------------------------------;;   PUSH    BP   MOV     BP,SP   PUSH    ES   PUSH    DI   PUSH    SI   PUSH    DS   PUSH    DS   PUSH    DS;; OPERAND1 VON FAR IN NEAR UMSPEICHERN;   POP     ES         ; REP MOVS BEFEHL   MOV     DS,[BP+8]  ; VORBEREITEN.   MOV     SI,[BP+6]  ; SOURCE = DS:SI   LEA     DI,OPER1   ; DEST   = ES:DI   MOV     CX,DS:[SI] ; COUNT  = CX   SAR     CX,1   ADD     CX,1   REP     MOVSW;; OPERAND2 VON FAR IN NEAR UMSPEICHERN;   MOV     DS,[BP+12]   MOV     SI,[BP+10]   LEA     DI,OPER2   MOV     CX,DS:[SI]   SAR     CX,1   ADD     CX,1   REP     MOVSW;; EIGNETLICHE MULTIPLIKATIION AUFRUFEN;   POP     DS   POP     ES   LEA     BX,[OPER3]   PUSH    BX   LEA     BX,[OPER2]   PUSH    BX   LEA     BX,[OPER1]   PUSH    BX   CALL _SMULT;; ERGEBNIS VON NEAR IN FAR UMSPEICHERN;   MOV     ES,[BP+16]   MOV     DI,[BP+14]   MOV     CX,OPER3   SAR     CX,1   ADD     CX,1   LEA     SI,OPER3   REP     MOVSW   ADD     SP,6   POP     SI   POP     DI   POP     ES   MOV     SP,BP   POP     BP   RET_MULT      ENDP;--------------------------------------;; EIGENTLICHES MULTIPLIKATIONSPROGRAMM.;; DIE POINTER AUF DIE OPERANDEN SIND   ;; JETZT ALLE 'NEAR'.                   ;;--------------------------------------;_SMULT     PROC    NEAR;;--------------------------------------;;                                      ;; ADRESSEN DER PARAMETER:              ;;                                      ;; OP1 :      4 + [BP]                  ;; OP2 :      6 + [BP]                  ;; ERGEBNIS : 8 + [BP]                  ;;                                      ;;--------------------------------------;;OP1      EQU  4 + [BP]OP2      EQU  6 + [BP]ERG      EQU  8 + [BP];;--------------------------------------;;                                      ;; LOKALE VARIABLEN:                    ;;                                      ;; 'DIOP1'   : EINE ZIFFER DES ERSTEN   ;;             OPERANDEN                ;; 'LGTHOP2' : LAENGE DES ZWEITEN       ;;             OPERANDEN                ;; 'MACC'     : EIN AKKUMULATORFELD, IN ;;             DEM DAS ERGEBNIS AUFGE-  ;;             BAUT WIRD                ;;                                      ;;  **** VORSICHT ****                  ;;                                      ;;  DAS ARBEITSFELD 'MACC' MUSS LANG    ;;  GENUG SEIN, UM DAS ERGEBNIS DER     ;;  MULTIPLIKATION AUFNEHMEN ZU KOENNEN.;;  DIE LAENGE IST IN DER DATEI         ;;  RSANUMBER.H DEFINIERT.              ;;                                      ;;--------------------------------------;;;--------------------------------------;;                                      ;; ZUERST REGISTER RETTEN.              ;;                                      ;;--------------------------------------;;   PUSH    BP   MOV     BP,SP   PUSH    DI   PUSH    SI;;--------------------------------------;;                                      ;; UEBERPRUEFE ZUERST, OB EIN OPERAND   ;; GLEICH NULL IST. DANN IST AUCH DAS   ;; ERGEBNIS GLEICH NULL.                ;;                                      ;;--------------------------------------;;   MOV     BX,[OP1]    ; ADRESSE VON OP1   CMP     WORD PTR [BX],0   JE      ZERO        ; LAENGE = 0 ?   MOV     AX,[2+BX]   ; NIEDERWERTIGSTE   MOV     DIOP1,AX    ; ZIFFER VON OP1                       ; VORMERKEN   MOV     BX,[OP2]    ; ADRESSE VON OP2   CMP     WORD PTR [BX],0   JE      ZERO        ; LAENGE = 0 ?   MOV     AX,[BX]     ; LAENGE VON OP2   MOV     LGTHOP2,AX  ; VORMERKEN   JMP     MULTZERO:   MOV     BX,[ERG]   MOV     WORD PTR [BX],0   JMP     RETURN;;--------------------------------------;;                                      ;; ERSTE SCHLEIFE. DER INHALT DES       ;; AKKUMULATORS MUSS NOCH NICHT BE-     ;; RUECKSICHTIGT WERDEN.                ;;                                      ;;--------------------------------------;;MULT:   MOV     DI,2   XOR     CX,CX       ; UEBERTRAG                       ; LOESCHENLOOP1:   MOV     AX,[BX+DI]  ; ZIFFER VON OP2   MUL     DIOP1       ; MIT AKTUELLER                       ; ZIFFER VON OP1                       ; MULTIPLIZIEREN   ADD     AX,CX       ; UEBERTRAG                       ; ADDIEREN.   JNC     NOINC1      ; HIERBEI KANN   INC     DX          ; ERNEUT EIN                       ; UEBERTRAG                       ; AUFTRETEN.NOINC1:   MOV     [MACC+DI],AX ; ERG. SPEICHERN   MOV     CX,DX       ; UEBERTRAG MERKEN   ADD     DI,2        ; INC INDEX   CMP     DI,LGTHOP2  ; ENDE VON OP2   JNG     LOOP1       ; ERREICHT ?   MOV     [MACC+DI],CX ; LETZTEN UEBERTRAG                       ; NOCH EINTRAGEN;;--------------------------------------;;                                      ;; EIGENTLICHE MULTIPLIKATION MIT       ;; BERUECKSICHTIGUNG DES AKKUMULATOR-   ;; INHALTES.                            ;;                                      ;;--------------------------------------;;;;--------------------------------------;;                                      ;; AEUSSERE SCHLEIFE UEBER DIE ZIFFERN  ;; DES ERSTEN OPERANDEN.                ;;                                      ;;--------------------------------------;;   MOV     SI,4LOOPO:   MOV     BX,[OP1]    ; ALLE ZIFFERN VON   CMP     SI,[BX]     ; OP1 ABGEARBEITET ?   JG      ENDMUL      ; MULTIPLIKATION                       ; BEENDET   MOV     AX,[BX+SI]  ; AKTUELLE ZIFFER   MOV     DIOP1,AX    ; VON OP1 LADEN   MOV     DI,2        ; INDEX UEBER OP2                       ; INITIALISIEREN   XOR     CX,CX       ; UEBERTRAG                       ; LOESCHEN;;--------------------------------------;;                                      ;; INNERE SCHLEIFE:                     ;; MULTIPLIKATION VON OP1[SI] MIT OP2.  ;;                                      ;;--------------------------------------;;LOOPI:   MOV     BX,[OP2]    ; ZIFFER VON OP2   MOV     AX,[BX+DI]  ; LADEN UND MIT   MUL     DIOP1       ; AKTUELLER ZIFFER                       ; VON OP1                       ; MULTIPLIZIEREN   ADD     AX,CX       ; UEBERTRAG ADDIEREN   JNC     NOINC2      ; DABEI KANN EIN   INC     DX          ; NEUER UEBERTRAG                       ; AUFTRETENNOINC2:   LEA     BX,[MACC-2+SI]   ADD     AX,[BX+DI]  ; BISTHERIGEN AKKU-                       ; MULATORINHALT                       ; ADDIEREN   JNC     NOINC3      ; DABEI KANN ERNEUT   INC     DX          ; EIN UEBERTRAG                       ; ENTSTEHENNOINC3:   MOV     [BX+DI],AX  ; ERGEBNIS IM AKKU-                       ; MULATOR SPEICHERN   MOV     CX,DX       ; UEBERTRAG MERKEN   ADD     DI,2        ; INDEX FORTSCHALTEN   CMP     DI,LGTHOP2  ; ALLE ZIFFERN VON                       ; OP2 BEARBEITET ?   JNG     LOOPI;;--------------------------------------;;                                      ;; ENDE DER INNEREN SCHLEIFE.           ;; ES KANN NOCH EIN UEBERTRAG VORHAN-   ;; DEN SEIN:                            ;;                                      ;;--------------------------------------;;   MOV     [BX+DI],CX  ; UEBERTRAG                       ; SPEICHERN.                       ; AN DIESER                       ; STELLE STEHT                       ; NOCH NICHTS                       ; IM AKKUMULATOR   ADD     SI,2        ; INDEX FUER OP1                       ; WEITERSCHALTEN   JMP     LOOPO;;--------------------------------------;;                                      ;; ENDE DER AEUSSEREN SCHLEIFE.         ;; ES MUSS NUN NOCH DIE LAENGE DES      ;; ERGEBNISSES BESTIMMT WERDEN UND      ;; DAS ERGEBNIS INS ZIELFELD UEBER-     ;; TRAGEN WERDEN.                       ;;                                      ;;--------------------------------------;;ENDMUL:   LEA     BX,[MACC-4+DI]   CMP     WORD PTR [BX+SI],0                       ; NUR DIESE                       ; ZIFFER KOENNTE                       ; NULL SEIN   JNE     NOCORR   SUB     SI,2NOCORR:   ADD     SI,DI   MOV     CX,SI   SUB     SI,4   MOV     MACC,SI   SAR     CX,1        ; 'REP MOVS'-BEFEHL   DEC     CX          ; VORBEREITEN   MOV     DI,[ERG]   LEA     SI,MACC   REP     MOVSWRETURN:   POP     SI   POP     DI   MOV     SP,BP   POP     BP   RET_SMULT     ENDP_TEXT      ENDS;;--------------------------------------;;                                      ;; VARIABLENFELDER                      ;;                                      ;;--------------------------------------;;_DATA      SEGMENT           PUBLIC  LGTHOP2,DIOP1,MACCLGTHOP2    DW      0DIOP1      DW      0MACC       DW      RSAINT DUP(?)           DW      RSAINT DUP(?)OPER1      DW      RSAINT DUP(?)OPER2      DW      RSAINT DUP(?)OPER3      DW      RSAINT DUP(?)           DW      RSAINT DUP(?)_DATA      ENDS           END

⌨️ 快捷键说明

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