不良企鹅 发表于 2013-10-20 23:55:44

王爽 汇编语言 实验13第二题


assume cs:code                                 ;安装int 7c00h中断例程

code segment
start: mov ax, 0
    mov es, ax
    mov di, 200h

   mov ax, code
   mov ds, ax
   mov si, offset ip

   mov cx, offset ipend-offset ip
   cld
   rep movsb

   mov ax,0
   mov es, ax
   mov word ptr es:,200h
   mov word ptr es:,0

   mov ax, 4c00h
   int 21h

ip: push bp
   mov bp, sp
   dec cx
   jcxz ipret
   add ,bx
   ipret: pop bp
   iret


ipend: nop

code ends
end start 一下代码为书上的


assume cs:code

code segment

start:mov ax, 0b800h
       mov es, ax
       mov di, 160*12

       mov bx, offset se-offset s
       mov cx, 80

s:      mov byte ptr es:,'!'

      mov byte ptr es:,2
      add di, 2
      int 7ch
se:   nop

      mov ax, 4c00h
      int 21h
code ends
end start目的是在屏幕中间显示80个‘!’
以下是运行结果
要么

要么就是直接关闭。。。。反正就是达不到预期目标
不懂错哪。。。

chenhi 发表于 2013-10-20 23:55:45

栈越界,可能发生异常,在这里正常工作。

逻辑错误出现在add , bx处。
观察调试结果,可以得出此处应为sub , bx
因为偏移是往前面偏移,而不是后面。
emu8086调试结果

关于无效指令是由于你在windows下安装中断是不被允许的
windows下的保护机制涉及到80386CPU的一些特性
windows的保护机制规定某些地址是不可以被改变的
如果必须要在windows下运行,DOSBOX可以实现。

不良企鹅 发表于 2013-10-21 12:34:09

chenhi 发表于 2013-10-20 23:55 static/image/common/back.gif
栈越界,可能发生异常,在这里正常工作。

逻辑错误出现在add , bx处。


谢谢{:1_1:}

一个人的精彩 发表于 2013-12-12 11:18:39

书上代码就没有这一句“mov byte ptr es:,2”
页: [1]
查看完整版本: 王爽 汇编语言 实验13第二题