. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  一个循环解决实验9?~~~~  [已解决] 回复[ 6次 ]   点击[ 317次 ]  
zcouyangpeng
[帖 主]   [ 发表时间:2008-11-06 23:28 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
assume cs:code

data segment
        db 'welcome to masm!'
        db 10b,100100b,1110001b---定义颜色
data ends


code segment
start:        mov ax,data
        mov ds,ax
        mov ax,0b8b7h---定义要显示到显存的起始段地址
        mov es,ax        
        mov di,0--------指向DATA段
        mov si,0--------指向显存元素        
        mov cx,16

s:        mov al,[di]
        mov ah,ds:[16]
        mov es:[si],ax  ----复制  绿色    字符到第1行显存第一列
        mov ah,ds:[17]
        mov es:160[si],ax---复制 绿底红色 字符到第2行显存第一列
        mov ah,ds:[18]
        mov es:320[si],ax---复制 白底蓝色 字符到第3行显存第一列

        inc di--------------以下2行为下次循环所需的数据做准备
        add si,2
        loop s
        mov ax,4c00h        
        int 21h
code ends
end start


实验9,我想用行来循环居然老出错,现在改用列来循环只用了19行代码!追踪结果正确

接着琢磨用行来编
zcouyangpeng
[第1楼]   [ 回复时间:2008-11-06 23:41 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
这程序太呆板了,不能灵活选用自己想要的颜色。如果把颜色定义一个变量就好了
zcouyangpeng
[第2楼]   [ 回复时间:2008-11-07 18:32 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
由于定义颜色时,总出错。我先复制3个字符窜试试(行模式循环)
assume cs:code

data segment
        db 'welcome to masm!'
        db 10b,100100b,1110001b
data ends


code segment
start:        mov ax,data
        mov ds,ax
        mov ax,0b8b7h
        mov es,ax        
        
        mov bx,0
        mov cx,3
s:        push cx
        mov di,0        
        mov si,0
        mov cx,16
s1:        mov al,[di]
        mov es:[bx+si],al
        inc di
        add si,2
        loop s1
        
        pop cx
        add bx,160
        loop s
        
        mov ax,4c00h
        int 21h
code ends
end start---------------------没问题。。接着加属性代码进去试试
zcouyangpeng
[第3楼]   [ 回复时间:2008-11-07 18:48 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
总算搞定2个循环。 不过好像用的变量太多了。怎么弄出4个变量来了唉,DI SI BX AX(20行代码)。看来我真的是没前途啊。要是还多几个要复制的属性,怎么编啊? 接着弄 看还能不能减少变量


assume cs:code

data segment
        db 'welcome to masm!'
        db 10b,100100b,1110001b
data ends


code segment
start:        mov ax,data
        mov ds,ax
        mov ax,0b8b7h
        mov es,ax        
        
        mov bx,0
        mov cx,3
s:        push cx
        mov es,ax----用AX跳转到下一行
        mov di,0 ----指向DATA        
        mov si,0-----指向ES
        mov cx,16
        mov dh,16[bx]---复制属性
s1:        mov dl,[di]
        mov es:[si],dx-----用DX存放有属性字符
        inc di
        add si,2        
        loop s1
        
        pop cx        
        add ax,10h
        inc bx
        loop s
        
        mov ax,4c00h
        int 21h
code ends
end start
zcouyangpeng
[第4楼]   [ 回复时间:2008-11-07 19:05 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
休息会 听听MP3,好伤神。 勤有功 戏无益戒之哉 宜勉力
zcouyangpeng
[第5楼]   [ 回复时间:2008-11-07 19:06 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
add ax,10h ------改为  add ax,10
zcouyangpeng
[第6楼]   [ 回复时间:2008-11-09 11:41 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
此贴由 贴主 于 [ 2008-11-09 11:41 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved