问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

汇编语言程序输出的一直是乱码,求高手找错5

发布网友 发布时间:2023-10-10 22:49

我来回答

2个回答

热心网友 时间:2024-11-11 05:26

楼主的程序,可以输入150个字符,却只留了50个字符的空间!
另外,输入的是一个一个的字节,排序的时候却用““字””来排序,逻辑上有错。
最后,显示字符串,其末尾,应该有"$",否则就要显示出乱码。
以前写过,现成的,可供参考:
;================================================
assume cs:code, ds:data
data segment
msg1 db 'Before sort: $'
crlf db 0dh, 0ah, '$'
msg2 db 'After sort : $'
;----------------------------------
BUFSIZE DB 50 ;最多可键入50个字符.
ACTLEN DB ? ;实际键入的字符数.
CHARS DB 50 DUP(20H) ;实际键入的字符从此开始存放.
data ends
;----------------------------------
code segment
MAIN PROC FAR ;主程序.
start:
mov ax, data
mov ds, ax
mov dx, offset msg1
mov ah, 9
int 21h
MOV DX, OFFSET BUFSIZE ;键入缓冲区起始偏移地址送DX
MOV AH, 0AH
INT 21H ;输入字符串并送入缓冲区.
;-----------------------
MOV CL, ACTLEN ;取得输入的字符数.
ADD CL, 0
JNZ ok ;长度不为零就去排序.
JMP EXIT_MAIN
;-----------------------
ok:
mov dx, offset crlf
mov ah, 9
int 21h
mov dx, offset msg2
mov ah, 9
int 21h
;-----------------------
CALL SORT ;调用排序子程序.
;-----------------------
XOR CX, CX
MOV CL, ACTLEN ;取得输入的字符数.
MOV DX, OFFSET CHARS ;输入的字符串起始地址送DX
MOV BX, DX ;将字符串首地址送BX
ADD BX, CX ;取到字符串尾地址.
MOV BYTE PTR [BX], '$' ;在字符串尾插$
MOV AH, 09H ;字符串显示功能.
INT 21H ;显示键入的字符串.
EXIT_MAIN:
mov ah, 4ch
int 21h ;返回DOS
MAIN ENDP ;主程序的末尾.
;----------------------------------
SORT PROC ;排序子程序.
XOR CX, CX
MOV CL, ACTLEN ;取得输入的字符数.
DEC CX
mov si, offset CHARS
s: push cx
mov di, si
inc di
s1: mov al, [si]
cmp al, [di]
jb jx
xchg al, [di]
mov [si], al
jx: inc di
loop s1
inc si
pop cx
loop s
RET ;子程序返回主程序.
SORT ENDP
;----------------------------------
code ends
end start
;================================================
程序中,小写的是排序部分,大写的是键入显示部分。

热心网友 时间:2024-11-11 05:26

comment /*
1、硬盘如此大,代码何必挤成一团
2、小写的指令令人更舒服一些
3、我不知道为什么要在NEXT2标号那里开始使用16位寄存器,也许是录入格式的要求?但现在我改成8位的了
4、masm ml.exe v6.14.8444 link.exe v5.60.339
5、输入测试串acbdeg,排序后返回gedcba
6、很无奈,知道的这个编辑器很不适合编辑代码,将就着看。
*/

DATA SEGMENT
MSG0 DB 0DH, 0AH, 'Please input a string:$'
MSG1 DB 0DH, 0AH, 'Before sort, the string is:$'
MSG2 DB 0DH, 0AH, 'After sort, the string returns:$'
BS DB 0DH, 0AH, '$'

BUFSIZE DB 150 ; 最多可键入150个字符
ACTLEN DB ? ; 实际键入的字符数
CHARS DB 150 DUP(20H), '$' ; 实际键入的字符从此开始存放

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

MAIN PROC FAR
MOV AX, DATA
MOV DS, AX

MOV DX, OFFSET MSG0
MOV AH, 09H
INT 21H

MOV DX, OFFSET BUFSIZE ; 键入缓冲区起始偏移地址送DX
MOV AH, 0AH
INT 21H ; 输入字符串并送入缓冲区

MOV DX, OFFSET BS
MOV AH,09H
INT 21H

CALL SORT ;子程序作用是排序,具体的就是显示排序前和排序后的字符串

MOV AH,4CH ;调用返回DOS功能
INT 21H ;返回DOS
MAIN ENDP

;------------------------------------
SORT PROC

; 显示排序前的提示信息
MOV DX, OFFSET MSG1
MOV AH, 09H
INT 21H

; 显示输入的字符串集合
MOV CH, 0
MOV CL, ACTLEN
MOV DI, OFFSET CHARS
@@:
MOV DL, [DI]
MOV AH, 02H
INT 21H

INC DI
LOOP @b

; 显示排序后的提示信息
MOV DX, OFFSET MSG2
MOV AH, 09H
INT 21H

; 冒泡排序?
MOV CH, 0
MOV CL, ACTLEN
MOV SI, OFFSET CHARS

NEXT1:
MOV DI, SI
MOV BL, CL

NEXT2:
MOV AL, [DI]
INC DI
CMP AL, [DI]
JNC NEXT3 ; >= 则不处理,跳转继续比较

MOV DL, [DI] ; <
MOV [DI-1], DL
MOV [DI], AL ; 把最小的移到最右边
NEXT3:
DEC BL
JNZ NEXT2
DEC CL
JNZ NEXT1

; 显示排序的字符串集合,复制上面,老兄可写个宏或函数
; 使用09调用不能显示是因为两次显示重叠在一起了,如何解决自己琢磨吧
MOV CH, 0
MOV CL, ACTLEN
MOV DI, OFFSET CHARS
@@:
MOV DL, [DI]
MOV AH, 02H
INT 21H

INC DI
LOOP @b

RET

SORT ENDP

CODE ENDS
END MAIN追问谢谢,不过如果想让排序是按照abcd……的顺序,应该改哪里啊?你的这个我试过了,很好的。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 打印机出现乱码,打印还打印个不停,向各位大侠求助啊,用的很急...145 电脑显示乱码怎么办544 唱歌的人怎么在抖音上取名字? 在抖音上发表的视频作品具备哪些特点才会火?38 一个单身男在抖音平台上唱歌怎么取名好? 坐地铁到荟聚购物中心到哪站下车9 一个多月劳动合同没有签.可以去劳动局举报吗?举报有用吗? 抖音上有个女的唱的你一定要幸福怎么找6 宝宝五岁了有三天这样情况白天不发烧,到半夜就发高烧又咳嗽。可...1 这个是抖音上的作品录的全民k歌 这样的怎么录15 三月份去纳木错和羊湖,湖还结冰吗1 十二个月宝宝感冒发烧为什么白天不怎么发烧一到晚上就开始高烧2 买一双篮球鞋,价格1000下的。夏天穿,透气不捂脚,低帮的,... 抖音神评论有哪些?72 有谁知道二十几号去西藏,天气怎么样?主要纳木错湖冰化了没?谢...1 新高考物理政治地理组合怎么样?10 steal游戏打开一直乱码,调字体也没有用,点那个reall...3 北京中海寰宇天下位置在哪里啊? 什么样的面料的衣服洗后会变长变大6 西安市车辆限号表 你好,麻烦问一下,当事人喝酒开车发生交通事故,还语言攻击等,... 打开steam社区出现乱码怎么解决?50 参公事业单位有哪些? 把和密码给别人会怎么样?19 微信怎么隐藏不让好友看到610 密码锁打不开怎么办 密码锁的原理1 吴江经济技术开发区发展总公司怎么样?3 物理化学历史政治生物地理哪科高考更容易拿高分?为什么?18 五角星的每个锐角的度数是多少2 你好,我想做茶叶礼盒包装,你应该是内行人,但不知道具体怎么操...1 您好!我每次都是在批发部进的茶叶礼盒,我能不能将买来的这些礼... 机械键盘和普通键盘的区别是什么?91 呀呀学语得意思是什么15 用呀打一四字成语 顺遂无虞 皆得所愿出处什么意思?53 什么时候考雅思比较合适?4 求《我喜欢的运动(跑步)》的英语作文100词带翻译的,急急急1203 同一个手机怎么切换社保账户 我生病了,在运动会上坚持跑步的英语作文2 关于运动的英语作文,60词左右。238