格式天下 发表于 2012-3-13 16:36:33

为什么这个程序一运行cmd就死机了???

assume cs:code
data segment
   db "welcome to masm!",0
data ends
code segment
start:mov ax,cs
      mov ds,ax
      mov bx,offset xian
   mov ax,0
   mov es,ax
   mov si,200h
   mov cx,offset s-offset s1;长度
   cld
   rep movsb
   
   mov ax,0
   mov es,ax
   mov word ptr es:,200h
   mov word ptr es:,0
   
xian: mov ax,0b800h
   mov es,ax
   mov di,10*0a0h+10
   mov cl,2
s:   mov dl,cl
      mov al,ds:
   mov es:,al
   mov es:,cl
   mov cl,al
   mov ch,0
   jcxz ok
   inc bx
   add di,2
   mov cl,dl
   jmp short s
   
ok:mov ax,4c00h
   int 21h
s1:nop
code ends
end start

莫名其妙 发表于 2012-3-13 16:36:34

本帖最后由 莫名其妙 于 2012-3-13 20:17 编辑

mov di,10*0a0h+10   像这种 既然你用了10进制 就别后面跟16进制的数



start:mov ax,cs
      mov ds,ax
      mov bx,offset xian
   mov ax,0
   mov es,ax
   mov si,200h
   mov cx,offset s-offset s1;长度X
   cld
   rep movsb

movsb将ds:的内容复制到es:这个请仔细看下11.10章
mov ax,0
   mov es,ax
   mov word ptr es:,200h
   mov word ptr es:,0      

这里就是你程序为什么不结束的原因后面的结束语句没有加上
mov ax,4c00h
   int 21h

xian: mov ax,0b800h
   mov es,ax                               这一段问题很大啊

   mov di,10*0a0h+10
   mov cl,2
s:   mov dl,cl          循环 位置设置问题
      mov al,ds:
   mov es:,al
   mov es:,cl
mov cl,al
   mov ch,0   判断是否为0应该在循环开始就进行判断
   jcxz ok
   inc bx
   add di,2
   mov cl,dl   这句话完全没必要 你都已经吧CL 给dl 了CL 要去进行为0判断 这里在给赋值回去干啥?
   jmp short s



莫名其妙 发表于 2012-3-13 21:01:11

本帖最后由 莫名其妙 于 2012-3-13 21:04 编辑

assume cs:code

code segment
start:mov ax,cs
      mov ds,ax
      mov si,offset xian
   mov ax,0
   mov es,ax
   mov di,200h
   mov cx,offset s1-offset xian;长度
   cld
   rep movsb
   
   mov ax,0
   mov es,ax
   mov word ptr es:,200h
   mov word ptr es:,0
    mov ax,4c00h

      int 21h


xian: push ax
                push bx
                push cx
                push dx
                push si
                push di

mov ax,0b800h
   mov es,ax
   mov di,10*160+10
   
   mov cl,2
   mov dl,cl
s:   mov al,ds:
          mov cl,al
   mov ch,0
   jcxz ok
   mov es:,al
   mov es:,dl
   
   inc bx
   add di,2
   
   jmp short s
   
ok:pop di
                pop si
                pop dx
                pop cx
                pop bx
                pop ax
                iret


mov ax,4c00h
   int 21h
s1:nop
code ends
end start





这是调用int 7ch

assume cs:code
data segment
   db 'welcome to masm!',0
data ends
code segment
start:mov ax,data
   mov ds,ax
   mov bx,0
   int 7ch
   mov ax,4c00h
   int 21h
code ends
end start

格式天下 发表于 2012-3-14 21:52:45

莫名其妙 发表于 2012-3-13 16:36 static/image/common/back.gif
mov di,10*0a0h+10   像这种 既然你用了10进制 就别后面跟16进制的数




明白了,非常感谢,那个今天有点事,所以来迟了,不能评分了{:5_92:}

格式天下 发表于 2012-3-14 22:08:39

莫名其妙 发表于 2012-3-13 21:01 static/image/common/back.gif
assume cs:code

code segment


哥们真厉害,佩服

莫名其妙 发表于 2012-3-15 08:31:45

格式天下 发表于 2012-3-14 22:08 static/image/common/back.gif
哥们真厉害,佩服

我也掰持了1小时呢... 我机器上运行也有问题后来重启了才好!~
页: [1]
查看完整版本: 为什么这个程序一运行cmd就死机了???