{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,10,12]],"date-time":"2025-10-12T04:29:26Z","timestamp":1760243366395,"version":"build-2065373602"},"reference-count":77,"publisher":"MDPI AG","issue":"3","license":[{"start":{"date-parts":[[2014,10,1]],"date-time":"2014-10-01T00:00:00Z","timestamp":1412121600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Computers"],"abstract":"<jats:p>This paper describes a new non-optimizing compiler for the ECMA-55 Minimal BASIC language that generates x86-64 assembler code for use on the x86-64 Linux\u00ae [1] 3.x platform. The compiler was implemented in C99 and the generated assembly language is in the AT&amp;T style and is for the GNU assembler. The generated code is stand-alone and does not require any shared libraries to run, since it makes system calls to the Linux\u00ae kernel directly. The floating point math uses the Single Instruction Multiple Data (SIMD) instructions and the compiler fully implements all of the floating point exception handling required by the ECMA-55 standard. This compiler is designed to be small, simple, and easy to understand for people who want to study a compiler that actually implements full error checking on floating point on x86-64 CPUs even if those people have little programming experience. The generated assembly code is also designed to be simple to read.<\/jats:p>","DOI":"10.3390\/computers3030069","type":"journal-article","created":{"date-parts":[[2014,10,2]],"date-time":"2014-10-02T10:31:31Z","timestamp":1412245891000},"page":"69-116","update-policy":"https:\/\/doi.org\/10.3390\/mdpi_crossmark_policy","source":"Crossref","is-referenced-by-count":0,"title":["An ECMA-55 Minimal BASIC Compiler for x86-64 Linux\u00ae"],"prefix":"10.3390","volume":"3","author":[{"given":"John","family":"Ham","sequence":"first","affiliation":[{"name":"Burapha University, Faculty of Informatics, 169 Bangsaen Road, Tambon Saensuk, Amphur Muang,Changwat Chonburi 20131, Thailand"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"1968","published-online":{"date-parts":[[2014,10,1]]},"reference":[{"key":"ref_1","unstructured":"Torvalds, L. The Linux\u00ae Kernel. Available online: http:\/\/www.kernel.org\/."},{"key":"ref_2","unstructured":"BASIC A Manual for BASIC, the elementary algebraic language designed for use with the Dartmouth Time Sharing System, 1964"},{"key":"ref_3","doi-asserted-by":"crossref","unstructured":"Kemeny, J.G., Kurtz, T.E., and Cochran, D. (1968). BASIC A Manual for BASIC, the Elementary Algebraic Language Designed for Use with the Dartmouth Time Sharing System, Dartmouth College Compoutation Center. [4th ed.].","DOI":"10.1126\/science.162.3850.223"},{"key":"ref_4","doi-asserted-by":"crossref","first-page":"103","DOI":"10.1145\/960118.808376","article-title":"BASIC","volume":"13","author":"Kurtz","year":"1978","journal-title":"ACM SIGPLAN Not."},{"key":"ref_5","unstructured":"Isaacs, G.L. (1972). Interdialect Translatability of the BASIC Programming Language, Research and Development Division, American College Testing Program."},{"key":"ref_6","doi-asserted-by":"crossref","first-page":"175","DOI":"10.1145\/360032.360038","article-title":"A Comparative Evaluation of Versions of BASIC","volume":"19","author":"Lientz","year":"1976","journal-title":"Commun. ACM"},{"key":"ref_7","doi-asserted-by":"crossref","first-page":"1","DOI":"10.1145\/988026.988027","article-title":"Graphics in the BASIC language","volume":"8","author":"Luehrmann","year":"1974","journal-title":"ACM SIGGRAPH Comput. Graph."},{"key":"ref_8","unstructured":"Anderson, R.E. ANSI BASIC The proposed standard. Proceedings of the ACM\u201982 Conference."},{"key":"ref_9","doi-asserted-by":"crossref","first-page":"221","DOI":"10.1145\/965880.965883","article-title":"Toward standardization of BASIC","volume":"5","author":"Kurtz","year":"1971","journal-title":"ACM SIGCUE Outlook"},{"key":"ref_10","doi-asserted-by":"crossref","unstructured":"Dijkstra, E.W. (1982). Selected Writings on Computing: A Personal Perspective, Springer-Verlag.","DOI":"10.1007\/978-1-4612-5695-3"},{"key":"ref_11","unstructured":"Dijkstra, E.W. The threats to computing science. circulated privately."},{"key":"ref_12","unstructured":"Brin, D. Why Johnny Can\u2019t Code. Salon. Sep. 14, 2006. Available online: http:\/\/www.salon.com\/2006\/09\/14\/basic_2\/."},{"key":"ref_13","unstructured":"Raji, V. Microsoft\u2122 Small Basic. Available online: http:\/\/smallbasic.com\/."},{"key":"ref_14","unstructured":"Larsen, I. BASIC-256. Available online: http:\/\/www.basic256.org\/."},{"key":"ref_15","doi-asserted-by":"crossref","unstructured":"Cugini, J.V., Bowden, J.S., and Skall, M.W. (1980). NBS Minimal BASIC Test Programs\u2014Version 2, User\u2019s Manual, Volume 1\u2014Documentation, Government Printing.","DOI":"10.6028\/NBS.SP.500-70v1"},{"key":"ref_16","doi-asserted-by":"crossref","unstructured":"Cugini, J.V., Bowden, J.S., and Skall, M.W. (1980). NBS Minimal BASIC Test Programs\u2014Version 2, User\u2019s Manual, Volume 2\u2014Source Listings and Sample Output, Government Printing.","DOI":"10.6028\/NBS.SP.500-70v1"},{"key":"ref_17","unstructured":"Kurtz, T.E. (1981). History of Programming Languages, ACM."},{"key":"ref_18","unstructured":"Liguori, A. GLBCC, The GNU\/Liberty Compiler Collection. Available online: http:\/\/lbpp.sourceforge.net\/."},{"key":"ref_19","unstructured":"Victor, A. FreeBASIC Programming Language. Available online: http:\/\/www.freebasic.net\/."},{"key":"ref_20","unstructured":"Kemeny, J.G., and Kurtz, T.E. TrueBASIC. Available online: http:\/\/www.truebasic.com\/faq#11."},{"key":"ref_21","unstructured":"Gundel, C. Liberty BASIC. Available online: http:\/\/www.libertybasic.com\/faq.html#macOrLinux."},{"key":"ref_22","unstructured":"Laboureur, F., and Harter, T. PureBasic. Available online: http:\/\/www.purebasic.com\/."},{"key":"ref_23","unstructured":"Intel\u00ae Extended Memory 64 Technology Software Developer\u2019s Guide, Revision 1.1, 2004"},{"key":"ref_24","unstructured":"Intel\u00ae64 and IA-32 Architectures Software Developer\u2019s Manual, 2014. Order Number: 325462-050U"},{"key":"ref_25","unstructured":"AMD64 Architecture Programmer\u2019s Manual Volume 1: Application Programming, 2012; Publication No. 24592, Revision 3.19"},{"key":"ref_26","unstructured":"GCC, The GNU Compiler Collection. Available online: http:\/\/gcc.gnu.org\/."},{"key":"ref_27","unstructured":"The LLVM Compiler Infrastructure. Available online: http:\/\/llvm.org\/."},{"key":"ref_28","unstructured":"Free Pascal. Available online: http:\/\/www.freepascal.org\/."},{"key":"ref_29","unstructured":"Preud\u2019homme, T. The Tiny C Compiler. Available online: http:\/\/bellard.org\/tcc\/."},{"key":"ref_30","unstructured":"Portable C Compiler. Available online: http:\/\/pcc.ludd.ltu.se\/."},{"key":"ref_31","unstructured":"(1978). Eurpean Computer Manufacturers Association."},{"key":"ref_32","unstructured":"Anvin, H.P. Netwide Assembler. Available online: http:\/\/nasm.us\/."},{"key":"ref_33","unstructured":"Clifton, N. GNU Binutils. Available online: http:\/\/www.gnu.org\/software\/binutils\/."},{"key":"ref_34","unstructured":"Matz, M., Hubi\u010dka, J., Jaeger, A., and Mitchell, M. (2013). System V Application Binary Interface AMD64 Architecture Processor Supplement Draft Version 0.99.6."},{"key":"ref_35","unstructured":"Turbo Debugger\u00ae Version 2.0 User\u2019s Guide, 1990"},{"key":"ref_36","unstructured":"Alves, P., Brobecker, J., Evans, D., Kratochvil, J., Tromey, T., and Zaretskii, E. GDB: The GNU Project Debugger. Available online: http:\/\/www.gnu.org\/software\/gdb\/."},{"key":"ref_37","unstructured":"Saha, S. Data Display Debugger. Available online: http:\/\/www.gnu.org\/software\/ddd\/."},{"key":"ref_38","unstructured":"DWARF Debugging Standard. Available online: http:\/\/www.dwarfstd.org\/."},{"key":"ref_39","unstructured":"Teran, E. edb debugger. Available online: https:\/\/code.google.com\/p\/edb-debugger\/."},{"key":"ref_40","doi-asserted-by":"crossref","first-page":"139","DOI":"10.1145\/227699.227701","article-title":"Handling Floating-point Exceptions in Numeric Programs","volume":"18","author":"Hauser","year":"1996","journal-title":"ACM Trans. Program. Lang. Syst."},{"key":"ref_41","unstructured":"Seyfarth, R. (2012). Introduction to 64 Bit Intel Assembly Language Programming for Linux, CreateSpace Independent Publishing Platform. [2nd ed.]."},{"key":"ref_42","unstructured":"(1985). Technical Report, Microprocessor Standards Committee of the IEEE Computer Society, IEEE Computer Society."},{"key":"ref_43","unstructured":"List of Intel Core 2 microprocessors. Available online: http:\/\/en.wikipedia.org\/wiki\/List_of_Intel_Core_2_microprocessors."},{"key":"ref_44","unstructured":"Intel\u00ae SSE4 Programming Reference, 2007. Reference Number: D91561-001"},{"key":"ref_45","doi-asserted-by":"crossref","first-page":"257","DOI":"10.1090\/S0025-5718-1966-0195235-8","article-title":"Minimax Polynomial Approximation","volume":"20","author":"Denman","year":"1966","journal-title":"Math. Comput."},{"key":"ref_46","unstructured":"SIAM Series in Applied Mathematics, R. E. (1978). Computer Approximations, Krieger Pub. Co."},{"key":"ref_47","unstructured":"Green, R. Faster Math Functions. Proceedings of Game Developers Conference."},{"key":"ref_48","doi-asserted-by":"crossref","first-page":"5","DOI":"10.1145\/103162.103163","article-title":"What Every Computer Scientist Should Know About Floating-point Arithmetic","volume":"23","author":"Goldberg","year":"1991","journal-title":"ACM Comput. Surv."},{"key":"ref_49","unstructured":"Brent, R.P. (2006, January 10\u201312). Fast algorithms for high-precision computation of elementary functions. Proceedings of 7th Conference on Real Numbers and Computers (RNC 7), Nancy, France."},{"key":"ref_50","unstructured":"Freely Distributable LIBM C math library verison 5.3. Available online: http:\/\/www.validlab.com\/software\/."},{"key":"ref_51","doi-asserted-by":"crossref","first-page":"25","DOI":"10.1007\/s00450-010-0108-2","article-title":"Efficient evaluation methods of elementary functions suitable for SIMD computation","volume":"25","author":"Shibata","year":"2010","journal-title":"Comput. Sci.-Res. Dev."},{"key":"ref_52","unstructured":"Shibata, N. SLEEF version 2.80. Available online: http:\/\/shibatch.sourceforge.net\/."},{"key":"ref_53","unstructured":"Robert, J., and Jenkins, J. ISAAC. Proceedings of the Third International Workshop on Fast Software Encryption."},{"key":"ref_54","unstructured":"Robert, J., and Jenkins, J. ISAAC: A fast cryptographic random number generator. Available online: http:\/\/burtleburtle.net\/bob\/rand\/isaacafa.html."},{"key":"ref_55","unstructured":"Arnold, R.S., Brown, M., Eggert, P., Jelinek, J., Kuvyrkov, M., McGrath, R., Myers, J., O\u2019Donell, C., Oliva, A., and Schwab, A. The GNU C Library. Available online: http:\/\/www.gnu.org\/software\/libc\/."},{"key":"ref_56","doi-asserted-by":"crossref","first-page":"92","DOI":"10.1145\/93548.93557","article-title":"How to Read Floating Point Numbers Accurately","volume":"25","author":"Clinger","year":"1990","journal-title":"SIGPLAN Not."},{"key":"ref_57","doi-asserted-by":"crossref","unstructured":"Guy, L., Steele, J., and White, J.L. How to Print Floating-point Numbers Accurately. Proceedings of the ACM SIGPLAN 1990 Conference on Programming Language Design and Implementation.","DOI":"10.1145\/93542.93559"},{"key":"ref_58","doi-asserted-by":"crossref","unstructured":"Burger, R.G., and Dybvig, K.R. Printing Floating-point Numbers Quickly and Accurately. Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language Design and Implementation.","DOI":"10.1145\/231379.231397"},{"key":"ref_59","unstructured":"Gay, D.M. (1990). Correctly rounded binary-decimal and decimal-binary conversions. Numerical Analysis Manuscript 90\u201310."},{"key":"ref_60","unstructured":"Gay, D.M. dtoa.c & g_fmt.c. Available online: http:\/\/netlib.org\/fp\/."},{"key":"ref_61","doi-asserted-by":"crossref","first-page":"26","DOI":"10.1145\/24686.24687","article-title":"The Design of the REXX Language","volume":"22","author":"Cowlishaw","year":"1987","journal-title":"SIGPLAN Not."},{"key":"ref_62","unstructured":"Henry, S., and Warren, J. (2013). Hacker\u2019s Delight, Second Edition, Addison-Wesley\/Pearson Education, Inc."},{"key":"ref_63","doi-asserted-by":"crossref","first-page":"443","DOI":"10.1145\/364995.365000","article-title":"Peephole Optimization","volume":"8","author":"McKeeman","year":"1965","journal-title":"Commun. ACM"},{"key":"ref_64","unstructured":"Valgrind\u2019s Memcheck. Available online: http:\/\/www.valgrind.org\/."},{"key":"ref_65","unstructured":"Serebryany, K., Bruening, D., Potapenko, A., and Vyukov, D. AddressSanitizer: A Fast Address Sanity Checker. Proceedings of the 2012 USENIX Conference on Annual Technical Conference (USENIX ATC\u201912)."},{"key":"ref_66","unstructured":"ISO\/IEC G14\/N1124 Comittee Draft of ISO\/IEC 9899:TC2, 2005"},{"key":"ref_67","unstructured":"Intel\u00ae Xeon Phi\u2122 Coprocessor Instruction Set Architecture Reference Manual, 2012. Reference Number: 327364-001"},{"key":"ref_68","unstructured":"Fraser, C.W., and Hanson, D.R. (1995). A Retargetable C Compiler: Design and Implementation, Addison-Wesley Longman Publishing Co., Inc."},{"key":"ref_69","unstructured":"Aho, A.V., Sethi, R., and Ullman, J.D. (1986). Compilers Principles, Techniques, and Tools, Addison-Wesley Longman Publishing Co., Inc."},{"key":"ref_70","doi-asserted-by":"crossref","first-page":"50","DOI":"10.1145\/988216.988221","article-title":"The New ANSI BASIC Standard","volume":"18","author":"Guntheroth","year":"1983","journal-title":"SIGPLAN Not."},{"key":"ref_71","unstructured":"(1986). STANDARD ECMA-116 BASIC., Eurpean Computer Manufacturers Association."},{"key":"ref_72","unstructured":"Intel\u00ae 64 and IA-32 Architectures Optimization Reference Manual, 2014. Order Number: 248966-029"},{"key":"ref_73","unstructured":"Intel\u00ae Avanced Vector Extensions Programming Reference, 2011. Reference Number: 319433-011"},{"key":"ref_74","unstructured":"Firasta, N., Buxton, M., Jinbo, P., Nasri, K., and Kuo, S. (2008). Intel\u00ae AVX: New Frontiers in Performance Improvements and Energy Efficiency. (White Paper)."},{"key":"ref_75","unstructured":"Felker, R. The musl C standard library. Available online: http:\/\/www.musl-libc.org\/."},{"key":"ref_76","doi-asserted-by":"crossref","first-page":"43","DOI":"10.1093\/comjnl\/19.1.43","article-title":"A synthetic benchmark","volume":"19","author":"Curnow","year":"1976","journal-title":"Comput. J."},{"key":"ref_77","unstructured":"GNU General Public License. Available online: http:\/\/www.gnu.org\/licenses\/gpl-2.0.html."}],"container-title":["Computers"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.mdpi.com\/2073-431X\/3\/3\/69\/pdf","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,10,11]],"date-time":"2025-10-11T21:16:37Z","timestamp":1760217397000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.mdpi.com\/2073-431X\/3\/3\/69"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2014,10,1]]},"references-count":77,"journal-issue":{"issue":"3","published-online":{"date-parts":[[2014,9]]}},"alternative-id":["computers3030069"],"URL":"https:\/\/doi.org\/10.3390\/computers3030069","relation":{},"ISSN":["2073-431X"],"issn-type":[{"type":"electronic","value":"2073-431X"}],"subject":[],"published":{"date-parts":[[2014,10,1]]}}}