第五章微机原理习题答案
微机原理习题答案
第五章习题答案
一、 问答题
1. 断点中断是指怎样一种中断?在程序调试中有什么作用? 断点中断指令有什么特点?设置断点过程对应了一种什么操作?这种操作会产生什么运行结果?
答: 断点中断即中断类型3,一般该中断处理程序进行程序调试,主要功能是显示一些寄存器的值,并给出一些重要的信息。在程序调试中,断点中断就是从一个较长的程序中分离出一个较短的存在问题的程序段。断点中断的特点是指令占一个字节。设置断点过程对应int 3替换那条指令,在中断处理程序中再恢复该被替换的指令,并修改堆栈中的断点地址为中断处的地址而不是下一条指令地址。这种操作使断点中断不会影响程序的功能。
2. 用普通运算指令执行BCD码运算时,为什么要进行十进制调整?具体讲,在进行BCD码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?
答: 在BCD码中,只允许0?/FONT>9这10个数字出现,但有时候的运算结果会超过此范围,因此要进行十进制调整。进行加、件或乘法运算时,调整指令必须紧跟在算术指令后面,在进行除法运算时,调整指令放在除法指令之前。
3. 普通移位指令(带CF的和不带CF的两类)在执行操作时,有什么差别?在编制乘法程序时,为什么常用移位指令来代替乘除法指令?试编写一个程序段,实现将BX中的数除以10,结果仍放在BX中。
答: 带CF和不带CF的普通移位指令的差异:前者用于算术运算,后者用于逻辑运算。程序段: MOV CL,0AH
MOV AX,BX
IDIV CL
MOV BX,AX
二、 程序改错及编程
1.下面的程序段将ASCII码的空格字符填满100个字节的字符表。阅读这一程序,画出流程,并说明使用CLD指令和REP STOSB指令的作用,再指出REP STOSB指令执行时和那几个寄存器的设置有关?
MOV CX, SEG TABLE ; TABLE为字节表表头
MOV ES, CX
MOV DI, OFFSET TABLE ; DI指向字节表
MOV AL, ' '
MOV CX, 64H ; 字节数
CALL FILLM ; 调用数子程序
...
...
FILLM: JCXZ EXIT ; CX为0则退出
PUSH DI ; 保存寄存器
PUSH CX
CLD
REP STOSB ; 方向标志清零