求助,输出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]]
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 写的 可能和 LZ 的想法不一样 只看了一下.比较cmp al,' '
jg output这里就有问题.得用无符号比较.ja
如果用jg,64就是10000000,都成负数了.然后就有给AL赋32,所以你输出的一直是那些字符
[[italic] 本帖最后由 zhoulikelvjj 于 2007-12-4 22:38 编辑 [/italic]] 我改成JA OUTPUT也是一样的结果啊 MOV DL,0DH
MOV AH,2
INT 21H
调用21H中断的02子程序,显示的字符会作为返回值放到al中,也就是说,上面3句执行完后,al=0DH,所以每次都是输出那些东西 多谢! 问题我已经解决了,代码如下:
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
页:
[1]
