欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

关于一个小的汇编程序,统计二进制数据中0的个数

更新时间: 2014-01-05 03:17:47 责任编辑: Author_N1

 

关于一个小的汇编程序,统计2进制数据中0的个数
根据书上的代码,在电脑上运行出现错误,是关于变量addr的错误,我觉得 addr dw number 这条语句应该是不正确的,不能直接这样赋值吧?不知各位大神怎么看。
源代码如下:

data segment
addr dw number   ;这句应该不对吧,和下面一句换下顺序也不对
number dw 12
count dw ?
data ends

code segment
main proc far
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
        mov dx,16            ; 这句是什么意思?
        mov bx,addr
        mov ax,[bx]
test ax,0ffffh
jz exit
mov cx,16
mov dx,0
repeate:
sub ax,0
js shift
inc dx
shift:
shl ax,1
loop repeate
exit:
mov count,dx
ret
main endp
code ends
end start

--参考方法--

data segment
addr dw number   ;这句应该不对吧,和下面一句换下顺序也不对
number dw 0ffh ;为了方便打印,我把12改为0ffh,打印结果是8
count dw ?
data ends
 
code segment
main proc far
    assume cs:code,ds:data
start:
    push ds
    sub ax,ax
    push ax
    mov ax,data
    mov ds,ax
        mov dx,16            ; 这句是什么意思?------ 如果number为0的话就说明有16个0,因为number是dw类型的
        mov bx,addr
        mov ax,[bx]
    test ax,0ffffh ;测试number是否为0
    jz exit ;number 为0则跳转
    mov cx,16
    mov dx,0
repeate:
    sub ax,0
    js shift ;把最高为当做符号位,为1就跳转
    inc dx
shift:
    shl ax,1
    loop repeate
exit:
    ;mov count,dx
    mov al,dl ;打印统计结果 ---- 打印输出结果为8个
  add al,30h
  mov dl,al
  mov ah,2
  int 21h
    ret 
main endp
code ends
    end start

--参考方法--
data segment 
   addr dw number   
   number dw 012h 
   count dw ? 
data ends   
code segment 
main proc far    
   assume cs:code,ds:data 
 start:     
    push ds     
    sub ax,ax     
    push ax     
    mov ax,data     
    mov ds,ax        
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:17:47
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20526/
本文WWW.DOC100.NET DOC100.NET版权所有。