当前位置: 代码迷 >> 汇编语言 >> []汇编DEBUG的G命令有关问题
  详细解决方案

[]汇编DEBUG的G命令有关问题

热度:5852   发布时间:2013-02-26 00:00:00.0
[求助]汇编DEBUG的G命令问题



TITLE TABLE
.MODEL SMALL
.STACK 64
.DATA
YEAR DB '1975','1976','1977','1978','1979','1980','1981','1982','1983','9184'
DB '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'
SUME DD 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417
DD 197514,345980,590827,803530,1183000,1843000,3759000,3753000,4649000,5937000
EMPL dw 3,7,9,13,28,38,130,220,476,778,1001
dw 1442,2258,3793,4037,5635,8226,11542,14430,15257,17800

TABLE DB 21 DUP('YEAR SUME NE ?? ')
.CODEMAIN PROC FAR

MOV AX,@DATA
MOV DS,AX


LEA SI,YEAR
LEA DI,TABLE
MOV CX,21*2
CALL SETDATA

LEA SI,SUME
LEA DI,TABLE
ADD DI,5
MOV CX,21*2
CALL SETDATA

LEA SI,EMPL
LEA DI,TABLE
ADD DI,10
MOV CX,21
CALL SETDATA

LEA SI,SUME
LEA DI,EMPL
LEA BX,TABLE
ADD BX,13
MOV CX,21
CALL DIVI

MOV AX,4C00H
INT 21H
MAIN ENDP
;--------------------------------------------

SETDATA PROC NEAR

CMP CX,21
JE A20

A10: MOV AX,[SI] ;YEAR和SUME调用这段
MOV [DI],AX
ADD SI,2
MOV AX,[SI]
MOV [DI+2],AX
ADD SI,2
ADD DI,16
LOOP A10
RET

A20: MOV AX,[SI] ;EMPL调用这段
MOV [DI],AX
ADD SI,2
ADD DI,16
LOOP A20
RET
SETDATA ENDP

DIVI PROC NEAR

B10: MOV DX,[SI+2] ;SUME/EMPL,商保存在table段中,忽略余数
MOV AX,[SI]
DIV WORD PTR [DI]
MOV [BX],AX
ADD SI,2
ADD DI,2
ADD BX,16
LOOP B10
RET
DIVI ENDP
END MAIN




























------解决方案--------------------------------------------------------
程序开始处的 MOV CX,21*2 有问题吧,在子程里应该恢复实际的数据个数的,否则采用简洁段定义时,处理数据超范围了,会将后面的堆栈内容覆盖,从而导致子程的返回地址错误。
  相关解决方案