微机原理及应用习题库与答案

微机原理及应用习题库与答案

习题与练习题1 第1章 绪论

1. 计算机分那几类?各有什么特点?

2. 简述微处理器、微计算机及微计算机系统三个术语的内涵。

答:微处理器是微计算机系统的核心硬件部件,对系统的性能起决定性的影响。微计算机包括80X86微处理器有几代?各代的名称是什么? 80386/80486:32位机。

4.采用一种总线标准进行微型计算机的硬件结构设计具有什么优点? 5.一个总线的技术规范应包括哪些部分? 6.总线的定义是什么?简述总线的发展过程。

7.微型计算机系统总线由哪三部分组成?它们各自的功能是什么?

第3章 微处理器结构及微计算机的组成

1. 8086是多少位的微处理器?为什么?

2. EU与BIU各自的功能是什么?如何协同工作?

3. 086/8088与其前一代微处理器8085相比,内部操作有什么改进? 4. 8086/8088微处理器内部有那些寄存器,它们的主要作用是什么?

答:执行部件有8个16位寄存器,AX、BX、CX、DX、SP、BP、DI、SI。AX、BX、CX、确定5ch+98h后各标志位的值。并说明结果的正确性。 5. 8086对存储器的管理为什么采用分段的办法?

6.在8086中,逻辑地址、偏移地址、物理地址分别指的是什么?具体说明。 7.给定一个存放数据的内存单元的偏移地址是20C0H,(DS)=0C00EH,求出该内存单元的物理地址。

8.8086/8088为什么采用地址/数据引线复用技术? 9. 8086与8088的主要区别是什么? 10. 怎样确定8086的最大或最小工作模式?最大、最小模式产生控制信号的方法有何不同 11. 8086被复位以后,有关寄存器的状态是什么?微处理器从何处开始执行程序? 12. 8086基本总线周期是如何组成的?各状态中完成什么基本操作? 13. 结合8086最小模式下总线操作时序图,说明ALE、M/IO#、DT/R#、RD#、READY信号

的功能。 14. 8086中断分哪两类?8086可处理多少种中断? 15. 8086可屏蔽中断请求输入线是什么?“可屏蔽”的涵义是什么? 16. 8086的中断向量表如何组成?作用是什么?

17.8086如何响应一个可屏蔽中断请求?简述响应过程。

18.什么是总线请求?8086在最小工作模式下,有关总线请求的信号引脚是什么? 19.简述在最小工作模式下,8086如何响应一个总线请求?

20.在基于8086的微计算机系统中,存储器是如何组织的?是如何与处理器总线连接的?

BHE#信号起什么作用? 21.“8086是一个16位微处理器”,这句话的涵义主要指的是什么?

22.80X86系列微处理器采取与先前的微处理器兼容的技术路线,有什么好处?有什么不足?

习题与练习题2

第4章 8086指令系统及寻址方式

1. 根据下列要求编写一个汇编语言程序:: (1)代码段的段名为COD_SG (2)数据段的段名为DAT_SG (3)堆栈段的段名为STK_SG

(4)变量HIGH_DAT所包含的数据为95

(5)将变量HIGH_DAT装入寄存器AH,BH和DL (6)程序运行的入口地址为START 答案: DAT_SG SEGEMNT HIGH_DAT DB 95 DAT_SG ENDS ;

STK_SG SEGMENT DW 64 DUP(?) STK_SG ENDS ;

COD_SG SEGMENT MAIN PROC FAR ASSUME CS: COD_SG, DS: DAT_SG, SS: STK_SG START: MOV AX, DAT-SG MOV DS, AX MOV AH, HIGH_DAT MOV BH, AH

MOV DL, AH MOV AH, 4CH INT 21H

MAIN ENDP COD_SG ENDS END START

2. 指出下列程序中的错误:

STAKSG SEGMENT DB 100 DUP(?) STA_SG ENDS DTSEG SEGMENT DATA1 DB ? DTSEG END CDSEG SEGMENT MAIN PROC FAR START: MOV DS,DATSEG MOV AL,34H ADD AL,4FH MOV DATA,AL START ENDP CDSEG ENDS END 答案: 改正后:

STAKSG SEGMENT DB 100 DUP(?) DTSEG SEGMENT DATA1 DB ? DTSEG CDSEG SEGMENT MAIN PROC FAR START: MOV AL, 34H ADD AL, 4FH MOV DATA1, AL ENDP CDSEG ENDS

END 3. 将下列文件类型填入空格:

(1) .obj (2) .exe (3) .crf (4) .asm (5) .lst (6) .map

编辑程序输出的文件有______________________________________; 汇编程序输出的文件有______________________________________; 连接程序输出的文件有______________________________________。

4. 下列标号为什么是非法的? (1) GET.DATA (2) 1_NUM (3) TEST-DATA (4) RET (5) NEW ITEM 答案:

非法标号: (1)因为‘.’只允许是标号的第一个字符

(2)第一个字符不能为数字 (3)不允许出现‘-’

(4)不能是保留字,如助记符 (5)不能有空格

5. 下面的数据项定义了多少个字节?

DATA_1 DB 6 DUP(4 DUP(0FFH)) 答案:

24字节

6. 对于下面两个数据段,偏移地址为10H和11H的两个字节中的数据是一样的吗?为什么?

DTSEG SEGMENT | DTSEG SEGMENT ORG 10H | ORG 10H DATA1 DB 72H | DATA1 DW 7204H DB 04H | DTSEG ENDS DTSEG ENDS |

答案:不一样. 分别是72H, 04H和04H, 72H. 存储字时低8位存在低字节,高8位存在高字节.

7. 下面的数据项设置了多少个字节?

(1) ASC_DATA DB ‘1234’ (2) HEX_DATA DW 1234H

答案:

(1) 设置了4个字节 (2) 设置了2个字节

8. 执行下列指令后, AX寄存器中的内容是什么? TABLE DW 10,20,30,40,50 ENTRY DW 3 .

MOV BX,OFFSET TABLE ADD BX,ENTRY MOV AX,[BX]

答案: (AX)=1E00H

9. 指出下列指令的错误:

(1) MOV AH,BX (2) MOV [SI],[BX] (3) MOV AX,[SI][DI] (4) MOV AX,[BX][BP] (5) MOV [BX],ES:AX (6) MOV BYTE PTR[BX],1000 (7) MOV AX,OFFSET [SI] (8) MOV CS,AX (9) MOV DS,2000H 答案:(1) 源、目的字长不一致

(2) 源、目的不能同时为存贮器寻址方式 (3) 基址变址方式不能有 SI和DI的组合 (4) 基址变址方式不能有 BX和BP的组合

(5) 在8086寻址方式中,AX不能作为基址寄存器使用,而且源、目的不能同时为存贮器寻

址方式

(6) 1000超出一个字节的表数范围 (7) OFFSET只用于简单变量,应去掉 (8) CS不能作为目的寄存器

(9) 段地址不能直接送入数据段寄存器

10. DATA SEGMENT

TABLE_ADDR DW 1234H DATA ENDS . MOV BX, TABLE_ADDR LEA BX, TABLE_ADDR 请写出上述两条指令执行后, BX寄存器中的内容。 答案:MOV BX,TABLE_ADDR ; 执行后(BX)=1234H

LEA BX,TABLE_ADDR ; 执行后(BX)=0

11. 设(DS)=1B00H, (ES)=2B00H, 有关存储器地址及其内容如右图 所示,请用两条指令把X装入AX寄存器。

1B00:2000H 1B00:2002H

2B00:8000H

答案:

LES BX, [2000H]

MOV AX, ES: [BX]

MOV BX,8000H MOV AX, ES: [BX]

12. 变量DATAX和DATAY定义如下:

DATAX DW 0148H DW 2316H DATAY DW 0237H DW 4052H 按下述要求写出指令序列: (1) DATAX和DATAY中的两个字数据相加, 和存放在DATAY和DATAY+2中。 (2) DATAX和DATAY中的两个双字数据相加, 和存放在DATAY开始的字单元中。 (3) DATAX和DATAY两个字数据相乘(用MUL)。 (4) DATAX除以23(用DIV)。 (5) DATAX双字除以字DATAY(用DIV)。

答案:

13. 试分析下面的程序段完成什么操作? MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL

答案: 将DX: AX中的双字左移4位(乘16)

14. 假定AX和BX中的内容为带符号数, CX和DX中的内容为无符号数, 请用比较指令和条件转移指令实现以下判断:

(1) 若DX的值超过CX的值,则转去执行EXCEED (2) 若BX的值大于AX的值,则转去执行EXCEED (3) CX中的值为0吗? 若是则转去执行ZERO

(4) BX的值与AX的值相减, 会产生溢出吗? 若溢出则转OVERFLOW (5) 若BX的值小于AX的值,则转去执行EQ_SMA (6) 若DX的值低于CX的值,则转去执行EQ_SMA 答案:

(1) CMP DX, CX JA EXCEED (2) CMP BX, AX JG EXCEED (3) CMP CX, 0 JE ZERO (4) CMP BX, AX

JO OVERFLOW (5) CMP BX, AX JL EQ_SMA (6) CMP DX, CX JB EQ_SMA

15. 假如在程序的括号中分别填入指令: (1) LOOP L20 (2) LOOPNE L20 (3) LOOPE L20

试说明在三种情况下, 当程序执行完后, AX、BX、CX、DX四个寄存器的内容分别是什么?

CODESG SEGMENT

ASSUME CS:CODESG, DS:CODESG. SS:CODESG MOV MOV MOV MOV INC ADD SHR RET END

BEGIN AX,01 BX,02 DX,03 CX,04 AX BX,AX DX,1

BEGIN:

L20:

( )

CODESG ENDS

答案: (1)(AX)= 5 (BX)= 16 (CX)= 0 (DX)= 0

(2)(AX)= 3 (BX)= 7 (CX)= 2 (DX)= 0 (3)(AX)= 2 (BX)= 4 (CX)= 3 (DX)= 1

16. 有两个3位的ASCII数串ASC1和ASC2定义如下: ASC1 DB ‘578’ ASC2 DB ‘694’ ASC3 DB ‘0000’ 请编写程序计算ASC3←ASC1+ASC2。

答案: CLC MOV CX, 3 MOV BX, 2 BACK: MOV AL, ASC1[BX] ADC AL, ASC2[BX] AAA

MOV ASC3[BX+1], AL DEC BX LOOP BACK RCL CX, 1 OR ASC3[BX], CL

17. 假设(CS)=3000H, (DS)=4000H, (ES)=2000H, (SS)=5000H, (AX)=2060H, (BX)=3000H, (CX)=5, (DX)=0, (SI)=2060H, (DI)=3000H, (43000H)=0A006H, (23000H)=0B116H, (33000H)=0F802H, (25060)=00B0H,.(SP)=0FFFEH, (CF)=1, (DF)=1, 请写出下列各条指令单独执行完后, 有关寄存器及存储单元的内容, 若影响标志位请给出标志位SF、ZF、OF、CF的值。

(1) SBB AX,BX (2) CMP AX,WORD PTR[SI+0FA0H] (3) MUL BYTE PTR[BX] (4) AAM (5) DIV BH (6) SAR AX,CL (7) XOR AX,0FFE7H (8) JMP WORD PYR[BX] 答案:

(1) (AX)=0F05FH, (SF)=1, (ZF)=0, (OF)=0, (CF)=1 (2) (SF)=1, (ZF)=0, (OF)=1, (CF)=1 (3) (AX)=0240H, (OF)=1, (CF)=1

(4) (AX)=0906H, (SF)=0, (ZF)=0 (5) (AX)=20ACH

(6) (AX)=0103H, (CF)=0

(7) (AX)=0DF87H, (CF)=0, (OF)=0, (SF)=1, (ZF)=0 (8) (IP)=0A006H, 不影响标志位

习题与练习题3

第5章 汇编语言程序设计基础

1. 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

答案:

ABC: MOV AH,1

INT 21H CMP AL,’A’ JB STOP CMP AL,’Z’ JA STOP SUB AL,20H MOV DL,AL MOV AH,2 INT 21H JMP ABC STOP: RET

3. 试编写程序,要求从键盘输入3个16进制数,并根据对3个数的比较显示如下信息: (1)如果3个数都不相等则显示0; (2)如果3个数中有2个数相等则显示2; (3)如果3个数都相等则显示3。

答案:

data segment array dw 3 dup(?) data ends code segment main proc far assume cs:code,ds:data start:

push ds sub ax,ax push ax mov ax,data mov ds,ax mov cx,3 lea si,array begin: push cx mov cl,4 mov di,4 mov dl, ‘ ‘ mov ah,02 int 21h mov dx,0

input: mov ah,01

int 21h and al,0fh shl dx,cl or dl,al dec di jne input mov [si],dx add si,2 pop cx loop begin comp: lea si,array mov dl,0 mov ax,[si] mov bx,[si+2] cmp ax,bx jne next1 add dl,2 next1: cmp [si+4],ax jne next2 add dx,2 next2: cmp [si+4],bx jne num add dl,2 num: cmp dx,3 jl disp mov dl,3 disp: mov ah,2 add dl,30h int 21h ret

main endp code ends end start

4. 已知整数变量A和B,试编写完成下述操作的程序:

(1)若两个数中有一个是奇数,则将该奇数存入A中,偶数存入B中; (2)若两个数均为奇数,则两数分别加1,并存回原变量; (3)若两个数均为偶数,则两变量不变。 答案:

dseg segment a dw ? b dw ? dseg ends cseg segment

main proc far

assume cs:cseg,ds:dseg start: push ds sub ax,ax push ax mov ax,dseg mov ds,ax begin: mov ax,a mov bx,b xor ax,bx test ax,0001 jz class test bx,0001 jz exit xchg bx,a mov b,bx jmp exit class: test bx,0001 jz exit inc b inc a exit: ret main endp cseg ends end start

5. 把0~10010之间的30个数,存入首地址为GRAD的字数组中,GRAD+i表示学号为i+1的学生成绩。另一个数组RANK是30个学生的名次表,其中RANK+I的内容是学号为i+1的学生的名次。试编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中(提示:一个学生的名次等于成绩高于这个学生的人数加1)。

答案:

dseg segment grade dw 30 dup(?) rank dw 30 dup(?) dseg ends cseg segment main proc far

assume cs:cseg, ds:dseg, es:dseg start: push ds sub ax,ax push ax mov ax,dseg mov ds,ax mov es,ax begin: mov di,0 mov cx,30 loop1: push cx mov cx,30 mov si,0 mov ax,grade[di] mov dx,0

loop2: cmp grade[si],ax jbe go_on inc dx go_on: add si,2 loop loop2 pop cx inc dx mov rank[di],dx sdd di,2 loop loop1 ret main endp cseg ends end start

6. 分析下列程序的功能,写出堆栈最满时各单元的地址及内容。

SSEG SEGMENT ‘STACK’ AT 1000H ; 堆栈的段地址为1000H DW 128 DUP(?) TOS LABEL WORD SSEG ENDS

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DSEG SEGMENT DW 32 DUP(?) DSEG ENDS

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CSEG SEGMENT MAIN PROC FAR ASSUME CS:CSEG, DS:DSEG,SS:SSEG START: MOV AX,SSEG MOV SS,AX MOV AX,DSEG MOV DS,AX MOV AX,4321H CALL HTOA RETN: MOV AH,4CH INT 21H MAIN ENDP

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HTOA PROC NEAR CMP AX,15 JLE B1 PUSH AX PUSH BP MOV BP,SP MOV BX,[BP+2] AND BX,0FH MOV [BP+2],BX POP BP MOV CL,4 SHR AX,CL CALL HTOA B1: POP AX

B2: ADD AL,30H JL PRT ADD AL,07 PRT: MOV DL,AL MOV AH,2 INT 21H RET HTOA ENDP CSEG ENDS ; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - END START

答案:

1000:0F2H

1000:0F4H

1000:0F6H

1000:0F8H

1000:0FAH

1000:0FCH

1000:0FEH

1000:100H

7. 写出分配给下列中断类型号在中断向量表中的物理地址。

(1) INT 12H (2) INT 8

答案:

(1) 00048h

(2) 00020h

8. 试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则与其相应的设备就输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束。两个状态寄存器的端口地址分别是0024和0036,与其相应的数据输入寄存器的端口则为0026和0038,输入字符分别存入首地址为BUFF1和BUFF2的存储区中。

答案:

test12:

dev1: mov si, 0 mov di, 0 in al, 0024h test al, 08 jnz exit in al,0036h test al, 08 jnz exit in al, 0024h

dev2: test al, 01 jz dev2 in al, 0026h inc si in al, 0036h

test al, 01

jz test12

in al, 0038h

mov buff2[di],al

inc di

jmp test12 mov buffer[si], al

exit: ret

9. 给定(SP)=0100,(SS)=0300,(FLAGS)=0240,存储单元的内容为(00020)=0040,(00022)

=0100,在段地址为0900及偏移地址为00A0的单元中有一条中断指令INT 8,试问执行INT 8指令后,SP,SS,IP,FLAGS的内容是什么?栈顶的三个字是什么?

答案:

(SP) = 00FA

(SS) = 0300

(IP) = 0040

(FLAGS) = 0040

堆栈内容

10. 编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。加密表为;

输入数字: 0,1,2,3,4,5,6,7,8,9

密码数字: 7,5,9,1,3,6,8,0,2,4

答案:

scode db 7,5,9,1,3,6,8,0,2,4

buffer db 10 dup(?)

; … …

mov si,0

mov cx,10

lea bx,scode

input: mov ah,01

int 21h

exit: ret

cmp jz and xlat mov inc loop al,0ah exit al,0fh buffer[si],al si input

习题与练习题4

第5章 微计算机中处理器与I/O设备间数据传输控制方法

1.试说明一般中断系统的组成和功能。

2.什么是中断类型码、中断向量、中断向量表?在基于8086/8088的微机系统中,中断类型码和中断向量之间有什么关系?

3.什么是硬件中断和软件中断?在PC机中两者的处理过程有什么不同?

4.试叙述基于8086/8088的微机系统处理硬件中断的过程。

5.在PC机中如何使用“用户中断”入口请求中断和进行编程?

6.8259A中断控制器的功能是什么?

7.8259A初始化编程过程完成那些功能?这些功能由那些ICW设定?

8.8259A在初始化编程时设置为非中断自动结束方式,中断服务程序编写时应注意什么?

9.8259A的初始化命令字和操作命令字有什么区别?它们分别对应于编程结构中那些内部寄存器?

10.8259A的中断屏蔽寄存器IMR与8086中断允许标志IF有什么区别?

11.若8086系统采用单片8259A中断控制器控制中断,中断类型码给定为20H,中断源的请

求线与8259A的IR4相连,试问:对应该中断源的中断向量表入口地址是什么?若中断服务程序入口地址为4FE24H,则对应该中断源的中断向量表内容是什么,如何定位?

12.试按照如下要求对8259A设定初始化命令字:8086系统中只有一片8259A,中断请求信号

使用电平触发方式,全嵌套中断优先级,数据总线无缓冲,采用中断自动结束方式。中断类型码为20H~27H,8259A的端口地址为B0H和B1H。

13.比较中断与DMA两种传输方式的特点。

习题与练习题5

第6章 常用可编程外围接口芯片

1. 设8253三个计数器的端口地址为201H、202H、203H,控制寄存器端口地址200H。试编写程序片段,读出计数器2的内容,并把读出的数据装入寄存器AX。

答:

MOV AL,80H

OUT 200H,AL

IN AL,203H

MOV BL,AL

IN AL,203H,

MOV BH,AL

MOV AX,BX

2. 设8253三个计数器的端口地址为201H、202H、203H,控制寄存器端口地址200H。输入时

钟为2MHz,让1号通道周期性的发出脉冲,其脉冲周期为1ms,试编写初化程序段。 答:

13=1⨯10要输出脉冲周期为1ms,输出脉冲的频率是1⨯10-3,当输入时钟频率为2MHz时,

计数器初值是

2⨯106

=2⨯103=2000 31⨯10

使用计数器1,先读低8位,后读高8位,设为方式3,二进制计数,控制字是76H。设控制口的地址是200H,计数器0的地址是202H。程序段如下:

MOV DX,200H

MOV AL,76H

OUT DX,,AL

MOV DX,202H

MOV AX,2000

OUT DX,AL

MOV AL,AH

OUT DX,AL

3. 设8253计数器的时钟输入频率为1.91MHz,为产生25KHz的方波输出信号,应向计数器装入

的计数初值为多少?

答:

1.91MHz = 76.4 25KHZ

应向计数器装入的初值是76。

4. 设8253的计数器0,工作在方式1,计数初值为2050H;计数器1,工作在方式2,计数初值为3000H;计数器2,工作在方式3,计数初值为1000H。如果三个计数器的GATE都接高电平,三个计数器的CLK都接2MHz时钟信号,试画出OUT0、OUT1、OUT2的输出波形。 答:

计数器0工作在方式1,即可编程的单脉冲方式。这种方式下,计数的启动必须由外部门控脉冲GATE控制。因为GATE接了高电平,当方式控制字写入后OUT0变高,计数器无法启动,所以OUT0输出高电平。

计数器1工作在方式2,即分频器的方式。输出波形的频率f=

为1.5ms,输出负脉冲的宽度等于CLK的周期为0.5µs。

计数器2工作在方式3,即方波发生器的方式。输出频率f=

三个OUT的输出波形如下:

fclk2MHz = =666.7HZ,其周期N30002MHz = 2000Hz的对称方波。 1000

OUT0

OUT1 250μs 250μs OUT2

微机原理及应用习题库与答案

习题与练习题1 第1章 绪论

1. 计算机分那几类?各有什么特点?

2. 简述微处理器、微计算机及微计算机系统三个术语的内涵。

答:微处理器是微计算机系统的核心硬件部件,对系统的性能起决定性的影响。微计算机包括80X86微处理器有几代?各代的名称是什么? 80386/80486:32位机。

4.采用一种总线标准进行微型计算机的硬件结构设计具有什么优点? 5.一个总线的技术规范应包括哪些部分? 6.总线的定义是什么?简述总线的发展过程。

7.微型计算机系统总线由哪三部分组成?它们各自的功能是什么?

第3章 微处理器结构及微计算机的组成

1. 8086是多少位的微处理器?为什么?

2. EU与BIU各自的功能是什么?如何协同工作?

3. 086/8088与其前一代微处理器8085相比,内部操作有什么改进? 4. 8086/8088微处理器内部有那些寄存器,它们的主要作用是什么?

答:执行部件有8个16位寄存器,AX、BX、CX、DX、SP、BP、DI、SI。AX、BX、CX、确定5ch+98h后各标志位的值。并说明结果的正确性。 5. 8086对存储器的管理为什么采用分段的办法?

6.在8086中,逻辑地址、偏移地址、物理地址分别指的是什么?具体说明。 7.给定一个存放数据的内存单元的偏移地址是20C0H,(DS)=0C00EH,求出该内存单元的物理地址。

8.8086/8088为什么采用地址/数据引线复用技术? 9. 8086与8088的主要区别是什么? 10. 怎样确定8086的最大或最小工作模式?最大、最小模式产生控制信号的方法有何不同 11. 8086被复位以后,有关寄存器的状态是什么?微处理器从何处开始执行程序? 12. 8086基本总线周期是如何组成的?各状态中完成什么基本操作? 13. 结合8086最小模式下总线操作时序图,说明ALE、M/IO#、DT/R#、RD#、READY信号

的功能。 14. 8086中断分哪两类?8086可处理多少种中断? 15. 8086可屏蔽中断请求输入线是什么?“可屏蔽”的涵义是什么? 16. 8086的中断向量表如何组成?作用是什么?

17.8086如何响应一个可屏蔽中断请求?简述响应过程。

18.什么是总线请求?8086在最小工作模式下,有关总线请求的信号引脚是什么? 19.简述在最小工作模式下,8086如何响应一个总线请求?

20.在基于8086的微计算机系统中,存储器是如何组织的?是如何与处理器总线连接的?

BHE#信号起什么作用? 21.“8086是一个16位微处理器”,这句话的涵义主要指的是什么?

22.80X86系列微处理器采取与先前的微处理器兼容的技术路线,有什么好处?有什么不足?

习题与练习题2

第4章 8086指令系统及寻址方式

1. 根据下列要求编写一个汇编语言程序:: (1)代码段的段名为COD_SG (2)数据段的段名为DAT_SG (3)堆栈段的段名为STK_SG

(4)变量HIGH_DAT所包含的数据为95

(5)将变量HIGH_DAT装入寄存器AH,BH和DL (6)程序运行的入口地址为START 答案: DAT_SG SEGEMNT HIGH_DAT DB 95 DAT_SG ENDS ;

STK_SG SEGMENT DW 64 DUP(?) STK_SG ENDS ;

COD_SG SEGMENT MAIN PROC FAR ASSUME CS: COD_SG, DS: DAT_SG, SS: STK_SG START: MOV AX, DAT-SG MOV DS, AX MOV AH, HIGH_DAT MOV BH, AH

MOV DL, AH MOV AH, 4CH INT 21H

MAIN ENDP COD_SG ENDS END START

2. 指出下列程序中的错误:

STAKSG SEGMENT DB 100 DUP(?) STA_SG ENDS DTSEG SEGMENT DATA1 DB ? DTSEG END CDSEG SEGMENT MAIN PROC FAR START: MOV DS,DATSEG MOV AL,34H ADD AL,4FH MOV DATA,AL START ENDP CDSEG ENDS END 答案: 改正后:

STAKSG SEGMENT DB 100 DUP(?) DTSEG SEGMENT DATA1 DB ? DTSEG CDSEG SEGMENT MAIN PROC FAR START: MOV AL, 34H ADD AL, 4FH MOV DATA1, AL ENDP CDSEG ENDS

END 3. 将下列文件类型填入空格:

(1) .obj (2) .exe (3) .crf (4) .asm (5) .lst (6) .map

编辑程序输出的文件有______________________________________; 汇编程序输出的文件有______________________________________; 连接程序输出的文件有______________________________________。

4. 下列标号为什么是非法的? (1) GET.DATA (2) 1_NUM (3) TEST-DATA (4) RET (5) NEW ITEM 答案:

非法标号: (1)因为‘.’只允许是标号的第一个字符

(2)第一个字符不能为数字 (3)不允许出现‘-’

(4)不能是保留字,如助记符 (5)不能有空格

5. 下面的数据项定义了多少个字节?

DATA_1 DB 6 DUP(4 DUP(0FFH)) 答案:

24字节

6. 对于下面两个数据段,偏移地址为10H和11H的两个字节中的数据是一样的吗?为什么?

DTSEG SEGMENT | DTSEG SEGMENT ORG 10H | ORG 10H DATA1 DB 72H | DATA1 DW 7204H DB 04H | DTSEG ENDS DTSEG ENDS |

答案:不一样. 分别是72H, 04H和04H, 72H. 存储字时低8位存在低字节,高8位存在高字节.

7. 下面的数据项设置了多少个字节?

(1) ASC_DATA DB ‘1234’ (2) HEX_DATA DW 1234H

答案:

(1) 设置了4个字节 (2) 设置了2个字节

8. 执行下列指令后, AX寄存器中的内容是什么? TABLE DW 10,20,30,40,50 ENTRY DW 3 .

MOV BX,OFFSET TABLE ADD BX,ENTRY MOV AX,[BX]

答案: (AX)=1E00H

9. 指出下列指令的错误:

(1) MOV AH,BX (2) MOV [SI],[BX] (3) MOV AX,[SI][DI] (4) MOV AX,[BX][BP] (5) MOV [BX],ES:AX (6) MOV BYTE PTR[BX],1000 (7) MOV AX,OFFSET [SI] (8) MOV CS,AX (9) MOV DS,2000H 答案:(1) 源、目的字长不一致

(2) 源、目的不能同时为存贮器寻址方式 (3) 基址变址方式不能有 SI和DI的组合 (4) 基址变址方式不能有 BX和BP的组合

(5) 在8086寻址方式中,AX不能作为基址寄存器使用,而且源、目的不能同时为存贮器寻

址方式

(6) 1000超出一个字节的表数范围 (7) OFFSET只用于简单变量,应去掉 (8) CS不能作为目的寄存器

(9) 段地址不能直接送入数据段寄存器

10. DATA SEGMENT

TABLE_ADDR DW 1234H DATA ENDS . MOV BX, TABLE_ADDR LEA BX, TABLE_ADDR 请写出上述两条指令执行后, BX寄存器中的内容。 答案:MOV BX,TABLE_ADDR ; 执行后(BX)=1234H

LEA BX,TABLE_ADDR ; 执行后(BX)=0

11. 设(DS)=1B00H, (ES)=2B00H, 有关存储器地址及其内容如右图 所示,请用两条指令把X装入AX寄存器。

1B00:2000H 1B00:2002H

2B00:8000H

答案:

LES BX, [2000H]

MOV AX, ES: [BX]

MOV BX,8000H MOV AX, ES: [BX]

12. 变量DATAX和DATAY定义如下:

DATAX DW 0148H DW 2316H DATAY DW 0237H DW 4052H 按下述要求写出指令序列: (1) DATAX和DATAY中的两个字数据相加, 和存放在DATAY和DATAY+2中。 (2) DATAX和DATAY中的两个双字数据相加, 和存放在DATAY开始的字单元中。 (3) DATAX和DATAY两个字数据相乘(用MUL)。 (4) DATAX除以23(用DIV)。 (5) DATAX双字除以字DATAY(用DIV)。

答案:

13. 试分析下面的程序段完成什么操作? MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL

答案: 将DX: AX中的双字左移4位(乘16)

14. 假定AX和BX中的内容为带符号数, CX和DX中的内容为无符号数, 请用比较指令和条件转移指令实现以下判断:

(1) 若DX的值超过CX的值,则转去执行EXCEED (2) 若BX的值大于AX的值,则转去执行EXCEED (3) CX中的值为0吗? 若是则转去执行ZERO

(4) BX的值与AX的值相减, 会产生溢出吗? 若溢出则转OVERFLOW (5) 若BX的值小于AX的值,则转去执行EQ_SMA (6) 若DX的值低于CX的值,则转去执行EQ_SMA 答案:

(1) CMP DX, CX JA EXCEED (2) CMP BX, AX JG EXCEED (3) CMP CX, 0 JE ZERO (4) CMP BX, AX

JO OVERFLOW (5) CMP BX, AX JL EQ_SMA (6) CMP DX, CX JB EQ_SMA

15. 假如在程序的括号中分别填入指令: (1) LOOP L20 (2) LOOPNE L20 (3) LOOPE L20

试说明在三种情况下, 当程序执行完后, AX、BX、CX、DX四个寄存器的内容分别是什么?

CODESG SEGMENT

ASSUME CS:CODESG, DS:CODESG. SS:CODESG MOV MOV MOV MOV INC ADD SHR RET END

BEGIN AX,01 BX,02 DX,03 CX,04 AX BX,AX DX,1

BEGIN:

L20:

( )

CODESG ENDS

答案: (1)(AX)= 5 (BX)= 16 (CX)= 0 (DX)= 0

(2)(AX)= 3 (BX)= 7 (CX)= 2 (DX)= 0 (3)(AX)= 2 (BX)= 4 (CX)= 3 (DX)= 1

16. 有两个3位的ASCII数串ASC1和ASC2定义如下: ASC1 DB ‘578’ ASC2 DB ‘694’ ASC3 DB ‘0000’ 请编写程序计算ASC3←ASC1+ASC2。

答案: CLC MOV CX, 3 MOV BX, 2 BACK: MOV AL, ASC1[BX] ADC AL, ASC2[BX] AAA

MOV ASC3[BX+1], AL DEC BX LOOP BACK RCL CX, 1 OR ASC3[BX], CL

17. 假设(CS)=3000H, (DS)=4000H, (ES)=2000H, (SS)=5000H, (AX)=2060H, (BX)=3000H, (CX)=5, (DX)=0, (SI)=2060H, (DI)=3000H, (43000H)=0A006H, (23000H)=0B116H, (33000H)=0F802H, (25060)=00B0H,.(SP)=0FFFEH, (CF)=1, (DF)=1, 请写出下列各条指令单独执行完后, 有关寄存器及存储单元的内容, 若影响标志位请给出标志位SF、ZF、OF、CF的值。

(1) SBB AX,BX (2) CMP AX,WORD PTR[SI+0FA0H] (3) MUL BYTE PTR[BX] (4) AAM (5) DIV BH (6) SAR AX,CL (7) XOR AX,0FFE7H (8) JMP WORD PYR[BX] 答案:

(1) (AX)=0F05FH, (SF)=1, (ZF)=0, (OF)=0, (CF)=1 (2) (SF)=1, (ZF)=0, (OF)=1, (CF)=1 (3) (AX)=0240H, (OF)=1, (CF)=1

(4) (AX)=0906H, (SF)=0, (ZF)=0 (5) (AX)=20ACH

(6) (AX)=0103H, (CF)=0

(7) (AX)=0DF87H, (CF)=0, (OF)=0, (SF)=1, (ZF)=0 (8) (IP)=0A006H, 不影响标志位

习题与练习题3

第5章 汇编语言程序设计基础

1. 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

答案:

ABC: MOV AH,1

INT 21H CMP AL,’A’ JB STOP CMP AL,’Z’ JA STOP SUB AL,20H MOV DL,AL MOV AH,2 INT 21H JMP ABC STOP: RET

3. 试编写程序,要求从键盘输入3个16进制数,并根据对3个数的比较显示如下信息: (1)如果3个数都不相等则显示0; (2)如果3个数中有2个数相等则显示2; (3)如果3个数都相等则显示3。

答案:

data segment array dw 3 dup(?) data ends code segment main proc far assume cs:code,ds:data start:

push ds sub ax,ax push ax mov ax,data mov ds,ax mov cx,3 lea si,array begin: push cx mov cl,4 mov di,4 mov dl, ‘ ‘ mov ah,02 int 21h mov dx,0

input: mov ah,01

int 21h and al,0fh shl dx,cl or dl,al dec di jne input mov [si],dx add si,2 pop cx loop begin comp: lea si,array mov dl,0 mov ax,[si] mov bx,[si+2] cmp ax,bx jne next1 add dl,2 next1: cmp [si+4],ax jne next2 add dx,2 next2: cmp [si+4],bx jne num add dl,2 num: cmp dx,3 jl disp mov dl,3 disp: mov ah,2 add dl,30h int 21h ret

main endp code ends end start

4. 已知整数变量A和B,试编写完成下述操作的程序:

(1)若两个数中有一个是奇数,则将该奇数存入A中,偶数存入B中; (2)若两个数均为奇数,则两数分别加1,并存回原变量; (3)若两个数均为偶数,则两变量不变。 答案:

dseg segment a dw ? b dw ? dseg ends cseg segment

main proc far

assume cs:cseg,ds:dseg start: push ds sub ax,ax push ax mov ax,dseg mov ds,ax begin: mov ax,a mov bx,b xor ax,bx test ax,0001 jz class test bx,0001 jz exit xchg bx,a mov b,bx jmp exit class: test bx,0001 jz exit inc b inc a exit: ret main endp cseg ends end start

5. 把0~10010之间的30个数,存入首地址为GRAD的字数组中,GRAD+i表示学号为i+1的学生成绩。另一个数组RANK是30个学生的名次表,其中RANK+I的内容是学号为i+1的学生的名次。试编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中(提示:一个学生的名次等于成绩高于这个学生的人数加1)。

答案:

dseg segment grade dw 30 dup(?) rank dw 30 dup(?) dseg ends cseg segment main proc far

assume cs:cseg, ds:dseg, es:dseg start: push ds sub ax,ax push ax mov ax,dseg mov ds,ax mov es,ax begin: mov di,0 mov cx,30 loop1: push cx mov cx,30 mov si,0 mov ax,grade[di] mov dx,0

loop2: cmp grade[si],ax jbe go_on inc dx go_on: add si,2 loop loop2 pop cx inc dx mov rank[di],dx sdd di,2 loop loop1 ret main endp cseg ends end start

6. 分析下列程序的功能,写出堆栈最满时各单元的地址及内容。

SSEG SEGMENT ‘STACK’ AT 1000H ; 堆栈的段地址为1000H DW 128 DUP(?) TOS LABEL WORD SSEG ENDS

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DSEG SEGMENT DW 32 DUP(?) DSEG ENDS

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CSEG SEGMENT MAIN PROC FAR ASSUME CS:CSEG, DS:DSEG,SS:SSEG START: MOV AX,SSEG MOV SS,AX MOV AX,DSEG MOV DS,AX MOV AX,4321H CALL HTOA RETN: MOV AH,4CH INT 21H MAIN ENDP

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HTOA PROC NEAR CMP AX,15 JLE B1 PUSH AX PUSH BP MOV BP,SP MOV BX,[BP+2] AND BX,0FH MOV [BP+2],BX POP BP MOV CL,4 SHR AX,CL CALL HTOA B1: POP AX

B2: ADD AL,30H JL PRT ADD AL,07 PRT: MOV DL,AL MOV AH,2 INT 21H RET HTOA ENDP CSEG ENDS ; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - END START

答案:

1000:0F2H

1000:0F4H

1000:0F6H

1000:0F8H

1000:0FAH

1000:0FCH

1000:0FEH

1000:100H

7. 写出分配给下列中断类型号在中断向量表中的物理地址。

(1) INT 12H (2) INT 8

答案:

(1) 00048h

(2) 00020h

8. 试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则与其相应的设备就输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束。两个状态寄存器的端口地址分别是0024和0036,与其相应的数据输入寄存器的端口则为0026和0038,输入字符分别存入首地址为BUFF1和BUFF2的存储区中。

答案:

test12:

dev1: mov si, 0 mov di, 0 in al, 0024h test al, 08 jnz exit in al,0036h test al, 08 jnz exit in al, 0024h

dev2: test al, 01 jz dev2 in al, 0026h inc si in al, 0036h

test al, 01

jz test12

in al, 0038h

mov buff2[di],al

inc di

jmp test12 mov buffer[si], al

exit: ret

9. 给定(SP)=0100,(SS)=0300,(FLAGS)=0240,存储单元的内容为(00020)=0040,(00022)

=0100,在段地址为0900及偏移地址为00A0的单元中有一条中断指令INT 8,试问执行INT 8指令后,SP,SS,IP,FLAGS的内容是什么?栈顶的三个字是什么?

答案:

(SP) = 00FA

(SS) = 0300

(IP) = 0040

(FLAGS) = 0040

堆栈内容

10. 编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。加密表为;

输入数字: 0,1,2,3,4,5,6,7,8,9

密码数字: 7,5,9,1,3,6,8,0,2,4

答案:

scode db 7,5,9,1,3,6,8,0,2,4

buffer db 10 dup(?)

; … …

mov si,0

mov cx,10

lea bx,scode

input: mov ah,01

int 21h

exit: ret

cmp jz and xlat mov inc loop al,0ah exit al,0fh buffer[si],al si input

习题与练习题4

第5章 微计算机中处理器与I/O设备间数据传输控制方法

1.试说明一般中断系统的组成和功能。

2.什么是中断类型码、中断向量、中断向量表?在基于8086/8088的微机系统中,中断类型码和中断向量之间有什么关系?

3.什么是硬件中断和软件中断?在PC机中两者的处理过程有什么不同?

4.试叙述基于8086/8088的微机系统处理硬件中断的过程。

5.在PC机中如何使用“用户中断”入口请求中断和进行编程?

6.8259A中断控制器的功能是什么?

7.8259A初始化编程过程完成那些功能?这些功能由那些ICW设定?

8.8259A在初始化编程时设置为非中断自动结束方式,中断服务程序编写时应注意什么?

9.8259A的初始化命令字和操作命令字有什么区别?它们分别对应于编程结构中那些内部寄存器?

10.8259A的中断屏蔽寄存器IMR与8086中断允许标志IF有什么区别?

11.若8086系统采用单片8259A中断控制器控制中断,中断类型码给定为20H,中断源的请

求线与8259A的IR4相连,试问:对应该中断源的中断向量表入口地址是什么?若中断服务程序入口地址为4FE24H,则对应该中断源的中断向量表内容是什么,如何定位?

12.试按照如下要求对8259A设定初始化命令字:8086系统中只有一片8259A,中断请求信号

使用电平触发方式,全嵌套中断优先级,数据总线无缓冲,采用中断自动结束方式。中断类型码为20H~27H,8259A的端口地址为B0H和B1H。

13.比较中断与DMA两种传输方式的特点。

习题与练习题5

第6章 常用可编程外围接口芯片

1. 设8253三个计数器的端口地址为201H、202H、203H,控制寄存器端口地址200H。试编写程序片段,读出计数器2的内容,并把读出的数据装入寄存器AX。

答:

MOV AL,80H

OUT 200H,AL

IN AL,203H

MOV BL,AL

IN AL,203H,

MOV BH,AL

MOV AX,BX

2. 设8253三个计数器的端口地址为201H、202H、203H,控制寄存器端口地址200H。输入时

钟为2MHz,让1号通道周期性的发出脉冲,其脉冲周期为1ms,试编写初化程序段。 答:

13=1⨯10要输出脉冲周期为1ms,输出脉冲的频率是1⨯10-3,当输入时钟频率为2MHz时,

计数器初值是

2⨯106

=2⨯103=2000 31⨯10

使用计数器1,先读低8位,后读高8位,设为方式3,二进制计数,控制字是76H。设控制口的地址是200H,计数器0的地址是202H。程序段如下:

MOV DX,200H

MOV AL,76H

OUT DX,,AL

MOV DX,202H

MOV AX,2000

OUT DX,AL

MOV AL,AH

OUT DX,AL

3. 设8253计数器的时钟输入频率为1.91MHz,为产生25KHz的方波输出信号,应向计数器装入

的计数初值为多少?

答:

1.91MHz = 76.4 25KHZ

应向计数器装入的初值是76。

4. 设8253的计数器0,工作在方式1,计数初值为2050H;计数器1,工作在方式2,计数初值为3000H;计数器2,工作在方式3,计数初值为1000H。如果三个计数器的GATE都接高电平,三个计数器的CLK都接2MHz时钟信号,试画出OUT0、OUT1、OUT2的输出波形。 答:

计数器0工作在方式1,即可编程的单脉冲方式。这种方式下,计数的启动必须由外部门控脉冲GATE控制。因为GATE接了高电平,当方式控制字写入后OUT0变高,计数器无法启动,所以OUT0输出高电平。

计数器1工作在方式2,即分频器的方式。输出波形的频率f=

为1.5ms,输出负脉冲的宽度等于CLK的周期为0.5µs。

计数器2工作在方式3,即方波发生器的方式。输出频率f=

三个OUT的输出波形如下:

fclk2MHz = =666.7HZ,其周期N30002MHz = 2000Hz的对称方波。 1000

OUT0

OUT1 250μs 250μs OUT2


相关文章

  • 2010湖北省计算机等级考试二级考试题库
  • 1.在计算机的应用中,"OA"表示( C) A.管理信息系统 B.决策支持系统 C.办公自动化 D.人工智能 2.连接计算机系统结构的五大组成部件一般通过( D ) A.适配器 B.电缆 C.中继器 D.总线 3.第四代 ...查看


  • 2015年中级物流师考试题库及答案最新考试题库(完整版)
  • 1.集装单元化的特点之一是:通过标准化.通用化.配套化和系统化,以实现物流功能作业的( ). A.机械化.自动化 B.整体化.集约 C.托盘化.集装化 D.最优化.节约化 2.( )可以实行从发货人到受货人之间门对门直达运输. A.航空运输 ...查看


  • 全国最新计算机一级考试试题库
  • 全国最新计算机一级考试试题库 1.用高级程序设计语言编写的程序称为___c___. A.目标程序 B.可执行程序 C.源程序 D.伪代码程序 2.操作系统是计算机系统中的_____a_. A.核心系统软件 B.关键的硬件部件 C.广泛使用的 ...查看


  • 600个毕业设计题目
  • 1 实验室排课系统 2 电子技术题库系统升级设计及打包发布 3 电子技术基础辅助学习系统设计 4 电子技术基础辅助学习系统功能实现 5 检察院语音门户网站设计 6 185邮政客户服务中心构架分析 7 无纸水文信息记录仪研究与设计 8 中文语 ...查看


  • 大学几乎所有学科的课本答案[2]
  • 大学几乎所有学科的课本答案! 来源: 任明嘉的日志 经济金融 [PDF格式]<会计学原理>同步练习题答案 [Word格式]<成本会计>习题及答案(自学推荐,23页) [Word格式]<成本会计>配套习题集 ...查看


  • 中级电工学习资料
  • 理论知识复习纲要 一.电路和磁路知识 以下电路和磁路知识,要求考生在复习过程中,重点掌握 1.直流电路.复杂直流电路的概念.定律和分析.计算方法 2.单相交流电路.三相交流电路的概念.分析和简单计算方法 3.磁场的基本性质 4.有关磁路的几 ...查看


  • 计算机考试题库
  • 2014年计算机考试题库 1.世界上第一台电子计算机ENIAC 诞生于( B ). A .1945年 B.1946年 C.1947年 D.1948年 2.个人计算机属于( C ) A .小巨型机 B.小型计算机 C.微型计算机 D.中型计算 ...查看


  • 国家电网继电保护调考竞赛题库----填空题
  • 继电保护专业题库 -- 400道填空题 1. 作业人员因故间断电气工作连续 3 个月以上者,应重新学习<安规>,并经考试合格后,方能 恢复工作. 2. 所谓运行中的电气设备,系指 全部带有电压 . 一部分带有电压 或 一经操作即 ...查看


  • 数控车床高级工理论试题题库 5套含答案
  • 1 第八章 数控车床高级工试题库 第一节 数控车床高级工理论(应知) 试题库 数控机床高级工理论(应知) 试卷 1 单位: __________________ 姓名: ______________ 准考证号: ______________ ...查看


热门内容