68K GAS encrypt.a68 page 1 Encrypt 1 .TITLE "Encrypt" 2 .PSIZE 35,200 3 4 /***************************************************************** 5 6 FILENAME: Encrypt.a68 7 AUTHOR (STUDENT NAME): Marc Tessier 8 STUDENT NUMBER: 040576114(MT) 9 E-MAIL ADDRESS: tess0072@algonquincollege.com 10 LAB SECTION: 313 11 ASSIGNMENT NUMBER AND NAME: Assignment 3 12 PROFESSOR'S NAME: Robert E. Allison 13 Purpose: Design a basic cryptography program 14 15 *****************************************************************/ 16 17 /************ INCLUDES ******************************************/ 18 21 .LIST 22 23 /************ CONSTANT DATA *************************************/ 24 25 .TEXT 1 26 27 /************* VARIABLE DATA ************************************/ 28 29 .DATA 30 31 /************* PROCESS INSTRUCTIONS *****************************/ 32 33 .TEXT 0 34 .GLOBAL Encrypt 68K GAS encrypt.a68 page 2 Encrypt 35 36 /************* START ********************************************/ 37 38 /************* STACK DETAILS ************************************* 39 40 SP + 24 = Key 41 SP + 20 = Cleartext 42 SP + 16 = Cyphertext 43 SP + 12 = JSR [Address] 44 SP + 8 = Movem A1 45 SP + 4 = Movem A2 46 SP + 0 = Longword for A6 47 SP - 4 = key String address 48 SP - 8 = Cleartext String address 49 50 *****************************************************************/ 51 52 /************* HOW-TO-USE **************************************** 53 54 ... 55 PEA Key 56 PEA Cleartext 57 PEA Cyphertext 58 JSR StrCat 59 ADD.L #12,SP 60 ... 61 62 Result: A0 = Encrypted 63 64 *****************************************************************/ 65 66 Encrypt: 68K GAS encrypt.a68 page 3 Encrypt 67 0000 48E7 0060 MOVEM.L A1-A2,-(sp) 68 0004 4E56 FFF8 LINK A6,#-8 69 70 0008 226E 0018 MOVEA.L (24,A6),A1 | Store Key A1 71 000c 2D49 FFFC MOVE.L A1,(-4,A6) | Store localy 72 0010 246E 0014 MOVEA.L (20,A6),A2 | Store ClearText A2 73 0014 2D4A FFF8 MOVE.L A2,(-8,A6) | Store localy 74 0018 204A MOVE.L A2,A0 75 001a 4EB9 0000 JSR StrLen | Get length of ClearText 75 0000 76 0020 2200 MOVE.L D0,D1 | Store length of cleartext in D1 77 0022 2049 MOVE.L A1,A0 78 0024 4EB9 0000 JSR StrLen | Store length of key in D0 78 0000 79 002a 206E 0018 MOVEA.L (24,A6),A0 | Store Key A0 80 002e 4EBA 0034 JSR LengthExtend | Extended Key to length of cleartext 81 0032 206E 0010 MOVEA.L (16,A6),A0 | Store CypherText A0 82 0036 226E 0018 MOVEA.L (24,A6),A1 | Store Key A1 83 003a 246E 0014 MOVEA.L (20,A6),A2 | Store ClearText A2 84 85 EncryptLoop: 86 003e 0C12 0000 CMP.B #0x00,(A2) | Are we at the end of the cleartext 87 0042 6700 0046 BEQ.W EncryptEnd 88 0046 1012 MOVE.B (A2),D0 | Move this char of cleartext into D0 89 0048 E918 ROL.B #4,D0 | Rotate 4 bits 90 004a 1211 MOVE.B (A1),D1 | Move this char of length-extended key into D1 91 004c B300 EOR.B D1,D0 | Exclusive or Key char with Rotated Cleartext char 92 004e 123C 0002 MOVE.B #2,D1 93 0052 4EB9 0000 JSR HexToAscii | Convert Cypher to printable characters 93 0000 94 0058 5289 ADD.L #1,A1 | Increment 95 005a 14BC 0000 MOVE.B #0X00,(A2) | Hide cleartext 68K GAS encrypt.a68 page 4 Encrypt 96 005e 528A ADD.L #1,A2 97 0060 4EFA FFDC JMP EncryptLoop 98 99 LengthExtend: 100 0064 B200 CMP.B D0,D1 101 0066 6C00 0020 BGE.W LengthExtendEnd 102 006a 2F08 MOVE.L A0,-(SP) 103 006c 2F08 MOVE.L A0,-(SP) 104 006e 3F3C 0080 MOVE.W #128,-(SP) 105 0072 4EB9 0000 JSR StrCat 105 0000 106 0078 DFFC 0000 ADD.L #10,SP 106 000A 107 007e 4EB9 0000 JSR StrLen 107 0000 108 0084 4EFA FFDE JMP LengthExtend 109 110 LengthExtendEnd: 111 0088 4E75 RTS 112 113 EncryptEnd: 114 008a 4E5E UNLK A6 115 008c 4CDF 0600 MOVEM.L (SP)+,A1-A2 116 0090 4E75 RTS 117 68K GAS encrypt.a68 page 5 Encrypt DEFINED SYMBOLS encrypt.a68:99 e0:00000064 LengthExtend encrypt.a68:85 e0:0000003e EncryptLoop encrypt.a68:113 e0:0000008a EncryptEnd encrypt.a68:110 e0:00000088 LengthExtendEnd e0:00000000 .text e1:00000092 .data e2:00000092 .bss encrypt.a68:66 e0:00000000 Encrypt UNDEFINED SYMBOLS StrLen HexToAscii StrCat