| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3807 人关注过本帖
标题:带进位ADC指令的问题
只看楼主 加入收藏
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
结帖率:92.31%
收藏
已结贴  问题点数:20 回复次数:10 
带进位ADC指令的问题
自己写了个简单的4字节加法程序,从运行结果看,用了ADC,但电脑没有把进位加进去.
45218763H+62578453H应该等于A7790BB6吧,但运行结果是A7780BB6,汇编菜鸟,求大神帮助啊!
DATA SEGMENT
    VAR1 DD 45218763H
    VAR2 DD 62578453H
    VAR3 DD 00000000H,"$"
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
    CLC
    LEA SI,VAR1
    INC SI
    INC SI
    MOV AX,DS:[SI]
    LEA SI,VAR2
    INC SI
    INC SI
    ADC AX,DS:[SI]
    LEA SI,VAR1
    MOV DX,DS:[SI]
    LEA SI,VAR2
    ADC DX,DS:[SI]
    LEA SI,VAR3
    MOV DS:[SI],DX
    INC SI
    INC SI
    MOV DS:[SI],AX
    MOV DX,OFFSET VAR3
    MOV AH,09H
    INT 21H
    MOV AH,4CH
    INT 21H
CODE ENDS
END START
2012-08-10 18:13
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
收藏
得分:0 
怎么总是没人回答a???
2012-08-10 18:32
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
收藏
得分:0 
....
2012-08-10 18:36
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:5 
王爽的书都还没看完 不懂 帮顶!

梅尚程荀
马谭杨奚







                                                       
2012-08-10 18:37
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:15 
以下是引用Agdmeg在2012-8-10 18:32:09的发言:

怎么总是没人回答a???

为啥没人答 因为你的程序思路不清晰 看不懂 所以没人答 不知道你自己思路清晰不清晰 我就不改你的程序了 再写一个

程序代码:

DATA SEGMENT
    VAR1 DD 45218763H
    VAR2 DD 62578453H
    VAR3 DD 00000000H,"$"
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
   
    clc
    mov ax, WORD ptr [VAR1]
    adc ax, WORD ptr [VAR2]
    mov WORD ptr [VAR3], ax
   
    mov ax, WORD ptr [VAR1+2]
    adc ax, WORD ptr [VAR2+2]
    mov WORD ptr [VAR3+2], ax
   
    MOV AH,4CH
    INT 21H
CODE ENDS
END START



为啥你的不行呢 因为这个进位标志位会被某些指令重置 故而adc指令之间不要有太多的指令 你写了很多 所以会出错
2012-08-10 21:46
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
收藏
得分:0 
谢谢大神,编译测试的确是A7790BB6,但我程序中到底哪些指令会重置CF?我用的这些指令在书上没有说会重置CF啊?
2012-08-11 00:39
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
收藏
得分:0 
书上只有INC指令说:会影响AF,OF,PF,SF,但对CF不影响
2012-08-11 00:44
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
收藏
得分:0 
我将代码稍微改了下,运行测试成功
DATA SEGMENT
    VAR1 DD 45218763H
    VAR2 DD 62578453H
    VAR3 DD 00000000H,"$"
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
    CLC
    LEA SI,VAR1
    MOV AX,DS:[SI]
    LEA SI,VAR2
    ADD AX,DS:[SI]
    LEA SI,VAR1
    MOV DX,DS:[SI+2]
    LEA SI,VAR2
    ADC DX,DS:[SI+2]
    LEA SI,VAR3
    MOV DS:[SI],AX
    INC SI
    INC SI
    MOV DS:[SI],DX
    MOV DX,OFFSET VAR3
    MOV AH,09H
    INT 21H
    MOV AH,4CH
    INT 21H
CODE ENDS
END START   
2012-08-11 02:19
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
收藏
得分:0 
我知道出错原因了,我原来的代码先将高4位相加,也就是4521H+6257H,没有产生进位,然后再用ADC相加低四位8763H+8453H,这次产生了进位,但我的加法运算在此结束,所以最终导致进位没有加上,于是我将高4位、低四位的顺序换一下,最终运行结果正确了
2012-08-11 02:37
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
DATA SEGMENT
     VAR1 DD 45218763H
     VAR2 DD 62578453H
     VAR3 DD 00000000H,"$"
 DATA ENDS
 
CODE SEGMENT
     ASSUME CS:CODE,DS:DATA
 START:
     MOV AX,DATA
     MOV DS,AX
     CLC            ;cf=0
     LEA SI,VAR1    ;si=VAR1偏移
     INC SI         ;从高位相加,记住CPU一般使用小尾顺序的,所以SI+2 就指向了高地址
     INC SI        
     MOV AX,DS:[SI] ;将4521传送给AX
     LEA SI,VAR2    ;si==VAR2偏移
     INC SI         ;inc不影响CF进位标志
     INC SI         
     ADC AX,DS:[SI] ;4521+6257+CF, 没有测试过,进位不知道加到AX中还是DX中了
     LEA SI,VAR1    ;以下就不多注释了
     MOV DX,DS:[SI]  
     LEA SI,VAR2
     ADC DX,DS:[SI]
     LEA SI,VAR3
     MOV DS:[SI],DX
     INC SI
     INC SI
     MOV DS:[SI],AX
     MOV DX,OFFSET VAR3
     MOV AH,09H
     INT 21H
     MOV AH,4CH
     INT 21H
 CODE ENDS
 END START
2012-08-17 11:23
快速回复:带进位ADC指令的问题
数据加载中...
 
   



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

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