. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->数据处理的两个基本问题
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验7的问题,为什么说divide by 0  [已解决] 回复[ 4次 ]   点击[ 352次 ]  
dj_hb
[帖 主]   [ 发表时间:2012-12-02 16:36 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-12-01 11:13
DATAS  SEGMENT
              DB        '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982'
              DB        '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990'
              DB        '1991', '1992', '1993', '1994', '1995'
    
              DD        16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
              DD        345980,590827,803530,118300,184300,2759000,3753000,4649000,5937000
    
              DW        3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
              DW        11542,14430,15257,17800
        DATAS  ENDS

    TABLE  SEGMENT
              DB        21 DUP ('year summ ne ?? ')
    TABLE  ENDS

    STACKS  SEGMENT
              DB 16 DUP (0)
    STACKS  ENDS

ASSUME    CS:CODES,DS:DATAS,SS:STACKS,ES:TABLE 
CODES SEGMENT
START:        MOV AX,DATAS
                MOV DS,AX
                MOV AX,TABLE
                MOV ES,AX
                MOV AX,STACKS
                MOV SS,AX
                
                SUB AX,AX
                MOV SP,16
                MOV CX,21H
                PUSH CX
                MOV BX,0
                MOV BP,0
                MOV DI,0
S:                MOV CX,4
                MOV SI,0
        S0:        
                MOV AL,[SI]                                                ;年份
                MOV ES:[BX][SI],AL
                INC SI
                LOOP S0
                
                MOV BYTE PTR ES:[BX][SI],20H        ;空格
                
                MOV AX,84[DI]                                        ;收入
                MOV ES:[BX].5,AX
                ADD DI,2
                MOV DX,84[DI]
                MOV ES:[BX].7,DX
                ADD DI,2                                                ;为下次做准备
                
                MOV BYTE PTR ES:[BX].9,20H                ;空格
                
                MOV BX,168[BP]                                        ;雇员数
                MOV ES:[BX].0AH,BX
                ADD BP,2
                
                MOV BYTE PTR ES:[BX].0BH,20H        ;空格
                
                DIV WORD PTR ES:[BX].10                        ;平均收入
                MOV ES:[BX].0DH,AX
                
                MOV BYTE PTR ES:[BX][SI],20H        ;空格
                
                ADD BX,10H
                POP CX
                LOOP S
                
CODES ENDS
END START
chinatree
[第1楼]   [ 回复时间:2012-12-03 00:28 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
除0了,自己检查和调试吧。
dj_hb
[第2楼]   [ 回复时间:2012-12-03 21:44 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-12-01 11:13
现在知道了。有很多问题。
①没“程序返回”
②年份结果中SI变了,送的位置变了。
③雇员数没有把段地址设为ES
④MOV CX,21H;应该是21
dj_hb
[第3楼]   [ 回复时间:2012-12-07 22:33 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-12-01 11:13
下面的应该能解决。
        DATAS  SEGMENT
              DB        '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982'
              DB        '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990'
              DB        '1991', '1992', '1993', '1994', '1995'
    
              DD        16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
              DD        345980,590827,803530,118300,184300,2759000,3753000,4649000,5937000
    
              DW        3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
              DW        11542,14430,15257,17800
        DATAS  ENDS

    TABLE  SEGMENT
              DB        21 DUP ('year summ ne ?? ')
    TABLE  ENDS

    STACKS  SEGMENT
              DB 16 DUP (0)
    STACKS  ENDS

ASSUME    CS:CODES,DS:DATAS,SS:STACKS,ES:TABLE 
CODES SEGMENT
START:        MOV AX,DATAS
                MOV DS,AX
                MOV AX,TABLE
                MOV ES,AX
                MOV AX,STACKS
                MOV SS,AX
                
                MOV SP,16
                MOV CX,21
                MOV BX,0
                MOV SI,0
                MOV BP,0
                MOV DI,0
                
S:                PUSH CX        
        
                MOV AX,[SI]                                                ;年份
                MOV ES:[BX],AX
                ADD SI,2
                MOV AX,[SI]
                MOV ES:[BX+2],AX
                ADD SI,2
                
                MOV AX,84[DI]                                        ;收入
                MOV ES:[BX].5,AX
                ADD DI,2
                MOV DX,84[DI]
                MOV ES:[BX].7,DX
                ADD DI,2                                                ;为下次做准备
                
                
                MOV CX,DS:168[BP]                                        ;雇员数
                MOV ES:[BX].0AH,CX
                ADD BP,2
                
                
                DIV WORD PTR ES:[BX].10                        ;平均收入
                MOV ES:[BX].0DH,AX
                
                
                ADD BX,10H
                POP CX
                LOOP S
                
                MOV AX,4C00H
                INT 21H
                
CODES ENDS
END START
dj_hb
[第4楼]   [ 回复时间:2012-12-07 22:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-12-01 11:13
此贴由 贴主 于 [ 2012-12-07 22:34 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved