汇编语言(第四版)第九章 检测点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

分析:考察对 jcxz 指令的使用

jcxz x 如果 cx = 0,转移到标号x处执行;如果cx不为零,则什么也不做。

基本思路就是从 2000:0000 位置处逐字节遍历,每次取出一个字节放入cx寄存器的低地址处cl,高地址ch不起作用故补0,用jcxz指令判断cx是否为0,若为0则执行 OK 代码段,将偏移地址bx存储到dx中,否则bx+1,检测下一个字节是否为0。

故程序为

assume cs:code
code segment
start:mov ax,2000h
      mov ds,ax
      mov bx,0
    s:mov cl,[bx]    ;取出一个字节,放在cx低地址处
      mov ch,0       ;cx高地址不起作用,补0
      jcxz ok        ;判断该字节是否为0,成立则跳到ok处执行
      inc bx         ;不成立则取下一个字节
      jmp short s
   ok:mov dx,bx
      mov ax,4c00h
      int 21h
code ends
end start

实验结果如下:

可以看到在DS:000处的第一个就为0,故执行了一次循环就结束了

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值