习题答案

更新时间:2024-03-11 08:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章

1.1 微处理器、微型计算机和微型计算机系统三者之间有什么不同?

将运算器与控制器集成在一起,称为微处理器。微处理器是微处理器的核心。微型计算机是由微处理器、存储器、输入/输出接口电路和系统总线构成的裸机系统。微型计算机系统是以微型计算机为主机,配上系统软件和外设之后而构成的计算机系统。三者之间是有很大不同的,微处理器是微型计算机的一个组成部分,而微型计算机又是微型计算机系统的一个组成部分。 1.2 CPU在内部结构上由哪几部分组成?CPU应具备什么功能?

CPU在内部结构上由算术逻辑部件(ALU);累加器和通用寄存器组;程序计数(指令指针)、指令寄存器和译码器;时序和控制部件几部分组成。不同CPU的性能指标一般不相同,但一般CPU应具有下列功能:可以进行算术和逻辑运算;可保存少量数据;能对指令进行译码并执行规定的动作;能和存储器、外设交换数据;提供整个系统所需要的定时和控制;可以响应其它部件发来的中断请求。

1.3 累加器和其他通用寄存器相比有何不同?

累加器是比较特殊的通用寄存器。它在某些指令执行前,它可以保存一源操作数,还在执行后又用来保存运算结果,另外它一般也用来完成输入/输出指令。而通用寄存器则一般只用来保存参加运算的数据、运算的中间的结果以及用来保存地址。 1.3 微型计算机采用总线结构有什么优点?

微型计算机的总线结构是一个独特的结构。有了总线结构以后系统中各功能部件之间的相互关系变为了各功能部件面向总线的单一关系。一个部件只要符合总线标准,就可以连接到采用这种总路线标准的系统中,使系统功能得到扩展。 1.4 控制总线传输的信号大致有哪几类?

控制总线用来传输控制信号:其中包括CPU送往存储器和输入/输出接口电路的控制信号,如读信号、写信号和中断响应信号等;还包括其它部件送到CPU的信号,比如,时钟信号、中断请求和准备就绪信号。

1.5数据总线和地址总线在结构上有什么不同之处?如果一个系统的数据和地址合用一套总线或

者合用部分总线,那么要靠什么来区分地址和数据?

从结构上看数据总线是双向的,而地址总线从结构上看却是单向的。如果一个系统的数据总线和地址总线合用一套总线或者合用部分总线,一般可利用时钟,在总线上采用分时复用技术来区分地址和数据,例如可在总线周期的若干个时钟周期,约定某周期传输地址、在另一周期传输数据。

2.10 在 8088/8086中,逻辑地址FFFF∶0001, 00A2∶37F和B800∶173F的物理地址分别

是多少?

3.2 单选题:(1)执行下面指令序列后,结果是( A AX=0FF82H).MOV AL,82H CBW (2)与MOV BX,OFFSET VAR指令完全等效的指令是( D LEA BX,VAR )。 (3)写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有D、MOV (4)下面指令执行后,改变AL寄存器内容的指令是( D )。D、AND AL,BL

(5)设DH=10H,执行NEG DH指令后,正确的结果是( D )。D、DH=0F0H CF=1

(6)设DS=8225H,DI=3942H,指令NEG BYTE PTR[DI]操作数的物理地址是A、85B92H (7)检查BUF的内容是否为正偶数,如是正偶数,则0TAL。下面程序段正确的是( C )。 C、 MOV AL,BUF TEST AL,81H JNZ K3 MOV AL,0 K3:??

(8)下列指令中,执行速度最快的是( C ) A、 MOV AX,100 B、 MOV AX,[BX] C、 MOV AX,BX D、 MOV AX,[BX+BP] 3.5 设(IP)= 3D8F H,(CS)= 4050H,(SP)= 0F17C H,当执行CALL 200O:0094H后,试

求出 IP、CS、SP、[SP]、[SP+1][SP+2] 和[SP+3]的内容? IP:0094H CS:2000H SP:F178H [SP]=8FH [SP+1]=3DH [SP+2]=50H [SP+3]=40H 3.6 设(DS)= 2000H,(BX)= 1256H,(SI)= 528FH,TABLE的偏移量= 20A1H,[232F7H]

=3280H,[ 264E5H] = 2450H,执行下述指令

(1)JMP BX ;IP= 1256H (2)JMP TABLE[BX] ;IP= 3280H (3)JMP [BX][SI] ;IP= 2450H 3.12 8086状态标志寄存器中,作为控制用的标志位有( 3 )个,其中,不可用指令操作的是(DF、 IF、 TF)

3.13 设当前的SP=1000H,执行PUSHF指令后,SP=(0FFE H),若改为执行INT 20H指令后,

则SP=( 0FFA H)。

汇编语言程序设计主要内容:汇编语言程序设计。主要介绍汇编语言程序的

设计方法与编程原理,重点掌握算术运算程序、字符串处理程序、码制转换程序、子程序设计程序、常用DOS和BIOS功能调用程序、汇编语言常用伪指令。 4.1 分析执行下列指令序列后的结果: 1) MOV AX,1234H

MOV BX,00FFH AND AX,BX 【答】(AX)=0034H 2) MOV AL,01010101B AND AL,00011111B ;(AL)=00010101B OR AL,11000000B ;(AL)=11010101B XOR AL,00001111B ;(AL)=11011010B NOT AL 【答】(AL)=00100101B 3) MOV DL,05H

MOV AX,0A00H MOV DS,AX MOV SI,0H MOV CX,0FH AGAIN: INC SI CMP [SI],DL LOOPNE AGAIN HLT

本程序实现了什么功能?【答】在以0A001H开始的15个单元中查找05H。 4) MOV AX,DSEGADDR

MOV DS, AX MOV ES,AX MOV SI, OFFSET B1ADDR MOV DI,OFFSET B2ADDR MOV CX,N CLD REP MOVSB HLT本程序实现了什么功能?【答】将B1ADDR中N个字节数据传送到B2ADDR开始的15个存储单元 5) MOV AX, 0H

MOV DS,AX MOV ES, AX

MOV AL,05H

MOV DI,0A000H MOV CX,0FH CLD AGAIN: SCASB LOOPNE AGAIN HLT 本程序实现了什么功能?【答】从地址0A000H开始的15个单元中查找字节型数据05H,用条件循环LOOPNZ,控制数据05H的查找。 4.3 试分析下列程序完成什么功能? MOV DX,3F08H MOV AH,0A2H MOV CL,4 SHL DX,CL ;(DX)=F080H MOV BL,AH

SHL BL,CL ;(BL)=20H SHR BL,CL ;(BL)=02H OR DL,BL ;(DL)=82H

【答】将DX中的低4位数据8H分离出来,将AH中的低4位数据2H分离出来,合并为82H存放在DL。

4.4 已知程序段如下: MOV AX,1234H MOV CL,4 ROL AX,CL DEC AX MOV CX,4 MUL CX 试问:(1)每条指令执行后,AX寄存器的内容是什么?(2)每条指令执行后,CF,SF及ZF的值分别是什么?(3)程序运行结束时,AX及DX寄存器的值为多少? 【答】 MOV AX,1234H ; (AX)=1234H, CF=SF=ZF=0 MOV CL,4 ROL AX,CL ; (AX)=2341H ,CF=1,SF=ZF=0 DEC AX ; (AX)=2340H, CF=1,SF=ZF=0 MOV CX,4 ; MUL CX ;(AX)= 8000H ,CF=ZF=0,SF=1,DX=0 4.5 试分析下列程序段: ADD AX,BX JNC L2 SUB AX,BX JNC L3 JMP SHORTL5 如果AX、BX的内容给定如下: AX BX (1)14C6H 80DCH (程序转向 L2) (2)B568H 54B7H (程序转向 SHORTL5 ) 问该程序在上述情况下执行后,程序转向何处? 【答】 (1) 程序转向 L2。

(2) 程序转向 SHORTL5。

4.8 编写一段程序,比较两个5字节的字符串OLDS和NEWS,若相同,在RESULT置0,否则置0FFH。

【答】 参考程序OLDS DB 1,2,3,4,5

NEWS DB 1,2,3,4,5 RESULT DB ? MOV SI,OFFSET OLDS MOV DI,OFFSET NEWS MOV CX,10 CLD REP CMPSB JNZ NOEQU ;串不相等转 MOV AL,0 JMP OUTPT NOEQU: MOV AL,0FFH OUTPT: MOV RESULT,AL STOP: JMP STOP

4.9 编程求和Y=A1 + A2 + ?. + A100 。其中Ai为字节变量。 【答】 参考程序: DATA SEGMENT

TABLE DW 12,3,45,.. YAL DW ? YAH DW ? DATA ENDS

……….

MIAN PROC FAR

PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX MOV DX,0 XOR AX, AX ;清AX MOV BX, OFFSET TABLE MOV CX, 4 CLC

LP: ADD AX, [BX] ;求和

JNC DON INC DX CLC

DON: INC BX

INC BX ;指向下一个数 LOOP LP ;未加完,继续 MOV YAL,AX ;存和 MOV YAH,DX

MAIN ENDP CODE ENDS

END START

4.11 试编程序,统计由40000H开始的16个单元中所存放的字符“A“的个数,并将结果存放在DX中。

【答】 参考程序

DATA SEGMENT

DATA1 DB 'DFASFAAAFDFAAFFFA' COUNT EQU $-DATA1 DATA ENDS STACK SEGMENT

STA DB 100 DUP (?)

TOP EQU LENGTH STA STACK ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK BEGIN: MOV AX,DATA

MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV CX,COUNT MOV DX,0 LEA SI,DATA1 MOV BL,'A'

NEXT : CMP [SI],BL

JNZ OTHER INC DX

OTHER: INC SI

LOOP NEXT

CODE ENDS

END BEGIN

4.12 统计数据块中正数与负数的个数,并将正数与负数分别送到两个缓冲区。 【答】 参考程序:

BLOCK DB -1,-3,5,6,-2,0,20,10 PLUS_D DB 8 DUP(?) ;正数缓冲区 MINUS_D DB 8 DUP(?) ;负数缓冲区 PLUS DB 0

MINUS DB 0 MOV SI,OFFSET BLOCK MOV DI,OFFSET PLUS_D MOV BX,OFFSET MINUS_D MOV CX, 8 ;数据个数送CX GOON: LODSB ;AL← [SI] TEST AX, 80H JNZ JMIUS ;为负数,转 INC PLUS ;正数个数加一 STOSB ;[DI] ←AL,传正数 JMP AGAIN JMIUS: INC MINUS ;负数个数加一 XCHG BX, DI STOSB ;送负数到缓冲区 XCHG BX, DI AGAIN: DEC CX JNZ GOON

4.13 编写一个子程序将AX中的十六进制数,转换成ASCII码, 存于ADR开始的四个单元中。

提示:1)、AX中的数从左到右,转换成ASCII码,用循环左移ROL和AND指令,把提出的一个十六进制数置BL中;

2)、0 ~ 9 的ASCII码:30 ~ 39H,A ~ F 的ASCII码:41H ~ 46H。 ( 先把每个数加30H,判断是否为数字0 ~ 9?若是A ~ F,再加07H,得字母的ASCII码。) 【答】 参考程序: DATA SEGMENT ADR DB 4 DUP(?) DATA ENDS

CODE SEGMENT MAIN PROC FAR

ASSUME CS:CODE,DS:DATA START: MOV AX,7EC3H ;假设ax中存放7ec3h

LEA SI,ADR MOV DL,4

AGAIN:

MOV BX,AX AND BX,000FH ADD BL,30H CMP BL,'9' JG ADUST JMP STORE

ADUST: ADD BL ,07H STORE: MOV [SI],BL

INC SI MOV CL,4 ROL AX,CL DEC DL JNZ AGAIN

MAIN ENDP CODE ENDS

END START

4.14 编写一个子程序将AX中的2进制数,转换成10进制ASCII码, 存于ADR开始的五个单元中。【答】参考程序:

BIN EQU 5555H;假设二进制数为5555H DATA SEGMENT

ADR DB 4 DUP(?)

DATA ENDS

STACK SEGMENT

STA DB 100 DUP (?) TOP EQU LENGTH STA

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: MOV AX,DATA

MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV AX,BIN LEA BX,ADR MOV CX,10000D CALL BINTODEC MOV CX,1000D CALL BINTODEC MOV CX,100D CALL BINTODEC MOV CX,10D CALL BINTODEC MOV CX,01D CALL BINTODEC

MOV AX,04CH ;返回DOS INT 21H

MAIN ENDP

;十进制转二进制,完成一位运算,十进制存于ax中,结果存于bx所指向的地址中 BINTODEC PROC NEAR

MOV DX,0 DIV CX ADD AL,30H MOV [BX],AL MOV AX,DX INC BX RET

BINTODEC ENDP

CODE ENDS

END START

4.18 从10个元素中寻找一个最大的值,并放到AL中,假设这10个元素放在DATA1开始的单元中。【答】参考程序: DATA SEGMENT

DATA1 DB 0,1,2,3,4,5,6,7,8,9 ; DATA ENDS

STACK SEGMENT

STA DB 20 DUP (?)

TOP EQU LENGTH STA STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: MOV AX,DATA

MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV CX,10 MOV AL,0 LEA BX,DATA1

AGAIN: CMP AL,[BX]

JGE NEXT ;大于等于转移

MOV AL,[BX]

NEXT : INC BX

LOOP AGAIN MOV AH,4CH INT 21H

CODE ENDS

END START

4.21 编程序从键盘接收一个4位16进制数,转换为10进制数后,送显示。

【答】算法:先将输入的十六进制数保存到BX中,BX中的数范围在+32767~-32768之间,先检查BX中的符号位,以决定输出“+”还是“-”;若是负数,应先求补,得到原码后即可与正数作统一处理。转换方法为将被转换的二进制数先除;以10000,商即为万位数,再将余数除以1000,商为千位数,依此类推,求出百、十位数,剩的为个位数。最后,将各个数加上30H,即成为对应字符。DATA SEGMENT

OUT_ASC_SUM db 6 dup(?),'$' DATA ENDS

STACK SEGMENT

STA DB 20 DUP(?)

TOP EQU LENGTH STA STACK ENDS

CODE SEGMENT

ASSUME CS :CODE,DS:DATA,SS:STACK START: MOV AX,DATA

MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV CX , 4 ;输入4次 MOV DX , CX ;转换4次 MOV BX , 0 ;用BX保存输入数

RE1: MOV AH , 1 ;从键盘输入

INT 21H CALL ZH ;通过子程序转换 SHL BX , CL ;组合成十六进制数 ADD BL , AL DEC DX JNZ RE1 ;循环输入四个数 MOV AX,BX MOV OUT_ASC_SUM , '+' CMP AX , 0 JGE L4 ;不是负数,转移 NEG AX MOV OUT_ASC_SUM , '-'

L4: CWD

MOV BX , 10000 DIV BX ADD AL , 30H ;将万位转换为数字(商应在AX内,但因为商不大于9,所以有效部分在al内)

MOV OUT_ASC_SUM+1 , AL ;保存万位数字 MOV AX , DX ;将余数置入AX内,以便当作被除数 CWD MOV BX , 1000 DIV BX ADD AL , 30H MOV OUT_ASC_SUM+2 , AL ;保存千位数字 MOV AX , DX ;将余数置入AX内,以便当作被除数 MOV BL , 100 DIV BL

ADD AL , 30H MOV OUT_ASC_SUM+3 , AL ;保存百位数字 MOV AL , AH CBW MOV BL , 10 DIV BL ADD AL , 30H MOV OUT_ASC_SUM+4 , AL ;保存十位数字 ADD AH , 30H MOV OUT_ASC_SUM+5 , AH ;保存个位数字 MOV DX , OFFSET OUT_ASC_SUM MOV AH , 09H INT 21H MOV AH,4CH INT 21H

ZH PROC

CMP AL , '9' ;将ASCII码转换为16进制 JBE A2 ;键入值≤’9’(’0’-‘9’)则减30H CMP AL, 'a' ;键入值<’a’(‘A’-‘F’) 则减37H JB A1 SUB AL , 20H ;值在’a’ -‘f’则先减20H,再减37H A1: SUB AL , 7 A2: SUB AL , 30H

RET

ZH ENDP CODE ENDS

END START

5.21 选择题:

(1)某微机具有16M字节的内存空间,其 CPU的地址总线应有(E24)条。

(2) 8086/8088 CPU要求加到 RESET引脚上的复位正脉冲信号,其宽度至少要(4 ) 个时钟周期才能有效复位,如果是上电复位则要求正脉冲的宽度不少于( 50 )us 。

(3)当RESET信号进入高电平状态时,将使8086/8088 CPU的(D.CS)寄存器初始化FFFFH。

(4) 8086/8088 CPU与慢速的存储器或I /O接口之间,为了使传送速度能匹配,要在(C)状态之间插入若干等待周期Tw。C.T3 和T4 5.22 填空题:

(1) 8086/8088 CPU执行指令中所需操作数地址由(寻址方式和地址寄存器)计算出( 16 )位偏移量部分送( IP ),由(段地址加上偏移量部分)最后形成一个( 20 )位的内存单元物理地址。

(2) 8086/8088 CPU在总线周期的 T1 ,用来输出(20)位地址信息的最高( 4 )位,而在其它时钟周期,则用来输出(状态)信息。

(3) 8086/8088 CPU复位后,从(FFFF0H )单元开始读取指令字节,一般这个单元在()区中,在其中设置一条(无条件转移 )指令,使CPU对系统进行初始化。

(4)8086系统的存储体系结构中,1M字节存储体分( 两 )个存储体,每个存储体的容量都是(512K )字节,其中和数据总线D15~D8相连的存储体全部由(奇地址)单元组成,称为高位字节存储体,并用( 高电平 )作为此存储体的选通信号。 (5)8086/8088系统中,可以有(

)个段地址,任意相邻的两个段地址最短相距(16)

个存储单元,最长相距()存储单元。

(6)用段基值及偏移地址来指明一内存单元地址称为(物理地址 )。

(7)在 8086/8088最大方式系统中各微处理器都含有两条(RQ/GT0、RQ1/GT1)引脚,其中( RQ/GT0 )比(RQ1/GT1 )具有更高的优先级。

7.7 现有一输入设备,其数据端口的地址为FFE0H,并于端口 FFE2H提供状态,当其D0位为

1时表明输入数据备好。请编 采用查询方式进行数据传送的程序段,要求从该设备读取100个字节并输入到从1 000H:2000H开始的内存中,注意在程序中加上注释。

MOV SI,2000H ;初始化数据区地址 MOV AX,1000H MOV DS, AX

LL: MOV DX,0FFE2H IN AX,DX ;读状态

TEST AL,01H ;测试是否满足就绪? JZ LL ;不满足,继续读状态 MOV DX,0FFE0H ;就绪,准备输入数据 IN AX,DX ;从输入接口读取数据 MOV [SI],AX ;存数据 INC SI LOOP LL ;数据没有输入完,继续

7.8 某字符输出设备,其数据端口和状态端口的地址均为80H,在读取状态时,当标志位D7

为0时表明该设备闲。请编写采用查询方式进行数据传送的程序段,要求将存放于符号 地址ADDR处的一串字符(以$为结束标志)输出给该设备,注意在程序中加上注释。

ADDR DB ‘3FSDF3FFF$’ MOV SI,0

DO: IN AL,80H

TEST AL,80H JNZ DO

MOV AL,ADDR[SI] CMP AL,’$’ JZ STOP OUT 80H,AL INC SI LOOP DO

STOP :

8.3 什么叫中断向量?它放在哪里?对应于1CH的中断向量在哪里?如1CH中断程序从

5110H:2030H开始,则中断向量应怎样存放?

【答】中断向量是中断处理子程序的入口地址,它放在中断向量表中,由1ch*4=70h知中断向量

存放在0000:0070处。由于中断处理入口地址为5110:2030所以0070H,0071H,0072H,0073H这四个单元的值分别为30H,20H,10H,51H。

8.7 类型号为20H的中断服务程序入口符号地址为INT-5,试写出中断向量的装入程序片断。 【答】中断向量的地址:20H×4=001 0 00 0000=80H 中断向量的装入参考程序: CLI PUSH DS XOR AX, AX MOV DS,AX MOV AX,OFFSET INT-5 MOV WORD PTR [080H],AX MOV AX,SEG INT-5 MOV WORD PTR [082H],AX POP DS STI?? INT-5 PROC NEAR ??. IRET INT-5 ENDP

8.8 8259A中 IRR、IMR和 ISR三个寄存器的作用是什么?

【答】中断请求寄存器IRR:IRR每一位为一,保存对应的外部中断请求输入; 中断屏蔽寄存器IMR:IMR每一位可以屏蔽IRR对应位的中断请求; 中断服务寄存器ISR:保存当前正在服务的中断申请。 8.9 某时刻8259A的IRR内容是08H(00001000B),说明_____。某时刻8259A的ISR内容是08H,

说明_______。在两片8259A级连的中断电路中,主片的第5级IR5 作为从片的中断请求输入,则初始化主、从片时,ICW3的控制字分别是00100000和00000101.

本文来源:https://www.bwwdw.com/article/bqz8.html

Top