鱼C论坛

 找回密码
 立即注册
查看: 2238|回复: 7

实验10——1的问题

[复制链接]
发表于 2012-8-30 20:32:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:code,ds:data

data segment
  db 'weclcome to masm!',0
data ends


code segment
start:

           mov dh,8
           mov dl,8
           mov cl,2
           mov ax,data
           mov ds,ax    ;字符的段地址
           sub si,si
           call show_str
          
           mov ax,4c00h
           int 21h
          
        show_str:
                  dec dh
                          
                              ;地址是以0开始的,所以全部先减1
                          
                          mov al,0a0h    ;行的基本单位
                         
                          mul dh     ;得出等几行的开始地址,存在ax中
                          
                          mov bx,ax
                          
                          mov ax,0b800h      
                          
                          mov es,ax     ;加上其基地址,组成段地址,存放在es中
                          
                          mov al,2   
                          
                          mul dl
                          
                          sub ax,2
                          
                          mov di,ax    ;算出偏移地址,存放在di中
                          
                          mov al,cl
                          
                          
                          
                          mov ch,0
                          
                change:           ;虚拟一个循环
                        mov cl,ds:[si]
                               

                               
                                jcxz a       ;当cx等于0的时候程序跳到c处
                               
                                mov es:[bx+di],cl    ;复制字
                               
                                mov es:[bx+di+1],al  ;得复制颜色属性
                               
                                inc si
                               
                                add di,2
                               
                                jmp short change
                               
                        a:  
                            
                            ret
code ends
end start
                          我觉得这个实验把上面红色的地方改成add ax,0b800h    再把下面绿色的地方改成mov es:[di],cl    mov es:[di+1],al   那样也能实现实验10——1的子程序的啊,为什么只改成那样就不可以了啊。求名位的详解啊。谢谢

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-31 07:09:42 | 显示全部楼层
那位大哥来看看嘛,真的是写不出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-31 19:26:23 | 显示全部楼层
大哥,大姐们
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-31 23:38:39 | 显示全部楼层
题目没问清楚,看不太懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-9-1 09:43:38 | 显示全部楼层

我最开始自己写代码的时候,只有那上面带颜色的地方和答案不一样。但是我觉得我写的也没错的啊,怎么会弄不出来,那就是有错,但是我自己不知道那出错了。谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-1 11:38:55 | 显示全部楼层
本帖最后由 Seandor 于 2012-9-1 11:41 编辑
C开头 发表于 2012-9-1 09:43
我最开始自己写代码的时候,只有那上面带颜色的地方和答案不一样。但是我觉得我写的也没错的啊,怎么会弄 ...

这样写就木有问题
show_str:  push ax
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-1 11:43:15 | 显示全部楼层
本帖最后由 Seandor 于 2012-9-1 11:45 编辑

还是直接复制吧
show_str:  push ax
                   push es
                   push cx
                  
                   mov ax, 0ah                 ;地址是以0开始的,但可以有第0行啊
                   mul dh                          ;所以不用减1,行号的取值范围是0-24,见p259
                   add ax, 0b800h     
                   mov es, ax                   ;保存段地址到es中
                  
                   mov bl, dl        
                   add bl, bl                  ;求得偏移地址
                   xor bh, bh                ;用bx存放偏移地址
                   mov ah, cl                ;存放颜色属性
                  
                s: mov cl, ds:[si]
                   mov ch, 0
                   jcxz ok
                   mov al, ds:[si]
                   mov es:[bx], al
                   mov es:[bx].1, ah
                   add bx, 2
                   inc si
                   jmp short s
                  
              ok:pop cx
                   pop es
                   pop ax
                   ret
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-9-2 09:13:53 | 显示全部楼层
Seandor 发表于 2012-9-1 11:43
还是直接复制吧
show_str:  push ax
                   push es

呵呵,那我试试,谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 03:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表