zoukankan      html  css  js  c++  java
  • 实验4:[bx]和loop的使用

    实验任务一

    综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个
    字单元重复填充字数据 0403H

    实现:

    1.编写源码文件:test1.asm

    注意点:在汇编程序中,数据不能以字母开头。b800前要加上0。

    2.编译、链接

    批处理文件:process.bat

    1 masm %1.asm;
    2 link %1.obj;

    3.执行

    4.将源代码程序中字数据 0403H→修改为 0441H,再次运行

    实验任务二

    综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据
    0~63(3FH)

    (1)必做:综合使用 loop, [bx], mov 实现
    (2)选做*:利用栈的特性,综合使用 loop,push 实现(限定仅使用 8086 中已学过
    指令实现)

    (1)实现:

    ①编写源码:test2_.asm

     ②编译、链接、执行

    ③调试

    可以看出,此方法是内存单元从0:200起依次被传送0~63的数据

    (2)实现:

    ①编写源码:test2.asm

     ②编译、链接、执行

    ③调试

    注意点:由于入栈操作是从高地址单元→低地址单元方向的,所以实际上是从内存单元0:23f处逆序传送0~63的数据的。另外,由于入栈操作是以字为单元操作的,而这里需要对字节操作,采取的方法是:把一个寄存器(如BX)的高低字节单独赋值后再压人栈中。

    实验任务三

    下面的程序的功能是将”mov ax,4c00h"之前的指令复制到内存0:200处,补全程序,上机调试,跟踪运行结果 

    assume cs:code
    code segment
        mov ax,_______
        mov ds,ax
        mov ax,0020h
        mov es,ax
        mov bx,0
        mov cx,_______
      s:mov al,[bx]
        mov es:[bx],al
        inc bx
        loop s
        mov ax,4c00h
        int 21h
    code ends
    end


    实现:

    由于题目要求把代码段内的指令当数据复制到目的地址,而cs段寄存器中存储的是指向程序代码段的段地址,因此第一空填CS;由于事先不知道整个程序占的字节数,可以先在第二个空预填一个合适的数(如10h),使之编译通过,然后调试查看CX的值,再减5(最后2条语句的字节数)即可得到程序从开始至“mov ax,4c00h”所占的字节数。

    ①源码(预填)

    ②编译、调试

    CX=1C,故程序从开始至“mov ax,4c00h”所占的字节数为17h

    ③源码更新

    ④再次调试

    可以看到,cs段的第一个字节成功的复制到了es:0;

    同样地,第二个字节也被成功复制过去了。全部复制完成后,反汇编查看复制过去的内容,发现与源代码相同。

  • 相关阅读:
    framwork NHibernate
    java eclise的配置
    java jdk环境变量配置
    第零章 关于课程教材与讲义
    ActiveMQ(5.10.0)
    ActiveMQ(5.10.0)
    ActiveMQ(5.10.0)
    ActiveMQ(5.10.0)
    ActiveMQ(5.10.0)
    ActiveMQ(5.10.0)
  • 原文地址:https://www.cnblogs.com/kevin234/p/9971150.html
Copyright © 2011-2022 走看看