王爽 汇编语言 实验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个‘!’
以下是运行结果
要么
要么就是直接关闭。。。。反正就是达不到预期目标
不懂错哪。。。
栈越界,可能发生异常,在这里正常工作。
逻辑错误出现在add , bx处。
观察调试结果,可以得出此处应为sub , bx
因为偏移是往前面偏移,而不是后面。
emu8086调试结果
关于无效指令是由于你在windows下安装中断是不被允许的
windows下的保护机制涉及到80386CPU的一些特性
windows的保护机制规定某些地址是不可以被改变的
如果必须要在windows下运行,DOSBOX可以实现。 chenhi 发表于 2013-10-20 23:55 static/image/common/back.gif
栈越界,可能发生异常,在这里正常工作。
逻辑错误出现在add , bx处。
谢谢{:1_1:} 书上代码就没有这一句“mov byte ptr es:,2”
页:
[1]