读书人

输出乱码解决方法

发布时间: 2013-01-07 10:02:24 作者: rapoo

输出乱码

DATA segment
MAXLEN db 11
INPTLEN db ?
STR1 db 11 dup(0)
STR2 db 11 dup(0)

DATA ends
STACK1 SEGMENT STACK
dw 40hdup(0)
STACK1 ends
CODE segment

assume cs:CODE,ds:DATA,ss:STACK1
start:mov ax,DATA
mov ds,ax
lea dx,MAXLEN
mov ah,0ah

int 21h
call SHIYAN5
mov dl,0dh
mov ah,02h
int 21h

lea dx,STR2
mov ah,09h
int 21h
mov ah,4ch
int 21h

SHIYAN5 PROC
PUSHF
PUSH BX
PUSH CX
PUSH SI

PUSH DI
XOR CX,CX
MOV CL,INPTLEN
LEA SI,STR1
LEA DI,STR2

DEC SI
L1: INC SI
CMP BYTE PTR[SI],30H
JAE L2
JMP L6

L2: CMP BYTE PTR[SI],39H
JA L3
LOOP L1
L3: CMP BYTE PTR[SI],41H
JAE L4

JMP L6
L4: CMP BYTE PTR[SI],5AH
JA L6
L5: ADD BYTE PTR[SI],20H
L6: MOV BX,[SI]

MOV [DI],BX
INC DI
LOOP L1
LEA SI,STR2
CMP SI,DI

JB L7
MOV BYTE PTR[SI],'?'
L7: POP DI
POP SI
POP CX

POP BX
POPF
RET
SHIYAN5 ENDP
CODE ENDS
END start


我用debug调试后反汇编,可以看出STR2的偏移量为000D

输入字符串(如hello)后,可以用-d 000D 看出数据确实已经变为hello

可是输出却乱码
[解决办法]
不输出?debug 的 p 却可以,说明什么?你没有换行的操作(输入内容后只再次显示了个回车),所以后来的显示覆盖在了输入的上面,由于两者一样,就没能表现出来。

读书人网 >汇编语言

热点推荐