An assembler or machine program for a given architecture ======================================================== Write an assembler, autocode or a machine code program for a chosen architecture (the architecture and the algorithm to implement will be given separately). Run this program in the emulator. Answer the following questions and carry out the following tasks: 1. Write and assembler or a machine code program for a given algorithm. If a program is written in machine code, provide the program in octal or hex, with instruction and operand mnemonics provided in comments. Use symbolic labels for data areas and control transfer locations. Comment *each* line of the code explaining what this line does. 2. Write and introductory comment explaining what the program does, what algorithm is implemented and what are the peculiarities of implementation, what are its inputs and outputs. 3. Run the program in the emulator. Document all steps and commands necessary to run the program. The program must run on Vilnius University Linux computers, the current LTS Linux Mint, Debian or Ubuntu systems (in at least one such system). 4. Document the use of the program, the location of the input data, the formats of the input files, the formats of the output files (for the emulator). If some inputs or outputs are binary (e.g. magnetic tape, drum or HDD dumps), describe or provide tools to inspect those data and convert them to a human-readable text form. All tools MUST be Free/Libre Open Source Software (F/LOSS). Proprietary software solutions are *not* accepted. 5. Write a short report (README) explaining your experiments and making it straightforward to reproduce your run. Describe all prerequisites (external packages) necessary to run you program. Provide example commands, scripts, command histories and/or screen shots for your runs. Make sure your computation can be reproduced easily, preferably in an automatic way (using a short simple shell script or Makefile). 6. Commit all your files to a version control system (Subversion, Git, Mercurial or RCS). When submitting your assignment, provide a single archive (.zip, .7z, .tgz, .tbz or .txz file with appropriate format) with all your experiment files, program source code, compiled, assembled, linked code, emulator inputs and outputs. Provide your working copy *and*, if the repository is not publicly accessible, the repository itself (with only this one assignment) in the archive. Group files into appropriate directories so that they are easy to find. Give reasonable, easy-to-recognise (not cryptic) names for you files. If special coding (e.g. MD5 hashes or UUIDs) are used for file names for technical reasons, explain that use in the README file. RAR files are *not* accepted! 7. Use version control throughout the work. Commit and explain in the log message every step of you investigation. Write meaningful, accurate log message (full sentences with decent wording and punctuation). Your repository must be accessible during the grading – it must be public on some server visible on the internet (your private server, Gitlab, Github, Bitbucket, SourceForge) or the repository must be provided in the archive in a separate directory. The emulator itself should not be included if it can be obtained freely (as F/LOSS software). If it was compiled or configured in some special way, however, this must be described. 8. Provide a clean working copy for your project: there should be no uncommitted changes, no "unknown" files, the working copy must be in the latest revision of the trunk/master that contains the final result and is meant for grading . 9. Discuss the efficiency of your program. What is the size/speed tradeoff in your design? In other words, can you make your program smaller (using less memory) at the expense of its speed, or faster but larger? What are the real timings of your program run (always provide exact description of your hardware, operating system and the emulator, with exact versions, when reporting timings)? How much slower/faster is you program than the original computer with this architecture (if the physical architecture is not available, provide a theoretical estimate)? 10. Make sure you cite *all* relevant sources of information that you have used in your work. At least two sources must be among the cited ones: the description of the architecture that you are investigating and the description of the algorithm that you are implementing. The sources must be cited using Harvard reference style (University of Wolverhampton, 2022). Citations must be in the text and the full bibliography of the sources must be provided at the end of your report (that could be a README file). Wikipedia (Wikipedia, 2023) are permitted of the articles are high quality, informative and to the point (most of them are). If ChatGPT or other Large Language Models are used, they MUST be cited as sources, with publicly available URL, access date and time, tool version and the full prompt. References: University of Wolverhampton (2022) Harvard referencing (Cite them right): the basics. 2nd edition. URL: https://www.wlv.ac.uk/lib/media/departments/lis/skills/study-guides/LS134-Harvard-Quick-Guide.pdf Wikipedia (2024) Wikipedia. URL: https://en.wikipedia.org/wiki/Wikipedia [accessed 2024-11-04T09:16+02:00, permalink https://en.wikipedia.org/w/index.php?title=Wikipedia&oldid=1254652936]