| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1122 人关注过本帖
标题:数据统计的结果没有显示
只看楼主 加入收藏
xiaxin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-10-21
收藏
 问题点数:0 回复次数:3 
数据统计的结果没有显示
程序目的:100H单元开始写入00H-ffH的数据,并在DOS功能调用下显示数据块的内容,统计数据块中0元素 负元素 正元素个数,以下程序没有数据统计的结果为什么?
请给一个完整的程序参考下。
DATA    SEGMENT
ORG      100H;偏移量为100
BUF       DB  256 dup (?)
ZR         DB   0            ;0元素
ZH         DB   0            ;正元素
FU         DB   0             ;负元素
COUNT  EQU  $-BUF;长度
DATA    ENDS
CODE    SEGMENT
              ASSUME   CS:CODE,DS:DATA
start:     mov   ax,  data
              mov   ds,  ax
              mov   si,   offset buf      ;设置数据块首地
               mov   cx,  COUNT        ;设数据块长度   
               cld                                 ;地址修改为增量
               xor     al,   al                 ;数据块第一个数据为0
 nexta:   mov   [si], al                 ;向内存送256个数据
              inc si
              inc al
              loop nexta
              mov  si, offset buf
              mov  cx,   COUNT
  done1: mov al, [si]   ;显示数据块数据
               call  disp
               inc si
               loop done1
               mov  si, offset buf
               mov  cx,   COUNT
 _loop:   test  al, 80h         ;测试是否为负数
                jnz   _FU                ;是负数则转
                or    al,00h
                jz    _ZR                ;是零转
                inc   ZH                 ;正数
                inc   si
                loop  _loop
  _FU:       inc   FU
                jmp   _loop
  _ZR:       inc   ZR
               jmp _loop
       bi : mov bl,ZR
              call  _Chg
              mov   bl,ZH
              call  _Chg
              mov   bl,FU
              call  _Chg
              mov ah, 4ch
              int 21h
    disp proc
                 mov dl,al; xian shi
                 mov ah,2
                 int 21h
                 mov ah, 2 ; kong ge
                 mov dl, 20h
                 int 21h               
                 Ret
disp endp
_Chg  proc
             mov   ch,bl
             mov cl,4
             shr bl, cl
             call dip
             mov bl, ch
             and bl, 0ah
             call dip
             ret
_Chg endp
  dip   proc
         cmp bl, 0ah
          js  done1
         add bl, 7
  don1:add bl, 30h
           mov dl, bl
           mov ah, 02
            int 21h
         ret
dip endp
   CODE ENDS
end start
搜索更多相关主题的帖子: 数据 结果 统计 
2008-11-20 17:37
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
这个程序问题不少~~
;=============================
DATA    SEGMENT
ORG      100H;偏移量为100
BUF       DB  256 dup (?)
ZR         DB   0            ;0元素
ZH         DB   0            ;正元素
FU         DB   0             ;负元素
COUNT  EQU  $-BUF;长度
DATA    ENDS
CODE    SEGMENT
              ASSUME   CS:CODE,DS:DATA
start:     mov   ax,  data
              mov   ds,  ax
              mov   si,   offset buf      ;设置数据块首地
               mov   cx,  COUNT        ;设数据块长度   
               cld                                 ;地址修改为增量
               xor     al,   al                 ;数据块第一个数据为0
nexta:   mov   [si], al                 ;向内存送256个数据
              inc si
              inc al
              loop nexta
              mov  si, offset buf
              mov  cx,   COUNT
  done1: mov al, [si]   ;显示数据块数据
               call  disp
               inc si
               loop done1
               mov  si, offset buf
               mov  cx,   COUNT
_loop:   test  al, 80h         ;测试是否为负数   ;这里是不是得先有一句:mov al,[si]?
                jnz   _FU                ;是负数则转
                or    al,00h
                jz    _ZR                ;是零转
                inc   ZH                 ;正数
                inc   si
                loop  _loop    ;这句后面是不是少了jmp bi
  _FU:       inc   FU
                jmp   _loop     ;这里怎么不递增si? 应加inc si
  _ZR:       inc   ZR
               jmp _loop        ;同上 inc si   
         bi : mov bl,ZR
              call  _Chg
              mov   bl,ZH
              call  _Chg
              mov   bl,FU
              call  _Chg
              mov ah, 4ch
              int 21h
    disp proc
                 mov dl,al; xian shi
                 mov ah,2
                 int 21h
                 mov ah, 2 ; kong ge
                 mov dl, 20h
                 int 21h               
                 Ret
disp endp
_Chg  proc
             mov   ch,bl
             mov cl,4
             shr bl, cl
             call dip
             mov bl, ch
             and bl, 0ah
             call dip
             ret
_Chg endp
  dip   proc
         cmp bl, 0ah
          js  done1    ;这还跳回done1?不是死循环吗?
         add bl, 7
  don1:add bl, 30h
           mov dl, bl
           mov ah, 02
            int 21h
         ret
dip endp
   CODE ENDS
end start
2008-11-22 08:54
xiaxin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-10-21
收藏
得分:0 
DATA  SEGMENT
     ORG       100H        ;数据段从100h开始定义
     BUF  DB        256 DUP(?)
     COUNT  EQU       $-BUF
     POSITIVE  DB        ?,?,' positive',0AH,0DH,"$"         ;前面两个字节放的内容是,用ASCII表示的正数个数
    NEGATIVE  DB        ?,?,' negative',0AH,0DH,"$"         ;前面两个字节放的内容是,用ASCII表示的负数个数
        ZERO  DB        ?,?,' zero',0AH,0DH,"$" ;前面两个字节放的内容是,用ASCII表示的0的个数
        DATA  ENDS
        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA
        disp proc
                 mov dl,al; xian shi
                 mov ah,2
                 int 21h
                 mov ah, 2 ; kong ge
                 mov dl, 20h
                 int 21h               
                 Ret
disp endp
   dne  proc
              mov dl, 0ah
              mov  ah, 02h
              int   21h
              mov  dl, 0dh
              mov   ah, 02h
              int   21h
             ret
      dne endp
      START:  MOV       AX,DATA
              MOV       DS,AX
              MOV       SI,OFFSET BUF
              MOV       CX,COUNT
              CLD
              XOR       AL,AL
       LOAD:  MOV       [SI],AL   
              INC       SI
              INC       AL
              LOOP      LOAD
  MOV       SI,OFFSET BUF
 MOV       CX,COUNT
  done1: mov al, [si]   ;显示数据块数据
               call  disp
               inc si
               loop done1
               call  dne
              MOV       SI,OFFSET BUF
              MOV       DX,0        ;初始化dx  ,dh装0的个数
              MOV       BX,0        ;初始化bx,bh装正数个数 ,bl装负数个数
              MOV       CX,COUNT
       COMP:  MOV       AL,[SI]
              INC       SI
              CMP       AL,0        ;与0比较,判断正数,负数,零
              JNE       NZERO      
              INC       DH          ;0时计数
              LOOP      COMP
              JMP       SHU
      ZHENG:  INC       BH          ;正数时计数
              LOOP      COMP
              JMP       SHU
         FU:  INC       BL          ;负数时计数
              LOOP      COMP
              JMP       SHU
      NZERO:  JNS       ZHENG
              JS        FU
              LOOP      COMP
              JMP       SHU
        SHU:  MOV       SI,OFFSET POSITIVE      
              MOV       [SI],BH
              CALL      DIP        ;存放时用ASCII码表示个数
              MOV       SI,OFFSET NEGATIVE
              MOV       [SI],BL
              CALL      DIP
              MOV       SI,OFFSET ZERO
              MOV       [SI],DH
              CALL      DIP
      PRINT:  MOV       DX,OFFSET POSITIVE      ;输出
              MOV       AH,9
              INT       21H
              MOV       DX,OFFSET NEGATIVE
              MOV       AH,9
              INT       21H
              MOV       DX,OFFSET ZERO
              MOV       AH,9
              INT       21H
              MOV       AH,4CH      
              INT       21H
 DIP  PROC                  
              MOV       AH,[SI]     
              MOV       AL,AH
              MOV       Cl, 4
              SHR       AL, Cl      
              CMP      AL, 0AH   
              JS        DONE      
              ADD       AL,7      
       DONE:  ADD       AL,30H
              MOV       [SI],AL     
              MOV       AL,AH
              AND       AL,0FH
              CMP       AL,0AH      
              JS        DON
              ADD       AL,7
      DON:  ADD       AL,30H
              MOV       [SI+1],AL   
              RET                  
        DIP  ENDP
        CODE  ENDS
              END       START
2008-11-22 23:33
xiaxin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-10-21
收藏
得分:0 
这是正确的代码与大家分享。
2008-11-22 23:34
快速回复:数据统计的结果没有显示
数据加载中...
 
   



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

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