|
1 假定一个名为MAINPRO的程序要调用子程序SUBPRO,试问:
(1) MAINPRO中的什么指令告诉汇编程序SUBPRO是在外部定义的?
(2) SUBPRO怎么知道MAINPRO要调用它?
2 假定程序MAINPRO和SUBPRO不在同一模块中,MAINPRO中定义字节变量QTY和字变量VALUE和PRICE。SUBPRO程序要把VALUE除以QTY,并把商存在PRICE中。试问:
(1) MAINPRO怎么告诉汇编程序外部子程序要调用这三个变量?
(2) SUBPRO怎么告诉汇编程序这三个变量是在另一个汇编语言程序定义的?
3 假设:
(1) 在模块1中定义了双字变量VAR1,首地址为VAR2的字节数组和NEAR标号LAB1,它们将由模块2和模块3所使用;
(2) 在模块2中定义了字变量VAR3和FAR标号LAB2,而模块1中要用到VAR3,模块3中要用到LAB2;
(3) 在模块3中定义了FAR标号LAB3,而模块2中要用到它。
试对每个源模块给出必要的EXTRN和PUBLIC说明。
4 主程序CALLMUL定义堆栈段、数据段和代码段,并把段寄存器初始化;数据段中定义变量QTY和PRICE;代码段中将PRICE装入AX,QTY装入BX,然后调用子程序SUBMUL。程序SUBMUL没有定义任何数据,它只简单地把AX中的内容
(PRICE)乘以BX中的内容 (QTY),乘积放在DX,AX中。请编制这两个要连接起来的程序。
5 试编写一个执行以下计算的子程序COMPUTE:
RX+Y-3
其中X, Y及R均为字数组。假设COMPUTE与其调用程序都在同一代码段中,数据段D_SEG中包含X和Y数组,数据段E_SEG中包含R数组,同时写出主程序调用COMPUTE过程的部分。
(1) 如果主程序和COMPUTE在同一程序模块中,但不在同一代码段中,程序应如何修改?
(2) 如果主程序和COMPUTE不在同一程序模块中,程序应如何修改?
6 试编制具有以下功能的程序,并分析该程序运行时的堆栈内容。
(1) 主程序中定义二个数据,其值为1228和52400。
(2) 主程序调用二个独立的模块,并通过堆栈传送参数值。
(3) 在第一个模块里,把二个数相乘,并把结果送回主模块中的result单元。
(4) 第二个模块把二个数相除(52400/1228),并把商和余数分别送回主模块中的quotient和remainder单元。
|