微机原理与汇编程序设计复习题

更新时间:2023-12-27 11:32:01 阅读量: 教育文库 文档下载

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

微机系统与汇编语言复习题

单项选择题10*2=20分 填空题10*2=20分 问答题:5*5=25分 程序分析题4*5=20分 设计应用题1*15=15分

第一章 微型计算机概述

1 、微型计算机(MC,Microcomputer)是有哪些部件构成的? 答:由MP、存储器、输入/输出接口电路和系统总线构成。

2、微型计算机系统(MCS,Microcomputer System)是有哪些部分构成的?

答:微型计算机系统是以微型计算机为主体,配上软件系统和外部设备而构成的。 第二章 计算机中的数据表示

1. 58的非压缩BCD和压缩BCD各如何表示?写出存入DX的指令。 答: 58的非压缩BCD 是0508H 存入DX的指令:MOV DX,0508H 58的压缩BCD和是 58H 存入DX的指令:MOV DX,0058H 2、什么是ASCII码?可表示哪些信息?按其作用可分为哪些?

答:ASCII码是美国信息交换标准代码的简称,用于给西文字符编码。包括英文字母的大小写、数字、专用字符、控制字符等;

按其作用可分为:34个控制字符;10个阿拉伯数字52个英文大小写字母;32个专用符号 第三章 80X86微处理器及其体系结构

1、 8086 CPU信号线 RESET的功能是什么? 8086复位后内部寄存器状态是怎样的?8086CPU复位后从 什么单元中取第一条指令执行。 答:RESET—复位信号输入

8086复位后CS=FFFFH、DS=0000H、 ES=0000H、SS=0000H、IP=0000H、FR=0000H 8086CPU复位后从CS*10H+IP=FFFFH*10H+0000H=FFFF0H地址单元中取第一条指令执行启动系统。

CS:IP=FFFF:0000H

2、已知一个SRAM芯片的容量为8K×8和64K×8,地址线、数据线各为多少? 答:SRAM芯片的容量为8K×8:地址线13条 , 数据线8 条 SRAM芯片的容量为64K×8:地址线16条、数据线8 条 3、指令指针寄存器IP多少位?有何功能?

答: IP是一个16位的寄存器,存放EU要执行的下一条指令的偏移地址,用以控制程序中 指令的执行顺序,实现对代码段指令的跟踪 。

4、8086CPU用于地址锁存器输入允许的控制信号和用于数据收发器允许的控制信号各是什么信号?

答:用于地址锁存器输入允许的控制信号是ALE ,用于数据收发器允许的控制信号是DEN 。

5、 是什么引脚? 答:等待测试引脚

6、INTA 是什么引脚? 答:中断响应引脚

7、M/IO 是什么引脚?

答:存储器访问/输入输出访问控制引脚

8、8086CPU最小、最大方式时用于总线请求、允许的信号线各是什么? 答:最小:HOLD---总线请求 HLDA---总线响应 最大:RQ/GT0、RQ/GT1 9、8086 CPU访问存贮器和访问I/O的地址分别各为什么?可寻址的最大存贮器空间和最大I/O空间分别各为多少?

答:8086 CPU访问存贮器的地址是A19—A0,可寻址的最大存贮器空间是1MB. 8086 CPU访问I/O的地址是A15—A0,可寻址的最大I/O空间是64KB. 10、什么是逻辑地址?什么是物理地址?它们各自如何表示?如何转换?

答:程序中使用的存储器地址称为逻辑地址,由16位“段基址”和16位“偏移地址”(段内地址)组成。

段基址表示一个段的起始地址的高16位。偏移地址表示段内的一个单元距离段开始位置的距离。

访问存储器的实际地址称为物理地址,用20位二进制表示。

将两个16位二进制表示的逻辑地址错位相加,可以得到20位的物理地址: 物理地址=段基址×16 + 偏移地址

11、物理地址4ACD9H的逻辑地址可以是哪些? 答:4A00:0CD9 、4500:5CD9、4A88:0459 等 12、8086 CPU输入输出指令的间址寄存器是什么? 答: DX

13、8086 CPU 寄存器BX、BP 、AX、各是什么功能的寄存器? 答:BX、BP----基址寄存器 AX---累加器 14、标志寄存器FR多少位?有哪些标志? 答 :FR是一个16位的寄存器,共9个标志.

其中6个用作状态标志CF、PF、AF、ZF、SF、OF 3个用作控制标志DF、IF、TF.

(1)进位标志CF----反映运算结果向更高位是否有进/借位,加减运算后有进位/借位时CF = 1,否则CF = 0

CF标志的用途:用于运算时的进/借位。用于无符号数运算后判定是否有溢出。 用于移位操作时接收移出的信息位.

(2)奇偶校验标志PF:反映运算结果低八位中“1”的个数为奇或者为偶,其值为1表示运算结果的低8位中1的个数为偶数,否则为奇数。 PF标志可用于数据传送后的奇偶校验。

(3)辅助进位标志AF----反映运算后的结果是否有半进位/借位,其值为1表示运算中低4位向高4位有进位或借位,否则无进位或借位。

AF在BCD码运算(8位)时可用作十进制调整的条件。

(4)零标志ZF-----反映运算结果是否为零,其值为1表示运算结果为0,否则非0。 ZF可用于判定二个数是否相等,相等的时候它们相减的结果为零。

ZF还可用作计数器的计数次数是否减为0,当减为0的时候表示计数到,例如:循环次数计数

(5)符号标志SF:反映运算结果是否为负,其值为1表示运算结果为负数,否则为正数。 SF在有符号数运算时才有意义。

SF也可在无符号数比较大小时判定两个数的大小,A、B两个数相减后结果SF=0,A>B, SF=1,A

SF还在有符号数比较大小时与OF标志一起判定两个数的大小。 (6)溢出标志OF:反映有符号数运算后的结果是否有溢出,其值为1表示带符号数运算结果溢出,否则无溢出。 有符号数运算时:

正数加正数结果为正---无溢出;结果为负---有溢出 负数加负数结果为负---无溢出;结果为正---有溢出 正数加负数或负数加正数------- 无溢出 OF ⊕SF 可以用于判有符号数比较大小

以上的6个状态标志在运算指令运算后由EU自动的设置在FR中(CF也可以直接用指令设置),常用作指令的转移或执行的控制条件,影响或控制后续指令的执行,特别是CF、ZF、OF、SF。

CPU的不同指令对状态标志的影响是不一样的,有的指令执行后全部影响6个标志,有的影响部分,不影响的保持原态,也有的一个都不影响,对不影响的指令执行后就不可以使用条件转移指令。 控制标志:

(1)方向标志DF:用于串操作时设置串指针的修改方向, = 0,串指针增量变化,= 1,串指针减量变化

(2)中断允许标志IF:设置是否允许CPU响应外部的可屏蔽中断请求INTR, ,= 0,关中断,= 1,开中断

(3)陷阱标志TF:用于设置CPU运行为单条执行指令的方式, = 0,正常执行程序,= 1,单步执行程序

第四章 寻址方式与指令系统

1、下列指令的源操作数段基址各是什么段寄存器? (1)MOV AX, [BP][SI] 答:SS (2)MOV AX, CS:8[DI] 答:CS (3) MOV AX, [BX][DI] 答:DS (4) MOV AX, ES:10[BP][SI] 答:ES

2、8086允许段超越和禁止段超越操作各有哪些? 答:允许段超越的有:

以BP为基址存取操作数 取源串数据 cs段数据访问等 禁止段超越的是:

取指令 存目的串 堆栈操作push/pop

3.已知DS=5000H,SS=2500H,BP=0200H,SI=1000H,传送指令MOV AX,[BP+SI]源操作数的寻址方式什么方式?物理地址是多少? 答:源操作数的寻址方式是:基址变址 物理地址= 26200H

4、若DS=4500H,DI=1000H,COUNT=A8H,

指令MOV AX,[DI+COUNT]中,源操作数的有效地址EA和物理地址各为多少? 答:有效地址EA为10A8H 物理地址为460A8H

5、8086 CPU 有哪几种数据寻址方式,掌握数据各种寻址方式的寻址过程,要求会求指令的寻址方式?会求有效地址EA=?会求物理地址=? 答:指令的物理地址=CS*10H+IP 堆栈栈顶物理地址=SS*10H+SP 源串物理地址=DS*10H+SI, 目的串物理地址=ES*10H+DI

数据直接寻址: MOV AL , [1000H]; EA=1000H ,物理地址=DS*10H+1000H 寄存器间接寻址:MOV AL , [BX]或[SI]或[DI] ;

EA=BX或SI或DI,物理地址=DS*10H+ BX或SI或DI

基址寻址:MOV AL , DISP[BX] ; EA=BX+DISP,物理地址=DS*10H+ BX+DISP MOV AL , DISP[BP] ; EA=BP+DISP,物理地址=SS*10H+ BP+DISP 基址变址寻址:MOV AL , [BX+SI或DI] ;

EA=BX+ SI或DI,物理地址=DS*10H+ BX+ SI或DI

MOV AL , [BP+SI或DI] ; EA=BP+ SI或DI,物理地址=SS*10H+ BP+ SI或DI 变址寻址:MOV AL , DISP[SI] ; EA=SI+DISP,物理地址=DS*10H+ SI+DISP MOV AL , DISP[DI] ; EA=DI+DISP,物理地址=DS*10H+ DI+DISP 相对基址变址寻址:MOV AL ,DISP [BX+SI或DI] ;

EA=BX+ SI或DI+DISP,

物理地址=DS*10H+ BX+ SI或DI+DISP MOV AL , DISP [BP +SI或DI] ; EA=BP+ SI或DI+DISP,

物理地址=SS*10H+ BP+ SI或DI+DISP

6、8086 CPU 有哪几种转移寻址方式,段内、段间转移有何不同?掌握转移各种寻址方式的寻址过程。

答:与转移地址有关的寻址方式:段内相对寻址、段内间接寻址、段间直接寻址、段间间接寻址。

段内相对寻址:

段内短转(short)—转移偏移地址=IP+disp 8 段内近转(near)—转移偏移地址=IP+disp 16 段内间接寻址:

寄存器间接—转移的偏移地址= reg (reg为AX、BX、CX、DX、SP、BP、SI、DI) 存储器间接—转移的偏移地址= (EA) (EA为数据寻址方式寻址单元,为字单元) 例:已知BX=3500H,DS=2000H.(23500H)=4500H, (23502H)=2000H JMP BX; 段内寄存器间接,IP=3500H JMP WORD PTR[BX]; 段内存储器间接, IP=(2000H*10H+3500H)=4500H 段间直接转:

JMP FAR PTR L:

IP=转移指令的第2、3字节 CS=转移指令的第4、5字节 段间存储器间接转:

JMP DWORD PTR [BX] :

IP=(2000H*10H+3500H)=4500H CS=(2000H*10H+3500H+2)=2000H

7、数据传送指令(MOV)使用有哪些规定? 答:允许reg←reg 例:MOV AX,BX 允许reg←mem 例:MOV AX,[BX] 允许reg←data 例:MOV AX,2500H 允许reg←sreg 例:MOV AX,CS 允许mem←reg 例:MOV [BX], AX 允许mem←data 例:MOV [BX],2500H 允许mem←sreg 例:MOV [BX],CS 允许sreg←reg(除CS外) 例:MOV DS,BX 不允许:mem←mem 例:MOV Y,[BX]

例:MOV [SI],[BX] 不允许sreg←data 例:MOV DS,2500H 不允许sreg←sreg 例:MOV DS,CS 不允许CS做目的寄存器 例:MOV CS,BX 注意数据类型匹配 例:MOV DL,BX 8、数据寻址有哪些情况不允许? 解:例如

MOV [DI],[BX] ;错,存储器不能传存储器 MOV[DX+SI],AL; 错,DX不能用作基址寻址 MOV[SI+DI],AL; 错,SI+DI不能用作变址寻址 MOV[BX+BP],AL; 错,BX+BP不能用作基址寻址 MOV WORD PTR [BX],-1 ;正确 MOV AL,BX;错,类型不匹配

MOV DS,SEG DAT;错,立即数不能送段寄存器 PUSH 1234H ; 错,不能用立即数 MUL AL , 58H ;错,不能用立即数

9、不能采用立即数寻址方式的指令有哪些? 答:PUSH 1234H ; 错,不能用立即数

MUL 58H ;错,不能用立即数 DIV 58H ;错,不能用立即数 10、掌握8086CPU以下指令:

MOV、PUSH/POP、LEA、ADD、ADC、SUB、SBB、INC、DEC、NEG、CMP、 DAA、MUL、DIV、AND、OR、NOT、XOR、SHL、SHR、 SAL、SAR、ROL、ROR、RCL、RCR、MOVS、CMPS、STOS、LODS、SCAS、 REP、条件转移类、LOOP、CALL、RET、CLD、STD

对给出的指令,要求会分析指令是否正确。

第五章 伪指令及汇编语言程序结构 1.PTR运算符有何功能?

答:可以重新指定存储器操作数的类型,可以重新指定转移指令的转移类型。

2、存储器数据类型有什么要求,如何解决类型不确定?

答:存储器数据类型要求类型匹配,用PTR可以说明和重新指定变量或标号的类型满足类型匹配。

(6)MOV [DI],[BX] ;错,存储器不能传存储器 (7)MOV[DX+SI],AL; 错,DX不能用作基址寻址 (8)MUL AL , 58H ;错,乘法指令不能用立即数

(9)MOV DS,SEG DAT;错,立即数不能送段寄存器

(10)MOV WORD PTR [BX],-1 ;正确 ,-1送BX指示的字单元

12、8086允许段超越和禁止段超越操作各有哪些?。 答:允许段超越的有: 以BP为基址存取操作数、通用数据存取(用BX、BP、SI、DI、直接寻址的内存访问)(MOV AL,SS:[SI] )、字符串指令的源数据串(DS:SI) 操作(LOAD )、cs段数据访问(MOV AL,CS:[BP+5])等。

禁止段超越的是:取指令的指令地址(CS:IP )、字符串指令的目的数据串(ES:DI) 操作(STOS)、堆栈操作(push/pop)

第七章 分支结构程序设计

1.8086 CPU条件转移指令和SHORT的转移范围为多少? JMP L的转移的范围为多少? 答:条件转移指令和SHORT的转移范围为 -128-+127 JMP L的转移的范围为:

-32768--- +32767

2、指令JMP FAR PTR LOP和“JMP DWORD PTR [DI]”的功能有何异同? 答:上述两条指令都是段间远转移指令,但是偏移地址的来源不同。

指令JMP FAR PTR LOP执行时,目的的偏移地址在转移指令第2、3字节中,段地址在转移指令第4、5字节中。

指令“JMP DWORD PTR [DI]”时,目的偏移地址在存储单元DS: DI中,目的段地址在存储单元DS: DI+2中。

3、指令“JMP BX”和“JMP WORD PTR [BX]”的功能有何异同? 答:上述两条指令都是段内近转移指令,但是偏移地址的来源不同。 指令“JMP BX”执行时,新的偏移地址在BX寄存器内。

“JMP WORD PTR [BX]”时,目的偏移地址在存储单元中,该存储单元的地址在DS: BX中。

4、已知CS=5000H,DS=6000H,BX=4500H,

(64500H)=7500H,(64502H)=4600H,指令JMP DWORD PTR [BX] 、指令JMP WORD PTR [BX] 执行后程序的转移地址各是多少?

答:指令JMP DWORD PTR [BX]执行后程序的转移地址是CS=4600H ,IP= 7500H。 物理地址=DS*10H+BX=64500H(双字) (64500H)=7500H→IP,IP=7500H (64502H)=4600H→CS,CS=4600H

指令JMP WORD PTR [BX] 执行后程序的转移地址是CS=5000H ,IP=7500H。 物理地址=DS*10H+BX=64500H(字) (64500H)=7500H→IP,IP=7500H CS=5000H(不变)

5、已知AX=0C046H , BX=8FC2H,分析下列程序每条指令的执行结果?写出程序执行后转移到什么标号执行。 ADD AX , BX ; JNO L1 ; JNC L2 ; JMP L3 ;

答:ADD AX , BX ; AX=C046H+8FC2H=5008H ; OF=1 ,CF=1 JNO L1 ; OF=1 ,不转L1 JNC L2 ; CF=1,不转L2 JMP L3 ; 转L3

程序执行后转移到L3 执行。

6、已知AX=4258H , BX=6083H,分析下列程序每条指令的执行结果?写出程序执行后转移到什么标号执行。

ADD AX , BX ; AX=4258H+6083H=A2DBH ; OF=1 ,CF=0 JNO L1 ; OF=1,不转L1 JNC L2 ;CF=0,转L2 JMP L3

程序执行后转移到L2执行。 7、已知DS=8000H,SS=4000H,CS=2000H,ES=9000H,AX=5423H,BX=2000H,SI=2000H,DI=1000H,CX=0004H,DX=0050H,SP=0300H,BP=6000H,,DF=0,CF=1 (4A000H)=0500H,(4A002H)=2B00H (92500H)=87A5H, (8A000H)=3450H (8A002H)=7700H,(44000H) =B629H 按下列要求回答问题。 (1)写出执行指令

SAR WORD PTR ES: [0500H+BX],CL 后的结果。 答:物理地址=ES*10H+BX+0500H

=9000H*10H+2000H+0500H=92500H 操作数(92500H)=87A5H , CL=4 ,算术右移4位 执行后(92500H)=F87AH (2) 写出执行指令

SAR WORD PTR [SI+BP],CL 后的结果。 答:物理地址=SS*10H+SI+BP

=4000H*10H+2000H+2000H=44000H 操作数(44000H)=B629H , CL=4 ,算术右移4位 执行后(44000H)=FB62H (3)写出执行指令

JMP DWORD PTR [3000H+DI+BP] 后的转移地址是多少? 物理地址=SS*10H+3000H+DI+BP

=4000H*10H+3000H+1000H+6000H=4A000H 操作数(4A000H)=0500H,(4A002H)=2B00H 执行后CS=2B00H IP=0500H

8、写出执行段间转移指令JMP FAR PTR LOP指令时,执行的操作是怎样的? 答:执行段间转移指令JMP FAR PTR LOP指令时,执行的操作是: IP←转移指令第2、3字节目标地址的偏移地址 CS←转移指令第4、5字节目标地址的段地址

9、指令“JMP SI”和“JMP WORD PTR [SI]”作用有什么不同?请说明。 答:上述两条指令都是段内近转移指令,但是偏移地址的来源不同。 指令JMP SI 执行时,新的偏移地址在SI寄存器内

指令JMP WORD PTR [SI]执行时,目的偏移地址在存储单元中,该存储单元的地址在DS: SI中。

第八章 循环结构程序设计

1、下列串操作指令REP、REPNZ、REPNZ正确使用是怎样的? 答: REP LODSB REP STOSB REP MOVB REPZ CMPS REPNZ SCASB

2、已知DS=1000H ,ES=3000H,SI=2500,DI=0500H, CX=0004H,DF=0,AX=7825H, (12500H)=12H,(12501H)=34H (12502H)=56H,(12503H)=78H.

指令REP STOSB 执行后结果是怎样的? 答:本题是向目的串中存数据的操作

目的串操作地址=ES*10H+DI =30000H+0500H=30500H 关键字=AL=25H

REP重复次数=CX=0004

执行后(30500H)=25H,(30501H)=25H,(30502H)=25H,(30503H)=25H 或(30500H—30503H)=56H

3、已知DS=1000H ,ES=4000H,SI=2500H, DI=0500H,CX=0004H,DF=0,AX=3456H, (12500H)=12H,(12501H)=34H, (12502H)=56H,(12503H)=78H.

指令REP MOVSB 执行后结果是怎样的?

答:本题是串传送操作 源串操作地址=DS*10H+SI =10000H+2500H=12500H 目的串操作地址=ES*10H+DI =40000H+0500H=40500H REP重复次数=CX=0004

执行后(40500H)=12H , (40501H)=34H ,(40502H)=56H , (40503H)=78H 4、掌握在字符串中查找关键字并做替换的编程.

例:编写程序实现从数据段以DAT为首地址的字符串中寻找所有的‘ Y ’字符,找到后替换为‘ X ’ ,该字符串以0DH(回车)结尾,字符的个数不大于50个。 数据段定义

DATA SEGMENT

DAT DB ‘ABCA?????’,0DH DATA ENDS

代码段定义

CODE SEGMENT

ASSUME CD:CODE , DS:DATA ;初始化DS段

START:MOV AX , DATA

MOV DS , AX ;初始化

MOV BX , OFFSET DAT ;循环查询

L3:MOV AL ,[ BX] ;判结束

CMP AL,0DH JE L1 ;判‘ Y’

CMP AL , ’Y ’ JNE L2 ;查到’Y ’,替换

MOV [BX] , ‘X’ ;修改指针,循环

L2:INC BX

JMP L3 ;保存结果,返回DOS LI:

MOV AH,4CH INT 21H CODE ENDS

END START

5、掌握在字符串中查找关键字,找到了存储关键字的地址,未找到存标志-1。 例:编程从键盘输入不超过100个字符的字符串,输入后编写程序在该字符串中查找是否有‘*’,若有就将地址存入A单元;若无则将FFFF存入A。 解:定义数据段 DATA SEGMENT

DAT DB 100,?,100DUP(?); A DW ? DATA ENDS ;定义代码段

CODE SEGMENT

ASSUME CS:CODE,DS:DATA ;初始化DS段

START : MOV AX,DATA

MOV DS,AX ;键盘输入

MOV DX , OFFSET BUF MOV AH , 0AH

INT 21H ;其他初始化

MOV BX,OFFSET DAT INC BX

MOV CL,[BX] MOV CH,0, INC BX ;查找

L0:MOV AL , [BX]

CMP AL , ’*’ JZ L1 INC BX LOOP L0 MOV A ,0FFFFH; JMP EXIT L1: MOV A , BX; ;返回DOS

EXIT: MOV AH,4CH INT 21H CODE ENDS

END START

6、已知DS、SS、ES、CS、AX、BX、SI、DI、CX、DX、SP、BP、CF、DF、部分内存单元中的内容,写出指令 SAR 、SHR、 JMP 、PUSH 、 REP STOSB 、REP MOVSB 、CALL、RET 、DAA执行后的结果。

(1)已知DS=5000H,BX=2500H,(52500H)=6800H, (52502H)=5600H,求下列指令执行后的转移地址。

指令1:JMP WORD PTR [BX] ;

解:物理地址=DS*10H+BX=52500H, (52500H)=6800H ,执行后IP=6800H,CS不变 指令2:JMP DWORD PTR [BX] ;

解:物理地址=DS*10H+BX=52500H, (52500H)=6800H , (52502H)=5600H 执行后IP=6800H,CS=5600H,程序转移到5600H:6800H执行。 (2) 例如:已知DS=5000H,BX=2500H, DI=6000H (58500H)=B456H,CX=0004H,求下指令执行后的结果。

指令1:SAR [BX][DI] , CL ;

解:物理地址=DS*10H+BX+DI=58500H (58500H) = B456H , CL=4 执行后:(58500H) = FB45H 指令2:SHR [BX][DI] , CL ;

解:物理地址=DS*10H+BX+DI=58500H (58500H) = B456H , CL=4 执行后:(58500H) = 0B45H

已知DS=5000H,BX=2500H, DI=6000H (58500H)=B456H,CX=0004H,CF=1 指令3:RCL BYTE PTR[BX][DI] , 1 ; 答:物理地址=DS*10H+BX+DI

=50000H+2500H+6000H=58500H 操作数:(58500H)=56H CF=1

执行前:(58500H)= 56H=0101 0110 CF=1 执行后 (58500H)= ADH=1010 1101 CF=0

CF←0 101 0 110 1 ← CF=1 (3)例如:已知SS=3200H,SP=0500H,CX=5484H, 求下指令执行后的结果。

PUSH CX ; SP-2=SP , 执行后SP=04FEH , (SS:SP)=(3200H:04FEH)= 5484H 或(324FEH)=5484H

(4) 已知ES=2000H,DI=0500H,CX=0004H,AX=3456H 写出执行REP STOSB 的操作结果是怎样的? 答:本题是向串中存为目的串操作 目的串操作地址=ES*10H+DI

=20000H+0500H=20500H 关键字=AL=56H

REP重复次数=CX=0004

执行后(20500H)=56H (20501H)=56H (20502H)=56H (20503H)=56H 或(21500H—25003H)=56H

7、已知DS=1000H ,ES=3000H,SI=2500,DI=0500H, CX=0004H,DF=0,AX=7825H,DF=0 (12500H)=12H,(12501H)=34H (12502H)=56H,(12503H)=78H.

指令REP STOSB 执行后结果是怎样的? 答:本题是向目的串中存数据的操作

目的串操作地址=ES*10H+DI =30000H+0500H=30500H 关键字=AL=25H DF=0 REP重复次数=CX=0004

执行后(30500H)=25H,(30501H)=25H,(30502H)=25H,(30503H)=25H 或(30500H—30503H)=25H

8、8086CPU串指令中对源串、目的串有何要求。 答:

源串物理地址=DS*10H+SI, 目的串物理地址=ES*10H+DI

执行前必需设置DS、SI,ES、DI CX(重复次数)

DF控制地址修改方向标志

9、掌握REP、REPE、REPNE有何功能? REPZ 、REPNZ指令与什么串指令联用 ?重复执行的终止条件是什么? 答:

REP:可重复执行MOVS、LOAD、STOS REPE:可用于串比较CMPS REPNE:可用于串搜索SCAS

REPZ CMPS : CX=0(循环结束,两串相等)或ZF=0(发现不等,提前退出) 与CMPS指令联用,可用于两串是否相同的比较

REPNZ SCAS:CX=0 (循环结束,未找到关键字)或ZF=1(发现相等,已找到关键字,提前退出)

与SCAS指令联用,可用于在串中搜索是否有关键 第九章 子程序设计

1.分析下列程序段每条指令的执行结果和程序实现的功能? MOV AX,86H MOV BL,17H CALL XYZ JNC L

INC AH

MOV X , AX

HLT XYZ PROC

ADD AL,BL DAA

RET XYZ ENDP 答:

MOV AX,86H ;AX=0086H MOV BL,17H ;BL=17H CALL XYZ ;

JNC L ; CF=0 ,转L

INC AH ; CF=1 , AH←AH+1 ,AH=1 MOV X , AX ;X=0103H HLT ; XYZ PROC

ADD AL,BL ; AL=9DH,CF=0 DAA ;AL=03H, CF=1

RET XYZ ENDP

程序实现的功能是完成两个BCD码数求和(86+17),进位加在AH中,和值(103)存入X字单元

2.分析下列程序段每条指令的执行结果和程序实现的功能?。 MOV AL,26H MOV DL,48H CALL ABC MOV X , AL

HLT ABC PROC

ADD AL,DL DAA

RET ABC ENDP

答:

MOV AL,26H ;AL=26H MOV DL,48H ;DL=48H CALL ABC ;

MOV X , AL ; X=74H HLT ; ABC PROC

ADD AL,DL ;AL=6EH,CF=0 DAA ;AL=74H,CF=0

RET ; ABC ENDP

程序实现的功能是完成两个BCD码求和(36+48),和值(74)存入X单元

3、掌握汇编语言中的DOS功能调用的方法(单个字符输入输出、串字符输入输出)。 例1:键入单个字符,判断是否为回车,是转EXIT,否则转L. MOV AH , 1 INT 21H

CMP AL , 0DH JE EXIT JMP L ....... EXIT: ........ 例2:;显示单个字符数字6 MOV DL ,36H MOV AH , 2 INT 21H

;显示单个字符A MOV DL ,’A’ MOV AH , 2 INT 21H

例3:用2号调用显示字符串

MSG DB ‘This message was displayed with DOS function 02H’ MSGLEN EQU $-MSG ;计算数据个数

MOV CX,MSGLEN;取数据个数做循环次数 MOV SI,OFFSET MSG ;设指针 MOV AH,02H ;

NEXT : MOV DL, [SI] ;取输出字符 INT 21H ;输出显示 INC SI ;指向下一个数据 LOOP NEXT ;循环输出显示 例4:用9号调用显示字符串

MSG DB ‘This message was displayed with DOS function 02H$’

???

MOV DX,OFFSET MSG ;设指针 MOV AH,09H ; INT 21H ;输出显示 字符串输入(0A号功能调用),功能:从键盘接收字符串存入内存的键盘输入缓冲区。 调用方法:

①预先在内存定义一个键盘输入缓冲区。缓冲区的第一个字节为指定缓冲区能接收的字符个数,第二个字节保留以用作由系统自动填写实际输入字符的个数,第三个字节开始存放从键上输入的实际字符ASCII码。

例如:定义一个输入不超过50个字符的输入缓冲区。 BUF DB 50 , ? , 50DUP(?) ②字符的输入缓冲区首地址送DS:DX ③执行:MOV AH , 0AH ;

INT 21H ;用户键入字符串

完成从键盘接收字符串存到指定内存的输入缓冲区,直到输入回车符为止,由系统自动填写实际输入字符的个数存入第二个字节,从第三个字节开始存放从键上输入的字符ASCII码。

若实际输入的字符数少于定义的字节数,则缓冲区内其余字节补零;若实际输入多于定义的字节数,则多余字符丢弃,且响铃。

例:利用0AH号功能调用,从键盘输入最多为80个字符的字符串存入以BUF为首址的缓冲区中。

DATA SEGMENT

BUF DB 80, ?,80 DUP (?) DATA ENDS ???..

START: MOV AX,DATA

MOV DS,AX ;缓冲区段地址→DS LEA DX,BUF;取缓冲区偏移→DX MOV AH,0AH INT 21H :

MOV BX,OFFSET BUF;指向输入缓冲区 INC BX ;指向实际输入字符个数单元 MOV CL, [BX] ;取字符个数做循环次数 MOV CH ,0

INC BX ;指向实际字符存放单元 L: MOV AL , [BX] ;取输入的字符 ???.. ;字符处理

INC BX ;指向下一单元 LOOP L ;循环

4、编程从键盘输入一个字符串(长度<50),输入后在该字符串中搜索是否有需要查找的关键字,如果有则显示“YY”,否则显示“NN”

解: ;定义数据段 DATA SEGMENT

BUF DB 50,?,50DUP(?);

Y DB 0DH, 0AH, ‘YY$' N DB 0DH, 0AH, 'NN$' DATA ENDS

;定义代码段及结束DOS CODE SEGMENT

ASSUME CS:CODE,DS:DATA

;初始化DS段 START; MOV AX,DATA

MOV DS,AX ;键盘输入 MOV DX , OFFSET BUF MOV AH , 0AH INT 21H

;键盘输入关键字 MOV AH , 01H INT 21H

;其他初始化 MOV BX,OFFSET BUF INC BX

MOV CL,[BX] MOV CH ,0 INC BX

;查找关键字 L0:CMP AL , [BX] JZ L1 INC BX LOOP L0

;未找到关键字,显示’NN’ MOV DX , OFFSET N MOV AH , 09H INT 21H

JMP EXIT ;

; 找到关键字,显示’YY’ L1:MOV DX , OFFSET Y MOV AH , 09H INT 21H

;返回DOS EXIT: MOV AH,4CH INT 21H CODE ENDS END START

5、掌握从键盘输入二位十进制数的方法(00-99) 键盘输入二位十进制数据存在AX中。 解:MOV AH , 01H

INT 21H

SUB AL , 30H MOV BL , AL MOV AH , 01H INT 21H

SUB AL , 30H MOV AH,BL

6、编程实现将输入的2位十进制数据转为二进制数存在AL中 。设数据在AX中,为非压缩的BCD码

;输入数据转为二进制数 SHL AH , 1 ; MOV BL , AH SHL AH , 1 SHL AH , 1 ADD AH,BL ADD AL , AH

7、掌握在字符串中查找关键字(关键字用单个字符的键盘输入)并统计关键字个数的编程. 例: BUF DB ‘uhwddlksfklfdSDKFDSF’ COUNT EQU $- BUF

X DB ? ?..

MOV BX , OFFSET BUF MOV CX , COUNT MOV DX , 0

;键盘输入关键字 MOV AH ,1 INT 21H L2: CMP AL , [BX] JNZ L1 INC DL L1: INC BX LOOP L2 MOV X , DL

8、什么是汇编语言子程序的参数的传递?参数传递一般有几种方法?各用于什么场合? 答:参数的传递即主程序如何把入口参数带入子程序,子程序又如何把出口参数带回主程序。 参数传递一般有三种方法:

用寄存器传递,适用于参数较少的场合。

用参数表传递:适用于参数较多的情况,要求预先在内存中建立参数表。 用堆栈传递:适用于参数多并且子程序有嵌套、递归调用的情况。 9、汇编语言采用子程序编程有何优点? 答:

(1)简化源程序设计过程。

(2)设计的源程序简短,可节省存储空间。 (3)便于程序的修改与调试。

(4)便于编写模块化、结构化、自顶向下的程序。

10、8086内部中断包括有哪些?在什么情况时会产生内部中断?类型号是多少? 答:8086内部中断包括有: (1)溢出中断 在OF置“1”,执行溢出中断指令(INTO),产生一个4型中断(中断类型码为4)。 (2)除法出错中断:被除数高半部分≥除数(产生商溢出)(中断类型码为0) (3) INT n指令中断:软中断指令(中断类型码为n) (4)、断点中断:断点中断即单字节INT3指令中断(中断类型码为3)

(5)单步(陷阱)中断:当陷阱标志TF置“1”时,8086/8088处于单步工作方式。(中断类型码为1)

11、中断主要解决了两个问题?中断技术随着计算机的发展不断扩大哪些领域? 答:中断主要解决了以下两个问题: (1)、在输入输出过程中解决了快速CPU和慢速外设之间的矛盾,提高了CPU的利用率。 (2)、实现了CPU具有实时响应和处理随机事件的能力。

中断技术随着计算机的发展不断扩大到多道程序、分时操作、实时处理、程序监控和跟踪等领域。

12、8086/8088最多能处理多少种不同的中断类型,识别的方法是怎样的? 答:

8086/8088最多能处理256种不同的中断类型,识别的方法是用编号00—FFH(0—255)表示,称为中断类型号。

13、8086/8088所有中断源的中断向量如何存放? 答:

8086/8088所有中断源的中断向量按类型号顺序依次集中存放在中断向量表中,每个中断向量占4个单元,共计4*256=1024个单元 第十章 高级汇编技术 1.宏定义如下:

ABC: MACRO X,Y,Z

ROL X,1

MUL Y,Z ENDM

写出宏调用ABC: DX,AX,[DI]后的宏展开的指令. 答:ROL DX,1 MUL AX,[DI] 2.宏定义如下:

ABC: MACRO X,Y,Z

NEG X

ADD Y,Z ENDM

写出宏调用ABC: [DI],DX,[BX+SI]后的宏展开的指令。 答:NEG [DI] ADD DX,[BX+SI]

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

Top