微机原理与接口技术第四版课后习题答案(供参考) 联系客服

发布时间 : 星期四 文章微机原理与接口技术第四版课后习题答案(供参考)更新完毕开始阅读7d2ca19c260c844769eae009581b6bd97f19bcc8

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.

到共同的出口作用。

⑤ 完整的子程序注释可方便程序员调用该子程序,子程序注释包括子程序名、子程序功能、入口参数和出口参数、调用注意事项和其他说明等。

⑥ 子程序保持堆栈平衡,才能保证执行RET指令时当前栈顶的内容是正确的返回地址。主程序也要保持堆栈平衡,这样才能释放传递参数占用的堆栈空间,否则多次调用该子程序可能就致使堆栈溢出。

⑦ “传值”是传递参数的一个拷贝,被调用程序改变这个参数不影响调用程序;“传址”时,被调用程序可能修改通过地址引用的变量内容。

⑧ INCLUDE语句包含的是文本文件、是源程序文件的一部分;INCLUDELIB语句包含的是子程序库文件。 〔习题4.3〕填空题

(1)JMP指令根据目标地址的转移范围和寻址方式,可以分成四种类型:段内转移、__________,段内转移、__________和段间转移、__________,段间转移、__________。

(2)假设在平展存储模型下,EBX=1256H,双字变量TABLE的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“JMP EBX” 后EIP=__________,执行指令“JMP TABLE[EBX]”后EIP=__________。

(3)“CMP EAX,3721H”指令之后是JZ指令,发生转移的条件是EAX=__________,此时ZF=__________。(去E)

(5)循环结构程序一般有三个部分组成,它们是__________,循环体和__________部分。

(7)过程定义开始是“TEST PROC”语句,则过程定义结束的语句是__________。宏定义开始是“DISP MACRO”语句,则宏定义结束的语句是__________。

(8)利用堆栈传递子程序参数的方法是固定的,例如寻址堆栈段数据的寄存器是__________。

(9)MASM汇编语言中,声明一个共用的变量应使用__________伪指令;而使用外部变量要使用__________伪指令声明。 〔解答〕

① 相对寻址,间接寻址,直接寻址,间接寻址 ② 1256H,3280H ③ 3721H,1

⑤ 循环初始,循环控制 ⑦ TEST ENDP,ENDM ⑧ EBP

⑨ PUBLIC,EXTERN

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.

〔习题4.6〕

执行如下程序片断后,CMP指令分别使得5个状态标志CF、ZF、SF、OF和PF为0还是为1?它会使得哪些条件转移指令指令Jcc的条件成立、发生转移? mov eax,20h cmp eax,80h 〔解答〕

CF=1 ZF=0 SF=1 OF=0 PF=1

可以使得条件成立、发生转移的指令有:JC JS JP JNZ JNO 〔习题4.8〕在采用奇偶校验传输数据的接收端应该验证数据传输的正确性。例如,如果采用偶校验,那么在接收到的数据中,其包含“1”的个数应该为0或偶数个,否则说明出现传输错误。现在,在接收端编写一个这样的程序,如果偶校验不正确显示错误信息,传输正确则继续。假设传送字节数据、最高位作为校验位,接收到的数据已经保存在Rdata变量中。

〔解答〕 ; 数据段 Rdata byte 57h ;保存接收的数据 error byte 'Error !',0 ; 代码段 mov al,Rdata and al,0ffh ;标志PF反映“1”的个数 jp done ;个数为偶数,正确继续 mov eax,offset error ;个数为奇数,显示出错 call dispmsg done:

〔习题4.10〕编程,首先测试双字变量DVAR的最高位,如果为1,则显示字母“L”;如果最高位不为1,则继续测试最低位,如果最低位为1,则显示字母“R”;如果最低位也不为1,则显示字母“M”。 〔解答〕 ; 数据段 dvar dword 57h ; 代码段 mov eax,dvar test eax,h jnz nextl test eax,1 jnz nextr mov al,'M'

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.

jmp done nextl: mov al,'L' jmp done nextr: mov al,'R' done: call dispc

〔习题4.11〕编写一个程序,先提示输入数字“Input Number:0~9”,然后在下一行显示输入的数字,结束;如果不是键入了0~9数字,就提示错误“Error!”,继续等待输入数字。

〔解答〕 ; 数据段

inmsg byte 'Input number(0~9): ',0

ermsg byte 0dh,0ah,'Error! Input again: ',0 ; 代码段 mov eax,offset inmsg ; 提示输入数字 call dispmsg again: call readc ; 等待按键 cmp al,'0' ; 数字 < 0? jb erdisp cmp al,'9' ; 数字 > 9? ja erdisp call dispcrlf call dispc jmp done erdisp: mov eax,offset ermsg call dispmsg jmp again done:

〔习题4.12〕有一个首地址为ARRAY的20个双字的数组,说明下列程序段的功能。

mov ecx,20 mov eax,0 mov esi,eax

sumlp: add eax,array[esi] add esi,4 loop sumlp mov total,eax 〔解答〕

求这20个双字的和,保存在TOTAL变量,不关进心进位和溢出。

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.

〔习题4.13〕编程中经常要记录某个字符出现的次数。现编程记录某个字符串中空格出现的次数,结果保存在SPACE单元。

〔解答〕 ; 数据段

string byte 'Do you have fun with Assembly ?',0 ;以0结尾的字符串 space dword ? ; 代码段 mov esi,offset string xor ebx,ebx ;EBX用于记录空格数 again: mov al,[esi] cmp al,0 jz done cmp al,20h ;空格的ASCII码是20H jne next ;不相等、不是空格,转移 inc bx ;相等、是空格,空格个数加1 next: inc esi jmp again ;继续循环 done: mov space,ebx ;保存结果

〔习题4.14〕编写计算100个16位正整数之和的程序。如果和不超过16位字的范围(65535),则保存其和到WORDSUM,如超过则显示‘Overflow !’。 〔解答〕 ; 数据段

array word 2005,2008,98 dup (1394) ; 假设100个16位正整数 wordsum word ?

error byte 'Overflow !',0 ; 代码段 and ebx,0 mov ecx,100 xor ax,ax

again: add ax,array[ebx*2] jc over inc ebx loop again mov wordsum,ax

over: mov eax,offset error call dispmsg