loop: shr cx, 1 or bx, cx test cx, cx jnz. len2: cmp bp, 255 Length must be no more than 255 mov si, errmsg.lmax jbe mkmask jmp error Make a bitmask in which BP fits (for generating random numbers in the right range) mkmask: mov cx, bp mov bx, cx. ![]() ![]() cntok: cmp bp, 4 Length must be at least four mov si, errmsg.len jae. argok: mov cx, CX = count mov bp, BP = length test cx, cx Sanity check (count must not be zero) mov si, errmsg.cnt jnz. hdone: mov, bp Store random seed mov, dx mov al, ah Restore the next character jmp doarg.chr Ĝheck the arguments check: dec byte Were all arguments used? jz. rcl dx, 1 shl bp, 1 rcl dx, 1 or dl, al Finally, add in the hexadecimal digit jmp. hdone If invalid, we're done shl bp, 1 Make room for it in the state rcl dx, 1 Because it's a 32-bit value, shl bp, 1 which is stored in two 16-bit registers, rcl dx, 1 we have to shift and rotate the bits shl bp, 1 one by one. hex: lodsb Get (potential) hex digit mov ah, al Keep it around call hexdgt Parse hexadecimal digit jnc. s_ok: xor bp, bp DX:BP = RNG state xor dx, dx. s: lodsb /S: should be followed by '=' cmp al, '=' je. e: inc byte /E: turn on exclusion jmp doarg. done : mov ax, bp Write the number into memory stosw mov al, bl Restore the character (next argument) jmp doarg.chr opt: lodsb Get option character or al, 32 Make lowercase cmp al, ' e ' E? je. done If not, done with number add bp, bp Multiply accumulator by 10 mov dx, bp add bp, bp add bp, bp add bp, dx xor ah, ah Then add the digit add bp, ax lodsb Read next digit jmp. chr: mov bl, al Keep the character in case not a digit sub al, ' 0 ' Make into digit cmp al, 9 Valid digit? ja. arg: cmp al, ' ' Space? je doarg Then get next character cmp al, '/' Option? je opt dec byte Otherwise, it's an argument jnz rdnum Read a number if we still need one jmp usage Otherwise, incorrect arguments rdnum: xor bp, bp Place to keep number. arg If not, there are arguments left jmp check If so, we're done. text org 100 h mov ah, gettim Seed the RNG using the system time int 21 h (in case of no argument) mov, cx mov, dx mov si, arg See if we have any arguments lodsb test al, al jnz hasarg jmp usage If not, print usage string Parse the command line arguments hasarg: xor bx, bx We do, zero-terminate the string xchg al, bl mov, al mov di, count Place to start reading arguments doarg: lodsb Get argument byte. The X register is loaded with the password's length (in this case, 20 characters, not counting the null terminator.)Ĭpu 8086 bits 16 MS-DOS syscalls gettim: equ 2 Ch Get system time write: equ 40 h Write to file exit: equ 4 Ch Exit with return code MS-DOS process data arg: equ 80 h Command line argument (length + string) ěIOS calls conout: equ 0 Eh Write character to console vstate: equ 0 Fh Get current video state section. The screen can only display colored pixels, and the top 4 bytes are masked off, so this is just a visual aid to show the process in action. Unfortunately, easy6502 cannot display text, but it does have a random number generator, so this example merely contains the logic for generating the password itself. capital eye, lowercase ell, the digit one.You may also allow the user to specify a seed value, and give the option of excluding visually similar characters.įor example: Il1 O0 5S 2Z where the characters are: The program should implement a help option or button which should describe the program and options when invoked. The randomness should be from a system source or library. The passwords should be displayed or written to a file, one per line. The user must be able to specify the password length and the number of passwords to generate. The generated password(s) must include at least one (of each of the four groups): ![]() ![]() Other printable characters: above character list excludes white-space, backslash and grave) You are encouraged to solve this task according to the task description, using any language you may know.Ĭreate a password generation program which will generate passwords containing random ASCII characters from the following groups:
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |