. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验9的问题  [已解决] 回复[ 5次 ]   点击[ 353次 ]  
r251314w
[帖 主]   [ 发表时间:2009-02-26 11:53 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2009-02-14 17:14
问题我改了下 在屏幕输出3种颜色的WELCOME TO MASM!
 XXXXXXXXXXXXXXXWELCOME TO MASMXXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXWELCOME TO MASMXXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXWELCOME TO MASMXXXXXXXXXXXXXXXXXXX
从定义好了地方读取颜色数据
但是我只能改到把颜色数据放在STACK中  
请问高手怎么才能把颜色数据放在DATA中(放在这里寄存器不够用 可能是算法不行)
高手帮下忙
assume cs:code,ds:data,ss:stack
  data segment
    db 'Welcome to masm!'
  data ends

  stack segment
    dw 8 dup (0)
    db 2h,24h,71h
  stack ends

  code segment
    start:
          mov ax,data
          mov ds,ax
          mov ax,stack
          mov ss,ax
          mov sp,10h
          mov ax,0B800h
          mov es,ax
          
          mov bp,0
          mov bx,0
          mov cx,3
        s:
          push cx
          mov si,0
          mov di,0
          mov ah,[bp].10h
          
          mov cx,16
       s0:
          mov al,[di]
          mov es:[bx].720h[si],ax
          inc di
          add si,2
          loop s0
          inc bp
          add bx,160
          pop cx
          loop s

          mov ax,4c00h
          int 21h

  code ends
end start
mouse
[第1楼]   [ 回复时间:2009-02-26 16:36 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
但是我只能改到把颜色数据放在STACK中   
请问高手怎么才能把颜色数据放在DATA中(放在这里寄存器不够用 可能是算法不行) 
------------
把颜色三个值直接放在db 'Welcome to masm!' 
后面就好了,调用用ds:[..]读取就行了啊~
r251314w
[第2楼]   [ 回复时间:2009-02-26 17:38 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2009-02-14 17:14
知道啊 
但是只能用2个循环啊~
DI用来读取字符窜
SI用来读取元素
BX是行列
但是就不够用了
DI读取字符窜依次只能增加1
但是元素依次增加却是2
就导致寄存器不够用!!
popliuyu
[第3楼]   [ 回复时间:2009-02-27 14:30 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-02-22 22:46
assume cs:code

data segment
        db 'welcome to masm!'
        db 02h,24h,71h
data ends

stack segment
        dw 8 dup(0)
stack ends

code segment

start:        mov ax,stack
        mov ss,ax
        mov sp,16

        mov ax,0b800h
        mov ds,ax
        mov bx,1920                                ;ds:[bx]指向第12行第一个字符的显存
        
        mov ax,data                                ;指向数据
        mov es,ax
        
        mov cx,3
        mov bp,0
s0:        push cx
        
        mov cx,16
        mov si,0
        mov di,0

s:        mov al,es:[di]
        mov [bx+64+si],al                        ;显示的字母
        mov ah,es:[bp+16]
        mov [bx+65+si],ah                        ;显示的颜色
        add si,2
        inc di
        loop s

        pop cx
        add bx,160                                ;显示下一行
        inc bp                                        ;改变颜色

        loop s0
        mov ax,4c00h
        int 21h

code ends

end start
r251314w
[第4楼]   [ 回复时间:2009-03-02 18:18 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2009-02-14 17:14
谢了 
拿回去好好研究
r251314w
[第5楼]   [ 回复时间:2009-03-04 18:27 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2009-02-14 17:14
此贴由 贴主 于 [ 2009-03-04 18:27 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved