马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 奥普瓯江 于 2019-3-12 11:33 编辑
(1)在上面的内容中,我们用7ch中断例程实现loop的功能,则上面的7ch中断例程所能进行的最大转移位移是多少?
答:最大的转移位移是FFFFH,个人判断,bx能储存的最大16位数就是他能储存的最大位移。
(2)用7ch中断例程完成jmp near ptr s 指令的功能,用bx向中断例程传送转移位移。
assume cs:code, ds:data
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 ;如果是0跳出循环
mov al, [si]
mov es:[di], al
inc si
add di, 2
mov bx, offset s-offset ok ;设置从标号ok到标号s的转移位移
int 7ch ;转移到标号s处
ok:
mov ax, 4C00h
int 21h
code ends
end start
答:以下为模拟 jmp near ptr s 命令的int 7ch程序
assume cs:code
code segment
start: ;寻找到原始数据地址
mov ax, cs
mov ds, ax
mov si, offset text_1
mov ax, 0 ;定位目标地址
mov es, ax
mov di, 200h
mov cx, offset text_2 - offset text_1 ;计算数据数量rep movsb循环所用
cld ;累加循环
rep movsb
;镶入中断7Ch中
mov ax, 0
mov es, ax
mov word ptr es:[7ch * 4], 200h
mov word ptr es:[7ch * 4 + 2], 0h
mov ax, 4c00h
int 21h
text_1: ;数据段
push bp ;临时调用bp所以需要把前期的数据先放入站中储存
mov bp, sp
add word ptr ss:[bp + 2], bx ;直接在栈中更改数据,bp默认的段寄存器是ss
pop bp ;放入站中临时储存的bp数据释放出来
iret
text_2:
nop ;只是为了占位所以设置的本标致供cx计算使用
code ends
end start
|