幻世千年 发表于 2011-6-9 19:22:08

关于检测点13.1(1)的疑问,希望小甲鱼来讨论

检测点13.1
(1)答:所能进行的最大转移位移是128[指向前转移]。因为是实现loop的功能,那就应当遵守loop的使用规则。

这是网上给出的答案,但是我并不这么认为,我认为7ch中断例程和loop是不一样的,最大转移位移应该是FFFFH

以下是验证程序

首先是在屏幕中显示80个!的程序,跟书上不同的是在循环体内加上了db 60000 dup (0)增加程序的体积
assume cs:code
code segment
start: mov ax,0b800h
mov es,ax
mov di,160*12
mov bx,offset s-offset se
mov cx,80

s:mov byte ptr es:,'!'
db 60000 dup (0)
add di,2
int 7ch
se: nop
mov ax,4c00h
int 21h
code ends
end start

然后是安装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:,200h
mov word ptr es:,0 ;设置中断向量表
mov ax,4c00h
int 21h

lp:push bp
mov bp,sp
dec cx
jcxz lpret
add ,bx
lpret:pop bp
iret
lpend:nop
code ends
end start

编译运行后,成功运行,所以我认为7ch中断例程最大转移位移是FFFFH

不知道我说的对不对,希望高人可以指点一二!!!

困惑灵魂 发表于 2011-6-11 00:20:01

反正最大也就 一个 字 的地址   

小甲鱼 发表于 2011-6-12 13:26:17

这里利用 int 7ch 中断是间接的通过栈来存放偏移地址进行的。〈偏移存放在bx中,十六位偏移〉
引申讨论下,如果想把偏移量再扩大,可以吗?

幻世千年 发表于 2011-6-14 14:39:26

小甲鱼 发表于 2011-6-12 13:26 static/image/common/back.gif
这里利用 int 7ch 中断是间接的通过栈来存放偏移地址进行的。〈偏移存放在bx中,十六位偏移〉
引申讨论下, ...

终于见到甲鱼老师了!先顶一下甲鱼老师,你的视频讲的真好!!!
那这个题目的bx偏移就是十六位的了?

guohuo888meng@1 发表于 2017-2-17 16:05:06

我认为是FFFFH

燃烧的飞星 发表于 2019-12-26 17:36:55

第一题
位移有方向的,应该是用补码表示吧
如果是补码那就是-30768~30761
不知道对不对

ZLZ_ 发表于 2020-9-8 11:55:52

燃烧的飞星 发表于 2019-12-26 17:36
第一题
位移有方向的,应该是用补码表示吧
如果是补码那就是-30768~30761


我是后来者,学到这里的时候我也纳闷儿,到底应不应该用补码来运算add ,求解。
页: [1]
查看完整版本: 关于检测点13.1(1)的疑问,希望小甲鱼来讨论