| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2348 人关注过本帖
标题:求助,输出ASCII码问题
只看楼主 加入收藏
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
结帖率:37.5%
收藏
 问题点数:0 回复次数:7 
求助,输出ASCII码问题
下面是我的程序,可怎么输出的都是
!"#$%&'()*+,-./
!"#$%&'()*+,-./
!"#$%&'()*+,-./
!"#$%&'()*+,-./
!"#$%&'()*+,-./
......重复16次
到底什么地方错了?
为什么每次循环的时候AL就会恢复成0?
要怎么改?
DATAS SEGMENT
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV CL,0 ;行,外层循环
    MOV CH,0 ;列,内层循环
    MOV AL,0 ;ASCII码
LOOPA:   
    CMP CL,16
    JE EXIT
    MOV DL,0AH
    MOV AH,2
    INT 21H
    MOV DL,0DH
    MOV AH,2
    INT 21H
LOOPB:
CMP CH,16
JE NEXTB
CMP AL,' '
JG  OUTPUT
MOV AL,32
OUTPUT:
MOV DL,AL
MOV AH,2
INT 21H
INC AL
inc CH
JMP LOOPB
NEXTB:
MOV CH,0
INC CL
NEXTA: JMP LOOPA
EXIT:
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

C语言描述
#include "stdio.h"
void main()
{
 int i,j,k=0;
 for(i=0;i<16;i++)
 {
  printf("\n");
  for(j=0;j<16;j++){
   if(k<=32) printf("  ");
   else
   printf("  %c",k);
   k++;
  }
 }
   
}

[[italic] 本帖最后由 三断笛 于 2007-12-4 12:49 编辑 [/italic]]
搜索更多相关主题的帖子: ASCII MOV STACKS SEGMENT DATAS 
2007-12-04 11:37
kr^zHaYj
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-11-25
收藏
得分:0 
;把你要输出的传放到 string里,根据串的长度,设置cx,
dseg segment
    string db 'abcde'
dseg ends

cseg segment
    assume cs:cseg,ds:dseg

start:  mov ax,dseg
    mov ds,ax

        mov bx,offset string
        mov cx,0006h
out_again:    xor ax,ax    ;si 是指针 每次循环指向 头部
        mov si,ax
        push cx        ;  保存 外部 循环次数    
        mov cx,0005h
in_again:    push cx          ;  保存 内部 循环次数
        mov dl,[bx+si]    ;
        mov ah,2
        int 21h
        inc si        ;指针下移
        pop cx           ;取出
        loop in_again

        mov dl,0ah        ; 回车,换行
        mov ah,2
        int 21h
        mov dl,0dh         
        mov ah,2
        int 21h
        pop cx             ;取出
        loop out_again
        
        mov ax,4c00h
        int 21h    
cseg ends
    end start
2007-12-04 12:42
kr^zHaYj
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-11-25
收藏
得分:0 
写的 可能和 LZ 的想法不一样
2007-12-04 12:44
zhoulikelvjj
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-4-10
收藏
得分:0 
只看了一下.比较cmp al,' '
jg output这里就有问题.得用无符号比较.ja
如果用jg,64就是10000000,都成负数了.然后就有给AL赋32,所以你输出的一直是那些字符

[[italic] 本帖最后由 zhoulikelvjj 于 2007-12-4 22:38 编辑 [/italic]]
2007-12-04 22:33
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
收藏
得分:0 
我改成JA OUTPUT也是一样的结果啊
2007-12-05 11:44
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
MOV DL,0DH
    MOV AH,2
    INT 21H

调用21H中断的02子程序,显示的字符会作为返回值放到al中,也就是说,上面3句执行完后,al=0DH,所以每次都是输出那些东西

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-12-05 12:31
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
收藏
得分:0 
多谢!
2007-12-06 11:03
wolaixiazai
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-4-11
收藏
得分:0 
问题我已经解决了,代码如下:
DATA SEGMENT
DATA ENDS
STACK SEGMENT
STACK ENDS
CODE SEGMENT
    ASSUME CS:CODE,DS:DATA,SS:STACK
START:
      MOV AX,DATA
      MOV DS,AX
      MOV BX,0 ;ASCII码
      MOV CX,8 ;行,外层循环
LOOPA:XOR AX,AX
      MOV SI,AX
      PUSH CX
      MOV CX,16 ;列,内层循环
LOOPB:PUSH CX
      CMP BX,32
      JA OUTPUT
      MOV DL,' '   
      MOV AH,2
      INT 21H
      JMP TO
OUTPUT:
      MOV DX,BX   
      MOV AH,2
      INT 21H
TO:   INC BX
      INC SI
      POP CX
      LOOP LOOPB

      MOV DL,0AH
      MOV AH,2
      INT 21H
      MOV DL,0DH
      MOV AH,2
      INT 21H
     
      POP CX
      LOOP LOOPA

      MOV AH,4CH
      INT 21H
CODE ENDS
    END START
2007-12-06 17:30
快速回复:求助,输出ASCII码问题
数据加载中...
 
   



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

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