CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  汇编语言

一个汇编程序的输出问题,请指教

楼主Sniper167(啥都不会)2004-12-01 21:35:39 在 其他开发语言 / 汇编语言 提问

DATA     SEGMENT  
              NUM1   DB   22H,33H,44H,55H,66H,77H  
              NUM1L   DB   6  
              NUM2   DB   22H,22H,22H,22H  
              NUM2L   DB   4  
  DATA     ENDS  
  STACK1   SEGMENT   PARA   STACK  
                DW   20H   DUP(0)  
  STACK1   ENDS  
  CODE     SEGMENT  
              ASSUME   CS:CODE,DS:DATA,SS:STACK1  
  START:MOV   AX,DATA  
              MOV   DS,AX  
              MOV   CH,0  
              MOV   SI,OFFSET   NUM1  
              MOV   DI,OFFSET   NUM2  
              MOV   AH,NUM1L  
              MOV   AL,NUM2L  
              CMP   AH,AL  
              JAE   CHA  
              XCHG   SI,DI  
              XCHG   AH,AL                                                                      
  CHA:     SUB   AH,AL  
              MOV   CL,AL  
              CLC  
  LOP1:   MOV   AL,[DI]  
              ADC   [SI],AL  
                                     
               
              MOV     AX,[SI]  
  DIVID:MOV     AH,   0  
              MOV     BL,   10  
              DIV     BL                              
              MOV     BL,AH                          
              MOV     DL,AL                        
              cmp     DL,10  
              JGE     DIVID  
              ADD     DL,30H                      
              MOV     AH,   02  
              INT     21H                              
              MOV     DL,BL                      
              ADD     DL,30H                      
              MOV     AH,02  
              INT     21H                              
              MOV     DL,','    
              MOV     AH,   02  
              INT     21H                              
              INC   SI    
              INC   DI  
              LOOP   LOP1  
              MOV   CL,AH  
              JCXZ   NEXT2  
  LOP2:   ADC   BYTE   PTR   [SI],0  
              MOV     AX,[SI]  
              MOV     AH,   0  
              MOV     BL,   10  
              DIV     BL                                  
              MOV     BL,AH                        
              MOV     DL,AL                        
              ADD     DL,30H                    
              MOV     AH,   02  
              INT     21H                            
              MOV     DL,BL                      
              ADD     DL,30H                      
              MOV     AH,02  
              INT     21H                            
              MOV     DL,','    
              MOV     AH,   02  
              INT     21H                              
              INC   SI  
              LOOP   LOP2  
  NEXT2:   MOV   AH,4CH  
              INT   21H  
  CODE     ENDS  
              END   START  
   
  -----------------------------------------  
  输出结果本来应该是  
  68,85,102,119,102,119,的    
  可实际输出却是  
  68,85,10,11,;2,;9,  
   
  请问怎么改正才能正确输出呢?  
  谢谢 问题点数:50、回复次数:7Top

1 楼VxD1(Dump)回复于 2004-12-02 17:13:55 得分 0

帮你up,太长了Top

2 楼clumsy(Kyrie eleison)回复于 2004-12-02 19:21:13 得分 10

原因在于显示数值时,   没有考虑多于   2   位数的情况吧.   第一组的输出,   只是输出了最前面的两位数字;   第二组时,   则直接就按照   2   位数的要求输出了.   所以出现了结果不对的现象.   一般地,   还是建议把显示数值作为一个独立的子程来做.   具体的方法,   可以搜索一下这里的以前的帖子.Top

3 楼Sniper167(啥都不会)回复于 2004-12-02 21:16:41 得分 0

如果不把显示数值作为一个独立的子程序来做,请问在上面的哪个程序里怎么改正?  
  谢谢Top

4 楼xwdd129(高手就是:不出手)回复于 2004-12-03 15:57:27 得分 10

那就需要你自己知道要显示的数值都是几位的,然后再分别读取!!Top

5 楼Sniper167(啥都不会)回复于 2004-12-03 22:00:00 得分 0

有两位的  
  也有三位的Top

6 楼clumsy(Kyrie eleison)回复于 2004-12-04 08:33:09 得分 30

基于多个理由,   还是考虑写个通用点儿的输出数值的子程比较合理.   否则,   按照你上面的代码的思路,   实现起来比较繁琐,   要么就是显示效果不好.   你看看下面的子程,   这是以前有在这里贴出来的:    
  ;   display   the   unsigned   integer   value   in   AX  
  dec2asc proc  
  push ax  
  push dx  
  push cx  
  mov dx,   -1 ;   flag   of   ending  
  push dx ;   flag   to   stack  
  mov cx,   10  
  l_div10:  
  xor dx,   dx  
  div cx ;   DX:AX   /   CX  
  push dx ;   remainder   to   stack  
  test ax,   ax ;   quotient   is   zero?    
  jne l_div10  
  mov cx,   -1  
  mov ah,   2 ;   display   character   in   DL  
  l_disp:  
  pop dx  
  cmp dx,   cx  
  je l_ret  
  add dl,   '0' ;   one-digit   value   turns   to   character  
  int 21h ;   display   the   digit  
  jmp l_disp  
  l_ret:  
  pop cx  
  pop dx  
  pop ax  
  ret  
  dec2asc endpTop

7 楼jk88811(你的就是我的,我的还是我的~!)回复于 2004-12-04 11:59:54 得分 0

楼上的有理Top

相关问题

  • 请问怎么编汇编程序
  • 高分请汇编程序员帮忙
  • 请教:汇编程序返回值
  • 又一汇编程序,请求帮助!!!
  • 请问如何在CB中调用汇编程序?
  • 请问哪有casl汇编程序设计这本书download
  • 请问:怎样在程序中加入汇编程序
  • 请问linux里的汇编程序是拿gcc编译的吗?
  • 请问如何跟踪,调试汇编程序??谢谢
  • 请帮我改一下这个汇编程序!!!

关键词

  • 数值
  • db
  • ah
  • 输出
  • mov
  • dl
  • bl
  • si
  • al
  • lop

得分解答快速导航

  • 帖主:Sniper167
  • clumsy
  • xwdd129
  • clumsy

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo