(1)在上面的内容中,我们用7ch中断例程实现loop功能,则上面的7ch终端历程所能进行的最大转移位移是多少?
答:与loop的短转移不同,中断例程进行转移时是直接设定CS和IP的,原则上,只要是IP容许的范围内都是可以转移的,也就是说,转移范围在0~65535之间,考虑到s和se的前后都是有程序的,因此不可能取到0和65535这两个极端,但大体范围就是在0~65535,即64K范围内寻址。
(2)程序如下:
int 7ch的安装程序如下:
assume cs:code
code segment
start:mov ax,cs
mov ds,ax
mov si,offset lp
mov ax,0
mov es,ax
mov di,200h
mov cx,offset lpend-offset lp
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
lp: push bp
mov bp,sp
dec cx
jcxz lpret
add [bp+2],bx
lpret:pop bp
iret
lpend:nop
code ends
end start
题目中的源程序如下:
assume cs:code
data segment
db'conversation',0
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,0
mov ax,0b800h
mov es,ax
mov di,12*160
s: cmp byte ptr [si],0
je ok
mov al,[si]
mov es:[di],al
inc di
mov al,02h
mov es:[di],al
inc di
inc si
mov bx,offset s-offset ok
int 7ch
ok: mov ax,4c00h
int 21h
code ends
end start
- [tomato] 你的理解是正确的。 03/23 20:04
- [tomato] 正确。 03/23 16:58
- [游客] 加油啊! 02/28 22:08
- [wsrf] 正确! 02/14 10:08
- [游客] 谢谢tomato,大十五的还给批改作业,辛苦了啊! 02/09 19:21
- [tomato] 正确! 02/09 15:22
- [tomato] 正确! 02/09 15:19
- [tomato] 正确! 02/09 15:12
- [crazyman] 问题1:建议从command下进行实验,cmd有时候会有莫名其妙的现象。 问题2:如果向博主说的那 02/07 17:01
- [游客] 好的,我也问了很多其他人,大家都说是cmd下运行的原因,容易出错,您明天没有时间就别看了,我正在改思 02/06 21:45