莫名其妙 发表于 2012-2-29 18:14:26

关于实验13-1 debug 调试问题

本帖最后由 莫名其妙 于 2012-3-2 08:45 编辑

assume cs:code

data segment
db "welcome to masm !",0
data ends

code segment
    start:   mov ax,cs
   mov ds,ax
   mov si, offset c7
   mov ax,0
   mov es,ax
   mov di,200h
   mov cx,offset c7end - offset c7
   cld
   rep movsb
   ;安装

   mov word ptr es:,200h
   mov word ptr es:,0h
;设置向量表

   mov dh,10
   mov dl,10
   mov cl,2
   mov ax,data
   mov ds,ax
   mov si,0
   int 7ch
;执行中断 pushf push cs push ip

   mov ax,4c00h
   int 21h


c7:push ax
   push bx
   push di
   mov bx,0b800h
   mov es,bx


   mov al,160d
   mul dh
   mov di,ax
   mov al,2   
   mul dl   
   add di,ax    ;设定显示位置
   
s: mov cl,
   mov ch,0
   jcxz ok ;判断是否为0   跳转
   mov es:,cl
   mov bl,2
   mov es:,bl
   inc si
   add di,2
   jmp short s ;显示输出
ok:   pop di
   pop bx
   pop ax
   iret
c7end: nop
   
   code ends
end start

我在debug 调试的时候 发现mov bx,0b800h----jmp short s   这一段 本来应该修改显示区域的内存单元数据的 可是改写完的那一段却没有发生改变 还是原来的数据!~



这个程序 每次运行都不会显示出 绿色的字符
但是只要 debug一遍 在退出 然后在直接执行 .exe就能正确显示



E:\>cd 1
E:\1>ml 1.asm
E:\1>1.exe
E:\1>1.exe
E:\1>1.exe   这里多次执行也没有显示出字符串
E:\1>debug 1.exe    进入debug 后直接q退出
-q      
          welcome to masm !

E:\1>1.exe   再次执行就显示出字符串了!~
E:\1>


求解!~








梦想飞扬 发表于 2012-3-1 11:10:44

本帖最后由 梦想飞扬 于 2012-3-1 11:24 编辑

data segment
db "welcome to masm !",0
data ends

数据段的定义会被操作系统释放,要放在cs段代码中定义
参考247页书中的说明
页: [1]
查看完整版本: 关于实验13-1 debug 调试问题