找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 50|回复: 0

第9章习题

[复制链接]

620

主题

336

回帖

1057

积分

管理员

积分
1057
发表于 2026-3-15 09:34:19 | 显示全部楼层 |阅读模式
第9章习题

1.修改本章源程序9-2,在不使用retf指令的情况下,从段code_1转移到段code_2执行。
答:可直接将retf改成以下两行
    mov bp,sp
    call far [bp]
由于栈不平衡,所以不够优雅。可以考虑在数据段定义2个双字,分别保存目标位置的偏移地址和段地址,然后用jmp far指令跳转。比如:
(1),修改第二个数据段如下
SECTION data_2 align=16 vstart=0

    msg1 db '  The above contents is written by LeeChung. '
         db '2011-05-06'
         db 0

    buff dw 0,0                ;添加此行

(2),修改第二个代码段,注释掉原先的行,添加新指令。
SECTION code_2 align=16 vstart=0          ;定义代码段2(16字节对齐)

  begin:
         ;push word [es:code_1_segment]
         ;mov ax,continue
         ;push ax                          ;可以直接push continue,80386+

         ;retf                             ;转移到代码段1接着执行
         mov word [buff], continue
         mov ax,[es:code_1_segment]
         mov [buff+2],ax
         jmp far [buff]


2.思考一下,如果去掉代码清单9-1的第38、39行,会发生什么情况?
     答:如果cx为0就不需要再读取了,但在下面的代码里,因为loop是先减1再判断,0减1得到65535,所以loop循环将执行65536次。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2026-3-30 18:22 , Processed in 0.242923 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表