|
|
第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次。
|
|