masm5.0汇编问题,编译过程无错误,但是最后输出无结果

我的文件名为:dai程序代码如下:DATASEGMENTDAT0DB12H,29H,34H,46H,57H,66H,71H,88HDAT1DB89H,77H,65H,53... 我的文件名为:dai
程序代码如下:
DATA SEGMENT
DAT0 DB 12H,29H,34H,46H,57H,66H,71H,88H
DAT1 DB 89H,77H,65H,53H,41H,32H,24H,16H
DAT2 DB 9 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA SI, DAT0
LEA DI, DAT1
LEA BX, DAT2
MOV CX,8
CLC
CLD
AGAIN:LODSB
ADC AL,[DI]
DAA
MOV [BX],AL
INC DI
INC BX
LOOP AGAIN
MOV AL,0
MOV AL,0
MOV [BX],AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
本人是汇编初学者,急求解决方案,谢谢啦····
展开
 我来答
百度网友dd2a4ae
2013-04-04 · TA获得超过1.6万个赞
知道大有可为答主
回答量:2628
采纳率:11%
帮助的人:1657万
展开全部
你这个程序,没有屏幕输出显示的代码。
所以,运行后屏幕上无显示并直接返回DOS,是对的。

若要加上显示部分,代码会比较长。需要先将压缩BCD分离,再转换成ASCII,再显示。

你这个程序,是用来练习串指令和BCD码运算的。它正确的用法不是直接运行,而是在调试器DEBUG中调试运行,通过单步、断点等方式检查运行的中间结果和最后结果(DAT2的内容)。
追问
非常感谢你的热心回答,嗯,我在程序中加了 :mov ah 9    int  21h,就有乱码输出。再请教您个问题,因为我想边学习加法,乘···这些指令,边学习,边运行下,这样记忆和理解也深刻些,你能给我一个完整的框框文件(开头和结尾都差不很多),那么我只要在中间修改代码就行··
追答
9号DOS系统功能调用,是用来显示‘$'符号结束的ASCII码构成的字符串的。
你数据区的内容并不是ASCII码,而是压缩的BCD码,所以显示出来就是乱码。又因为你没有在字符串结束的地方加上’$'字符,所以显示会一直继续,直到遇到'$'。

程序要显示,都要将内容转为正确的ASCII才行。
比如,你要显示 79H这个字节的两位压缩BCD码,必须先将它分离转成37H(‘7’这个字符的ASCII)和39H(字符‘9’),再依次显示。
对于37H,是从79H中用“与”运算指令提取出70H,右移4位转成07H,再用加法加上30H转为37H。
而39H的生成除了不需要移位以外,跟上面一样。

如果需要框架,可以自己随意写。
比如,要练习 z = x 和 y的运算,可以建这样一个程序框架:

.MODEL SMALL
.DATA
X DB 1, 2, 3
Y DB 4, 5, 6
Z DB 7, 8, 9

.CODE
.STARTUP

; 这里可以写运算指令

.EXIT
END
和黑猫学编程
2021-05-12
知道答主
回答量:84
采纳率:0%
帮助的人:4.1万
展开全部

汇编语言loop指令

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
FanyongYin
2013-04-04 · TA获得超过1054个赞
知道小有建树答主
回答量:1298
采纳率:100%
帮助的人:1011万
展开全部
哈哈,信息里说缺少了堆栈段,加上试试看
更多追问追答
追问
我是将教材上的程序输入到masm5.0中,如果要加堆栈段,代码怎写?我不懂,求指教··
追答
一样的,书上必定还有堆栈段的部分,例如:
STACK SEGMENT
.......

STACK ENDS
参照一下试试看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式