sasuke010101 发表于 2011-8-9 15:30:00

实验十求助了

实验十的编写子程序显示字符,为什么我的没有显示啊!求助一下!编译通过,但是不显示绿色的Welcome to masm!
而且我还有一个疑问 show_str里面为什么直接可以pushcx,cx的值刚开始没有的啊,只有cl有个2.请大家帮帮
assume cs:code,ds:data
data segment

   db 'Welcome to masm!',0
   
data ends


code segment

start:   

         mov dh,8
         mov dl,3
             mov cl,2
                  
             mov ax,data
                  
             mov ds,ax
                  
             mov si,0
                  
             call show_str
          
             mov ax,4c00h
             int 21h
          
show_str :
            push cx
            push si
                       
                        mov al,0A0h
                       
                        dec dh
                        mul dh
                       
                        mov bx,ax
                       
                        mov al,2
                        mul dl
                        sub ax,2
                       
                        add bx,ax
                       
                        mov ax,0B800h
                        mov es,ax
                       
                        mov di,0
                        mov al,cl
                        mov ch,0
                       
s:          mov cl,ds:

            jcxz ok
                       
                        mov es:,cl
                        mov es:,al
                       
                        inc si
                       
                        add di,2
                        jmp short s
                       
ok:         pop si
            pop cx
                       
                        ret
code ends
end start

sasuke010101 发表于 2011-8-10 09:40:59

求解决啊。。帮帮忙啊

parbbo 发表于 2011-8-10 10:26:18

你这代码太乱,如果是你写的建议多看看甲鱼的视频

parbbo 发表于 2011-8-10 10:33:51

assume cs:code,ds:data

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

code segment
start:   
         mov ax,data
         mov ds,ax
         mov si,0

         call show_str

         mov ax,4c00h
         int 21h      

show_str :
            mov ax,0B800h
          mov es,ax
            mov di,0
          mov ch,0         

s:         mov cl,ds:
            jcxz ok
            mov es:,cl
            mov es:,21h
            inc si
            add di,2
            jmp short s      
ok:      ret

code ends

sasuke010101 发表于 2011-8-10 14:39:53

parbbo 发表于 2011-8-10 10:33 static/image/common/back.gif


这是??正确的?

parbbo 发表于 2011-8-10 14:41:16

你可以自己测试下!!你夹杂那多垃圾代码干嘛?

着火番茄 发表于 2011-8-17 10:18:35

parbbo 发表于 2011-8-10 10:33 static/image/common/back.gif


我前几天 搞不懂这个问题
今天又看了你得程序
懂了{:5_95:}

javanetwork 发表于 2011-8-17 10:42:15

确实不需要      push cxpush si
之所以有这个,是因为在show_str中有改变了cx、si的值,为了防止调用show_str的父程序的值受到影响
如果不加push cx push si,也可采用
push cx
push si
call show_str
pop si
pop cx;在子程序调用结束后恢复也是一样的


不能显示出字符串实在看不出原因,你可以debug一下
页: [1]
查看完整版本: 实验十求助了