一、填空题(每空1分,30分)
1、微型计算机的基本组成包括:控制器、主存储器、运算器、输入设备和输出设备五部分。
2、CPU被重新启动后,CS=FFFF H,IP=0000H。
3、8086的I/O端口寻址方式为:直接端口寻址和间接端口寻址,其最大寻址空间分别为FFH和FFFFH。
4、8086CPU的结构由执行单元/EU和总线接口单元/BIU两部分组成。
5、主程序与子程序之间的参数传递方式有:寄存器传递参数、存储器传递参数和堆栈传递参数。
6、8086的中断系统可处理256种不同的中断,按产生中断的方法可分为内部/软件中断和外部/硬件中断。
7、二进制数101101.10B转换成十进制数为45.5D,转换成十六进制数为2D.8H。
8、存储单元物理地址的计算公式为:物理地址=段基址×16+偏移地址。
9、元件级总线包括地址总线AB、数据总线DB和控制总线CB三种,其中地址总线AB 是三态单向总线。
10、时钟发生器8284共产生哪三种时钟信号:OSC、CLK、PCLK、它们之间的关系是CLK 是OSC的3分频,而PCLK是CLK的2分频。
11、标志寄存器的标志位中,状态标志有OF,SF,ZF,AF,PF,CF、控制标志有DF,IF,TF。
二、问答题(12分)
1、在进行字符串操作时,必须遵守哪些隐含约定?(4分)
(1)源串由DS寻址,源串的元素由SI作指针;(2)目的串由ES寻址,目的串的元素由DI作指针;(3)每执行一次字符串指令,指针SI和DI自动修改,以便指向下一个待操作的单元;(4)DF标志控制字符串的处理方向,DF=0时为递增方向,DF=1时为递减方向;(5)要处理的字符串长度入在CX中。
2、请说明计算机中断指令的执行过程。
(4分)
(1)首先把标志寄存器的内容入栈,再把当前断点的段基址CS和偏移地址IP入栈;(2)清除中断标志IF和单步标志TF;(3)将中断类型号N乘以4,得到中断服务程序的入口地址表的表头地址,从中断向量表中得到中断报务程序的入口地址,CPU转入中断服务程序执行;(4)最后执行中断返回指令IRET,从堆栈中弹出程序断点,继续执行原来被中断的程序。
(每步1分)
3、试说明DOS系统功能调用的应用格式。
(4分)
(1)系统功能号送AH寄存器中;(2)入口参数送到指定寄存器中;(3)用INT21H指令执行功能调用;(4)根据出口参数分析功能调用执行情况。
(每步1分)
三、计算题(要求写出解题过程)(27分)
1、写出下列程序段执行后的结果:AX=3632H?(6分)
MOV AX,6262H
MOV CL,4
AND AL,0FH;AX=6202H
ADD AL,30H;AX=6232H
SHR AH,CL;AX=0632H
OR AH,30H;AX=3632H(答案3分,过程3分)
2、设数据段数据定义如下:(9分)
DSEG SEGMENT
NUM DB‘IBM-PC COMPUTER’,‘$’
ADDR DB3DUP(1,2)
ENTRY DW3
DSEG ENDS
(1)画出内存分配图;
(2)用两种指令将NUM的偏移地址送BX;
(3)用一条指令将ADDR的头两个字节内容存入SI。
答:(1)图略(每小题3分)
(2)LEA BX,NUM或MOV BX,OFFSET NUM
(3)MOV SI,[ADDR]
3、设程序中数据段定义如下:(8分)
DSEG SEGMENT
BUFFER DB‘I AM A DOCTOR’,‘$’
ADDR DB20DUP(?)
NUM DB111,222,133,88;(注意,此处为十进制数)
DB01,0,1,2,138
DISPP DW2
DSEG ENDS
(1)执行下列指令段后,
LEA BX,NUM
ADD BX,DISPP
MOV AX,WORD PTR[BX]
AX=5885H,BX=0024H。
(答案2分,过程2分)
(2)执行下列指令段后,
XOR BX,BX
MOV AX,[DISPP]
MOV SI,OFFSET NUM
ADD BX,WORD PTR[SI]
AX=0002H,BX=DE6F H。
(答案2分,过程2分)
4、分析下列程序段,指出该程序段的功能是什么?(4分)
MOV CX,1AH
MOV DL,‘Z’
LAB1:PUSH DX
MOV AH,02H
INT21H
POP DX
DEC DX
LOOP LAB1
依次在屏幕上显示Z,Y,……C,B,A等26个字母。
(答案2分,过程2分)四、请画出8086系统中存储器与总线的连接图,注意标注清楚地址和数据线的位数。
(8分)
见教材
五、编程题(23分)(注:第1小题必做,第2、3小题任选做1题)
1、请编制程序段完成AX*10的任务。
(要求不准用乘法指令)(8分)
(1)直接连续相加或用循环指令连加;(2)用移位和加法指令相结合。
2、试编写完整程序,统计字数组ARY中每个元素含1的个数,并存入数组CONT中,绘出程
序流程图,程序的数据段定义已给出。
(提示:应用双重循环)(15分)
DATA SEGMENT
ARY DW12ABH,0F101H,04A2H,019CH,B305H
DW0E51H,03D9H,4159H,0C12H,05B8H
LEN EQU($-ARY)/2;数组元素个数
CONT DB LEN DUP(?)
DATA ENDS
参考程序:
DATA SEGMENT
ARY DW12ABH,0F101H,04A2H,019CH,B305H
DW0E51H,03D9H,4159H,0C12H,05B8H
LEN EQU($-ARY)/2;数组元素个数
CONT DB LEN DUP(?)
DATA ENDS
STACK1SEGMENT PARA STACK
DW20H DUP(0)
STACK1ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA,SS:STACK1
START:MOV AX,DATA
MOV DS,AX
MOV CX,LEN
LEA SI,ARY;初始化指针
LEA DI,CONT
LOP1:MOV AX,[SI];取一个ARY数组元素到AX
MOV BL,0;初始化个数计数器
LOP2:CMP AX,0;(AX)=0
JZ NEXT ;是,退出内循环
JNS SHIFT ;AX 最高位=0,不计数INC
BL ;AX 最高位=1,计数SHIFT:SHL
AX,1;将AX 左移一位JMP
LOP2
;继续内循环NEXT:MOV
[DI],BL ;存1的个数ADD
SI,2;修改指针
INC DI LOOP LOP1;CX 计数不为0,继续外循环
MOV AH,4CH INT 21H COSEG
ENDS END
START
3、试编写完整程序,将某字符串中的所有数字字符去除掉,要求处理后的字符串应放回原空间,并显示处理后的字符串,绘出程序流程图,程序的数据段定义已给出。
(提示:用9号功能调用显示字符串,入口参数为DS:DX=串首址)(15分)DATA
SEGMENT STRING DB ‘HE IS 35YEARS OLD $’;待处理字符串STRLEN EQU $-STRING ;待处理字符串长度
STRTEMP
DB
STRLEN DUP(0)
;中间变量,暂存处理后字符
DATA
ENDS
参考程序:
DATA
SEGMENT STRING DB ‘HE IS 35YEARS OLD $’;待处理字符串
MAIN:
MOV AX,DATA MOV DS,AX MOV ES,AX
LEA SI,STRING ;取字符串首址LEA DI,STRTEMP ;取目的串首址MOV CX,STRLEN
;取字符串长度
CLD ;清标志寄存器DF 位
LOP:
LODSB
;取字符串中的一个字符送AL 寄存器CMP
AL,‘9’;该字符与数字字符9比较JNC DISPOSE ;若大于9,则不为数字字符CMP AL,‘0’;若小于9,则与0比较
JC DISPOSE ;若小于0,则不为数字字符JMP
NEXT DISPOSE:STOSB ;若不为数字字符,则保存该字符NEXT:LOOP
LOP
;若未处理完,则继续处理
LEA
SI,STRTEMP ;取暂存空间首址LEA DI,STRING ;取原字符串首址MOV CX,STRLEN ;取字符串长度
CLD ;清标志寄存器DF 位
REP MOVSB
;将暂存字符串传送到原字符所在空间MOV DX,OFFSET STRING ;显示处理后的字符
MOV AH,09H INT 21H
MOV AH,4CH ;结束程序
INT 21H CODE
ENDS END
MAIN。