一、实验目的:
按照规则字写存储器,编写实验程序,将N个数写入SRAM的某段空间中,查看该存储空间,检测写入是否正确。
二、实验内容与要求:
按照规则字写存储器,编写实验程序,将0000H~000FH 共16个数写入SRAM的从0000H起始的一段空间中,然后通过系统命令查看该存储空间,检测写入数据是否正确。
三、实验步骤:
1.连接线路。
2.编写实验程序,经编译、链接无误后装入系统。
3.先运行程序,待程序运行停止。
4.通过D命令查看写入存储器中的数据,输入D8000: 0000并回车。
这里可以修改一下程序,将其改成其他的值,在memory中的Address输入查看数据。
5.改变实验程序,按非规则字写存储器。给SI寄存器赋奇地址数,MOV SI,0001H即为非规则字写存储器。
6.改变实验程序,按字节方式写存储器。
四、电路连接

五、代码设计与分析
这里只挑重要的代码进行分析。完整代码见后。
1.按非规则字写存储器
规则字是低位地址为奇数,否者是非规则字,非规则字读取需要两个周期,而规则字只需要一个周期。一个字在存储器中按字节存储,若低地址为偶数,高地址为奇数,则为规则字。相反,若低地址为奇数,高地址为偶数,则为非规则字。
AA0: MOV SI,0001H;数据首地址8000:0001 si是偏移地址,01是非规则字
MOV CX, 0010H;CX是计数存储器10H=16D
MOV AX,0000H;AX从0开始
2.按字节写存储器
字节(Byte)是计算机信息技术用于计量存储容量和传输容量的一种计量单位,一个字节等于8位二进制数,在UTF-8编码中,一个英文字符等于一个字节。
AA1:MOV [SI], AX
INC AX;
INC SI;SI只加一个字节
LOOP AA1;CX不等于0需要循环
六、实验现象
(1)查看写入存储器中的数据,可以看到存储器中的数据,为0000、0001、0002、.、000E共16个字,结果如下:

图4 按规则字写存储器
可见各个数被存放在偶地址单元中。
(2)按非规则字写存储器,结果如下:

图5 按非规则字写存储器
可见各个数被存放在奇地址单元中。
(3)按字节方式写存储器,结果如下:

图6 按字节方式写存储器
可见00、01…0F已紧凑地放到了每个存储单元。
七、源代码
1)扩展存储器实验,访问16位存储器,将16个数写入
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
START PROC FAR
ASSUME CS:CODE
MOV AX, 9000H ; 存储器扩展空间段地址
MOV DS, AX
AA0: MOV SI, 0000H ; 数据首地址
MOV CX, 0010H
MOV AX, 0000H
AA1: MOV [SI], AX
INC AX
INC SI
INC SI
LOOP AA1
MOV AX,4C00H
INT 21H ;程序终止
START ENDP
CODE ENDS
END START
2.改变实验程序,按非规则字写存储器
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
START PROC FAR
ASSUME CS:CODE
MOV AX, 9000H ; 存储器扩展空间段地址
MOV DS, AX
AA0: MOV SI, 0001H ; 数据首地址
MOV CX, 0010H
MOV AX, 0000H
AA1: MOV [SI], AX
INC AX
INC SI
INC SI
LOOP AA1
MOV AX,4C00H
INT 21H ;程序终止
START ENDP
CODE ENDS
END START
3.改变实验程序,按字节方式写存储器
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
START PROC FAR
ASSUME CS:CODE
MOV AX, 8000H ; 存储器扩展空间段地址
MOV DS, AX
AA0: MOV SI, 0000H ; 数据首地址
MOV CX, 0010H
MOV AX, 0000H
AA1: MOV [SI], AX
INC AX
INC SI
LOOP AA1
MOV AX,4C00H
INT 21H ;程序终止
START ENDP
CODE ENDS
END START
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。
我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion
我想编写一个ruby脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"
这个问题有两个部分。在RubyProgrammingLanguage一书中,有一个使用模块扩展字符串对象和类的示例(第8.1.1节)。第一个问题。为什么如果您使用新方法扩展类,然后创建该类的对象/实例,则无法访问该方法?irb(main):001:0>moduleGreeter;defciao;"Ciao!";end;end=>nilirb(main):002:0>String.extend(Greeter)=>Stringirb(main):003:0>String.ciao=>"Ciao!"irb(main):004:0>x="foobar"=>"foobar"irb(main):
假设我们有A、B、C类。Adefself.inherited(sub)#metaprogramminggoeshere#takeclassthathasjustinheritedclassA#andforfooclassesinjectprepare_foo()as#firstlineofmethodthenrunrestofthecodeenddefprepare_foo#=>prepare_foo()neededhere#somecodeendendBprepare_foo()neededhere#somecodeendend如您所见,我正在尝试将foo_prepare()调用注入
我写了一个脚本,其中包含一些方法定义,没有类和一些公共(public)代码。其中一些方法执行一些非常耗时的shell程序。然而,这些shell程序只需要在第一次调用该方法时执行。现在在C中,我会在每个方法中声明一个静态变量,以确保这些程序只执行一次。我怎么能在Ruby中做到这一点? 最佳答案 ruby中有一个成语:x||=y。defsomething@something||=calculate_somethingendprivatedefcalculate_something#somelongprocessend但是如果您的“长时间
伙计们,我正在学习ruby,最近从JAVA转行。在JAVA中,我可以将类的成员变量设为静态,并且该成员变量在类的实例中保持不变。我如何在ruby中实现相同的目标。我在我的ruby课上做了这样的事情:classBaseclass@@wordshashend到目前为止,这似乎在我测试时达到了目的,即@@wordhash在Baseclass的实例中保持不变。我的理解对吗?另外,我想在类中有一个成员方法,相当于JAVA中的静态方法(我不需要类的实例来访问它)。我怎样才能做到这一点?例如,我想在Baseclass中有一个像getwordshash()这样的方法,它返回@@wordshas
显然在Test::Unit中没有assert_false。您将如何通过扩展断言并添加文件config/initializers/assertions_helper.rb来添加它?这是最好的方法吗?我不想修改test/unit/assertions.rb。顺便说一句,我不认为这是多余的。我使用的是assert_equalfalse,something_to_evaluate。这种方法的问题是很容易意外使用assertfalse,something_to_evaluate。这将始终失败,不会引发错误或警告,并且会在测试中引入错误。 最佳答案
这个问题在这里已经有了答案:Unabletoinstallgem-Failedtobuildgemnativeextension-cannotloadsuchfile--mkmf(LoadError)(17个答案)关闭9年前。嘿,我正在尝试在一台新的ubuntu机器上安装rails。我安装了ruby和rvm,但出现“无法构建gemnative扩展”错误。这是什么意思?$sudogeminstallrails-v3.2.9(没有sudo表示我没有权限)然后它会输出很多“获取”命令,最终会出现这个错误:Buildingnativeextensions.Thiscouldtakeawhi