首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

输出乱码解决方法

2013-01-07 
输出乱码DATA segmentMAXLEN db 11INPTLEN db ?STR1 db 11 dup(0)STR2 db 11 dup(0)DATA endsSTACK1 SEGME

输出乱码

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 却可以,说明什么?你没有换行的操作(输入内容后只再次显示了个回车),所以后来的显示覆盖在了输入的上面,由于两者一样,就没能表现出来。

热点排行