假设有一个字类型的数值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 

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