|
10鱼币
- 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:[7ch*4],200h
- mov word ptr es:[7ch*4+2],0
- mov ax, 4c00h
- int 21h
- ip: push bp
- mov bp, sp
- dec cx
- jcxz ipret
- add [bp+2],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:[di],'!'
- mov byte ptr es:[di+1],2
- add di, 2
- int 7ch
- se: nop
- mov ax, 4c00h
- int 21h
- code ends
- end start
复制代码 目的是在屏幕中间显示80个‘!’
以下是运行结果
要么
要么就是直接关闭。。。。反正就是达不到预期目标
不懂错哪。。。
|
最佳答案
查看完整内容
栈越界,可能发生异常,在这里正常工作。
逻辑错误出现在add , bx处。
观察调试结果,可以得出此处应为sub , bx
因为偏移是往前面偏移,而不是后面。
emu8086调试结果
关于无效指令是由于你在windows下安装中断是不被允许的
windows下的保护机制涉及到80386CPU的一些特性
windows的保护机制规定某些地址是不可以被改变的
如果必须要在windows下运行,DOSBOX可以实现。
|