zhangxiuru 发表于 2013-8-16 16:48:58

打印不出内容,求高手指导

互联网的朋友大家早上,中午,下午,晚上好。小人我在学习汇编第九章的最后的一条材料分析难倒了,求高手指导。
先不说,小甲老师的程序在屏幕打印welcome to masm的复杂,小弟我只想在屏幕中打印一个字母也不能显示啊。急死了!

程序如下:

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


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

年少青衫薄 发表于 2013-8-16 16:48:59

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

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

牡丹花下死做鬼 发表于 2013-8-16 16:56:42

估计是程序运行完就退出了呗

zhangxiuru 发表于 2013-8-16 17:11:27

牡丹花下死做鬼 发表于 2013-8-16 16:56 static/image/common/back.gif
估计是程序运行完就退出了呗

哦,但小甲鱼老师的视频中讲解中没有啊,在程序中打印的内容,运行完后,依然还在啊!或者要看内容,版主你觉得我上面的程序应该点解改?

小号4 发表于 2013-8-16 23:02:49

可能是你在运行程序的时候,cmd向下翻页了,然后你的程序打印的东西在上一页,可能是这样的,因为我自己遇到过这样的问题

格式天下 发表于 2013-8-17 07:58:14

XOR ax , ax
        mov ah ,1
        int 21h;输入在你的代码里输入这三句(用来输入的,功能和scanf()差不多),试试行不行

9天 发表于 2013-8-18 15:15:32

用xp系统吧,可能是系统的问题,用2003最好,有时候xp有问题,2003就能过

年少青衫薄 发表于 2013-8-19 19:41:37

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

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




页: [1]
查看完整版本: 打印不出内容,求高手指导