微机原理及应用习题库与答案
习题与练习题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