; Intel x86 asm implementation of rot13 using a table ; by Tim Newsome ; Compile with: nasm rot13.asm;cc -o rot13 rot13.o ; This could probably be tons faster, it's my first intel asm. (Any ; optimizations I made were for Pentium GLOBAL main SEGMENT .text ; Do fu so it can be turned into a binary or something main: .loop: ; function calls are slow ;-) mov eax, 3 ; magic number for read() xor ebx, ebx ; file handle mov ecx, buffer ; buffer to fill mov edx, 4096 ; how many bytes to read int 0x80 ; if the program doesn't work, replace ebx with a 0 cmp eax, ebx ; ebx is 0 from the filehandle (we hope) jle .done ; now eax contains the # of bytes read. .rot_buffer: mov edx, buffer; mov ecx, table .rotloop: mov ebx, [edx] ; read four bytes mov byte cl, bl ; offset into table mov byte bl, [ecx] mov byte cl, bh ; offset into table mov byte bh, [ecx] rol ebx, 16 ; swap bottom and top 2 bytes mov byte cl, bl ; offset into table mov byte bl, [ecx] mov byte cl, bh ; offset into table mov byte bh, [ecx] rol ebx, 16 ; swap bottom and top 2 bytes mov [edx], ebx .next: add edx, 4 sub eax, 4 ;inc edx ;dec eax cmp eax, 0 jg .rotloop .write: mov eax, 4 ; magic number for write() mov ebx, 1 ; file handle (stdout) mov ecx, buffer ; pointer to data sub edx, buffer ; number of bytes to write int 0x80 jmp .loop .done: mov eax, 1 ; magic number for exit xor ebx, ebx ; exit code (0) int 0x80 ; this alignment allows for faster addressing SECTION .data align=256 table: db 0 db 1 db 2 db 3 db 4 db 5 db 6 db 7 db 8 db 9 db 10 db 11 db 12 db 13 db 14 db 15 db 16 db 17 db 18 db 19 db 20 db 21 db 22 db 23 db 24 db 25 db 26 db 27 db 28 db 29 db 30 db 31 db 32 db 33 db 34 db 35 db 36 db 37 db 38 db 39 db 40 db 41 db 42 db 43 db 44 db 45 db 46 db 47 db 48 db 49 db 50 db 51 db 52 db 53 db 54 db 55 db 56 db 57 db 58 db 59 db 60 db 61 db 62 db 63 db 64 db 'N' db 79 db 80 db 81 db 82 db 83 db 84 db 85 db 86 db 87 db 88 db 89 db 'Z' db 'A' db 66 db 67 db 68 db 69 db 70 db 71 db 72 db 73 db 74 db 75 db 76 db 77 db 91 db 92 db 93 db 94 db 95 db 96 db 'n' db 111 db 112 db 113 db 114 db 115 db 116 db 117 db 118 db 119 db 120 db 121 db 'z' db 'a' db 98 db 99 db 100 db 101 db 102 db 103 db 104 db 105 db 106 db 107 db 108 db 109 db 123 db 124 db 125 db 126 db 127 db 128 db 129 db 130 db 131 db 132 db 133 db 134 db 135 db 136 db 137 db 138 db 139 db 140 db 141 db 142 db 143 db 144 db 145 db 146 db 147 db 148 db 149 db 150 db 151 db 152 db 153 db 154 db 155 db 156 db 157 db 158 db 159 db 160 db 161 db 162 db 163 db 164 db 165 db 166 db 167 db 168 db 169 db 170 db 171 db 172 db 173 db 174 db 175 db 176 db 177 db 178 db 179 db 180 db 181 db 182 db 183 db 184 db 185 db 186 db 187 db 188 db 189 db 190 db 191 db 192 db 193 db 194 db 195 db 196 db 197 db 198 db 199 db 200 db 201 db 202 db 203 db 204 db 205 db 206 db 207 db 208 db 209 db 210 db 211 db 212 db 213 db 214 db 215 db 216 db 217 db 218 db 219 db 220 db 221 db 222 db 223 db 224 db 225 db 226 db 227 db 228 db 229 db 230 db 231 db 232 db 233 db 234 db 235 db 236 db 237 db 238 db 239 db 240 db 241 db 242 db 243 db 244 db 245 db 246 db 247 db 248 db 249 db 250 db 251 db 252 db 253 db 254 db 255 SECTION .bss buffer: resb 4096 ; 4kb buffer