
汇编语言输出ASCII码表各位高手帮我看一下哪出问题了运行不出结果2,7,8,9,0A,0D空格横向加10H纵加01H
STACKSEGMENTSTACKDB10DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACKSTART:MOVBL,00HM...
STACK SEGMENT STACK
DB 10 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE ,SS:STACK
START: MOV BL,00H
MOV AL,BL
MOV CH,10H
MOV AL,BL
LOOP1: PUSH BX
MOV CL,10H
LOOP2: ADD AL,10H
JMP COMPARE
MOV DL,AL
MOV AH,2
INT 21H
JNZ LOOP2
MOV DL,0DH
MOV AH,2
INT 21H
DEC CH
POP BX
ADD BL,01H
JMP LOOP1
COMPARE:CMP AL,32H
JZ LOOP3
CMP AL,37H
JZ LOOP3
CMP AL,38H
JZ LOOP3
CMP AL,39H
JZ LOOP3
CMP AL,0AH
JZ LOOP3
CMP AL,0DH
JZ LOOP3
RET
LOOP3: MOV DL,' '
MOV AH,2
INT 21H
CODE ENDS
END START
2,7,8,9,0A,0D用空格表示 横向的ASCII码相邻两个加10H,纵向相邻两个加01H 展开
DB 10 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE ,SS:STACK
START: MOV BL,00H
MOV AL,BL
MOV CH,10H
MOV AL,BL
LOOP1: PUSH BX
MOV CL,10H
LOOP2: ADD AL,10H
JMP COMPARE
MOV DL,AL
MOV AH,2
INT 21H
JNZ LOOP2
MOV DL,0DH
MOV AH,2
INT 21H
DEC CH
POP BX
ADD BL,01H
JMP LOOP1
COMPARE:CMP AL,32H
JZ LOOP3
CMP AL,37H
JZ LOOP3
CMP AL,38H
JZ LOOP3
CMP AL,39H
JZ LOOP3
CMP AL,0AH
JZ LOOP3
CMP AL,0DH
JZ LOOP3
RET
LOOP3: MOV DL,' '
MOV AH,2
INT 21H
CODE ENDS
END START
2,7,8,9,0A,0D用空格表示 横向的ASCII码相邻两个加10H,纵向相邻两个加01H 展开
2个回答
展开全部
首先ASCII 是一个char,[-128~127]区间
0-127 是普通ASCII,又分为可打印字符和不可打印的控制字符.
不可打印的有'\n'(10) '\r'(13) '\t','\b'等,用作打印控制的,所以前面不完整是正常的,比如你输出到13的时候,光标会移动到这一行的开头重新打印,这样会覆盖一些内容.
ASCII小于0的,用作MultiBytes,如果两个ASCII,第一个是负数,那么它会跟后面的一个字符连接,组成Multibytes,显示为系统语言代码页的字符.windows中文的语言默认的语言代码页是中文(936).所以显示中文.
0-127 是普通ASCII,又分为可打印字符和不可打印的控制字符.
不可打印的有'\n'(10) '\r'(13) '\t','\b'等,用作打印控制的,所以前面不完整是正常的,比如你输出到13的时候,光标会移动到这一行的开头重新打印,这样会覆盖一些内容.
ASCII小于0的,用作MultiBytes,如果两个ASCII,第一个是负数,那么它会跟后面的一个字符连接,组成Multibytes,显示为系统语言代码页的字符.windows中文的语言默认的语言代码页是中文(936).所以显示中文.
展开全部
你这要完成什么?屏蔽"2"、"7"、"8"、"9"简直匪夷所思。
如果要显示ASCII码表,那么小于20H(即空格)的全为控制字符,还有7FH,它们需要转换,从20H~7EH直接输出即可。
还有,堆栈不要设置的太小(王爽汇编的通病)否则在某些平台下会出现堆栈溢出。
程序也有不少问题
到JMP COMPARE后就回不来了
还有——
MOV AL,BL
MOV CH,10H
MOV AL,BL
这在干嘛?
=======================
.model tiny
code segment
assume cs:code,ds:code
Start:push cs
pop ds
xor dx,dx
L1:cmp dl,' '
jnb @F
mov dl,' ';小于20H的转成' '显示
@@:push dh
mov ah,2
int 21H
pop dh
inc dh
mov dl,dh
cmp dl,7FH
jb L1
mov dl,' ';7FH也是非显示字符,要转成' '
mov ah,2
int 21H
mov ax,4C00H
int 21H
code ends
end Start
如果要显示ASCII码表,那么小于20H(即空格)的全为控制字符,还有7FH,它们需要转换,从20H~7EH直接输出即可。
还有,堆栈不要设置的太小(王爽汇编的通病)否则在某些平台下会出现堆栈溢出。
程序也有不少问题
到JMP COMPARE后就回不来了
还有——
MOV AL,BL
MOV CH,10H
MOV AL,BL
这在干嘛?
=======================
.model tiny
code segment
assume cs:code,ds:code
Start:push cs
pop ds
xor dx,dx
L1:cmp dl,' '
jnb @F
mov dl,' ';小于20H的转成' '显示
@@:push dh
mov ah,2
int 21H
pop dh
inc dh
mov dl,dh
cmp dl,7FH
jb L1
mov dl,' ';7FH也是非显示字符,要转成' '
mov ah,2
int 21H
mov ax,4C00H
int 21H
code ends
end Start
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询