鱼C论坛

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

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

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

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

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

x
已经知道(AX)=4BD5H,统计AX中1的个数和0的个数,并分别放在BL和DL中。编写程序实现该功能
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

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

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

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

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

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

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

mov ah, 4ch             ; 程序结束
int 21h
main endp
end main

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

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-3 22:41:31 | 显示全部楼层
本帖最后由 jackz007 于 2024-1-3 23:05 编辑
stack segment para stack 'STACK'
    db 40h dup(00)
stack ends 
code segment para public 'CODE'
main proc far 
     mov ax, 4bd5h
     xor bx, bx
     xor dx, dx
     mov cx, 10h
m01: test ax, 01
     jz m02
     inc bl
     jmp short m03
m02: inc dl
m03: shr ax, 1
     loop m01
     mov  ax, 4c00h
     int 21h
main endp
code ends
end main
        运行实况:
-g 19
AX=0000  BX=0009  CX=0000  DX=0007  SP=0040  BP=0000  SI=0000  DI=0000  
DS=075E  ES=075E  SS=076E  CS=0772  IP=0019   NV UP EI PL ZR AC PE NC 
0772:0019 B8004C        MOV        AX,4C00                            
-q
        答案是:9 个 1,7 个 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 02:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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