1 //: SubX mostly deals with instructions operating on 32-bit operands, but we 2 //: still need to deal with raw bytes for strings and so on. 3 4 //: Unfortunately the register encodings when dealing with bytes are a mess. 5 //: We need a special case for them. 6 :(code) 7 string rname_8bit(uint8_t r) { 8 switch (r) { 9 case 0: return "AL"; // lowest byte of EAX 10 case 1: return "CL"; // lowest byte of ECX 11 case 2: return "DL"; // lowest byte of EDX 12 case 3: return "BL"; // lowest byte of EBX 13 case 4: return "AH"; // second lowest byte of EAX 14 case 5: return "CH"; // second lowest byte of ECX 15 case 6: return "DH"; // second lowest byte of EDX 16 case 7: return "BH"; // second lowest byte of EBX 17 default: raise << "invalid 8-bit register " << r << '\n' << end(); return ""; 18 } 19 } 20 21 uint8_t* effective_byte_address(uint8_t modrm) { 22 uint8_t mod = (modrm>>6); 23 uint8_t rm = modrm & 0x7; 24 if (pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */<HTML> <HEAD> <TITLE>Computer Science Logo Style vol 2:Acknowledgments</TITLE> </HEAD> <BODY> <CITE>Computer Science Logo Style</CITE> volume 2: <CITE>Advanced Techniques</CITE> 2/e Copyright (C) 1997 MIT <H1>Acknowledgments</H1> <TABLE width="100%"><TR><TD> <IMG SRC="../csls2.jpg" ALT="cover photo"> <TD><TABLE> <TR><TD align="right"><CITE><A HREF="http://www.cs.berkeley.edu/~bh/">Brian Harvey</A><BR>University of California, Berkeley</CITE> <TR><TD align="right"><BR> <TR><TD align="right"><A HREF="../pdf/v2ch00.pdf">Download PDF version</A> <TR><TD align="right"><A HREF="../v2-toc2.html">Back to Table of Contents</A> <TR><TD align="right"><A HREF="preface.html"><STRONG>BACK</STRONG></A> chapter thread <A HREF="../v2ch1/v2ch1.html"><STRONG>NEXT</STRONG></A> <TR><TD align="right"><A HREF="https://mitpress.mit.edu/books/computer-science-logo-style-second-edition-volume-2">MIT Press web page for <CITE>Computer Science Logo Style</CITE></A> </TABLE></TABLE> <HR> <P>Cynthia Solomon and Margaret Minsky are the people who got me started at the enterprise of developing exemplary Logo projects. People in the Logo community had been talking for many years about the need for an advanced Logo project book, but nobody got around to it until 1982 when Atari had all the money in the world and used some of it to establish a Corporate Research Department. Cynthia was in charge of the Atari research lab in Cambridge, where many MIT old-timers were gathered. She and Margaret decided that this was the time for the project book. I was one of several people they recruited to contribute projects. The result of that effort is called <EM>LogoWorks: Challenging Programs in Logo</EM> (McGraw-Hill, 1985). <P>This book is somewhat different from <EM>LogoWorks</EM> in that it's part of a series, so I can make assumptions here about what the reader already knows from having read the first volume. Still, I've benefited greatly from what I learned from Cynthia and Margaret about how to explain the structure of a large programming project. <P>The people who have read and commented on early drafts of this book include Hal Abelson, Alison Birch, Sharon Yoder, Mike Clancy, Jim Davis, Batya Friedman, Paul Goldenberg, Margaret Minsky, and Cynthia Solomon. As for the first volume, I am particularly indebted to Hal and Paul for their strong encouragement and their deep insights into issues both in computer science and in education. Matthew Wright reviewed some chapters for the second edition. <P>Berkeley Logo, the interpreter used in this edition, is a collective effort of many people, both at Berkeley and across the Internet. My main debt in that project is to three former students: Dan van Blerkom, Michael Katz, and Doug Orleans. At the risk of missing someone, I also want to acknowledge substantial contributions by Freeman Deutsch, Khang Dao, Fred Gilham, Yehuda Katz, George Mills, and Randy Sargent. <P> <P><A HREF="../v2-toc2.html">(back to Table of Contents)</A> <P><A HREF="preface.html"><STRONG>BACK</STRONG></A> chapter thread <A HREF="../v2ch1/v2ch1.html"><STRONG>NEXT</STRONG></A> <P> <ADDRESS> <A HREF="../index.html">Brian Harvey</A>, <CODE>bh@cs.berkeley.edu</CODE> </ADDRESS> </BODY> </HTML>