C开头 发表于 2012-8-30 20:32:50

实验10——1的问题

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:
                               

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

C开头 发表于 2012-8-31 07:09:42

那位大哥来看看嘛,真的是写不出来了{:5_100:}

C开头 发表于 2012-8-31 19:26:23

大哥,大姐们{:5_100:}

Seandor 发表于 2012-8-31 23:38:39

题目没问清楚,看不太懂

C开头 发表于 2012-9-1 09:43:38

Seandor 发表于 2012-8-31 23:38 static/image/common/back.gif
题目没问清楚,看不太懂

我最开始自己写代码的时候,只有那上面带颜色的地方和答案不一样。但是我觉得我写的也没错的啊,怎么会弄不出来,那就是有错,但是我自己不知道那出错了。谢谢你{:5_100:}

Seandor 发表于 2012-9-1 11:38:55

本帖最后由 Seandor 于 2012-9-1 11:41 编辑

C开头 发表于 2012-9-1 09:43 static/image/common/back.gif
我最开始自己写代码的时候,只有那上面带颜色的地方和答案不一样。但是我觉得我写的也没错的啊,怎么会弄 ...
这样写就木有问题show_str:push ax

Seandor 发表于 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:
                   mov ch, 0
                   jcxz ok
                   mov al, ds:
                   mov es:, al
                   mov es:.1, ah
                   add bx, 2
                   inc si
                   jmp short s
                  
            ok:pop cx
                   pop es
                   pop ax
                   ret

C开头 发表于 2012-9-2 09:13:53

Seandor 发表于 2012-9-1 11:43 static/image/common/back.gif
还是直接复制吧
show_str:push ax
                   push es


呵呵,那我试试,谢谢了
页: [1]
查看完整版本: 实验10——1的问题