微机原理与汇编语言复习资料文档格式.docx

上传人:b****5 文档编号:19671220 上传时间:2023-01-08 格式:DOCX 页数:19 大小:406.88KB
下载 相关 举报
微机原理与汇编语言复习资料文档格式.docx_第1页
第1页 / 共19页
微机原理与汇编语言复习资料文档格式.docx_第2页
第2页 / 共19页
微机原理与汇编语言复习资料文档格式.docx_第3页
第3页 / 共19页
微机原理与汇编语言复习资料文档格式.docx_第4页
第4页 / 共19页
微机原理与汇编语言复习资料文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

微机原理与汇编语言复习资料文档格式.docx

《微机原理与汇编语言复习资料文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理与汇编语言复习资料文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

微机原理与汇编语言复习资料文档格式.docx

基址指针BP;

(4)专用寄存器:

指令指针IP;

FR标志寄存器FR;

(5)段寄存器:

代码段寄存器CS;

数据段寄存器DS;

堆栈段寄存器SS;

附加段寄存ES

 

15.ALE(地址所存允许信号)输出、三态、高电平有效;

ALE引脚高有效时,表示复用引脚:

AD7~AD0和A19/S6~A16/S3正在传送地址信息;

由于地址信息在这些复用引脚上出现的时间很短暂,所以系统可以利用ALE引脚将地址锁存起来。

16.

1)写出每条汇编指令执行后相关寄存器中的值。

第一空:

F4A3H第二空:

31A3H第三空:

3123H

第四空:

6246H第五空:

826CH第六空:

6246H

第七空:

826CH第八空:

04D8H第九空:

0482H

第十空:

6C82H第十一空:

D882H第十二空:

D888H

第十三空:

D810H第十四空:

(2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

解答如下:

movax,2addax,axaddax,axaddax,ax

17.

总线周期

IO/M*

WR*

RD*

存储器读

存储器写

I/O读

I/O写

总线操作是指CPU通过总线对外的各种操作

8086/8088的总线操作主要有:

存储器读、I/O读操作存储器写、I/O写操作中断响应操作总线请求及响应操作CPU正在进行内部操作、并不进行实际对外操作的空闲状态Ti。

18.

(1)时序:

是指信号高低电平(有效或无效)变化及相互间的时间顺序关系CPU时序决定系统各部件间的同步和定时总线时序描述CPU引脚如何实现总线操作

(2)指令周期:

是指一条指令经取指、译码、读写操作数到执行完成的过程。

若干总线周期组成一个指令周期

(3)总线周期:

是指CPU通过总线操作与外部(存储器或I/O端口)进行一次数据交换的过程

19.存储器的主要性能指标:

存储容量、存取速度、可靠性、性能价格比

20.8088存储器写总线周期时序图(最小模式)

T1状态——输出20位存储器地址A19~A0;

IO/M*——输出低电平,表示存储器操作;

ALE——输出正脉冲,表示复用总线输出地址;

T2状态——输出控制信号WR*和数据D7~D0;

T3和Tw状态——检测数据传送是否能够完成;

T4状态——完成数据传送

21.8088I/O写总线周期

T1状态——输出16位I/O地址A15~A0;

IO/M*输出高电平,表示I/O操作;

ALE输出正脉冲,表示复用总线输出地址;

T2状态——输出控制信号WR*和数据D7~D0;

22、存储器读总线周期

T1状态——输出20位存储器地址A19~A0

IO/M*输出低电平,表示存储器操作;

ALE输出正脉冲,表示复用总线输出地址

T2状态——输出控制信号RD*

T3和Tw状态——检测数据传送是否能够完成

T4状态——前沿读取数据,完成数据传送

23.I/O读总线周期

T1状态——输出16位I/O地址A15~A0;

24.cache-内存层次和内存-外存层次

25.设CS=B000H、DS=1CDEH、SS=4200H、ES=0150H,它们分别为代码段、数据段、堆栈段和附加段的段首址。

自每个段首址开始,各段均占64KB的范围,各段之间互不重叠。

如图所示。

26.设CS=0200H、DS=0400H、SS=0480H,这样代码段、数据段和堆栈段的物理首地址分别为02000H、04000H和04800H。

其中代码段占8KB地址空间,数据段占2KB,堆栈段占256B,SP=0100H。

26.在显示器上显示“Howareyou?

”,然后读一个字符,但不显示此字符,若读入字符是‘y则显示‘ok’。

DSEGSEGMENT

DAT1DB‘Howareyou?

’,0DH,0AH,‘$’

DAT2DB‘OK’,0DH,0AH,‘$'

DSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVDX,OFFSETDAT1

MOVAH,9

INT21H;

显示提示信息

MOVAH,8

输入字符不回显

CMPAL,‘Y’

JNENEXT

LEADX,DAT2;

显示ok

INT21H

NEXT:

MOVAH,4CH;

返回DOS

CSEGENDS

ENDSTART

27.屏幕显示“PASSWORD?

”,随后从键盘读入字符串,并比较这个字符串与内部设定的字符串,若两者相同,则显示“ok”,否则不作任何显示。

PASS1DB‘12AB’

NEQU$-PASS1

DT1DB“PASSWORD”,0DH,0AH,’$’

PASS2DB20;

最大长度

DB?

实际长度

DB20DUP(?

DT2DB‘OK$’

CSEG,DS:

DSEG,ES:

START:

MOVES,AX

LEADX,DT1

显示“PASSWORD”

LEADX,PASS2

MOVAH,0AH

等待键盘输入字符串

LEASI,PASS1

LEADI,PASS2

CMPBYTEPTR[DI+1],N;

检查字符个数是否相等

JNELAST

MOVCX,N

LEADI,PASS2+2

CLD

REPZCMPSB;

检查字符是否匹配

JNZLAST;

不匹配,程序结束

DISOK:

LEADX,DT2;

匹配,显示OK

LAST:

MOVAH,4CH

28.编写一个程序,求W=(X2-Y2)/Z,设X、Y、均为一个8位无符号数,运算不考虑溢出。

分析:

表达式改写为W=(X+Y)(X-Y)/Z,因为表达式简单,根据表达式运算次序来编写程序,由于运算不考虑溢出,所以不考虑(X+Y)>256情况。

解:

程序清单如下:

DSEGSEGMENT

DATXDB80;

假定X为80

DATYDB50;

定义Y的值

DATZDB5;

定义Z的值

DATWDB?

定义保存计算结果的存储单元

STEGSEGMENTPARASTACK

DW20HDUP(0)

STEGENDS

DSEG,SS:

STEG

BEGIN:

MOVAX,DSEG

MOVAL,DATX;

取X

ADDAL,DATY;

计算(X+Y)→(AL)

MOVBL,DATX;

SUBBL,DATY;

计算(X-Y)→(BL)

MULBL;

计算(X+Y)×

(X-Y)→(AX)

MOVCL,DATZ;

取Z

DIVCL;

(X-Y)/Z

MOVDATW,AL;

保存结果

MOVAH,4CH;

ENDBEGIN

29.编写一个程序,实现键入任一个字符,显示其十进制的ASCⅡ码(例如:

键入A,显示41H)。

分析:

首先接受一个字符,其ASCⅡ码一定在0~255之间,把二进制的ASCH码转换为十进制后输出即可。

转换的算法是:

用该数除以100,商是二进制的百位;

再把余数除以10,商是二进制的十位;

余数是二进制的个位。

二进制的百位、十位、个位加上30H即为字符的百位、十位、个位,然后输出即可。

CODESEGMENT

CODE

MOVAH,1

读一个按键

MOVAH,0;

准备做AX/100,所以要把AH清0

MOVBL,100;

除法指令不允许用立即数,把除数放在BL中

DIVBL;

除以100

MOVCL,AL;

保存商,即百位数

ADDCL,30H;

把百位数转化成ASCⅡ码

MOVAL,AH;

取除以100的余数到BL中,作下一次的被除数

被除数高位部分清0

MOVBL,10;

准备除数10

除以10

ADDAL,30H;

商是十位数,转换成ASCⅡ码

ADDAH,30H;

把余数个位数转换成ASCⅡ码

MOVBX,AX;

用BX保存转换后的十位和个位数字

MOVAH,2

MOVDL,13

输出回车

MOVDL,10

输出换行符

MOVDL,CL;

输出百位数

MOVDL,BL;

输出十位数

MOVDL,BH;

输出个位数

MOVAH,4CH

CODEENDS

30.以BUF为首地址的内存单元中存有1~15的平方表。

查表求X单元中数(在1~15之间)的平方值,并送回X单元。

表是一种常见的数据结构,平方表是一个数据表,为便于查表,需要组织好表的结构,即表中的平方值按顺序存放。

查表的方法是顺序查表法,以X为索引值,将索引值和平方表的首地址相加,其和作为表内偏移地址,取出相应X的平方值。

NAMEEXAM3

DATASEGMENT

BUFDB1,4,9,16,25,36,49,64

DB81,100,121,144,169,196,255

XDB12

DATAENDS

STACKSEGMENTSTACK’STACK’

DB100DUP(?

STACKENDS

ASSUMECS:

CODE,DS:

DATA,SS:

STACK;

段地址说明

MOVAX,DATA

MOVDS,AX;

数据段地址装填(堆栈段地址由系统装填)

MOVSI,OFFSETBUF;

取BUF的偏移量

XORAX,AX;

AX清0

MOVAL,X;

DECAL

ADDSI,AX;

X平方值的地址

MOVAL,[SI];

取X的平方值

MOVX,AL

31.以BUF为首地址的内存单元中,存放若干个8位的带符号数,统计≥0的数的个数,并将结果存入RESULT字节单元中。

BUFFDB1,-4,90,16,0,36,-49,-68

CNTEQU$-BUFF

RESULTDB?

STACKSEGMENTPARASTACK

ASSUMECS:

LEASI,BUFF;

取BUFF的偏移量

MOVDL,0;

DL清0

MOVCL,CNT;

取符号数的总个数,设置循环次数

LOP1:

MOVAL,[SI]

CMPAL,0;

和0比较

JLLOP2;

小于0时转移

INCDL;

统计大于等于0的个数

LOP2:

INCSI;

修改地址指针

DECCL;

CL减1

JNZLOP1;

CL不为0转移到LOP1

MOVRESULT,DL;

传送统计结果到存储单元

32..设一个字节的二进制数存放在BINNUM单元中。

编写程序将它转换成十六进制数的形式显示在屏幕上。

显示字符用DOS的2号功能调用,要显示的字符的ASCⅡ码必须装入DL中。

因为4位二进制数对应1位十六进制数,一个字节的二进制数对应2位十六进制数。

十六进制数每位代码是0~9和A~F,对应的ASCⅡ码为30H~39H和41H~46H,因此程序中要判断该数的大小,若在0~9范围,加上30H,若在A~F之间,则加上37H。

BINSUMDB10001011B

MOVBL,BINSUM;

取二进制数

开始处理高4位

MOVCL,4;

设置移位次数

SHRDL,CL;

右移4位,取低4位

ADDDL,30H

CMPDL,‘9’;

与39H比较

JBEDONE1;

小于等于39H转移

ADDDL,7;

否则加7,转换为‘A’~‘F’

DONE1:

MOVAH,2;

显示高4位

ANDBL,0FH;

开始处理低4位

MOVDL,BL

CMPDL,3AH;

和‘A’比较

JBLOP2;

小于‘A’时转移

MOVAH,2;

显示低4位

33.编写一个汇编程序,求1~100的累加和。

程序功能简单,循环次数已经确定为100次,可以采用循环结构实现它。

MOVAX,0

MOVCX,100;

设置循环次数

ADDAX,CX;

求累加和

LOOPLOP1;

CX减1不为0,则转移

34.设VARY中有一组8位的符号数,编程统计其中的正数、负数、零的个数,分别存入VM、VN、VK变量中。

数组VARY中的数据个数用CNTEQU$-VARY求出,则循环次数为CNT次。

将数组VARY中的数据逐个与0比较,利用PSW(标志寄存器)中的ZF求出零的个数,利用SF求出正、负数的个数。

参考程序如下:

STACKENDS·

VARYDB23H,78H,0ABH,0CDH,00H,56H

DB14H,86H,0EFH,0BCH,00H,0C0H

CNTEQU$-VARY

VMDB?

VNDB?

VKDB?

STACK

MOVBX,0;

初始化

清0

LEASI,VARY;

初始化地址指针

MOVCX,CNT;

循环体

CMPBYTEPTR[SI],0;

JEZERO;

等于0转ZERO

JSLOP2;

为负数转LOP2

INCBH;

统计正数个数的寄存器增1

JMPNEXT

INCBL;

统计负数个数的寄存器增1

ZERO:

统计0个数的寄存器增1

NEXT:

INCSI;

判断终止条件,CX-1≠0则循环

结束处理部分

MOVVM,BH;

保存正数的个数

MOVVN,BL;

保存负数的个数

MOVVK,DL;

保存0的个数

35.编写程序,实现在同一行上依次显示26个大写字母.

MOVCX,26;

MOVDL,‘A’;

要显示的字符的ASCⅡ码必须装入DL中

显示字符用DOS的2号功能调用

循环修改部分

36.编写程序,实现键入任意一个字符,显示其ASCⅡ码中含“1”的个数。

计数器清0

MOVAH,1;

等待键入一个字符,键入的字符存放在AL中

CMPAL,0;

与0比较

JEEXIT;

是0则转移到EXIT

SHLAL,1;

左移1位

ADCDL,0;

统计1的个数

JMPLOP1

EXIT:

ADDDL,30H;

二进制转换成ASCⅡ码

显示字符键入字符中含“1”的个数

37.编写程序,将带符号的字节数组ARRY中最大数找出来,送到MAX单元中。

在字节数组中找出最大数,可以把第1个数送AL中,让AL与第2个数及它后面的每一个数进行比较,每次比较时将大者放AL中,最后把AL的值送MAX单元即可。

ARRYDB23H,78H,0ABH,0CDH,00H,56H

DB14H,86H,0EFH,0BCH,100H,0C0H

CNTEQU$-ARRY;

字节个数

MAXDB?

MOVAX,DATA

LEASI,ARRY;

MOVCX,CNT-1;

MOVAL,[SI]

地址指针增1

CMPAL,[SI];

与下一个数比较

JGELOP2;

大于等于时转LOP2

取较大的数放AL寄存器中

LOOPLOP1;

MOVMAX,AL;

保存最大数

38.以BUF为首地址的内存单元中,存放若干个8位的带符号数,统计≥0的数的个数,并将结果存入RESULT字节单元中。

DECC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1