当前位置: 首页 > news >正文

湖南城乡住房建设厅网站网站开发周期

湖南城乡住房建设厅网站,网站开发周期,建门户网站哪家最好,江苏省住房和建设厅网站首页Hack汇编语言是一种特定于计算机体系结构的汇编语言#xff0c;使用Hack架构的机器码指令来编写程序。Hack是一种基于Von Neumann结构的计算机体系结构#xff0c;由Harvard大学的Nand to Tetris项目开发出来#xff0c;用于实现计算机硬件和软件。 Hack汇编语言主要用于在…Hack汇编语言是一种特定于计算机体系结构的汇编语言使用Hack架构的机器码指令来编写程序。Hack是一种基于Von Neumann结构的计算机体系结构由Harvard大学的Nand to Tetris项目开发出来用于实现计算机硬件和软件。 Hack汇编语言主要用于在Nand to Tetris项目中编写计算机硬件和软件。该项目旨在教授计算机系统的基本原理和构造从最基本的逻辑门开始一步步地构建出完整的计算机系统包括CPU、内存、输入/输出、操作系统和编程语言等方面。通过设计和构造这些部分参与者可以对计算机系统的工作原理有更深入的了解同时也可以提高程序设计和算法分析能力。 HackAssemblerNoSymbol 按照要求先写一个没有符号的再写一个有符号的 首先读取文本文件去掉空白行然后去掉单独的注释行除了单独的注释行还有与代码在同一行的尾随代码的注释也要去掉。 然后开始准备翻译hack汇编语言即翻译A指令和C指令。 对于A指令如图所示它的格式是加上一个十进制数字或者一个符号标签由于此处我们编写的是无符号的汇编器所以我们暂时忽略符号的翻译因此后面只可能出现数字所以我们直接将数字变成二进制并进行补0就行。 对于C指令如图所示它的格式由三个部分组成目标位dest、计算位comp和跳转位jmp。因此我们为了方便可以直接建立起dest、comp和jmp三个表方便查询与替换。 然后开始翻译C指令C指令中的dest和jmp可以为空因此先根据指令中是否包含和分情况提取dest、jmp和comp再从之前建立的三个表中寻找相应的字符串进行替换。 其中的comp表分成a0和a1两种情况但是不需要建立两个表直接在对应的字符串前插入字符0或者1即可 import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.HashMap; import java.util.Objects; import java.util.Scanner; import java.util.Vector;public class hackAssemblerNoSymbol {public static void main(String[] args) throws IOException {HashMapString, String Dest new HashMap(); //目标位替换表Dest.put(null, 000);Dest.put(M, 001);Dest.put(D, 010);Dest.put(MD, 011);Dest.put(A, 100);Dest.put(AM, 101);Dest.put(AD, 110);Dest.put(AMD, 111);HashMapString, String Jmp new HashMap(); //跳转位替换表Jmp.put(null, 000);Jmp.put(JGT, 001);Jmp.put(JEQ, 010);Jmp.put(JGE, 011);Jmp.put(JLT, 100);Jmp.put(JNE, 101);Jmp.put(JLE, 110);Jmp.put(JMP, 111);HashMapString, StringComp new HashMap(); //计算位替换表// values in comp a0Comp.put(0, 0101010);Comp.put(1, 0111111);Comp.put(-1, 0111010);Comp.put(D, 0001100);Comp.put(A, 0110000);Comp.put(!D, 0001111);Comp.put(!A, 0110001);Comp.put(-D, 0001111);Comp.put(D1, 0011111);Comp.put(A1, 0110111);Comp.put(D-1, 0001110);Comp.put(A-1, 0110010);Comp.put(DA, 0000010);Comp.put(D-A, 0010011);Comp.put(A-D, 0000111);Comp.put(DA, 0000000);Comp.put(D|A, 0010101);// values in comp a1Comp.put(M, 1110000);Comp.put(!M, 1110001);Comp.put(-M, 1110011);Comp.put(M1, 1110111);Comp.put(M-1, 1110010);Comp.put(DM, 1000010);Comp.put(D-M, 1010011);Comp.put(M-D, 1000111);Comp.put(DM, 1000000);Comp.put(D|M, 1010101);Scanner asm new Scanner(new File(C:\\Users\\Yezi\\Desktop\\Java程序设计\\HW2\\nand2tetris\\projects\\06\\max\\MaxL.asm));VectorStringcodenew Vector();while (asm.hasNextLine()) {String line asm.nextLine();if (!Objects.equals(line, ) line.charAt(0) ! /) { //去掉空白行和注释行String[] pure line.split(/); //去掉尾随代码的注释pure[0]pure[0].replaceAll(\\s,); //去掉空格code.add(pure[0]);}}asm.close();FileWriter binarynew FileWriter(new File(C:\\Users\\Yezi\\Desktop\\Java程序设计\\HW2\\HackAssembler\\MaxL.hack));for(String line:code){if(line.charAt(0)){ //A指令String addressline.substring(1); //取后面的内容int numberInteger.parseInt(address); //取数字String numberBinaryInteger.toBinaryString(number); //数字转二进制String zeros0.repeat(16-numberBinary.length()); //补0齐16位binary.write(zerosnumberBinary\n);}else{ //C指令String destnull;String jmpnull;String comp;String[] destCompJmpline.split(;);if(destCompJmp[0].contains()){ // 有destString[] destCompdestCompJmp[0].split();destdestComp[0];compdestComp[1];}else{ //没有destcompdestCompJmp[0];}if(destCompJmp.length1){ //有jmpjmpdestCompJmp[1];}binary.write(111Comp.get(comp)Dest.get(dest)Jmp.get(jmp)\n);}}binary.close();} }HackAssembler 这个是有符号的 基本与无符号的解决思路相同所需要特别处理的就是hack汇编语言中的符号。 首先建立起一个符号表如图所示将一些系统预定义的符号如R系列寄存器等装入其中。 对于标签符号的处理需要对代码进行一次扫描如图所示确定标签符号的地址将其加入符号表中。 然后就是处理变量符号了如图所示对于变量符号会将它们放在从地址16开始的空间因此对于首次出现的变量符号给予它们从16开始的值再次出现的变量符号就取他们先前赋予的值。 由于只有A指令中涉及到符号所以我们只需要改变对A指令的翻译即可在先前的无符号汇编器的编写中我们A指令中后面只会出现数字在增加了符号后后面可以出现变量、标签和预定义的符号所以我们需要增加判断条件先在符号表中寻找相应的匹配符号如果找到了直接替换成相应的数值如果没有找到再判断是否是数字如果不是数字则是首次输出的变量符号那么将其添加到符号表中即可。 import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.HashMap; import java.util.Objects; import java.util.Scanner; import java.util.Vector;public class hackAssembler {public static void main(String[] args) throws IOException {HashMapString,Integer Symbolnew HashMap(); //符号表Symbol.put(SP, 0);Symbol.put(LCL, 1);Symbol.put(ARG, 2);Symbol.put(THIS, 3);Symbol.put(THAT, 4);Symbol.put(SCREEN, 16384);Symbol.put(KBD, 24567);Symbol.put(R0, 0);Symbol.put(R1, 1);Symbol.put(R2, 2);Symbol.put(R3, 3);Symbol.put(R4, 4);Symbol.put(R5, 5);Symbol.put(R6, 6);Symbol.put(R7, 7);Symbol.put(R8, 8);Symbol.put(R9, 9);Symbol.put(R10, 10);Symbol.put(R11, 11);Symbol.put(R12, 12);Symbol.put(R13, 13);Symbol.put(R14, 14);Symbol.put(R15, 15);HashMapString, String Dest new HashMap(); //目标位替换表Dest.put(null, 000);Dest.put(M, 001);Dest.put(D, 010);Dest.put(MD, 011);Dest.put(A, 100);Dest.put(AM, 101);Dest.put(AD, 110);Dest.put(AMD, 111);HashMapString, String Jmp new HashMap(); //跳转位替换表Jmp.put(null, 000);Jmp.put(JGT, 001);Jmp.put(JEQ, 010);Jmp.put(JGE, 011);Jmp.put(JLT, 100);Jmp.put(JNE, 101);Jmp.put(JLE, 110);Jmp.put(JMP, 111);HashMapString, StringComp new HashMap(); //计算位替换表// values in comp a0Comp.put(0, 0101010);Comp.put(1, 0111111);Comp.put(-1, 0111010);Comp.put(D, 0001100);Comp.put(A, 0110000);Comp.put(!D, 0001111);Comp.put(!A, 0110001);Comp.put(-D, 0001111);Comp.put(D1, 0011111);Comp.put(A1, 0110111);Comp.put(D-1, 0001110);Comp.put(A-1, 0110010);Comp.put(DA, 0000010);Comp.put(D-A, 0010011);Comp.put(A-D, 0000111);Comp.put(DA, 0000000);Comp.put(D|A, 0010101);// values in comp a1Comp.put(M, 1110000);Comp.put(!M, 1110001);Comp.put(-M, 1110011);Comp.put(M1, 1110111);Comp.put(M-1, 1110010);Comp.put(DM, 1000010);Comp.put(D-M, 1010011);Comp.put(M-D, 1000111);Comp.put(DM, 1000000);Comp.put(D|M, 1010101);Scanner asm new Scanner(new File(C:\\Users\\Yezi\\Desktop\\Java程序设计\\HW2\\nand2tetris\\projects\\06\\rect\\Rect.asm));VectorStringcodenew Vector();while (asm.hasNextLine()) {String line asm.nextLine();if (!Objects.equals(line, ) line.charAt(0) ! /) { //去掉空白行和注释行String[] pure line.split(/); //去掉尾随代码的注释pure[0]pure[0].replaceAll(\\s,); //去掉空格if(pure[0].charAt(0)(){ //如果是标签符号将之添加到符号表中String labelpure[0].substring(1,pure[0].length()-1);Symbol.put(label,code.size());}else{code.add(pure[0]); //不是标签是代码}}}asm.close();FileWriter binarynew FileWriter(new File(C:\\Users\\Yezi\\Desktop\\Java程序设计\\HW2\\HackAssembler\\Rect.hack));int start16;for(String line:code){if(line.charAt(0)){ //A指令String addressline.substring(1); //取后面的内容int number;if(Symbol.containsKey(address)){ // 出现过的符号预定义符号、变量和标签numberSymbol.get(address);}else if(address.matches(\\d)){ //数字numberInteger.parseInt(address); //取数字}else{ //首次出现的变量符号numberstart;Symbol.put(address,number);}String numberBinaryInteger.toBinaryString(number); //数字转二进制String zeros0.repeat(16-numberBinary.length()); //补0齐16位binary.write(zerosnumberBinary\n);}else{ //C指令String destnull;String jmpnull;String comp;String[] destCompJmpline.split(;);if(destCompJmp[0].contains()){ // 有destString[] destCompdestCompJmp[0].split();destdestComp[0];compdestComp[1];}else{ //没有destcompdestCompJmp[0];}if(destCompJmp.length1){ //有jmpjmpdestCompJmp[1];}binary.write(111Comp.get(comp)Dest.get(dest)Jmp.get(jmp)\n);}}binary.close();} }
http://www.yutouwan.com/news/8629/

相关文章:

  • 代理商加盟项目网站网站建设公司 知乎
  • 廊坊网络推广安徽优化网站
  • 怎么创建一个博客网站吗wordpress 作者墙
  • 网站后台怎么更新网站哪里买到纯净网站模板
  • 高端网站定制开发大连网络营销招聘网
  • 网站负责人不是法人网站建设明细报价表模板
  • 建网站上海商河网站建设公司
  • 推广网站怎样阻止快车app官方下载
  • 深圳网站建设公司 犀牛云 移动云网站郑州正岩建设集团网站
  • wordpress学校网站模板seo高级教程
  • 邯郸网站设计怎么做wordpress菜单无效
  • 中文网站建设代码如何做网站推广页面
  • wordpress电影站主题小破站下载
  • 技术型网站做哪一种好wordpress主题购买
  • 网站建设网站优化wordpress垂直分页导航插件
  • 外贸有哪些网站iis网站开发教程
  • 新都有没有做网站的佛山伦教网站设计
  • 库存网站建设哪家好设计良好的网站一般需要怎么做
  • 局域网站点建设方案wordpress图片文章
  • 博物馆设计网站推荐seo页面优化技术
  • 建设银行网站模板自适应网站好建们
  • 海淀区企业网站建设广东建设执业资格中心网站
  • 网站推广的方案设计怎么写集团网站制作公司
  • 宁海建设局网站网络营销研究背景及意义
  • 北京专业网站维护公司网页设计实训报告设计图
  • 做推送的网站长沙公司网页设计
  • 做网站提成浏览器下载安装2022最新版
  • 做拼多多代运营网站怎样自己免费建设一个网站
  • 宁波seo培训谷歌seo优化是什么
  • 哪里有网站开发技术网站关键词搜不到了