微机原理,请大佬指点!

微机原理,请大佬指点!,第1张

设DS=0100H,

字节单元(01020H)=96H,

字节单元(01021H)=28H

MOV BX ,0020H ;BX=0020H

LEA BX ,[ BX ];BX=0020H

OR BX ,0;BX=0020H,CF=0

ADC BX ,[ BX ];BX=0020H+2896H+CF=28B6H

执行上述程序段后,

BX = 28B6H

CF = 0

OF = 0

next: in al,60h

test al,02h

jz next

这段代码是从60h端口读进数据,并测试第一位(实际是我们常说的第二位,因为计算机从0开始计数),如果是0,说明外设没有准备好,继续等待并测试,如果为1,说明外设已经准备好了,可以进行数据交换了,该程序段放在数据交换前。

《微机原理与接口技术》试题(第一套)

一、选择题(每题3分,共30分)

1.8288在8086/8088组成的计算机中的作用是( ② )。

① 数据缓冲器 ② 总线控制器 ③ 地址锁存器 ④ 提供系统时钟CLK

2.指令 MOV 0283H[BX][SI] , AX 中目标 *** 作数的寻址方式为( ② )。

① 寄存器寻址 ② 基址变址相对寻址 ③ 基址寻址 ④ 变址寻址

3.某存储单元的段基址为3806H,段内偏移地址为2A48H,该存储单元的物理地址为( ④ )。

① 4100H ② 3AA08H ③ 3B008H ④ 3AAA8H

3806

+2A48

=3AAA8H

4.某存储器芯片有地址线13根,数据线8根、该存储器芯片的存储容量为( ③ )。

① 15K×8 ② 32K×256 ③ 8K×8 ④ 32K×8

5.某存储器芯片容量为2K×1bit、若用它组成16K×8bit存储器组,所用芯片数以及用于组内寻址的地址线为( ② )。

① 32片、11根 ② 64片、14根 ③ 8片、 14根 ④ 16片、8根

6.“ADD AX,[BX+8]”的源 *** 作数在当前( ② )。

① 堆栈段 ② 数据段 ③ 代码段 ④ 程序段

7. DMAC 8237具有( ② ) 。

① 八个独立通道 ② 四个独立通道 ③ 二个独立通道 ④ 三个独立通道

DMAC8237A的主要性能:1、有4个独立的DMA通道,每个通道都充许开放或禁止DMA请求,都可以独立控制自动预置方式。2、具有三种基本的传输方式:单字节传送、数据块传送、请求传送。3、具有存储器到存储器的传送功能4、具有正常时序和压缩时序两种基本时序。5、8257A级联可扩充任意个DMA通道。6、有两种优先管理方式:固定优先级和循环优先级。7、有较高的数据传输速率。

8.可编程并行接口8255A具有( ① )

① 两个8位(A口、B口) 和两个4位(C口的高、低各4位) 并行输入输出端口。

② 两个8位(A口、C口) 和两个4位(B口的高、低各4位)并行输入输出端口。

③ 两个8位(B口、C口) 和两个4位(A口的高、低各4位) 并行输入输出端口。

④ 两个4位(A口、B口) 和一个8位(C口) 并行输入输出端口。

9.8259分别有( ③ )个 ICW和OCW。

① 2, 4 ② 4, 2 ③ 4, 3 ④ 3, 4

8259A有3个 *** 作命令字OCW1-OCW3,4个初始化命令字ICW1-ICW4。

10.8255A有3种工作方式,能工作与工作方式2的口有( ④ )。

① A口和B口 ②B口和C口 ③ B口 ④A口

二、判断题(每题2分,共10分)

1.数据总线是单向总线。( 错 )双向总线。

2.RAM是指只读存储器( 错 )RAM随机访问存储器。ROM只读存储器

3.CPU与外界交换信息的方式有两种:同步通信和异步通信。( 对 )

4.8259A具有8级优先权控制,通过级联可扩展至64级优先权控制。( 对 )

5.CPU的发展经历了4代,第三代用的是半导体管。( 错 )集成电路。

三、填空题(每空2分,共20分)

1.标志寄存器FR中下列标志位的名称以及为0和1时代表的意义分别为:

① CF :( 进位标志位;0:无进位 1:有进位);

② IF :(中断允许标志位;0:屏蔽外部的可屏蔽的中断请求;1:允许接受外部的可屏蔽的中断请求);

2.物理地址是指(存储器的实际地址,一个存储单元的物理地址是惟一);

3.微机中的ROM是( 只读存储器)。

5 CPU与接口之间传送信息的方式一般有四种,即: ( 无条件 )、( 查询式 )、( 中断方式 )、( DMA方式 )。

6 8086/8088 从总的说来有(内部)、( 外部 )两种中断。

7.总线根据其所处的位置不同,可以分为(片内总线)、(片总线)、(内总线)、(外总线)。

8.半导体存储器从使用功能上来说,可分为两类:(随机存取存储器RAM)和(只读存储器ROM)。

9.8253一个芯片上有(3)个独立的16位计数器通道,每个通道有(6)种工作方式。

10.MOV AX,1234H中源 *** 作数所使用的寻址方式为:(立即数寻址方式),MOV ES,AX源 *** 作数所采用的寻址方式:(寄存器寻址方式)。

四、简答题(每题5分,共计20分)

1.8086CPU由哪两个独立的工作单元组成它们的功能是什么

答:8086CPU由总线接口单元BIU和执行单元EU组成。其中, BIU负责与存储器接口,即8086CPU与存储器之间的信息传送,都是由BIU进行的。EU负责指令的执行

2.微机中的基本计时有哪几种?它们之间的有何关系?

答:微机中的基本计时有:指令周期;总线周期;时钟周期。一个指令周期由若干时钟周期或总线周期构成,一个基本的总线周期由四个时钟周期构成,时钟周期是最小的计时单位,它是微机主频的倒数。

3.8237在系统中起什么作用?请简述8237工作过程。

答:DMA控制作用,具有DMA请求、响应、传送和结束的管理能力。8237 工作过程分四个阶段:

(1) 请求:

(2) 响应:

(3) 传送:

(4) 结束:

4.试述中断处理过程?

答:中断处理过程为:中断请求、中断排队、中断响应、中断处理、中断返回。

五、程序分析题

在数据段中从0500H单元开始存放着100个带符号数(16位),要求把其中的正数传送至1000H开始的存储区;负数传送至1100H开始的存储区。(8分)

XOR DX,DX

MOV SI,0500H

MOV DI,1000H ;存正

MOV BX,1100H ;存负

MOV CX,100

L1:MOV AX,[SI]

TEST AX,8000H

JNZ L2 ;负转L2

MOV [DI],AX

INC DI

INC DI

JMP L3

L2: MOV [BX],AX

INC BX

INC BX

L3: INC SI

INC SI

LOOP L1

HLT

六、应用题(12分)

使用下列RAM芯片,组成所需的存储容量,各需多少RAM芯片?各需多少RAM芯片组?共需多少根寻址线?每块芯片需多少寻址线?

(1)512×4的芯片,组成8K×8的存储容量(32,16,13,9)

(2)4K×1的芯片,组成64K×8的存储容量(128,16,16,12)

(3)1K×8的芯片,组成32K×8的存储容量(32,32,15,10)

《微机原理与接口技术》试题

一、单项选择题(每小题1分,共15分)

1指令MOV AX,[3070H]中源 *** 作数的寻址方式为( )

A寄存器间接寻址

B立即寻址

C直接寻址

D变址寻址

2Reset信号有效后,8086CPU的启动地址( )

AFFFFFh

B0FFFFh

CFFFF0h

D00000h

3在8086CPU的标志寄存器中,控制标志位占( )

A3位

B9位

C4位

D16位

4堆栈的工作方式是( )

A先进先出

B随机读写

C只能读出不能写入

D后进先出

5CPU与外设间数据传送的控制方式有( )

A中断方式

B程序控制方式

CDMA方式

D以上三种都是

6设串行异步通信的数据格式是:1位停止位,7位数据位,1位校验位,1位起始位,若传输率

为2400位/秒,则每秒传输的最大字符个数为( )

A10个

B110个

C120个

D240个

7CPU与I/O设备间传送的信号有( )

A控制信息

B状态信息

C数据信息

D以上三种都有

8若传送率为1200,波特率因子n=16,则收、发时钟(RxCTxC)的频率为( )

A1MHz

B192KHz

C20KHz

D2400Hz

9在DMA方式下,外设数据输入到内存的路径是( )

A外设→CPU→DMAC→内存

B外设→DMAC→内存

C外设→存储器

D外设→数据总线→存储器

108255A中即可以作数据输入、输出端口,又可提供控制信息、状态信号的端口是( )

AB口

BA口

CC口

D以上三个端口均可以

118251A的方式控制字(即模式字)的作用是( )

A决定8251的数据格式

B决定8251的数据格式和传送方向

C决定8251何时收发

D以上都不对

12在数据传输率相同的情况下,同步字符串送的速度高于异步字符传输,其原因是( )

A字符间无间隔

B双方通信同步

C发生错误的概率少

D附加位信息总量少

13采用高速缓存的目的是( )

A提高主存速度

B提高总线传输率

C使CPU全速运行

D扩大可寻址空间

14CPU响应中断请求和响应DMA请求的本质区别是( )

A程序控制

B需要CPU干预

C响应中断时CPU仍控制总线而响应DMA时,让出总线

D速度快

15用三片8259A级数是( )

A24级

B22级

C23级

D21级

二、填空题(每空1分,共20分)

1微型计算机由______________________________________四部分组成。

28086CPU的9个标志位中,属状态标志的有______________________。

3总线周期是指_____________________________________。

4当_______________________________________________时,CPU便进入等待状态(Tw)

5当一个系统中包含的外设接口较多时,数据总线上需要有________________________

______以增强驱动能力。

6Reset信号到来后,8086CPU的特征是__________________________________________

7总线读 *** 作是指____________________________________。

8软件中断服务程序的入口地址是由__________________________产生的。

9串行通信数据传送的方向有___________________________三种。

10DMA控制器的基本组成包括___________________________。

11对8251A初始化时必须按照___________________________________的次序进行。

128259A的初始化命令字包括____________________________,其中________________

_是必须设置的。

13中断类型码为的中断向量一定存放在_____________个连续单元中,若其入口地址为

3040:2010,则这四个单元中的具体内容依次为________________________________________

148253芯片内包含有____个独立的计数通道,它有______种工作方式,若输入时钟CLK

1=1MHz,计数初值为500,BCD码计数方式,OUT1输出为方波,则初始化时该通道的控制字应为

___________________________________。

15用2k×8的SRAM芯片组成16K×16的存储器,共需SRAM芯片_______________片,片内

地址和产生片选信号的地址分别为___________________位。

三、名词解释(每小题3分,共15分)

1Cache

2中断向量

3总线主模块

4全双工

5堆栈

四、简答题(共25分)

1总线标准化的目的是什么?涉及哪些内容?列举1-2个标准系统总线。(5分)

2某系统中有一片8253,其四个端口地址为310H,312H,314H,316H,计数脉冲频率为

1MHz、BCD码计数,试编写输出频率为2KHz方波的初始化程序。(5分)

3在一个8086CPU和单片8259A组成的系统中,试说明:

(1)8086CPU在响应可屏蔽中断的条件是什么?

(2)8086CPU在响应中断过程中,连续执行两个INTA周期,其作用是?

(3)假如8259A已被编程,ICW2=0AH,若连接在8259A的IR3端的外设提出中断申请,它的

中断向量的存放地址是什么?(15分)

五、简单应用题(共25分)

1图1所示为某微机系统中用74LS138译码器产生各I/O接口新片的片选信号的电路,试指

出与Y1,Y3连接的芯片的端口地址范围。(5分)

2数/模(D/A)转换接口电路如图2所示,设8255A的端口地址为300H-303H,C口的工作于

方式0,试编写能从Vout端产生连续三角波的程序,程序应加适当注释。(10分)

3利用8251A实现与外设串行通信的控制程序如下,其中8251A的控制/状态口地址为2F

9H,数据口地址为2F8H,41H为字符A的ASCII码,要求:(10分)

(1)阅读此程序,加上适当注释并说明程序实现的功能;

(2)指出CPU与8251A见数据传送的控制方式。

START: MOV DX,2F9H

MOV AL,74H

OUT DX,AL

MOV AL,11H

OUT DX,AL

L1: MOV DX,2F9H

IN AL,DX

AND AL,01H

JZ L1

MOV DX,2F8H

MOV AL,41H

OUT DX,AL

HLT

18086 CPU通过______________寄存器和______________寄存器能准确找到指令代码。

28086中地址/数据线分时复用,为保证总线周期内地址稳定,应配置___________,为提高总线驱动能力,应配置_____________。

3类型码为_____________的中断所对应的中断向量存放在0000H:0058H开始的4个连续单元中,若这4个单元的内容分别为_________________,则相应的中断服务程序入口地址为5060H:7080H。

4CPU在指令的最后一个时钟周期检测INTR引脚,若测得INTR为___________且IF为_____________,则CPU在结束当前指令后响应中断请求。

5设8251A工作于异步方式,收发时钟频率为384KHz,波特率为2400。数据格式为7位数据位,1位停止位,偶校验,则8251A的方式字为_______________。

6CPU从I/O接口中的_____________获取外设的“准备就绪”或“忙/闲”状态信息。

7SRAM靠_____________存储信息,DRAM靠_____________存储信息,为保证DRAM中内容不丢失,需要进行_________________ *** 作。

8当存储器的读出时间大于CPU所要求的时间,为保证CPU与存储器的周期配合,就需要用____________信号,使CPU插入一个_____________状态。

9CPU响应可屏蔽中断的条件是_______________、______________、_______________。

108255A工作于方式1输入时,通过____________信号表示端口已准备好向CPU输入数据。

11设8253的计数器用于对外部事件记数,计满100后输出一跳变信号,若按BCD方式计数,则写入计数初值的指令为MOV AL,__________________和OUT PORT,AL。

12总线按其作用和位置可分为__________、___________、___________和___________四种,RS-232C属于__________总线。

13中断控制器8259A中的中断屏蔽寄存器IMR的作用是____________________。

14DMA控制器的传送方式有__________、___________、__________和_________四种。

二、单项选择题(每小题1分,共15分)

15将微处理器、内存储器及I/O接口连接起来的总线是( )

A片总线 B外总线

C系统总线 D局部总线

16连续启动两次独立的存储器 *** 作之间的最小间隔叫( )

A存取时间 B读周期

C写周期 D存取周期

17连接到64000h-6FFFFh地址范围上的存储器是用8k×8 RAM芯片构成的,该芯片要______片。( )

A8片 B6片

C10片 D12片

18RESET信号有效后,8086 CPU执行的第一条指令地址为( )

A00000H BFFFFFH

CFFFF0H D0FFFFH

19要管理64级可屏蔽中断,需要级联的8259A芯片数为( )

A4片 B8片

C10片 D9片

20异步串行通信中,收发双方必须保持( )

A收发时钟相同 B停止位相同

C数据格式和波特率相同 D以上都正确

218253作为定时器和计数器时( )

A使用的计数方式相同 B工作方式不同

C实质相同 D输出定时信号不同

22对可编程接口芯片进行读/写 *** 作的必要条件是( )

ARD=0 BWR=0

CRD=0或WR=0 DCS=0

23在DMA方式下,CPU与总线的关系是( )

A只能控制地址总线 B相互成隔离状态

C只能控制数据线 D相互成短接状态

24当8255A工作在方式1输出时,通知外设将数据取走的信号是( )

AACK BINTE

COBF DIBF

25在数据传输率相同的情况下,同步传输率高于异步传输速率的原因是( )

A附加的冗余信息量少 B发生错误的概率小

C字符或组成传送,间隔少 D由于采用CRC循环码校验

26异步传送中,CPU了解8251A是否接收好一个字符数据的方法是( )

ACPU响应8251A的中断请求 BCPU通过查询请求信号RTS

CCPU通过程序查询RxD接收线状态 DCPU通过程序查询RxRDY信号状态

27对存储器访问时,地址线有效和数据线有效的时间关系应该是( )

A数据线较先有效 B二者同时有效

C地址线较先有效 D同时高电平

288255A引脚信号WR=0,CS=0,A1=1,A0=1时,表示( )

ACPU向数据口写数据 BCPU向控制口送控制字

CCPU读8255A控制口 D无效 *** 作

298253的计数器的最大计数初值是( )

A65536 BFFFFH

CFFF0H D0000H三、名词解释(每小题2分,共10分)

30总线周期

31动态刷新

32波特率

33总线仲裁

34USB四、简答题(每小题4分,共16分)

35简述CPU与外设间数据传送的控制方式有哪几种?各自的优缺点?

36简述8259A配合CPU完成哪些主要任务,其内部的中断服务寄存器的作用?

37某存储器片选译码电路与地址线和数据线的连接如图所示。

(1)写出该译码电路最多可配置多少KB的容量范围?

(2)写出该译码器每个输出(y0-y7)线可配置多少KB的容量范围。

(3)若A15已设定为高有效(A15=1),A15应如何与G2a相连接。

38当8253的定时值超过最大值时应如何处理?写出两种实现方案。

五、简单应用题(本题共32分)

39用DAC0832与8086CPU直接相连设计一D/A转换电路,并编程使之产生呈负向增长的锯齿波,并且锯齿波周期可调,DAC0832的口地址为300H。(10分)

40设8251A工作于异步方式,波特率为2400,收发时钟频率为1536KHz,异步数据格式为:7位数据位、1位停止位、偶校验,允许接收,允许发送,错误标志复位,试编写8251A的初始化程序和以查询方式从8251A接收100个字符存入首地址为3000H的数据区的数据接收程序段。主要语句应加注释,8251A口地址为200H,201H(12分)

41(10分)用8255A作打印机接口的硬件连接和驱动程序如下所示,8255A的入口地址为80H-83H,阅读此程序回答下列问题:

(1)所采用的数据控制方式?

(2)所传送的字节数?

(3)8255A的工作方式?

MOV AL,081H

OUT 083H,AL

MOV BX,3000H

MOV CX,64H

MOV AL,0DH

OUT 083H,AL

STT: IN AL,082H

AND AL,08H

JNZ STT

MOV AL,[BX]

OUT 080H,AL

MOV AL,0CH

OUT 083H,AL

NOP

NOP

MOV AL,0DH

OUT 083H,AL

INC BX

DEX CX

JNZ STT

HLT六、计算题(每小题4分,共12分)

428253的计数器2工作于方式2,其计数时钟CLK2,为100KHz,输出信号OUT2作定时中断申请,定时间隔为8ms,试计算其计数初值N?

43若8251A的异步方式字为7AH,则发送的字符格式如何?为使接收和发送的波特率分别为600b/s和2400b/s,则收发时钟(RxC和TxC)的频率分别应为多少。

44一个具有14位地址8位数据线的存储器,能存储多少字节数据,若由8k×4的芯片组成,共需多少芯片?

data segment //数据段定义

x db 4

y db 3

z db

data ends //数据段结束

code segment //代码段

assume cs:code,ds:data //代码段对应cs栈,数据段对应ds栈

start: mov ax,data //数据段的偏移地址送ax

mov ds,ax //ax中存放的数据段偏移地址送到ds栈,可理解为同步

mov al,x //数据x送入AX低8位寄存器AL

add al,y //数据y和数据x相加后覆盖AX低8位寄存器AL中的内容

mov z,al //相加结果赋值给z

add z,30h //结果z加上30H(转化成ASCII码)

mov dl,z //调用DOS中断在屏幕上显示

mov ah,2

int 21h

mov ah,4ch

int 21h

code ends //代码结束

end start

为什么指令add z,30h能实现将结果转换成ASC码?

答:这个你要看ASCII码表,注意到数字那一栏,0的ASCII码是30H,1是31H,依此类推。

ADD和ADC均为加法指令,功能有什么区别?

答:ADD是不带进位将两者相加,ADC是带进位相加。具体还是自己做做实验。

微机原理一定要动手实验,理解各个指令的作用,相同和不同。才能学好。光听老师讲,死记硬背没有用。

1、用寄存器BX和位移量COUNT的寄存器相对寻址方式,把存储器中的一个字与AX寄存器之内容相加,并把结果保存在存储器单元中。

解:ADD AX , [BX+COUNT]

MOV [BX+COUNT] , AX

2、将AX寄存器的内容减去CX寄存器的内容,并把结果保存在AX寄存器中。

解:SUB AX ,CX

3、下列程序的功能是:利用DOS的功能调用,显示一串字符;通过填空将下列程序补充完整。

STACK SEGMENT SYACK

DB 256 DUP ()

TOP LABEL WORD

(STACK ENDS )

DATA SEGMENT

BUF DB ‘ I WISH YOU SUCCESS! $ ‘

DATA ENDS

CODE SEGEMENT

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

START: MOV AX,( DATA )

MOV DS,( AX )

MOV AX,( STACK )

MOV SS,AX

LEA SP, TOP

LEA DX,( BUF )

MOV AH,9

INT ( 21H )

(MOV AH, 4CH )

INT 21H

CODE ENDS

END START

;  微机原理程序汇编语言,鸡兔同笼  H   F

;  x+y=h

;  2x+4y=f

;  y = (f-2h)/2 = f/2-h

;  x = h-y = 2h-f/2

        CODE  SEGMENT

              ASSUME    CS:CODE

           H  DW        

           F  DW        

           X  DW        

           Y  DW        

         MSG  DB        'please input H,F=$'

        MSG2  DB        'chicken,rabbit=$'

        

      START:  PUSH      CS

              POP       DS

              PUSH      CS

              POP       ES

              LEA       DX,MSG

              MOV       AH,9

              INT       21H

              CALL      INPUTNUM

              CALL      LFCR

              MOV       AX,WORD PTR ARRAY

              MOV       H,AX

              MOV       AX,WORD PTR ARRAY+2

              MOV       F,AX

              SHR       F,1

              JC        START       ; 不能整除转

              MOV       AX,F

              SUB       AX,H

              JS        START       ; 不够相减转

              MOV       Y,AX

              MOV       AX,H

              SHL       AX,1

              SUB       AX,F

              JS        START       ; 不够相减转

              MOV       X,AX

              LEA       DX,MSG2

              MOV       AH,9

              INT       21H

              MOV       AX,X

              CALL      DSPAX

              MOV       AX,Y

              CALL      DSPAX

              MOV       AH,4CH

              INT       21H

;===============================================

;  键盘输入数值数组子程序(数组名为array,元素个数存放在num中)

    INPUTNUM  PROC      NEAR

              PUSH      AX

              PUSH      BX

              PUSH      CX

              PUSH      DX

              PUSH      SI

              PUSH      DI

              PUSH      BP

              PUSHF

    ; 输入的数据以一个空格分隔,以回车符结束输入

              LEA       DI,CS:ARRAY

              MOV       WORD PTR CS:NUM,0

       STIN:

              MOV       AX,0

              PUSH      AX

     AGAIN1:

              MOV       AH,0CH

              MOV       AL,1

              INT       21H

              MOV       BYTE PTR CS:CHAR,AL

              CMP       AL,13

              JE        LINE0

              CMP       AL,' '

              JE        LINE0

              SUB       AL,30H

              MOV       AH,0

              MOV       SI,AX

              POP       AX

              MOV       CL,10

              MOV       CH,0

              MUL       CX

              ADD       AX,SI

              PUSH      AX

              JMP       AGAIN1

      LINE0:

              POP       AX

              MOV       WORD PTR CS:[DI],AX

              INC       WORD PTR CS:NUM

              CMP       BYTE PTR CS:CHAR,13

              JE        STINEND

              INC       DI

              INC       DI

              JMP       STIN

    STINEND:

              POPF

              POP       BP

              POP       DI

              POP       SI

              POP       DX

              POP       CX

              POP       BX

              POP       AX

              RET

       ARRAY  DW        200 DUP(0)

         NUM  DW        0

        CHAR  DB        

    INPUTNUM  ENDP

;=====================================

      DSPAXS  PROC      NEAR

              PUSH      AX

              TEST      AX,8000H

              JNS       @DSPAXS1

              PUSH      AX

              PUSH      DX

              MOV       AH,2

              MOV       DL,'-'

              INT       21H

              POP       DX

              POP       AX

              NEG       AX

   @DSPAXS1:

              CALL      DSPAX

              POP       AX

              RET

      DSPAXS  ENDP

;===================================

       DSPAX  PROC      NEAR

              PUSH      AX

              PUSH      BX

              PUSH      CX

              PUSH      DX

              PUSHF

              XOR       CX,CX

              MOV       BX,10

    @DSPAX1:

              XOR       DX,DX

              DIV       BX

              INC       CX

              OR        DX,30H

              PUSH      DX

              CMP       AX,0

              JNE       @DSPAX1

              MOV       AH,2

   @DISPAX2:

              POP       DX

              INT       21H

              LOOP      @DISPAX2

              POPF

              MOV       DL,32

              INT       21H

              POP       DX

              POP       CX

              POP       BX

              POP       AX

              RET

       DSPAX  ENDP

;===================================  

        LFCR  PROC      NEAR

              PUSH      AX

              PUSH      DX

              MOV       AH,2

              MOV       DL,13

              INT       21H

              MOV       DL,10

              INT       21H

              POP       DX

              POP       AX

              RET

        LFCR  ENDP

;=====================================                    

        CODE  ENDS

              END       START

DATA SEGMENT ;定义数据段

BUF DB -3,1,2 ;定义变量

BUF1 DB 1000 DUP() ;预留1000字节的空间

DATA ENDS ;数据段定义结束

CODE SEGMENT ;定义代码段

ASSUME CS:CODE,DS:DATA ;段寄存器关联说明

START: ;代码段第一条指令从这里开始

MOV AX,DATA ;数据段段址→ax

MOV DS,AX ;ax→ds,给数据段段寄存器赋值

LEA SI,BUF ;变量BUF有效地址→SI

MOV CX,1000 ;变量BUF元素个数→CX

MOV AX,[SI] ;变量BUF的第一个字数据→AX

LP: CMP AL,0 ;AL<0?

JL NEXT ;是,转NEXT处执行

INC SI ;变量BUF元素地址增1

DEC CL ;CL-1→CL

JNZ LP ;CL不等于0,转LP处执行循环体

NEXT: MOV BUF1,AL ;AL送变量BUF1保存

MOV AH,4CH ;结束程序

INT 21H ;dos功能调用

CODE ENDS ;代码段定义结束

END START ;编译到此结束

程序段功能: 从变量BUF的1000个有符号字节数种找到第一个负数,把这个负数存于BUF1单元。

从程序段来看,这段程序的编者必是初学汇编语言。提两点建议:

1、有一处错误:

DEC CL

从程序功能来看,此处必须要用:

DEC CX

因为你要从1000个有符号字节数中找出第一个负数,而8位计数器CL能存的最大无符号数是255,那么用指令:

DEC CL

实际上是只从前255个元素中查找,而漏掉了后面的745个元素。如果前255个元素中没有负数,执行结果必然是错误的。

2、Intel 8086/8088体系结构的内存管理是分段式的,教科书及老师都习惯于这种模式,这是正确的。但我们作为初学,只是练习,无论是数据量还是代码量,都很有限,没有必要分这个段、那个段的,完全可以在一个段里进行,即把DS、ES及SS,统统地设置成与代码段同段。下面,以另一种方式来实现这个功能,仅供参考。

CODE SEGMENT

ASSUME CS:CODE,DS:CODE,ES:CODE

BUF DB -3,1,2

Element equ ($-BUF)/type BUF ;元素个数

BUF1 DB

START:push cs

pop ds

push cs

pop es

lea si,BUF

mov cx,Elements

LP: lodsb

cmp al,0

jl $+4

loop LP

MOV BUF1,AL

MOV AH,4CH

INT 21H

CODE ENDS

END START

不知道对楼主有没有用。。。。

以上就是关于微机原理,请大佬指点!全部的内容,包括:微机原理,请大佬指点!、微机原理中 读端口的指令、求份微机原理与接口技术的试题(含答案)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10219891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存