回到过去 发表于 2011-12-22 01:01:58

关于第九章的实验九的问题~~极度迷茫

实验九,我无法改写0f872h代码段里面的内容,所以达不到实验要求的效果~~
这个实验,我是先尝试自己做,仅显示第一行的效果,代码编译成功了,运行了下,效果没出来
DEBUG了下,发现mov es:,al 不能改写es:的内容(es指向0f872h,si为0)

小生我怕怕 发表于 2011-12-22 08:26:52

{:5_91:}不理解你用地址0f872要干嘛?

要实现第一行的内容,我写个代码给你,你看看:
assume cs:qq
qq segment
mov ax,0b800h
mov ds,ax
mov bx,41h
mov cx,6
mov si,0
s:
mov ax,bx
mov ,ax
add si,2
inc bx
loop s
mov bh,2
mov si,1
mov cx,6
s1:
mov byte ptr,bh
add si,2
loop s1
mov ax,4c00h
int 21h
qq ends
end

回到过去 发表于 2011-12-23 17:17:54

小生我怕怕 发表于 2011-12-22 08:26 static/image/common/back.gif
不理解你用地址0f872要干嘛?

要实现第一行的内容,我写个代码给你,你看看:


谢谢您的回复帮助,但是我还是不明白~请您帮忙看下我的代码,有什么问题么
assume cs:codesg
;先把要输出的数据放进去
data segment
        db 'welcome to masm!'
data ends



codesg segment
start:mov ax,0B800h
      mov es,ax

      mov ax,data
          mov ds,ax
          
      mov al,2 ;存放颜色属性
          mov cx,16;十六个字节,循环16次
          mov bx,0
          mov si,0
          
        s:
          mov ah,ds:
          mov es:,ah
          mov es:,al
          
          add si,2
          add bx,1
          loop s
          
          mov ax,4c00h
          int 21h
          
codesg ends
end start

ytrfamli 发表于 2011-12-23 21:26:33

本帖最后由 ytrfamli 于 2011-12-23 22:14 编辑

代码是可行的,奇怪的就是要让它显示出来要依序
进入debug(不需要指定exe)
退出debug(q指令),
正常执行(输入档名,回车)
才会正常显示,
不知道是否是显示内存预设不是显示第0页或是其他地方...
(实验说明里面提到什麽B8000~BFFFF那里)

无论如何,你的代码没有问题,继续往下学习吧~

*:更正,预设是显示第0页没错,互联网查到了一个资料,
具体的机制怎麽运作的我也不懂,
就是如果你在程序中向显存写入并且马上退出,会看不到结果,
可以在退出之前(mov ax,4c00h前面)加上
xor ah,ah
int 16h
这是一个让程序停下,读取一个键盘再继续的指令,
这时不需要我提到的先进入debug再退出就能正确显示了.

回到过去 发表于 2011-12-24 03:47:42

ytrfamli 发表于 2011-12-23 21:26 static/image/common/back.gif
代码是可行的,奇怪的就是要让它显示出来要依序
进入debug(不需要指定exe)
退出debug(q指令),


太感谢给位前辈的指点了,受益匪浅!!

回到过去 发表于 2011-12-24 03:47:56

ytrfamli 发表于 2011-12-23 21:26 static/image/common/back.gif
代码是可行的,奇怪的就是要让它显示出来要依序
进入debug(不需要指定exe)
退出debug(q指令),


太感谢给位前辈的指点了,受益匪浅!!
页: [1]
查看完整版本: 关于第九章的实验九的问题~~极度迷茫