Killua_kitten 2015-10-31 10:24 采纳率: 100%
浏览 4952

汇编语言输出字符串乱码??

DATA SEGMENT

BUFFER DB 40,?,40 DUP(?) ;输入缓冲区

PRINT DB 'TO INPUT:','$' ;要输出提示信息
CRLF DB 0DH,0AH,'$'
COUNT1 DB ? ;外层循环次数
COUNT2 DB ? ;内层循环次数
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA

MAIN PROC FAR ;该过程为远程型.可以在段内被调用,也可以在段间被调用
MOV AX,DATA

MOV DS,AX

    MOV   AH, 9              ;输出一串提示信息     “mov ah,9 ”是调用int 21h  的功能号
    LEA   DX, PRINT          ;lea 传送有效地址指令,把原操作数的有效地址送给指定的寄存器
    INT   21H

    MOV   AH, 0AH            ;输入一串字符
    LEA   DX, BUFFER 
    INT   21H

    MOV   AH, 9              ;输出回车换行符,以使光标停在新行首
    LEA   DX, CRLF
    INT   21H

    MOV  CL,BUFFER+1         ;取接收到的字符个数在cx中            
    XOR  CH,CH
    MOV  COUNT1,CL
    MOV  COUNT2,CL
    DEC  COUNT1
    DEC  COUNT2

    LEA  SI,BUFFER+2         ;将输入的第一个字符送给SI寄存器  
    LEA  DI,BUFFER+2         ;将输入的第一个字符送给DI寄存器

LOOP1: INC SI
MOV AL,[SI]

MOV BL,[DI]
CMP AL,BL ;对比第一个字符和后面的字符是否相等
JZ ACT1 ;若相等,执行ACT1
JMP LOOP4 ;循环

ACT1: MOV AL,0 ;将和前面字符相等的字符置为0
MOV [SI],AL
JMP LOOP4

LOOP3: INC DI
MOV COUNT2,CL
DEC COUNT2
JMP LOOP1

LOOP4: DEC COUNT2
JNZ LOOP1

    DEC COUNT1 
    JNZ LOOP3

LOOP7: MOV COUNT1,CL

LOOP5: MOV AL,[SI]
CMP AL,0
JE NO_CO
JMP LOOP6

NO_CO: INC SI
JMP LOOP8

LOOP6: MOV DL,[SI]
MOV AH,2
INT 21H
INC SI
JMP LOOP8

LOOP8: DEC COUNT1
JNZ LOOP5

EXIT: MOV AX, 4C00H
INT 21H

MAIN ENDP
CODE ENDS
END MAIN

  • 写回答

1条回答 默认 最新

  • 小果运维 2023-12-17 22:44
    关注

    乱码可能是由于字符集不匹配或者数据处理不正确所致。我注意到你的代码中使用了 INT 21H 来进行输入和输出操作,这是 MS-DOS 中的中断服务例程。可能的原因之一是字符集不匹配导致的乱码问题。

    请确保输入字符集和输出字符集相匹配,并检查字符集的设置是否正确。如果在 MS-DOS 环境下,可以使用 CHCP 命令设置字符集。比如,CHCP 437 是常用的英文字符集,而 CHCP 936 是中文简体字符集。选择合适的字符集与你的程序输入输出所使用的字符集匹配。

    此外,还要确保输入和输出的过程正确处理了字符。在你的代码中,涉及读取输入和输出字符的部分,特别是使用 INT 21H 的功能号,需要确保正确地读取和显示字符。

    另外,还有一些其他问题可能导致乱码,例如:可能存在未初始化的变量、未清除寄存器、处理字符时未考虑输入的回车或换行符等情况。

    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB yalmip gurobi求解器
  • ¥15 关于#stm32#的问题:第一张图是发送数据代码,第二第三张图是接收数据并进行DAC转换的函数,若用串口一接收数据并进行DAC转换,主函数代码该怎么写
  • ¥20 hc130怎么读写内部flash存储信息
  • ¥15 Axure rp9注册与登录交互
  • ¥15 我下载图形界面重启完就变成这样了,打字也打不了,动也动不了,该怎么解决(操作系统-centos)
  • ¥15 VBA中在窗体中遍历所有checkbox控件,提取出被选中的checkbox的caption值
  • ¥15 在Ubuntu上有什么命令,或者是系统文件能告诉我链接nvme ssd的pcie槽位是不是支持热插拔功能?
  • ¥15 ansys license许可证问题
  • ¥20 QQ号和密码都能正常登录微信 QQ号和密码登录微信显示密码错误
  • ¥15 单片机RTOS Kernel与应用分离开发,Kernel如何调起应用?