〔习题3.31〕下面程序的功能是将数组ARRAY1的每个元素加固定值(8000H),将和保存在数组ARRAY2。在空白处填入适当的语句或语句的一部分。 array1 array2 again: 〔解答〕
〔习题3.32〕
上机实现本章的例题程序,编程实现本章的习题程序。
第4章 汇编语言程序设计 〔习题4.1〕简答题
(1)是什么特点决定了目标地址的相对寻址方式应用最多? (2)什么是奇偶校验?
(3)为什么判断无符号数大小和有符号大小的条件转移指令不同? (4)双分支结构中两个分支体之间的JMP指令有什么作用? (5)为什么特别强调为子程序加上必要的注释?
(6)子程序采用堆栈传递参数,为什么要特别注意堆栈平衡问题? (7)参数传递的“传值”和“传址”有什么区别? (8)INCLUDE语句和INCLUDELIB有什么区别? (9)混合编程有什么优势?
(10)运行Windows程序,有时为什么会提示某个DLL文件不存在?
〔解答〕
① 当同一个程序被操作系统安排到不同的存储区域执行时,指令间的位移没有改变,目标地址采用相
对寻址可方便操作系统的灵活调度。
② 数据通信时,数据的某一位用做传输数据的奇偶校验位,数据中包括校验位在内的“1”的个数恒为
奇数,就是奇校验;恒为偶数,就是偶校验。
③ 无符号数和有符号数的操作影响两组不同的标志状态位,故判断两个无符号数和有符号数的大小关
系要利用不同的标志位组合,所以有对应的两组指令。
④ 双分支结构中两个分支体之间的JMP指令,用于实现结束前一个分支回到共同的出口作用。
⑤ 完整的子程序注释可方便程序员调用该子程序,子程序注释包括子程序名、子程序功能、入口参数
和出口参数、调用注意事项和其他说明等。
⑥ 子程序保持堆栈平衡,才能保证执行RET指令时当前栈顶的内容是正确的返回地址。主程序也要保
mov array2[ebx*4],eax add ebx,1 ; 数据段
dword 1,2,3,4,5,6,7,8,9,10 dword 10 dup(?) ; 代码段
mov ecx,lengthof array1 mov ebx,0
mov eax,array1[ebx*4] add eax,8000h mov ______________ add ebx,__________ loop again
- -21
持堆栈平衡,这样才能释放传递参数占用的堆栈空间,否则多次调用该子程序可能就致使堆栈溢出。
⑦ “传值”是传递参数的一个拷贝,被调用程序改变这个参数不影响调用程序;“传址”时,被调用
程序可能修改通过地址引用的变量内容。
⑧ INCLUDE语句包含的是文本文件、是源程序文件的一部分;INCLUDELIB语句包含的是子程序库
文件。
⑨ 取长补短。
⑩ Windows程序在运行时需要加载其配套的动态链接库DLL文件,当其没有被搜索到时就会提示不存
在。
〔习题4.2〕判断题
(1)指令指针或者还包括代码段寄存器值的改变将引起程序流程的改变。 (2)JMP指令对应高级语言的GOTO语句,所以不能使用。
(3)因为条件转移指令Jcc要利用标志作为条件,所以也影响标志。
(4)JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。 (5)控制循环是否结束只能在一次循环结束之后进行。
(6)介绍LOOP指令时,常说它相当于DEC ECX和JNZ两条指令。但考虑对状态标志的影响,它们
有差别。LOOP指令不影响标志,而DEC指令却会影响除CF之外的其他状态标志。
(7)CALL指令用在调用程序中,如果被