标题:存储器中有N字数组Array,统计其中正数,负数和零的个数,并分别存放在DI, ...
只看楼主
紫色年华
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:38
专家分:103
注 册:2012-11-30
结帖率:33.33%
已结贴  问题点数:10 回复次数:6 
存储器中有N字数组Array,统计其中正数,负数和零的个数,并分别存放在DI,SI,AX寄存器中的程序,有点问题,望高手指教!谢谢!
这是我自己写的一个在存储器中有N字数组Array,统计其中正数,负数和零的个数,并分别存放在DI,SI,AX寄存器中的程序,程序倒是可以运行,但运行结果有问题,希望大家可以帮我看一下!

data segment
    Array DW -1,3,0,1,-4,2,0,-5,6,8
    Zhengshu DW ?
    Fushu DW ?
    Ling DW ?
   
    pkey db "press any key...$"
ends

stack segment
    dw   128  dup(0)
ends

code segment  

start:
    mov ax, data
    mov ds, ax
    mov es, ax
   
    XOR DI,DI     
    XOR SI,SI         
    XOR AX,AX
    LEA BX,Array

LOP:
    MOV AL,[BX]                       
    CMP AL,00H
    JZ  END3
    JA  END2
   
    INC SI
    ADD Fushu,SI
    ADD BX,Array
    JMP LOP

END2:         
    INC DI
    ADD Zhengshu,DI
    ADD BX,Array
    JMP LOP

END3:         
    INC AX
    ADD Ling,AX
    ADD BX,Array   
    JMP LOP  
            
    lea dx, pkey
    mov ah, 9
    int 21h        ; output string at ds:dx
   
    ; wait for any key....   
    mov ah, 1
    int 21h
   
    mov ax, 4c00h ; exit to operating system.
    int 21h   
ends

end start ; set entry point and stop the assembler.
搜索更多相关主题的帖子: 寄存器 存储器 start 
2012-11-30 19:26
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:1 
如果你调试过 至少要描述下有什么问题吧

梅尚程荀
马谭杨奚







                                                       
2012-11-30 21:26
紫色年华
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:38
专家分:103
注 册:2012-11-30
得分:0 
对于这个程序,我想的是
    MOV AL,[BX]  ;把数组的第一个位赋给AL                     
    CMP AL,00H   ;比较AL和0的大小
    JZ  END3     ;如果AL-0是0(AL等于0),跳到END3,统计0的个数
    JA  END2     ;如果AL-0>0(AL>0),跳到END2,统计正数的个数
否则的话,执行下面这段程序,是统计负数的个数   
    INC SI
    ADD Fushu,SI
    ADD BX,Array  ;我想的是取数组里面的下一个值,不知道对不
    JMP LOP
    运行的结果是对正数的统计结果是1个,对负数的统计结果总是显示0,对零的统计结果在不断增加,是个死循环,我也是刚开始学汇编,不知道统计个数的那三小段程序有没有问题。
2012-12-01 09:50
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:7 
帮你改了 加了个比较结束标志数(9527) 就是数组末尾加的那个 缺点的9527不能做为正数中的一员了
不过只是个演示 也没关系
程序代码:
;#Mode=DOS

ASSUME CS:CODE,ds:data
data segment
    Array DW -1,3,0,1,-4,2,0,-5,6,8, 9527
    Zhengshu DW 0
    Fushu DW 0
    Ling DW 0 
    pkey db "press any key...$"
data ends

stack segment
    dw   128  dup(0)
stack ends

code segment
start:
    mov ax, data
    mov ds, ax
    mov es, ax  

    XOR DI,DI   
    XOR SI,SI       
    XOR AX,AX
    LEA BX,Array
LOP:
    MOV DX,[BX]                     
    CMP DX,00H
    JZ  END3
    JG  END2  

    ADD Fushu,1
    ADD BX,2
    JMP LOP

END2:    
    CMP DX, 9527
    JZ    OK
    ADD Zhengshu,1
    ADD BX,2
    JMP LOP
END3:          
    ADD Ling,1
    ADD BX,2
    JMP LOP
OK: MOV    DI, Zhengshu
    MOV SI, Fushu
    MOV AX, Ling
    lea dx, pkey
    mov ah, 9
    int 21h        ; output string at ds:dx 
    ; wait for any key.... 
    mov ah, 1
    int 21h 
    mov ax, 4c00h ; exit to operating system.
    int 21h 
code ends
end start
程序要写规范点哦


梅尚程荀
马谭杨奚







                                                       
2012-12-01 22:19
紫色年华
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:38
专家分:103
注 册:2012-11-30
得分:0 
嘿嘿,我初次学汇编,可能写程序有点不规范,不过我会努力的!谢谢你!
我还想问一下,那个比较结束标志数是不是随便选个大点的数就行呀,我试了一下结果是对的
2012-12-02 10:33
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:2 
回复 5楼 紫色年华
你的程序用的jmp指令 所以设个结束标志 这个由你选只要在AX表示数的范围内就行
如果用loop指令 就没必要设什么循环结束标志了 。

梅尚程荀
马谭杨奚







                                                       
2012-12-02 14:54
紫色年华
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:38
专家分:103
注 册:2012-11-30
得分:0 
知道了,谢谢!
2012-12-02 20:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-389118-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.233965 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved