假设有一个字类型的数值arry1,试编写程序统计arry1数值及其后若干数值,在字单元中存储时每个数据中含“1”数据位的个数,并将统计结果保存在res1数组中。数据段的代码定义如下: data seg

假设有一个字类型的数值arry1,试编写程序统计arry1数值及其后若干数值,在字单元中存储时每个数据中含“1”数据位的个数,并将统计结果保存在res1数组中。数据段的代码定义如下:

data segment
arry1 dw 223,4037,5635,8226,11542,14430,45257,811
len equ $-arry1
res1 db ???;请补充完整
data ends

注:可结合shl(或shr)指令和条件转移指令来实现对字节数据中“1”的计数。(提示:使用shl或shr指令,移出位将写入标志寄存器中的CF标志位,而条件转移指令中正好有根据CF的值进行操作跳转的指令)

assume cs:code,ds:data  

data segment
  arry1 dw 223,4037,5635,8226,11542,14430,45257,811,822,2019
  len  equ $-arry1
  res1  db  10 dup(0)
data ends


code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax            ;载入数据
    mov si, word ptr offset arry1
    mov di,offset res1
    mov cx,10
    
  Lop: mov Bl,16             ;外层循环,每次bl计为16
       
  Lop2: shl word ptr[si],1   ;每次按word字节移动一位
       JNC S                  ;如果CF=0,则跳转到S段,否则自增
       inc [di]     
    S: dec  Bl               ;如果bl==0,则跳出内层循环
   JNZ Lop2 
   
      add si,2               ;每一次偏移量 si加2,  di++
      inc di
  Loop Lop  
   mov ax,4c00h 
   int 21h                  ;退出程序
ends

end start 
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值