鱼C论坛

 找回密码
 立即注册
查看: 3065|回复: 7

[汇编作业] 打印不出内容,求高手指导

[复制链接]
发表于 2013-8-16 16:48:58 | 显示全部楼层 |阅读模式
1鱼币
互联网的朋友大家早上,中午,下午,晚上好。小人我在学习汇编第九章的最后的一条材料分析难倒了,求高手指导。
先不说,小甲老师的程序在屏幕打印welcome to masm的复杂,小弟我只想在屏幕中打印一个字母也不能显示啊。急死了!

程序如下:

assume cs:code
code segment
        start:        mov ax,0b800H               ;显存起始地址
                        mov ds,ax
                        mov dx,0AC65H              ;字母E及样式
                        mov ds:[280H],dx            ;定位第四行
                       
                q:        mov ax,4c00H
                        int 21H               
code ends
end start


生成exe后,在cmd中输入debug XX.exe 用单步调试一句句可以正常显示,但如果直接输入XXX.exe,屏幕什么动静也没有,这是什么问题啊!

最佳答案

查看完整内容

看来论坛里没什么高手啊,还是高手不屑于这种简单问题,还是我来回答吧。 先不谈这个程序的优化问题,从整体上看,你的思路是没错的,你很会灵活变通,比起只会一味模仿别人的人来说,是很不错的。 这个程序你错就错在,在汇编源程序中,不该用ds:[280h]来表示这个最终地址,因为,汇编规定:在源程序中,mov ax,[2]这种形式它等价于mov ax,2. 所以在汇编源程序中,你只能用ds:[寄存器]的形式来表示。而 ds:[280h]这种形式 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-16 16:48:59 | 显示全部楼层
看来论坛里没什么高手啊,还是高手不屑于这种简单问题,还是我来回答吧。
先不谈这个程序的优化问题,从整体上看,你的思路是没错的,你很会灵活变通,比起只会一味模仿别人的人来说,是很不错的。
这个程序你错就错在,在汇编源程序中,不该用ds:[280h]来表示这个最终地址,因为,汇编规定:在源程序中,mov ax,[2]这种形式它等价于mov ax,2.  所以在汇编源程序中,你只能用ds:[寄存器]的形式来表示。而
ds:[280h]这种形式仅在debug中编写程序时适用,注意区别。下边,我对你的程序进行了下改动,并成功运行了。
assume cs:code
code segment
     start:  mov ax,0b800h
             mov ds,ax

             mov bx,280h
             mov dx,0ac65h
             mov ds:[bx],dx ;之所以不用ds:[280h],这是因为在汇编程序中,[280h]不能表示偏移地址,它只表示280h这个数字。ds:[280],这种情况仅在debug中,[280h]才表示偏移地址,注意区别。
         q:  mov ax,4c00h
             int 21h
code ends
end start 未标题-1.jpg     这是运行结果:绿底红e
            
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-16 16:56:42 | 显示全部楼层
估计是程序运行完就退出了呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-16 17:11:27 | 显示全部楼层

哦,但小甲鱼老师的视频中讲解中没有啊,在程序中打印的内容,运行完后,依然还在啊!或者要看内容,版主你觉得我上面的程序应该点解改?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-16 23:02:49 | 显示全部楼层
可能是你在运行程序的时候,cmd向下翻页了,然后你的程序打印的东西在上一页,可能是这样的,因为我自己遇到过这样的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-17 07:58:14 | 显示全部楼层
XOR ax , ax
        mov ah ,1
        int 21h;输入
在你的代码里输入这三句(用来输入的,功能和scanf()差不多),试试行不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-18 15:15:32 | 显示全部楼层
用xp系统吧,可能是系统的问题,用2003最好,有时候xp有问题,2003就能过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-19 19:41:37 | 显示全部楼层
看来论坛里没什么高手啊,还是高手不屑于这种简单问题,还是我来回答吧。
先不谈这个程序的优化问题,从整体上看,你的思路是没错的,你很会灵活变通,比起只会一味模仿别人的人来说,是很不错的。
这个程序你错就错在,在汇编源程序中,不该用ds:[280h]来表示这个最终地址,因为,汇编规定:在源程序中,mov ax,[2]这种形式它等价于mov ax,2.  所以在汇编源程序中,你只能用ds:[寄存器]的形式来表示。而
ds:[280h]这种形式仅在debug中编写程序时适用,注意区别。下边,我对你的程序进行了下改动,并成功运行了。
assume cs:code
code segment
     start:  mov ax,0b800h
             mov ds,ax

             mov bx,280h
             mov dx,0ac65h
             mov ds:[bx],dx ;之所以不用ds:[280h],这是因为在汇编程序中,[280h]不能表示偏移地址,它只表示280h这个数字。ds:[280],这种情况仅在debug中,[280h]才表示偏移地址,注意区别。
         q:  mov ax,4c00h
             int 21h
code ends
end start这是运行结果:红底绿e




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 05:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表