. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验九的困惑? 求解  [待解决] 回复[ 8次 ]   点击[ 312次 ]  
leij
[帖 主]   [ 发表时间:2011-03-02 07:55 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-23 08:05
在做实验九的时候弄了好久一直没弄出来,
为了简化问题,我先写的是将字符显示成绿色的字。

 我给的代码中总是不能改变B800:0000中的值,
当然也就看不到结果了。
 想了很久没想出来,望有高手指点一二。


代码如下:
   
assume cs:code,ds:data
data segment
        db 'welcome to masm'
data ends
code segment
  start:
    mov ax,data
    mov ds,ax
    mov ax,0B800h
    mov es,ax
    
    mov bx,0
    mov si,0
    mov di,0
    mov cx,15
   s:
    mov dl,[si]
    mov es:[di],dl
    mov dh,2h
    mov es:[di+1],dh
    add si,1 
    add di,2
   loop s
  
    mov ax,4c00h
    int 21h
code ends
  end start
lazykid
[第1楼]   [ 回复时间:2011-03-02 13:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-23 13:24
我测试过你的代码,是可以在b8000处显示'welcome to masm' 的,但因为是显示在屏幕左上方(第一行),可能会因刷屏而看不见的,你可以试试不用debug,直接在命令行下用cls命令清屏再运行程序
lazykid
[第2楼]   [ 回复时间:2011-03-02 13:29 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-23 13:24
补充一下,在非全屏的情况下好像有时不能正常显示
xiaowukong
[第3楼]   [ 回复时间:2011-03-02 20:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-26 12:17
assume cs:code,ds:data
data segment
        db 'welcome to masm!'
data ends
code segment
  start:
    mov ax,data
    mov ds,ax
    mov ax,0B800h
    mov es,ax
    
    mov bx,0
    mov si,0
    mov di,0720h ;这个地方是的IP设置为 0720h 也就是居中 12*80*2+32*2
    mov cx,15
   s:
    mov dl,[si]
    mov es:[di],dl
    mov dh,2h
    mov es:[di+1],dh
    add si,1 
    add di,2
   loop s
  
    mov ax,4c00h
    int 21h
code ends
  end start
xiaowukong
[第4楼]   [ 回复时间:2011-03-02 20:16 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-26 12:17
一行居中应该是 07c0h,上面写错了.
0720是实验3行的第一行IP
oldstone
[第5楼]   [ 回复时间:2011-03-07 13:55 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2011-02-04 09:04
给个自己的程序:
assume cs:code,ds:data
data segment
  db 'welcome to masm!'
code segment
  start:
  mov ax,data
  mov ds,ax
  mov ax,0b878h
  mov es,ax
  mov cx,3

  mov bx,40h

  s00:
    mov di,0
    mov si,0
    mov dx,cx
    mov cx,16
    s01:
          mov al,[si]
          mov es:[bx+di],al
          inc si
          add di,2
          loop s01
       add bx,0a0h
       mov cx,dx
  loop s00

  mov cx,16
  mov bx,41h
  mov di,0
  s10:
    mov es:[bx+di],byte ptr 2h
    mov es:[bx+di+0a0h],byte ptr 24h
    mov es:[bx+di+140h],byte ptr 71h
    add di,2
    loop s10

mov ax,4c00h
int 21h
code ends
end start
youguiqing
[第6楼]   [ 回复时间:2011-03-08 00:27 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-12-03 21:13
assume cs:code,ds:data,ss:stack 
data segment
db 'Welcome to masm!'
dw 02h,24h,71h       ;三种颜色的代码
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
           start:mov ax,data    ;设置字符所在为ds段
                  mov ds,ax
                  mov ax,stack    ;设置载空间
                  mov ss,ax
                  mov sp,16
                  mov ax,0b800h   ;设置输出为ES段
                  mov es,ax
                  mov bp,1030 ;bp=80*12行+70=1030差不多在中间了
                  mov si,16   ;设置si为颜色所在内存地址
                  mov cx,3    ;显示3行所以设外层loop为3
            s1:mov di,0
               mov bx,0
               push cx        ;外层loop用来保存cx值          
                  mov cx,16
                s:push [bx]  ;把ds:0中的字显示到屏幕第12行中间
                  pop es:[bp+di] ;这里用di来每显一个字后向2字节
                  push [si]     ;把颜色输入
                  pop es:1[bp+di]
                  inc bx
                  add di,2   ;这里用di来每显一个字后向2字节
                  loop s
                  add si,2   ;换一种颜色
                  add bp,160 ;屏幕显示换一行
                  pop cx    ;取回外层loop的CX值
                  loop s1
                  mov ax,4c00h
                  int 21h
code ends
end start
youguiqing
[第7楼]   [ 回复时间:2011-03-08 00:42 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-12-03 21:13
Welcome to masm!
,Welcome to masm!
,Welcome to masm!

,[SI]
leij
[第8楼]   [ 回复时间:2011-03-23 21:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-23 08:05
谢谢各位的回复啊,因为一直在忙也不记得回帖了。
问题自己解决了,确实是因为滚屏的问题没有看到
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved