汇编网首页登录博客注册
youthangel的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
文章收藏

[2012-10-10 12:31] 实验四

图片载入中
(1)
;内容实验室第一题
;要求:向内存0:200~0:23f依次传送数据0~63(3fh)
;算法分析:
;          第一种方法(ds)=0,(bx)=200 (al)=0  循环64次每次(ds:[bx])=(ax) inc bx,inc al 
;          第二种方法让给初始值(ds)=0,(bx)=0,利用loop循环64次每次(ds:[bx+200h])=(bl),inc bx
;          第三种方法转换0:200为0020:0,让(ds)=20,(bx)=0利用loop循环64次每次(ds:[bx])=(bl),inc bx
;方法一: 
              assume    cs:code
        code  segment
      start:
              mov       ax,0
              mov       ds,ax
              mov       bx,200h     ;ds:[bx]指向0:200

              mov       ax,0        ;ax初始化为0
              mov       cx,64       ;设置循环控制变量cx
          s:
              mov       [bx],al     ;传送数据
              inc       bx          ;bx加一指向下一个内存单元
              inc       al          ;al加一
              loop      s
;退出   
              mov       ax,4c00h
              int       21h
        code  ends
              end       start

;方法二 
              assume    cs:code
        code  segment
      start:
              mov       ax,0
              mov       ds,ax
              mov       bx,0        ;ds:[bx]指向0:0
              mov       ax,200h     ;偏移量 放在AX中

              mov       cx,64       ;设置循环控制变量cx
          s:
              mov       dx,bx       ;用dx暂存bx中的数据
              add       bx,ax       ;得到目的地址,在bx中
              mov       [bx],bl     ;传送数据
              mov       bx,dx       ;还原bx中的数据
              inc       bx          ;bx加一指向下一个内存单元,同时数据也加一
              loop      s
;退出   
              mov       ax,4c00h
              int       21h
        code  ends
              end       start
;方法三
;共九条指令  
              assume    cs:code
        code  segment
      start:
              mov       ax,20h
              mov       ds,ax
              mov       bx,0        ;ds:[bx]指向0020:0

              mov       cx,64       ;设置循环控制变量cx
          s:
              mov       [bx],bl     ;传送数据
              inc       bx          ;bx加一指向下一个内存单元,同时数据也加一
              loop      s
;退出   
              mov       ax,4c00h
              int       21h
        code  ends
              end       start

(2)
见(1)的第三种方法
(3)
              assume    cs:code
        code  segment
      start:
              mov       ax,cs;第一个空
              mov       ds,ax       ;将代码段的段地址赋给ds
              mov       ax,0020h
              mov       es,ax
              mov       bx,0
              mov       cx,0017h;第二个空
          s:
              mov       al,[bx]
              mov       es:[bx],al
              inc       bx
              loop      s
;退出 
              mov       ax,4c00h
              int       21h
        code  ends
              end       start
说明:
mov cx,__这个空我也不知道填什么,但我们可以探究一下
首先,随便填一个数,比如:23
接下来,我们进入debug -u查看一下代码所处的内存空间,由图我们可以看出程序共占用了1cH个字节
其中从开始到mov ax,4c00h占用了0017H个字节,所以填17h
有些参看答案说程序初始化时,cx中就存有程序的长度
但我们看到图3.0中CX=02cfH,显然这里是有问题的
评论次数(0)  |  浏览次数(216)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码