加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

汇编语言(王爽第三版)检测点9.2

(2017-04-18 16:11:59)
标签:

汇编

王爽

it

教育

分类: 汇编语言(王爽第三版)检测点

检测点9.2

       补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。

assume cs:code

code segment

 start: mov ax,2000h

        mov ds,ax

        mov bx,0

     s:               

                     

                     

                     

        jmp short s

    ok: mov dx,bx

        mov ax ,4c00h

        int 21h

code ends

end start

       程序分析:

       标号s前面是将dsbx指向了段地址为2000H的内存段。s标号到jmp short s是一个循环(死循环,除非有跳出语句)。

       这里我们需要jcxz有条件转移语句来实现循环的跳出,jcxz的逻辑表达式只有一个就是(cx=0,想法将cx的内容赋值为dsbx,也就是说从ds[0]开始,逐个字节的将单元内容赋值给cx,然后执行jcxz语句。

       由于是逐个字节的比较,bx的偏移量应该是以字节为单元。我们使用的cx寄存器是16位的,我们只需要低8位的cl寄存器就可以了。为了保证ch0,首先必须置零。它们组合在一起就是cx的整体值(dh+dl

       需填充的      第一行:mov cl[bx]         ;2000段内存逐个字节赋值给cl

                     第二行:mov ch           ;保证高8位为         

                     第三行:jcxz ok              ;判断cx值,如果cx=0,跳转到ok标号

                     第四行:inc bx               ;cx=0,继续执行jcxz后面的语句。递增bx

       完整的程序是:

assume cs:code

code segment

start:  mov ax,2000h

        mov ds,ax

        mov bx,0

     s:  mov cl[bx]

         mov ch 0 

        jcxz ok   

        inc bx    

        jmp short s

    ok: mov dx,bx

        mov ax ,4c00h

        int 21h

code ends

end start

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有