用汇编实现统计寄存器AX中的16位二进制数内"0"的个数

请问一下我这样写哪里错了,运行的时候没有结果

data segment

data ends

stack segment stack
dw 20h dup(?)
top label word
stack ends

code segment
  assume ds:data,ss:stack,cs:code
  p proc far

  mov ax,data
  mov ds,ax

  mov ax,stack
  mov ss,ax
  mov sp,top

  mov ax,0000111100001111b;给ax赋值

  xor dl,dl;dl记录0的个数
  mov bx,10h;循环16次

judge:
  test ax,01h
  jz when0;当ax的最低位为0时就跳转到when0

when1:
  dec bx
  jz printf;当bx=0时就结束循环
  shr ax,1
  jmp judge

when0:
  inc dl;dl记录0的个数
  dec bx;bx减1
  jz printf
  shr ax,1
  jmp judge

printf:
  mov ah,02h
  int 21h

exit:
  mov ah,4ch
  int 21h

  p endp
code ends
  end p

阅读 3.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进