| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1329 人关注过本帖
标题:王爽《汇编语言》实验13的问题
取消只看楼主 加入收藏
mxd000000
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-12-26
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:1 
王爽《汇编语言》实验13的问题
实验的内容:
    编写并安装int 7ch中断例程,功能为显示一个用0结尾的字符串,中断例程安装在0:200处。
    参数: (dh)=行号,    (dl)=列号,    (cl)=颜色    ds:si指向字符串首地址
    以上中断例程安装好后,对下面的程序进行单步跟踪,尤其注意int,iret指令执行前后cs,ip的和栈中的状态。
程序代码:
assume cs:code

data segment

    db "welcome to masm!",0

data ends

code segment

start:  mov dh,10
        mov dl,10
        mov cl,2h
        mov ax,data
        mov ds,ax
        mov si,0
        int 7ch
        
        mov ax,4c00h
        int 21h
        
code ends
end start


上面这个程序我把它命名为test.exe   


ok,叙述下我的问题吧。 我在安装好自己写的int 7ch中断例程后,运行了上面这个test.exe程序,可是不显示字符串。
如图(有图有真相,= =!汗颜,怎么发图啊??我发个附件看看。)
图片附件: 游客没有浏览图片的权限,请 登录注册

我很奇怪,检查了中断例程和test.exe的源码后也没有发现问题。 然后我就开debug一步步跟踪。发现字符会一个个显示,颜色也会显示正确。调试结束,我又运行了test.exe 发现这下可以显示字符串"welcome to masm!"了。后来我发现,我必须在运行test.exe之前运行一下debug才可以正常显示字符串。
下面是截图
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


好吧,这下我更加纠结了,到底哪里出错了呢??是我的代码错了,还是那个操作有问题。为什么非要运行debug。难道是因为不是真正的实模式?
我是在VMware Workstation中xp sp3虚拟机中运行的。
下面是我写的int 7ch 中断例程,我命名为install7c.exe 各位有空帮忙看看,多谢多谢!!!
程序代码:
assume cs:code



        code segment

         ;>>>>>>>>>>>>>>>>>
         ;安装程序,将int 7ch中断例程安装到0:200处
         ;>>>>>>>>>>>>>>>>>
start:  mov ax,0h
        mov es,ax
        mov ax,200h
        mov di,ax
        
        mov ax,cs
        mov ds,ax
        mov si,offset s0
        
        mov cx,offset ed - offset s0
        cld
        rep movsb
        
        ;>>>>>>>>>>>>>>>>>>>>>>>>>>>
        ;设置中断向量
        ;>>>>>>>>>>>>>>>>>>>>>>>>>>>
        
        mov ax,0
        mov es,ax
        mov word ptr es:[7ch*4],200h
        mov word ptr es:[7ch*4+2],0
        
        mov ax,4c00h
        int 21h
        
    
        


        ;dh=行号 dl=列号 cl=颜色 ds:si指向字符串
  s0:   push ax
        push dx
        push es
        push di

        mov ax,0b800h 
        mov es,ax

        ;>>>>>>>>>>>>>>>>>>>>>>>>>>
        ;设置di= dh*160+dl*2 但是di是16位的 dh,dl是8位的不可以直接传输
        ;>>>>>>>>>>>>>>>>>>>>>>>>>> 
        mov al,160
        mul dh
        mov di,ax
        
        mov al,2
        mul dl
        add di,ax                        ;di=dh*160+dl*2
        ;>>>>>>>>>>>>>>>>>>>>>>>>>>>
        
    s:  cmp byte ptr [si],0
        je cn                            ;如果到字符串尾则停止复制
        
        mov al,[si]
        mov es:[di],al                   ;显示字符
        mov es:[di+1],cl                 ;设置颜色属性
        
        inc si
        add di,2        
        jmp s
        
    cn: pop di
        pop es
        pop dx
        pop ax        
        iret
    
    ed: nop
        code ends
end start 
        


[ 本帖最后由 mxd000000 于 2013-10-11 20:06 编辑 ]
搜索更多相关主题的帖子: 字符串 
2013-10-11 20:00
mxd000000
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-12-26
收藏
得分:0 
对了 还有一个问题就是 某些时候我可以不运行debug也可以达到效果,但是过了几分钟再开一个ms-dos窗口运行就不可以了 就非得运行debug后才可以正常显示
2013-10-13 10:41
快速回复:王爽《汇编语言》实验13的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015070 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved