| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1071 人关注过本帖
标题:三个数之和
取消只看楼主 加入收藏
xiaxin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-10-21
收藏
 问题点数:0 回复次数:2 
三个数之和
求三个数之和。
DATA  SEGMENT
         BUF  DW        1234H,2345H,3456H
         SUM  DW        ?
DATA  ENDS
CODE SEGMENT
    ASSUME  CS:CODE, DS:DATA
     START: mov  ax, DATA;数据首地址
                  mov  dx, ax
                   mov  si, offset BUF
                   mov  di, offset SUM
                   call SUM1
                   mov  ah, 4ch
                   int  21h
       SUM1     proc
                mov cl, 3
                  xor  ax, ax
                 mov ax, [si]
  NEXT:  add  si, 2
               add  ax,[si]
               loop NEXT
                mov  [di], ax
                mov   al,byte ptr[di+1];取高字节,为转换为ASCII准备
                call  dip
                mov   al,byte ptr[di];取低字节
                call  dip
                   ret
      SUM1  ENDP
    dip  proc
                mov bl,al    ;保存al的数据
                and al, 0f0h ;取高4位
                mov cl, 04h
                shr al, cl
                cmp al, 09   ;高四位与9比较
                ja  aa1      
                add al,30h     ;小于10的加30h
                jmp bb1      ;无条件跳转到bb
            aa1: add al,37h   ;大于10,为十六进制,加37h
            bb1: mov  dl, al  ;显示高字节
                 mov  ah, 02h  
                int 21h
                mov al, bl   
                and al,0fh   ;读取低字节
                cmp al, 09h
                ja aa2  
                add al, 30h
                jmp  bb2
            aa2: add al, 37h
            bb2: mov dl,al
                 mov ah,02h
                 int 21h
                 ret
             dip endp
               
CODE ENDS
     END START
             这段程序反汇编时为什么  只执行到mov  [di], ax呢,输出结果也是错的,错在哪里?
搜索更多相关主题的帖子: 之和 
2008-11-18 23:03
xiaxin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-10-21
收藏
得分:0 
DATA  SEGMENT
         BUF  DW        1234H,2345H,3456H
         SUM  DW        ?
DATA  ENDS
CODE SEGMENT
   ASSUME  CS:CODE, DS:DATA
   START:       mov  ax, DATA;数据首地址
                mov  dx, ax
                mov  si, offset BUF
                mov  di, offset SUM
                mov cx, 2
                mov ax, [si]
   NEXT:        add  si, 2
                add  ax,[si]
                loop NEXT
                mov  [di], ax
                mov   al,byte ptr [di+1];取高字节,为转换为ASCII准备
                call  dip
                mov   al,byte ptr [di];取低字节
                call  dip
                mov  ah, 4ch
                int  21h
 dip  proc
                mov bl,al    ;保存al的数据
                and al, 0f0h ;取高4位
                mov cl, 04h
                shr al, cl
                cmp al, 9   ;高四位与9比较
                ja  aa1      
                add al,30h     ;小于10的加30h
                jmp bb1      ;无条件跳转到bb
            aa1: add al,37h   ;大于10,为十六进制,加37h
            bb1: mov  dl, al  ;显示高字节
                mov  ah, 2
                int  21h
                mov al, bl   
                and al,0fh   ;读取低字节
                cmp al, 9
                ja aa2  
                add al, 30h
                jmp  bb2
            aa2: add al, 37h
            bb2: mov dl,al
                 mov ah,2
                 int 21h
                 Ret
    dip endp
               
 CODE ENDS
     END START
把上面的程序改为它后,进行反汇编为:
-u
0B97:0000 B8960B        MOV     AX,0B96
0B97:0003 8BD0          MOV     DX,AX
0B97:0005 BE0000        MOV     SI,0000
0B97:0008 BF0600        MOV     DI,0006
0B97:000B B90200        MOV     CX,0002
0B97:000E 8B04          MOV     AX,[SI]
0B97:0010 83C602        ADD     SI,+02
0B97:0013 0304          ADD     AX,[SI]
0B97:0015 E2F9          LOOP    0010
0B97:0017 8905          MOV     [DI],AX
0B97:0019 8A4501        MOV     AL,[DI+01]
0B97:001C E80900        CALL    0028
0B97:001F 8A05          MOV     AL,[DI]
无论数据为多少,输出结果总是5ACC
为什么会使这种情况呢?
2008-11-19 16:09
xiaxin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-10-21
收藏
得分:0 
"循环3次?还有,loop以cx为循环,ch里是什么呢?"需要说明的是我只占用cl并给它赋值为2,ch根本就没有使用。
2008-11-22 23:46
快速回复:三个数之和
数据加载中...
 
   



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

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