|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
复制代码 |
|