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