草庐IT

静态存储器扩展实验

钻仰弥坚 2023-09-09 原文

一、实验目的:

   按照规则字写存储器,编写实验程序,将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

有关静态存储器扩展实验的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. c - mkmf 在编译 C 扩展时忽略子文件夹中的文件 - 2

    我想这样组织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中)将被完全忽略。

  3. ruby-on-rails - 向 Rails 3 添加 Ruby 扩展方法的最佳实践? - 2

    我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion

  4. ruby - 如何在 ruby​​ 中复制目录结构,不包括某些文件扩展名 - 2

    我想编写一个ruby​​脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"

  5. ruby - 扩展类和实例 - 2

    这个问题有两个部分。在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):

  6. ruby - 动态扩展现有方法或覆盖 ruby​​ 中的发送方法 - 2

    假设我们有A、B、C类。Adefself.inherited(sub)#metaprogramminggoeshere#takeclassthathasjustinheritedclassA#andforfooclassesinjectprepare_foo()as#firstlineofmethodthenrunrestofthecodeenddefprepare_foo#=>prepare_foo()neededhere#somecodeendendBprepare_foo()neededhere#somecodeendend如您所见,我正在尝试将foo_prepare()调用注入

  7. ruby - 如何在 Ruby 中只执行一次方法?有静态变量吗? - 2

    我写了一个脚本,其中包含一些方法定义,没有类和一些公共(public)代码。其中一些方法执行一些非常耗时的shell程序。然而,这些shell程序只需要在第一次调用该方法时执行。现在在C中,我会在每个方法中声明一个静态变量,以确保这些程序只执行一次。我怎么能在Ruby中做到这一点? 最佳答案 ruby中有一个成语:x||=y。defsomething@something||=calculate_somethingendprivatedefcalculate_something#somelongprocessend但是如果您的“长时间

  8. ruby-on-rails - Ruby 中的类方法(相当于 JAVA 中的静态方法) - 2

    伙计们,我正在学习ruby​​,最近从JAVA转行。在JAVA中,我可以将类的成员变量设为静态,并且该成员变量在类的实例中保持不变。我如何在ruby​​中实现相同的目标。我在我的ruby课上做了这样的事情:classBaseclass@@wordshashend到目前为止,这似乎在我测试时达到了目的,即@@wordhash在Baseclass的实例中保持不变。我的理解对吗?另外,我想在类中有一个成员方法,相当于JAVA中的静态方法(我不需要类的实例来访问它)。我怎样才能做到这一点?例如,我想在Baseclass中有一个像getwordshash()这样的方法,它返回@@wordshas

  9. ruby-on-rails - 如何扩展 Ruby Test::Unit 断言以包含 assert_false? - 2

    显然在Test::Unit中没有assert_false。您将如何通过扩展断言并添加文件config/initializers/assertions_helper.rb来添加它?这是最好的方法吗?我不想修改test/unit/assertions.rb。顺便说一句,我不认为这是多余的。我使用的是assert_equalfalse,something_to_evaluate。这种方法的问题是很容易意外使用assertfalse,something_to_evaluate。这将始终失败,不会引发错误或警告,并且会在测试中引入错误。 最佳答案

  10. ruby-on-rails - 无法构建 gem native 扩展 (mkmf (LoadError)) - Ubuntu 12.04 - 2

    这个问题在这里已经有了答案:Unabletoinstallgem-Failedtobuildgemnativeextension-cannotloadsuchfile--mkmf(LoadError)(17个答案)关闭9年前。嘿,我正在尝试在一台新的ubuntu机器上安装rails。我安装了ruby​​和rvm,但出现“无法构建gemnative扩展”错误。这是什么意思?$sudogeminstallrails-v3.2.9(没有sudo表示我没有权限)然后它会输出很多“获取”命令,最终会出现这个错误:Buildingnativeextensions.Thiscouldtakeawhi

随机推荐