兰州理工大学2019C语言试题,兰州理工大学微机原理作业纸习题答案

(唐丁宪奉上)

​第一章微型计算机概论

1.1、答:微型计算机系统包括硬件系统和软件系统两大部分。硬件系统包括:微型计算机、外部设备、电源及其它辅助设备。软件系统包括:系统软件和应用软件。

微型计算机也称为主机,主机包括:微处理器、存储器、输入/输出接口(Input/Output),微处理器通过系统总线和存储器、输入/输出接口进行连接。

微处理器(MicroprocessorUnit)简称为MPU(或者称为MP),它是一个中央控制器(CentralProcessing

Unit),简称CPU。它是微型计算机的核心部件,它将运算器、控制器、寄存器通过内部总线连接在一起,并集成在一个独立芯片上。

1.2、答:单片机是将CPU、ROM、RAM以及I/O接口电路以及内部系统总线等全部集中在一块大规模集成电路芯片上,就构成了单片机。

单板机是将微处理器芯片、存储器芯片、I/O接口芯片及少量的输入输出设备(键盘,数码显示器)安装在一块印制板上构成一台微型计算机。

由多块印制板构成的微机称为多板机。

1.3、完成下列转换(保留4位小数)

(21.32)10=(10101.0101)2=(25.2436)8=(15.51EB)16

50.38D=

110010.0110 B=62.3024 Q= 32.6147 H

1.4、完成下列计算

已知X=-63,Y=59

则[X]原=BFH(10111111B),[X]反=C0H(110000000B),[X]补=C1H(11000001B)

[Y]原=3BH(00111011B),[Y]反=3BH(00111011B),[Y]补=3BH(00111011B)

[X+Y]补=0FCH(11111100B),[X-Y]补=86H(10000110B)。

[X]补+[Y]补=0FCH(11111100B),[X]补-[g]补=86H(10000110B)。

1.5、答:浮点数是指小数点在数值中的位置不是固定不变,实际位置将随阶码而浮动,用这种方法表示的数,称为浮点数。

定点数是指小数点在数值中的位置固定不变。

1.6、答:压缩BCD码是4位二进制表示一位十进制数而非压缩BCD码是8位二进制表示一位十进制数。

1.7、写出下列数值的压缩的BDC码、非压缩的BDC码、ASCΠ码值。

(改为15,29)

15=[15H]压缩BCD码=

[0105

H]非压缩BCD码=

[3135 H] ASCΠ码

29=

[29H]压缩BCD码=

[0209H]非压缩BCD码=

[3239H] ASCΠ码

第二章8086/8088微处理器

2.1答:从功能上讲由两部分组成总线接口单元BIU和执行单元EU组成。

总线接口单元(BIU)是微处理器内部与存储器和I/O接口传送信息的通道,总线接口单元负责从内存中将指令送到指令队列中;负责把数据从内存或I/O接口送到执行单元(EU);负责将执行单元的运行结果送到内存或I/O接口。

EU的功能是负责译码和执行指令。

2.2答:指令队列(Queue)存放预取的指令,采用预取指令的方法将减少微处理器的等待时间,提高运行效率。8086CPU中指令队列有6个;8088

CPU中指令队列有只有4个。

2.3答:8086/8088

CPU中有16个16位的寄存器。4个段地址寄存器是代码段寄存器CS;数据段寄存器DS;堆栈段寄存器SS和扩展段寄存器ES。它们是用来存放每一个段的首地址(段基地址)。一个指令指针寄存器IP是用于存放要执行的指令的偏移地址,它不能作为一般寄存器使用。一个标志寄存器(又称为程序状态寄存器)用于反映指令执行结果或控制指令执行形式。)有8个通用寄存器,通用寄存器分为数据寄存器与指针和变址寄存器两组。数据寄存器包括AX(累加器)、BX(基址寄存器)、CX(计数器)和DX(数据寄存器),一般用来存放16位数据,故称为数据寄存器。其中的每一个又可根据需要将高8位和低8位分成独立的两个8位寄存器来使用,即AH、BH、CH、DH和AL、BL、CL、DL两组,用于存放8位数据,它们均可独立寻址、独立使用。数据寄存器用来存放计算的结果和操作数,也可以存放地址。

指针寄存器包括堆栈指针寄存器SP、基址指针寄存器BP一般用来存放地址的偏移量和用于寻址内存堆栈内的数据

变址寄存器包括原变址寄存器SI和目的变址寄存器DI,一般用来存放地址的偏移量为存储器寻址时提供地址。

2.4答:标志寄存器又称为程序状态寄存器,是一个16位的寄存器,标志寄存器设置了9个标志位。这9个标志位按功能分可以分为两类:一类为状态标志,状态标志表示执行某种操作后,ALU所处的状态特征,这些状态标志会影响后面的具体操作。状态标志有6个:CF、AF、SF、PF、OF和ZF。另一类为控制标志,用来控制CPU操作,反映存储器地址变化的方向、是否允许中断及在执行程序时是否进行单步中断。控制标志有3个:DF、IF和TF控制标志是人为设置的,每个控制标志都对某种特定的功能起控制作用。

2.5答:

8086与8088有3点不同之处;1.

8086有16条数据线而8088只有8条数据线,2.8086而8088。3.8086而8088。

2.6答:堆栈是在内存中开辟的一个特定的区域,用以存放CPU寄存器或存储器中暂时不用的数据和有用的信息。在数据段和附加段存放数据时,一般是从低地址开始向高地址存放数据,而用PUSH指令向堆栈中存放数据时总是从高地址开始逐渐向低地址方向增长。堆栈指令遵循“先进后出”,“后进先出”的原则,凡是用PUSH指令最后推入堆栈的数据,用POP指令弹出时最先出栈。在操作时是以字为单位。

2.7答:8086/8088CPU各有20根地址总线,可寻址范围是1M个存储单元。8086CPU有16根数据,一次可以读一个字也可以读一个字节。8088CPU有8数据总线一次以读一个字节。

2.8答:1.物理地址就是实际地址,它具有20位的地址值,它是唯一标志1MB存储空间的某一单元的地址。2.逻辑地址由段基址和偏移量组成。程序以逻辑地址编址,而不是物理地址。3.在8086/8088存储空间中,把16个字节的存储空间看作一节。为了简化操作,要求各个逻辑段从节的整数边界开始,也就是说段首地址低4位应该是“0”,因此把段首地址的高16位称为“段基值”。4.偏移量是该物理地址距离段首地址的单元数。

2.9答:总线上传输信号的一组导线,作为微机各部件之间信息传输的公共通道。系统总线按功能分数据总线、地址总线、控制总线。

2.10答:1.8086/8088CPU把存储器分为代码段、数据段、堆栈段、附加段。因为8086/8088的寄存器是16位,最大只能寻址64K个单元的存储空间,为了增大寻址空间把存储器进行分段,这样就可以寻址1MB存储空间。2.每段最大空间为64KB。

2.11答:(1)2300H;1010H;24010H(2)

0000H;1000H;01000H

(3)2AE0H;1690H;2C490H(4)

7369H;0010H;736A0H

2.12答:1.数据段首地址是12000H末地址是21FFFH。2.附加段的首地址是20A30H末地址是30A2FH。3.代码段的首地址是470E0H=470EH×10H末地址是570DFH=(470E0H+FFFFH)。

2.13答:8086/8088

CPU复位以后,除代码段寄存器外,其余标志寄存器、指令指针寄存器、各段寄存器及指令对列全部被清零。

2.14答:在一个读总线周期ALE在第一个时钟周期为高电平,其余周期为低电平。/S7在第一个时钟周期为低电平,其余周期为高电平。在第一个时钟周期为低电平,第二、三周期为高电平。一直为高电平。M/一直为高电平。DT/一直为低电平。

2.15答:1.8086

CPU读/写总线周期时,最少包含4个时钟周期。2.CPU在T3状态的前沿(下降沿)对Ready信号进行采样。若CPU在T3状态的开始采样到Ready信号为低电平,那么将在T3和T4之间插入等待状态TW。3.TW可以是一个,也可以是多个。CPU在每个TW的前沿处对Ready信号进行采样。当在TW状态采样到READY信号为高电平时,在当前Tw状态执行完,进入T4状态。

第三章存

储 器

3.1答:1.容量:存储器芯片的容量是以1位二进制数(bit)为单位,因此存储器容量是指每一个存储器芯片所能存储的二进制数的位数。(存储器容量=存储单元数位数)2.存储速度:存储器的基本操作是读出与写入,称为“访问”或“存取”。存储器的存储速度有两个时间参数:(1)访问时间(Access

Time)

TA从启动一次存储器操作,到完成该操作所经历的时间。

(2)存储周期(Memory Cycle)

TMc

启动两次独立的存储器操作之间所需的最小时间间隔。3.存储器的可靠性:4.性能/价格比:5.其他指标(存储器的选择有时还应考虑功耗、集成度等指标)。

3.2答:按存储器的读写功能分可以分为随机读写存储器(RAM)和只读存储器(ROM)。随机读写存储器RAM可以随机地按指定地址从存储单元存入或读取(简称存取)数据,存放在RAM中的信息,一旦掉电就会丢失。

随机读写存储器RAM可分为静态随机存取存储器SRAM、动态随机存取存储器DRAM和集成随机读写存储器IRAM。

只读存储器(ROM)的基本特征是在正常运行中只能随机读取预先存入的信息,即使在断电情况下,ROM仍能长期保存信息内容不变,所以它是一种永久存储器。

只读存储器(ROM)可分为掩膜只读存储器(Mask

ROM)、可编程只读存锗器(PROM)、紫外线可擦除可编程只读存储器(EPROM)、电可擦除编程只读存储器(E2PROM)和快速可擦编成只读存储器(Flash

EPROM)。

掩膜只读存储器其结构简单,存储信息稳定,可靠性高,能够永久性保存信息;可编程只读存储器是由半导体厂家制作“空白”存储器阵列(即所有存储单元全部为1或全部为0状态)出售,用户根据需要可以实现现场编程写入,但只能实现一次编程;紫外线可擦编程只读存储器、电可擦除编程只读存储器和快可擦编程只读存储器等不仅可以现场编程。还可以擦除原存储的信息内容,写入新的信息。

3.3答:SRAM的特点是在一个存储单元所用晶体管数目多,但不需要刷新电路。DRAM的特点是在一个存储单元所用晶体管数目少,但需要刷新电路。IRAM的特点是将动态随机存取存储器和刷新电路集成在一片芯片中,它即具有SRAM速度快的优点,又具有DRAM的廉价。IRAM实际上是附有刷新电路的

DRAM。它在现代微机系统中得到广泛应用,大容量的内存一般都是用IRAM。

3.4答:1)13条地址线和4条数据线;2)19条地址线和1条数据线

3)17条地址线和4条数据线;4)15条地址线和8条数据线

3.5答:1)RAM的存储容量为256K×8

bit;2)有18条地址线和8条数据线;3)若采用6116需要128片,若采用6264需要32片,若采用62128需要16片,若采用2114需要512片,若采用2141需要512片。

3.6答:1)ROM的存储容量为512K×8

bit;2)需要19条地址线和8条数据线;3)若采用2764需要64片,若采用27128需要32片,若采用2816A需要256片,若采用28F256需要16片。

3.7答:常用的存储器片选控制方法有线选法、全译码法和部分译码法。

线选法地址线可以不用完,也无需专门的译码电路。但由于高位地址线可随意取值0或1。所以,存在地址重叠,并且造成存储器地址不能连续分布。

全译码法所有地址线均参加地址译码,芯片的地址线直接和低位地址总线相连,高位地址总线经译码器或逻辑电路与各芯片的片选信号相连。

部分译码法与全译码法类似,只是高位地址线中有一部分进行译码,产生片选信号,而不是全部。这种方法称为部分译码法。

3.8答:第一片的首地址为21000H(错),末尾地址为24FFEH。第二片的首地址为21001H,末尾地址为24FFFH。第三片的首地址为25000H,末尾地址为28FFEH。第四片的首地址为25001H,末尾地址为28FFFH。

3.9第一片

A19~A12=01000000,地址范围是40000H~40FFEH

第二片

A19~A12=01000000,地址范围是40001H~40FFFH

第三片

A19~A12=01000001,地址范围是41000H~41FFEH

第四片

A19~A12=01000001,地址范围是

41001H~41FFFH

3.10

(有问题A0和BHE未画)按现有的连线地址为

第一片

A19~A13=1000000,地址范围是

80000H~81FFFH__

第二片

A19~A13=1000001,地址范围是

82000H~83FFFH__

第三片

A19~A13=1000010,地址范围是

84000H~85FFFH__

第四片

A19~A13=1000011,地址范围是

86000H~87FFFH__

3.111)答:是译码功能。

2).

3)答:ROM0、ROM1的地址范围。94000H~97FFFH

3.12答:存储器(1)的地址范围为80000H~80FFEH;存储器(2)的地址范围为80001H~80FFFH。(题目有错,存储器(4)的地址范围为81001H~81FFFH)

3.13答:1)系统的存储容量为:

B3FFFH-B0000H+1=4000H=16KB;

2)需要6264芯片:(16K*8bit)/8K*8bit=2片;

3)画出系统连接图。两片6264芯片的地址范围如表所示,高位地址A14~A19参与译码形成两片6264的片选信号,奇地址存储器芯片和偶地址存储器芯片由A0和区分。存储器与系统总线的连接电路如图题3.13所示。

A19

A18

A17

A16

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

1

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

1

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

图题3.13存储器扩展电路

3.14答:(不是8086系统)

3.15在8086CPU组成的系统中,用4片2764(8K×8

bit)存储芯片组成随机ROM存储系统,其第一片的首地址为(C000H:8000H),试画出存储器与CPU的连接电路图。

答:

第四章8086/8088指令系统

4.1答:机器语言的每一条指令是以二进制为代码的指令,它能够被计算机直接执行。汇编语言是用助记符或用符号来编写指令,是一种与机器语言一一对应的语言。机器不能直接执行程序,程序必须经过翻译,机器才能执行。高级语言是面向过程的语言,它不依赖于特定的机器,独立于机器,用同一种高级语言编写的程序可以在不同的机器上运行而获得相同的结果。

4.2请指出以下各指令的源、目的操作数所使用的寻址方式。

(1)MOV

SI,2100H源:立即数寻址;目:寄存器寻址

(2)SBB BYTE PTR

DISP[BX],7;源:立即数寻址;目:寄存器相对寻址

(3)AND

[DI],AX源:寄存器寻址;目:寄存器间接寻址

(4)OR

AX,[609EH]源:直接寻址;目:寄存器寻址

(5)MOV

[BX+DI+30H],CX源:寄存器寻址;目:基址变址相对寻址

(6)PUSH

ES:[BP]源:寄存器间接寻址;目:隐含寻址

(7)CALL

[DI]DISP寄存器相对寻址

(8)JNZ

Short_

label直接寻址

(9)CBW

BL

(指令错)

(10)MOV

AX,

[1000H]源:直接寻址;目:寄存器寻址

(11)MOV

AX, ARRAY

[BX][SI];源:基址变址相对寻址;目:寄存器寻址

(12)MUL

BL源:寄存器寻址;目:隐含寻址

(13)MOV

AX,[BX][SI]源:基址变址寻址;目:寄存器寻址

(14)MOV

AL,TABLE源:直接寻址;目:寄存器寻址

(15)MOV

AX,DISP[BX+DI]源:基址变址相对寻址;目:寄存器寻址

(16)MOV

AX,[BX]源:寄存器间接寻址;目:寄存器寻址

4.3答:基址寄存器BX、基址指针寄存器BP、原变址寄存器SI、目的变址寄存器DI。

4.4下列各条指令是否有错?如果有,请指出错误之处。

(1) MOV

DS,1000H立即数不能直接给段寄存器送数

(2)

MOV

[100],23H目的操作数应指明类型,改为BYTE

PTR [100]

(3)ADD

AX,[BX+BP+6]存储器寻址不能有两个基地址[BX,BP]

(4)PUSH

DL进栈是以字为单位

(5)IN

AX,[3FH]

I/O接口地址不能加括号

(6)OUT

3FFH,AL口地址3FF应放在DX中

(7)LES

SS,[SI]

SS不能存放偏移量

(8)POP

[AX]

AX不用来做间址寄存器

(9)IMUL

4CH乘法中源操作数不能是立即数

(10)SHL

BX,5移位超过1位应放在CL中

(11)INT

300立即数(向量码)应小于255

(12)XCHG

DX,0FFFH此指令中不能有立即数

(13)POP

AL出栈是以字为单位

(14)DIV

32H除法中原操作数不能是立即数

(15)MOV

AX,BYTE

PTR[SI]源操作数和目的操作数不等宽

(16)MOV

DX,DS:[BP]正确

(17)MOV

128,CL目的操作数不能为立即数

4.5设若标志寄存器原值为0A11H,SP=0060H,AL=4。下列几条指令执行后,标志寄存器、AX、SP的值分别是多少?

PUSHF

;F→SP

; SP=5EH , [5EH]=0A11H

LAHF

;F低8→AH; AH=11H

XCHG

AH,AL

; AH 04H , AL=11H

PUSH

AX

;

SP=5CH , [5CH]=0411H,

SAHF

;AH→F低8;

POPF

; SP→F

标志寄存器=0411H,AX=0411H,SP=005EH

4.6已知DS=2000H,有关的内存单元值为:(21000H)=00H,(21001H)=12H,(21200H)=00H,(21201H)=10H,(23200H)=20H,(23201H)=30H,(23400H)=40H,(23401H)=30H,(23600H)=60H,(23601H)=30H,符号COUNT的偏移地址为1200H。执行下列指令后,寄存器AX、BX、SI的值分别是多少?

MOV

BX,OFFSET

COUNT

BX=1200H

MOV

SI,[BX]

SI=1000H

MOV

AX,COUNT[SI][BX]

AX=_3040H__,BX=_1200H__,SI=__1000H____

4.7答:AX=322FH,

标志寄存器值为0410H

4.8设单元DATA在内存数据段中的偏移量为24C0H,在24C0H~24C3H单元中依次存放着55H、66H、77H、88H。下列几条指令执行后,寄存器AX、BX、CL、SI、DS的值分别是多少?

MOV

AX,DATA

; AX=6655H

LEA

SI,DATA

; SI=24C0H

MOV

CL,[SI]

; CL=55H

LDS

BX,DATA

;

DS=8877H,BX=6655H

4.9若AX=26D3H,CX=7908H,CF=1,OF=0,执行下列指令后,寄存器AX、CX的值分别是多少?_AX=A74CH

___CX=FA08H

__CF=_0__OF=__0_。

SAL

CH,1

CH=FA,CL=08H

RCR

AX,CL

AX=A726H ,

CF=1

ROL

AL,1

AL=4CH ,

CF=0

4.10答:原串在数据段中,但可以段超越。目的串必须在附加段中。

4.11答:M/=1;DT/=1;=1;=0;

数据总线上的数是0508H;地址总线上的数分是49420H

4.12

(与21题重)答:AL=23H,功能将压缩的BCD码转换为二进制。

4.13答:上述程序段执行后,字节单元HCOD的内容是43H;HCOD+1的内容是35H。该程序段的功能是将压缩的十六进制转换为ASCII字符。

4.14执行下面的程序段后,(CL)=02H

,(AX)=0040H。

XOR BX, BX

MOV AX, 0010H

MOV CL, 2

SAL  AL, CL

MOV  BL, AL

SAL  AL, CL

ADD  AX,

BX

4.15问:(1)初值(AL)=37H时,程序段执行结果:(AL)=07H

(2)初值(AL)=9FH时,程序段执行结果:(AL)=0FFH

4.16下列程序段中,以X为首址的字单元中的数据依次为1234H、5678H;以Y为首址的字单元中的数据依次为8765H、4321H。阅读程序,给出必要的程序注释并完成程序后的问题。

LEA

SI,X;SI=0000H

LEA

DI,Y

; DI=0004H

MOV

DX,[SI+2]

; DX=5678H

MOV

AX,X

; AX=1234H

ADD

AX,X

; AX=2468H

ADC

DX,[SI+2]

; DX=ACF0H

CMP

DX,[DI+2]

; ACF0H与8765H比

JL

L2;小于转移到L2

CMP

AX,Y;大于2468H与4321比

JL

L1;小于转移到L1

JMP

EXIT;无条件转移到EXIT

L1:MOV

AX,1;给AX送1

JMP

EXIT;无条件转移到EXIT

L2:MOV

AX,2

EXIT:……

以上程序代码执行之后,AX=2

;DX= ACF0H

4.17答:程序将依次向堆栈压入的数据为0003H、0002H、0001H。该程序段实现了将二进制转换十进制功能。

4.18答:程序功能是计算AX=1~10,BX=10H起的累加和。AX=10,BX=47H,CX=0。

MOV  AX , 0000H

MOV  BX , 0010H

MOV  CX ,10

LP: INC AX

ADD  BX , AX

LOOP  LP

HLT

4.19答:以上程序代码执行之后,AX=

2

;DX= ACF0H

4.20阅读下列程序段,给出必要的程序注释并完成程序后的问题。

ADD AL,AL

;2*AL

ADD

AL、AL

;4*AL

MOV

BL,AL

;AL→BL

SAL

BL,1

;8*AL

ADD

AL,BL

;12*AL

HLT

(1)该程序段的功能是什么?答:把AL中的内容乘以12

(2)设AL的初值为0AH,执行该程序段后,AL为多少?

答:AL=78H

4.21已知有程序段如下:(与12题重)

(1)该程序段的功能是什么?

答:将BCD码转换成二进制

(2)执行该程序段后,AL=23H

4.22、下列程序段要求在内存40000H开始的顺序30个单元中存放着8位无符号数,将它们的和放在DX中,试填空完成该程序(并加入必要的注释)或自行编制一段程序完成上述功能。

MOV

AX,4000H;

MOV

DS,AX;送段首地址

MOV

SI,0000H;送偏移量

MOV   CX,

30;送循环次数

XOR

AX,AX;清零

GOON:

ADD

AL,

[SI];两数相加

ADC

AH,00H;加进位位

INC

SI;修改地址

DEC

CX;计数器减1

JNZ GOON;不为零循环

MOV

DX,AX;结果送DX

4.23在AL中有一个十六进制数的ASCII码,完成下面程序段在每一空白处填上一条适当指令(并加入必要的注释),实现将AL中的ASCII码转换成二进制数。

CMP AL,3AH;与3AH比较

JC

DONE;小于转移到DONE

SUB AL,7;大于减7

DONE:SUB

AL,30H;AL减30H

HLT

4.24已知附加段中有一块长50个字的数据区,首址为DEST。欲编程将它们全部初始化为0FFFFH值,试在下面程序段的空白处填上适当的指令或操作数(并加入必要的注释),以实现上述功能。

LEADI,DEST

;取DEST偏移量

MOV

CX,100;送计数值

CLD

;清方向标志位,DF=0

MOV

AL,0FFH

;将AL←0FFH

REP

STOSB;将送100个字节FFH到首址为DEST区域

4.25已知附加段中有一块长50个字的数据区,首址为DEST。欲编程将它们全部初始化为0FFFFH值,试在下面程序段的空白处填上适当的指令或操作数(并加入必要的注释),以实现上述功能。(与24题重)

DI,DEST

;

MOV

CX,;

CLD

;

MOV

AL,0FFH

;

;

4.26附加段中有某字符串首址为BLOCK,长17个字节。欲查找其中第一次出现字符“e”的位置,并将该位置所在的偏移量入栈保护。试在下面程序段的空白处填上适当的指令(并加入必要的注释)或操作数以实现上述功能。

MOV

DI,OFFSET

BLOCK;送BLOCK的偏移量

MOV

AL,65H;送eASCII码

MOV

CX,17;送计数值

CLD;方向标志位清零

REPNZSCASB;寻找e

JNE

OTHER;找到e转到OTHER

DEC

DI;修改地址

PUSH

DI;偏移量入栈保护

OTHER:……(略)

4.27已知有某字串BUF1的首址为0000H,BUF2的首址为0010H,数据段与附加段重合。欲从BUF1处开始将10个字数据顺序传送至BUF2处,试在下面程序段的空白处填上适当的指令或操作数以实现上述功能。

LEA

SI,BUF1;送BUF1的偏移量

ADD

SI,

12H;地址移动到字符串最后

LEA

DI,BUF2;送BUF2的偏移量

ADD

DI,

12H;地址移动到字符串最后

STD;方向标志位清零

MOV

CX,

10;送计数值

REP

MOVSW;进行串操作

4.28在DAT和DAT1两个字节变量单元中有两个十进制数的ASCII码,编程实现将这两个ASCII码转换为两个BCD码,并以压缩形式存放在REST字节变量单元中。试填写该程序划线部分,并加入必要的注释。

MOV

AL,DAT;取第一个数

SUB

AL,30H;将ASCII码转为BCD码

MOV

CL,4;

送移位数

SHL

AL,CL;将BCD码放在AL高四位中

MOV

BL,DAT1;取第二个数

SUB

BL,30H;将DAT1中的ASCII码转为BCD码

OR

AL,BL;将两个BCD码合并在AL寄存器中

MOV

REST,AL;将压缩形式的BCD码存人REST中

HLT

第五章汇编语言程序设计

5.1答:标号在指令性指令的名字,写在指令前面,标号后必须有冒号。变量在伪指令前是定义某一数据区所起的名字,它后面不带冒号。标号和变量都有段、偏移量的属性,标号的类型是远和近型,变量的类型是字节、字、双字等。

07H

←0100H ADD1

00H

00H

00H

01H

00H

00H

00H

……

01H

2018H ADD2

04H

05H

05H

05H

05H

07H

01H

……

2068H ADD3

题5.3图

5.2答:指令性指令是给CPU的命令,它是由汇编程序翻译成机器语言指令,在程序运行时由CPU来执行,每条指令都对应CPU一种特定的操作。伪指令不汇编成机器语言,仅仅在汇编过程中告诉汇编程序应如何汇编。

5.3

答:ADD1、ADD2、ADD3的段基址为1000H;ADD1、偏移量为2000H、类型为双字;ADD2、偏移量为2018H、类型为字节;ADD3、偏移量为2068H、类型为字。

5.4

答:分配情况如右图

……

02H

1006H ADD1

12H

9AH

1009H ADD2

56H

42H

41H

题5.4图

5.5答:(定义了堆栈段[81字节]、数据段(17字节)和代码段)

……

05H

←0100H ADD1

05H

……

05

0127H题5.6图

5.6答:ADD1占有多少个字节

5.7答:

1.依据设计任务,抽象出描述问题的数学模型。2.确定实现数学模型的算法或求解的具体步骤和方法。3.绘制出程序流程框图。

4.分配存储空间及工作单元(包括寄存器)。确定数据段、堆栈段、代码段及附加段在内存中的位置。5.依据流程图编写程序。6.静态检查。7.上机调试。8.程序运行,结果分析。

5.8答:源程序结构一般包括4个段,它们是代码段、数据段、附加段和堆栈段。其中代码段是必须存在的,其余段视具体情况而定。

一般用到四种程序结构:顺序结构,分支结构,循环结构,子程序结构。

5.9答:XOR  AX,

AX

MOV  DX , 0

MOV

AH,45H

MOV

DL,AH

AND

DL,0FH

ADD  DL, 30H

AND

AH,0F0H

MOV

CL,4

SHR

AH,CL

ADD  DL, 30H

ADD

AX,DX

HLT

……

94H

← DATA1

16H

26H

89H

30H

← DATA2

55H

04H

74H

……

← RES

5.10答:MOV AL , A

MOV BL , B

IMUL BL

MOV CX , C

ADD AX , CX

SUB AX , 18

HLT

(1)从DATA1单元开始,将8个组合BCD码累加起来,其和(超过1字节)存入以RES为首址的单元中(低位在前)。图5-1

5.11题图

(2)将它们看作2个分别以DATA1、DATA2为首址的4位十进制数(低位在前),求此两数之差并存入以RES为首址的单元中。

答:1、 LEA  SI

,DATA1

2、LEA  SI ,

DATA1

LEA DI ,

DATA2

LEA  DI , DATA2

LEA BX ,

RES

LEA  BX , RES

MOV CX

,7

XOR AX ,AX

XOR AX ,

AX

MOV AX , WORD  PTR [SI]

MOV AL , BYTE  PTR

[SI]

ADD AX , WORD  PTR [DI]

AA1:INC

SI

MOV  DX , WORD PTR [SI+2]

ADD AL , BYTE  PTR

[SI]

ADC DX , WORD PTR [DI+2]

ADC AH ,

0

MOV  WORD PTR [BX] , AX

LOOP AA1

MOV WORDPTR [DI+2] , DX

MOV WORD

PTR [BX] ,

AX

HLT

HLT

5.12答:根据各种条件判断和比较进行操作,满足条件去做一种操作,不满足条件去做另一种操作。每一种操作程序称为一个分支,一次判断产生两个分支,只有一次判断的称为单重分支程序。多次判断产生多个分支,称为多重分支程序。

5.13答:MOV

AL,DAT

AND AL,DAT

JNS

POSI;若为正数转POS1

TEST AL,01H;测试负数的奇偶性

JZ

M;若为负偶数转M

OR

AL,BUF;若为负奇数进行‘或’运算

JMP

DONE

M:XOR AL,BUF;负偶数进行‘异或’运算

JMP

DONE

POSI:TEST

AL,01H;判断正数的奇偶性

JZ N;为正偶数,转N

ADD AL,BUF;为正奇数进行‘加’运算

JMP

DONE

N:AND AL,BUF;正偶数进行‘与’运算

DONE:MOV

BUF,AL

HLT

5.14答:实现的方法仍是两两进行比较判断。其步骤是:先取出X,Y,Z,假设存于AL,BL,CL寄存器中。采用两数比较换位法,即AL中的数和BL,

CL分别进行比较,在AL中总是存放中间值。程序段及流程图如右图所示:

MOV AL,DAT1

MOV BL,[DAT1]+1

MOV CL,[DAT1]+2

CMP AL,BL

JB  LP1

XCHG AL,BL

LP1:CMP

AL,CL

JAE  SAV

XCHG AL,CL

CMP AL,BL

JB  SAV

XCHG AL,BL

SAV:MOV

BUF1,AL

MOV

DL,AL;

MOV AH,02H

INT 21H

HLT

5.15答:LEA

SI ,

ADD1

LEA DI ,

ADD2

XOR AX ,

AX

MOV  AL,BYTE

PTR[SI]

CMP  AL,30

JB  AA

MOV

BYTE PTR[DI],2

JMP DONE

AA:CMP

AL,1

JNB BB

MOV

BYTE PTR[DI],0

JMP DONE

BB:MOV  BYTE

PTR[DI],0FEH

DONE:HLT

5.16答:循环程序包函循环初始化、循环体和循环控制3部分。循环初始化是对地址指针寄存器、循环次数的计数初值的设置,以及其它为能使循环体正常工作而设置的初始状态等。循环体是循环操作(重复执行)的部分,由循环工作部分和修改部分组成。循环工作部分是为实现程序功能而设计的主要程序段,该段程序在整个操作中要反复执行多次。可能有多个指令语句构成,也可以仅有一个指令语句构成。循环的修改部分是指当程序循环执行时,对一些参数如地址、变量等进行有规律的修正。循环控制部分是用于判断循环程序是否结束,若结束则退出循环程序,否则修改地址指针和计数器值,继续进行循环程序。循环控制的选择可以有多种方案,在循环控制条件及循环次数的控制,可以采用循环指令LOOP、LOOPZ和LOOPNZ指令来实现,也可以用指令DEC

CX和JNC标号两条来实现。

其特点是需要多次重复进行某些操作。

5.17

答:LEA

BX,DAT

MOV  CX,100

LP1:MOV

AL,[BX]

MOV  AH,20H

AND  AL,AH

MOV AL,0DFH

JNZ DAX

XIAO:OR

[BX],AH

JMP

PP

DAX:AND

[BX],AL

PP:INC

BX

LOOP LP1

DONE:HLT

5.18答:DATA

SEGMENT

LED1

DB3FH,06H,5BH,4FH,66H,6DH,3DH,07H,7FH,6FH

DATA

ENDS

CODE  SEGMENT

ASSUME

CS:CODE , DS:DATA

START:

LDS  SI , LED1

AA1:MOV  CL , 10

AA2: MOV  AL , [SI]

INC  SI

OUT

40H , AL

LOOP

AA2

JMP

AA1:

CODE ENDS

5.19答:MOV

AX , 2000H

MOV DS , AX

MOV  AX , 5000H

MOV  ES , AX

MOV  SI , 1000H

MOV  DI , 8000H

MOV CX , 300

REP MOVSW

HLT

5.20答:LAE

SI,ADD1

MOV  CX,100

XOR  BX,BX

STAR:MOV

AX,[SI]

TEST

AX,8000H

JZ  JSH

INC  BL

JMP  DONE

JSH:INC BH

DONE:ADD SI,2

DEC

CX

JNZ   STAR

MOV

DD1,BL

MOV

DD2,BH

HLT

5.21答:MOV

DX , 0000H

MOV  BX , 0000H

MOV

CX , 80

LEA SI , DATAB

LEA DI , BTRX

GOON: MOV  AL ,

[SI]

CMP AL , 90

JC NEXT3

INC DH

JMP STOR

NEXT3:CMP  AL , 80

JC  NEXT4

INC DL

JMP STOR

NEXT4:CMP  AL , 70

JC  NEXT5

INC BL

JMP STOR

NEXT5:CMP  AL , 60

JC  NEXT6

INC BH

JMP STOR

NEXT6:INC  AH

STOR:INCSI

LOOP GOON

MOV[DI] ,

DH

MOV

[DI+1] , DL

MOV[DI+2] , BH

MOV[DI+3] , BL

MOV[DI+4] , AH

HLT

2)LEA

SI , DATAB

LEA

DI , LEVT

MOV

CX , 79

MOV

AL , [SI]

AA1:INC  SI

ADD  AL , [SI]

ADC

AH , 0

LOOP

AA1

MOV

BL , 80

DIV

BL

MOV

[DI] , AL

HLT

5.24答:MOV

BL,0

LEA  SI,BUF

MOV CX,0FFH

LP:MOV

AL,[SI]

CMP AL,30H

JB

TJ

CMP AL,39H

JNB

AA1

CMP AL , 41H

JB TJ

CMP AL,5AH

JA  TJ

INC  DL

JMP  DONE

AA1:INC BH

JMP  DONE

TJ:INC BL

DONE:INC SI

LOOP

LP

MOV [SI+0100H],BL

MOV [SI+0101H],BH   ;

(0~9)

MOV [SI+0102H],DL   ;(A~Z)

HLT

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值