检测点13.1
(1)在上面的内容中,我们用7ch中断例程实现loop的功能,则上面的7ch中断例程所能进行的最大转移位移是多少?
转移位移有向前位移和向后位移
因此转移位移要用带符号数表示
8位位移的范围 -128到127
16位位移的范围 -32768到32767
例程中向前最大位移32768
向后最大位移32767
(2)用7ch中断例程完成jmp near ptrs 指令的功能,用bx向中断例程传送转移位移。
ssume cs:code
data segment
db 'conversation',0
data ends
stack segment
db 32 dup (0)
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,32
mov ax,cs
mov ds,ax
mov si,offset jnps ;ds:si指向原程序首地址
mov ax,0
mov es,ax
mov di,0200h ;es:di指向复制点首地址
mov cx,offset jnpsend-offset jnps ;复制程序长度
cld ;正向
rep movsb ;串复制
mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0 ;修改向量表中7ch指向地址
mov ax,data
mov ds,ax
mov si,0 ;ds:si指向字符串首地址
mov ax,0b800h
mov es,ax
mov di,12*160 ;es:di指向显存12行首地址
s:cmp byte ptr [si],0
je ok ;判断是否为0
mov al,[si]
mov es:[di],al ;传送字符
inc si
add di,2
mov bx,offset s-offset ok ;计算到ip到s偏移量
int 7ch ;中断7ch 实现跳转到s
ok:mov ax,4c00H
int 21h
jnps:push bp ;7ch中断例程
mov bp,sp
add [bp+2],bx ;修改栈内保存的ip值为s
pop bp
iret
jnpsend:nop
code ends
end start
- [十堰职业技术学院学生211020] 是的,确实要好好学学 06/23 23:14
- [游客] 嗯。css样式表确实很实用。 06/23 15:24
- [tomato] 正确。 06/12 09:38
- [zhenglxd] 你怎么跳着学习的啊 这样可不好 还是按顺序来吧 不然 太混乱了或者整理下吧 06/12 09:12
- [mess] dw 0 ------------- 这里最好是dw 0,0 因为根据程序要求第1和2个字节 06/09 10:09
- [十堰职业技术学院学生211020] 哦,是的 太仔细了! 06/08 21:20
- [mywiil] 程序没问题,只不过assume少些了一个a。呵呵 06/08 10:04
- [mywiil] 不错,继续加油吧。 06/08 10:00
- [zhenglxd] 正确 咱们进度一样了哈 看谁先把下面的程序搞错来! 05/31 17:16
- [zhenglxd] 进度快点 我都赶到你前头去了 原先我可是比你慢些的,没想到我 放假堕落了整整一个礼拜 你居然比我还慢 05/31 17:08
[ mywiil 发表于 2009-06-08 10:04 ]
程序没问题,只不过assume少些了一个a。呵呵
[ 十堰职业技术学院学生211020 发表于 2009-06-08 21:20 ]
哦,是的
太仔细了!