鱼C论坛

 找回密码
 立即注册
查看: 952|回复: 2

已经知道(AX)=4BD5H,统计AX中1的个数和0的个数,并分别放在BL和DL中。

[复制链接]
发表于 2024-1-3 20:32:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
已经知道(AX)=4BD5H,统计AX中1的个数和0的个数,并分别放在BL和DL中。编写程序实现该功能
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-1-3 20:33:17 | 显示全部楼层
下面是一个实现统计AX中1和0个数的程序示例:

  1. .model small
  2. .stack 100h

  3. .data
  4. ax_value dw 4BD5h        ; AX寄存器的值
  5. count_1 db 0            ; 记录1的个数的变量
  6. count_0 db 0            ; 记录0的个数的变量

  7. .code
  8. main proc
  9. mov ax, @data           ; 初始化数据段寄存器
  10. mov ds, ax

  11. xor bx, bx              ; 清空BX寄存器,用于统计1的个数
  12. xor cx, cx              ; 清空CX寄存器,用于统计0的个数

  13. mov ax, ax_value        ; 将AX寄存器的值赋给AX
  14. mov dl, 16              ; 设置循环次数为16次,即AX寄存器的位数

  15. count_loop:
  16. shr ax, 1               ; 右移一位
  17. jnc zero_count          ; 若CF标志位为0,跳转到zero_count
  18. inc bx                  ; 递增BX寄存器,统计1的个数
  19. jmp next_count          ; 跳转到next_count

  20. zero_count:
  21. inc cx                  ; 递增CX寄存器,统计0的个数

  22. next_count:
  23. dec dl                  ; 循环次数减1
  24. jnz count_loop          ; 若循环次数不为0,跳转到count_loop

  25. mov count_1, bl         ; 将BX寄存器的值赋给count_1
  26. mov count_0, cl         ; 将CX寄存器的值赋给count_0

  27. mov ah, 4ch             ; 程序结束
  28. int 21h
  29. main endp
  30. end main
复制代码


在汇编语言中,我们使用寄存器来进行计算和存储数据。在这个例子中,我们使用AX寄存器来存储待统计的值,BX寄存器用于统计1的个数,CX寄存器用于统计0的个数。

我们通过循环将AX寄存器的值逐位右移,并且在每一次右移之前判断最低位是否为1,从而决定是将BX寄存器(统计1的个数)递增,还是将CX寄存器(统计0的个数)递增。

最终,统计结果分别存储在BL寄存器(1的个数)和DL寄存器(0的个数)中。

请注意,上面的代码是8086汇编语言代码,需要在合适的汇编环境中进行运行,例如DOSBox等。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-3 22:41:31 | 显示全部楼层
本帖最后由 jackz007 于 2024-1-3 23:05 编辑
  1. stack segment para stack 'STACK'
  2.     db 40h dup(00)
  3. stack ends
  4. code segment para public 'CODE'
  5. main proc far
  6.      mov ax, 4bd5h
  7.      xor bx, bx
  8.      xor dx, dx
  9.      mov cx, 10h
  10. m01: test ax, 01
  11.      jz m02
  12.      inc bl
  13.      jmp short m03
  14. m02: inc dl
  15. m03: shr ax, 1
  16.      loop m01
  17.      mov  ax, 4c00h
  18.      int 21h
  19. main endp
  20. code ends
  21. end main
复制代码

        运行实况:
  1. -g 19
  2. AX=0000  BX=0009  CX=0000  DX=0007  SP=0040  BP=0000  SI=0000  DI=0000  
  3. DS=075E  ES=075E  SS=076E  CS=0772  IP=0019   NV UP EI PL ZR AC PE NC
  4. 0772:0019 B8004C        MOV        AX,4C00                           
  5. -q
复制代码

        答案是:9 个 1,7 个 0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-15 00:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表