7.7 习题

7.1、汇编语言的子程序是如何定义的?所使用的关键字有哪些?

7.2、为了编写具有良好风格的子程序,一般需要书写哪些重要的说明性信息?

7.3、简述调用指令CALL和转移指令JMP之间的主要区别。

7.4、简述段内和段间子程序调用指令CALL的主要区别。

7.5、子程序返回指令RET的功能能否用JMP指令来模拟,若可以,请用段内子程序的返回加以说明,否则,说明理由。

7.6、子程序返回指令“RET 6”的功能是返回数值“6”给调用程序吗?若不是,那其作用是什么?

7.7、在子程序中要使其所用寄存器对调用者是透明的,请举例说明达到其目的的方法。

7.8、编写子程序实现下列功能,参数的传递方式可自行决定(假设所有变量都是字类型)。

1)、ABS(x)=|x|
2)、f(x)=3x2 + 5x – 8
3)、strlen(String)    //返回字符串String的长度,该字符串以0结束
4)、判断三条边a、b和c能否构成三角形,若能,CF为1,否则,CF为0

7.9、编写计算将CX值三次方的子程序,结果也存入CX(不考虑溢出问题)。

7.10、编写计算表达式AX=DI×SI/100H的子程序(不考虑溢出问题)。

7.11、编写计算EAX=EAX+EBX+ECX+EDX的子程序。在计算过程中,若产生进位,则EDI=1,否则,EDI=0。

7.12、在MASM 6.x编程环境下,简述子程序定义中USE说明语句的作用是什么?

7.13、调用子程序指令CALL和调用伪指令INVOKE的主要区别是什么?

7.14、在子程序的完全定义形式中,其语言类型所起的作用是什么?可用哪二种方法来设定子程序的语言类型?

7.15、如何指定子程序的传递参数是动态的,对动态参数有哪些规定?

7.16、编写一个子程序,其功能是把其所有参数数值之和存入AX中,每个参数都数16位二进制数,但个数不定。

7.17、子程序的参数传递有传值和传地址之分,在汇编语言中,如何实现传地址?请举例说明。

7.18、在高级语言中,子程序可定义其局部变量,在汇编语言中,能定义其局部变量吗?若能,请举例说明。

7.19、使用.REPEAT和.UNTIL语句编写一个子程序,其功能是从DS:SI开始的内存单元中查找是否有与AL相同的数值。若找不到,CF=0,否则,CF=1,且SI指向所找到位置。假设查找区域以0为结束标志。

7.20、用.REPEAT和.UNTILCXZ语句编写一个子程序,用以在内存缓冲区中填入00H。内存缓冲区的首址及长度分别由DS:SI和CX来确定。

7.21、用.WHILE和.ENDW语句实现7.16和7.17的功能。

7.22、在程序模块中,伪指令PUBLIC和EXTRN的作用是什么?

7.23、在C语言程序中,存在关键字EXTERN,它与汇编语言中EXTRN的作用相似吗?

7.24、如何创建和维护自己的子程序库?使用子程序库有何好处?