. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验9调试通过,但是还是疑惑  [待解决] 回复[ 7次 ]   点击[ 504次 ]  
zihaolee
[帖 主]   [ 发表时间:2010-04-20 10:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-04 10:05
俺菜鸟初学,实验9写了3个小时,终于成功得到结果。但是调试的时候发现B800显示缓冲区里面的信息没有按照预想中改变的?为什么呢?

assume cs:cod,ds:data

data segment
        db 'welcome to masm!'
        data ends

cod segment
        start:
        mov ax,data
        mov ds,ax
        
        mov ax,0b800h
        mov es,ax
        
        mov si,0
        mov di,0
        mov cx,16
        s1:
        mov bp,07c0h
        mov al,ds:[di]
        mov es:[bp+si],al
        mov al,072h
        mov es:[bp+si+1],al
        
        add bp,160
        mov al,ds:[di]
        mov es:[bp+si],al
        mov al,024h
        mov es:[bp+si+1],al
        
        add bp,160
        mov al,ds:[di]
        mov es:[bp+si],al
        mov al,071h
        mov es:[bp+si+1],al
        
        inc di
        add si,2
        loop s1

        mov ax,4c00h
        int 21h
        
        cod ends
end start

我把内容写在显示缓冲区13行左右位置(即B800:0780~081F 为第一行,下一行即+160)
scuzg
[第1楼]   [ 回复时间:2010-04-20 11:18 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
楼主的上述代码已经能正确显示了,这说明显示缓存的内容是按程序的行为改变了,否则不会有正确的显示结果的。不知楼主所说“显示缓冲区里面的信息没有按照预想中改变的”是什么意思?
zihaolee
[第2楼]   [ 回复时间:2010-04-21 15:25 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-04 10:05
谢谢一楼的回答!
我的意思是B8000H~BFFFFH里程序执行前显示
B800:0780 20 F0 20 F0 20 F0-20 F0 20 F0 20 F0 20 F0 20 F0 
B800:0790 .......
B800:07A0 .......

按道理,程序执行后,应该是
B800:0780 77 72 65 72 6C 72-63 72 6F 72 6D 72 65 72 20 72  welcome 
B800:0790 .......
B800:07A0 ....... 

吧?但是显示的却是
B800:0780 53 F0 49 F0 2B F0-30 F0 32 F0 20 F0 20 F0 20 F0  S.I.,.+.0.2
B800:0790 .......
B800:07A0 ....... 

是吗  为什么呢?
scuzg
[第3楼]   [ 回复时间:2010-04-21 20:47 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
两个问题:
① 代码明确是从0b800:07c0开始的,你文中提到的0780是从哪里来的?
② 我执行了那个程序后在db800:7c0 看到的内容如下:
-g

Program terminated normally
-db800:7c0 7cf
B800:07C0  77 72 65 72 6C 72 63 72-6F 72 6D 72 65 72 20 72   wrerlrcrormrer r
-

                                welcome to masm!
                                welcome to masm!
                                welcome to masm!
请你注意在“welcome"的每个字母之间多了一个"r",下面代码我的注释:

        mov es:[bp+si],al        ;将要显示的字符填入显示字节单元
        mov al,072h              ;al装入显示属性072h,这正好是字符"r"的内码
        mov es:[bp+si+1],al      ;填入属性字节单元 

至于什么是显示属性字节,请看我的博文:
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=19481&kindId=34937&postId=40493&readSg=1
zihaolee
[第4楼]   [ 回复时间:2010-04-23 17:46 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-04 10:05
对对,我写错了,应该是B800:07C0,但是发现问题还没解决。如下:
-db800:7c0
B800:07C0  42 F0 50 F0 2C F0 30 F0-37 F0 43 F0 30 F0 20 F0   B.P.,.0.7.C.0. .
B800:07D0  20 F0 20 F0 20 F0 20 F0-20 F0 20 F0 20 F0 20 F0    . . . . . . . .
执行后显示
-g

Program terminated normally
-db800:7c0
B800:07C0  30 F0 30 F0 20 F0 20 F0-53 F0 50 F0 3D F0 30 F0   0.0. . .S.P.=.0.
B800:07D0  30 F0 34 F0 30 F0 20 F0-20 F0 20 F0 4E F0 56 F0   0.4.0. . . .N.V.

为什么我跟你的不一样呢?劳烦这位大侠赐教了~
scuzg
[第5楼]   [ 回复时间:2010-04-23 18:20 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
我怎么弄都是一样的呀?要不用QQ联系我:28926141
zihaolee
[第6楼]   [ 回复时间:2010-04-24 14:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-04 10:05
第三天了  还是搞不懂啊
ylacn
[第7楼]   [ 回复时间:2010-06-02 15:42 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-06-01 10:34
我也有代码  自己写的分享吧。。。
 assume cs:code
 data segment
        db 'Welcome to masm!',0
 data ends

 code segment
 start: mov dh,8
        mov dl,3
        mov cl,2
        mov ax,data
        mov ds,ax
        mov si,0
        call show
        mov ax,4c00h
        int 21h
 show : mov ax,0b800h
        mov es,ax
        mov ax,160
        mul dh
        mov dh,0
        add ax,dx
        add ax,dx
        sub ax,2
        mov di,ax
        mov bh,cl
 change: mov cl,ds:[si]
        mov ch,0
        jcxz ok
        mov bl,cl
        mov es:[di],bx
        add di,2
        inc si
        jmp short change
 ok: ret
 code ends
 end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved