. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
主题 : :  实验九的困惑? 求解  [待解决] 回复[ 8次 ]   点击[ 313次 ]  
leij
[帖 主] [ 发表时间:2011-03-02 07:55 ] 
荣誉值: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
youguiqing
[第6楼] [ 回复时间:2011-03-08 00:27 ] 
荣誉值: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
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved