| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 508 人关注过本帖
标题:求助:帮我改个加法程序
只看楼主 加入收藏
chchb
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-29
结帖率:0
收藏
已结贴  问题点数:10 回复次数:4 
求助:帮我改个加法程序
CRLF   MACRO                ;定义回车换行的宏命令   宏指令名crlf
       MOV   DL,0DH
       MOV   AH,02H
       INT   21H                        ;int 21h 执行功能调用
       MOV   DL,0AH
       MOV   AH,02H  
       INT   21H
       ENDM
 
DATA   SEGMENT               ;定义数据段       segment定义段,段名为segment
DATA1  DB   20 DUP(?)        ;加数
DATA2  DB   20 DUP(?)         ;被加数
DATA   ENDS

STACK  SEGMENT               ;堆栈段
STA    DB  20  DUP(?)
TOP    EQU   LENGTH   STA
STACK  ENDS  

CODE   SEGMENT                ;程序段
       ASSUME   CS:CODE,DS:DATA,SS:STACK,ES:DATA              ;assume规定段所属的段寄存器


START: MOV AX,DATA            ;数据段地址DS
       MOV DS,AX
       MOV AX,STACK            ;确定堆栈
       MOV SS,AX
       MOV AX,TOP
       MOV SP,AX
      
       MOV BX,02               
       MOV SI,OFFSET DATA1                 ;设置指针
       CALL INPUT                     ;调用输入函数INPUT
       CRLF

       MOV BX,02               ;调用输入函数
       MOV SI,OFFSET DATA2
       CALL INPUT
       CRLF
       CRLF

       MOV   SI,OFFSET  DATA2           ;显示被加数
       MOV  BX,02                      ;2位
       CALL DISPL        
       CRLF

       MOV  SI,OFFSET DATA1             ;取加数地址,显示加数
       MOV  BX,02
       CALL DISPL
       CRLF

       MOV  DI,OFFSET  DATA2          ;取被加数首址
       CALL ADDA                         ;执行加法
       MOV  SI,OFFSET  DATA1               ;显示结果
       MOV  BX,02
       CALL  DISPL
       CRLF
       MOV  AX,4C00H                        ;程序结束   返回DOS
       INT  21H

DISPL PROC NEAR                    ;proc指示过程开始,过程名proc  near定义近指针
DSI:  MOV AH,02
      MOV DL,[SI+BX-1]                     
      INT 21H                           ;这三句为显示输出,被输出的字符送DL
      DEC BX
      JNZ DSI
      RET                          ;返回DOS,不过是有条件的,
      DISPL ENDP

ADDA PROC NEAR     
     MOV  DX,SI
     MOV  BP,DI
     MOV  BX,02

AD1: SUB BYTE PTR[SI+BX-1],30H             ;byte指示字节长度的操作数  byte ptr
     SUB BYTE PTR[DI+BX-1],30H
     DEC BX
     JNZ AD1
     MOV SI,DX   
     MOV DI,BP
     MOV CX,02
     CLC           

AD2: MOV AL,[SI]
     MOV BL,[DI]
     ADC AL,BL
     AAA
     MOV [SI],AL
     INC SI
     INC DI                                  ;inc加,dec减
     LOOP AD2
     MOV SI,DX
     MOV DI,BP
     MOV BX,02

AD3: ADD BYTE PTR[SI+BX-1],30H
     ADD BYTE PTR[DI+BX-1],30H
     DEC  BX
     JNE  AD3
     RET

INPUT PROC NEAR              ;函数的输入
IN1:MOV AH,01
    INT 21H                           ;这两句,从键盘输入数,并回显    字符到AL,AL中为ASCII码
    MOV [SI],AL
    INC SI
    DEC BX
    JNZ IN1                             ;in1为0时循环结束
    RET
INPUT ENDP

ADDA ENDP
CODE ENDS
     END START




这个程序我想是输入12+12等于24的,是我输出的是21+21=42    有谁能帮我看一下哪里出了吗?

[ 本帖最后由 chchb 于 2012-10-30 22:21 编辑 ]
搜索更多相关主题的帖子: 宏命令 
2012-10-30 20:11
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
程序可以适当加点注释 然后说下自己的大致思路 不然比较突兀的让人来修改 双方交流起来也不顺畅 是不?

梅尚程荀
马谭杨奚







                                                       
2012-10-30 21:16
chchb
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-29
收藏
得分:0 
回复 2楼 有容就大
楼主,能帮帮么,已经加注了
2012-10-30 22:36
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:10 
回复 3楼 chchb
显示的问题
发个改的你对比下
程序代码:
CRLF   MACRO                ;定义回车换行的宏命令   宏指令名crlf
       MOV   DL,0DH
       MOV   AH,02H
       INT   21H                        ;int 21h 执行功能调用
       MOV   DL,0AH
       MOV   AH,02H 

       INT   21H
       ENDM

DATA   SEGMENT               ;定义数据段       segment定义段,段名为segment
DATA1  DB   20 DUP(?)        ;加数
DATA2  DB   20 DUP(?)         ;被加数
DATA   ENDS

STACK  SEGMENT               ;堆栈段
STA    DB  20  DUP(?)
TOP    EQU   LENGTH   STA
STACK  ENDS 


CODE   SEGMENT                ;程序段
       ASSUME   CS:CODE,DS:DATA,SS:STACK,ES:DATA              ;assume规定段所属的段寄存器


START: MOV AX,DATA            ;数据段地址DS
       MOV DS,AX
       MOV AX,STACK            ;确定堆栈
       MOV SS,AX
       MOV AX,TOP
       MOV SP,AX
     

       MOV BX,02              

       MOV SI,OFFSET DATA1                 ;设置指针
       CALL INPUT                     ;调用输入函数INPUT
       CRLF

       MOV BX,02               ;调用输入函数
       MOV SI,OFFSET DATA2
       CALL INPUT
       CRLF
       CRLF

       MOV   SI,OFFSET  DATA2           ;显示被加数
       MOV  BX,0                      ;2位
       CALL DISPL       

       CRLF

       MOV  SI,OFFSET DATA1             ;取加数地址,显示加数
       MOV  BX,0
       CALL DISPL
       CRLF

       MOV  DI,OFFSET  DATA2          ;取被加数首址
       CALL ADDA                         ;执行加法
       MOV  SI,OFFSET  DATA1               ;显示结果
       MOV  BX,0
       CALL  DISPL
       CRLF
       mov    ah, 01h
       int    21h
       MOV  AX,4C00H                        ;程序结束   返回DOS
       INT  21H

DISPL PROC NEAR                    ;proc指示过程开始,过程名proc  near定义近指针
DSI:  MOV AH,02
      MOV DL,[SI+BX]                    

      INT 21H                           ;这三句为显示输出,被输出的字符送DL
      INC BX
      CMP BX, 2
      JB  DSI
      RET                          ;返回DOS,不过是有条件的,
      DISPL ENDP

ADDA PROC NEAR    

     MOV  DX,SI
     MOV  BP,DI
     MOV  BX,02

AD1: SUB BYTE PTR[SI+BX-1],30H             ;byte指示字节长度的操作数  byte ptr
     SUB BYTE PTR[DI+BX-1],30H
     DEC BX
     JNZ AD1
     MOV SI,DX  

     MOV DI,BP
     MOV CX,02
     CLC          


AD2: MOV AL,[SI]
     MOV BL,[DI]
     ADC AL,BL
     AAA
     MOV [SI],AL
     INC SI
     INC DI                                  ;inc加,dec减
     LOOP AD2
     MOV SI,DX
     MOV DI,BP
     MOV BX,02

AD3: ADD BYTE PTR[SI+BX-1],30H
     ADD BYTE PTR[DI+BX-1],30H
     DEC  BX
     JNE  AD3
     RET

INPUT PROC NEAR              ;函数的输入
IN1:MOV AH,01
    INT 21H                           ;这两句,从键盘输入数,并回显    字符到AL,AL中为ASCII码
    MOV [SI],AL
    INC SI
    DEC BX
    JNZ IN1                             ;in1为0时循环结束
    RET
INPUT ENDP

ADDA ENDP
CODE ENDS
     END START 


梅尚程荀
马谭杨奚







                                                       
2012-10-31 00:28
chchb
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-29
收藏
得分:0 
太感谢版主了
2012-10-31 07:20
快速回复:求助:帮我改个加法程序
数据加载中...
 
   



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

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