微机原理习题与实验-F 下载本文

STOP:

MOV CX,200 ;(CX)←串长度 CLD ;(DF)=0,使地址指针按增量方向修改 REPE CMPSB ;若相等则重复比较 AND CX,0FFFFH ;检查(CX)是否等于零 JZ STOP ;(CX)=0则转STOP DEC SI ;(SI)-1,指向不相等单元 MOV BX,SI ;(BX)←不相等单元的地址 MOV AL,[SI] ;(AL)←不相等单元的内容 MOV AH,4CH INT 21H

CODE ENDS

END START 19. 编程,在内存的数据段中存放了100个8位带符号数,其首地址为TABLE,

试统计其中正元素、负元素、和零元素的个数,并分别将个数存入PLUS,MINUS,ZERO等3个单元中;

解:DATA SEGMENT

TABLE DB 100DUP(?) DATA ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA

MOV DS,AX XOR AL,AL

MOV PLUS,AL MOV MINUS,AL MOV ZERO,AL LEA SI,TABLE MOV CX,100 CLD CHECK:LODSB OR AL,AL JS X1 JZ X2 INC PLUS JMP NEXT

X1: INC MINUS JMP NEXT

X2: INC ZERO NEXT: LOOP CHECK

MOV AH,4CH INT 21H CODE ENDS

END START

20. 编程,在数据段DATA1开始的80个连续的存储单元中,存放80位同学某门

课程的考试成绩(0~100)。编写程序统计成绩≥90分的人数,80~89分的人数,70~79分的人数,60~69分以及<60分的人数。将结果存放到DATA2开始的存储单元中。

解:DATA SEGMENT

DATA1 DB 80 DUP(?) ;假定学生成绩已放入这80个单元中 DATA2 DB 5 DUP(0) ;统计结果的存放单元 DATA ENDS

CODE SEGMENT

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

MOV CX,80 ;统计80个学生的成绩

LEA SI,DATA1 LEA DI,DATA2

AGAIN: MOV AL,[SI] CMP AL,90 ;与90比较

JC NEXT1 ;小于90分,转NEXT1 INC BYTE PTR [DI] ;否则90分以上的人数加1 JMP STO ;转循环控制处理 NEXT1: CMP AL,80 ;与80比较 JC NEXT2 ;小于80分,转NEXT2

INC BYTE PTR[DI+1] ;否则80分以上的人数加1 JMP STO

NEXT2: CMP AL,70 ;与70比较 JC NEXT3 ;小于70分,转NEXT3 INC BYTE PTR [DI+2] ;否则70分以上的人数加1

JMP STO

NEXT3: CMP AL,60 ;与60比较 JC NEXT4 ;小于60分,转NEXT4

INC BYTE PTR [DI+3] ;否则60分以上的人数加1 JMP STO ;转循环控制处理 NEXT4 NEXT4: INC BYTE PTR [DI+4] ;60分以下的人数加1 STO: INC SI ;指向下一个学生成绩 LOOP AGAIN ;循环,直到所有成绩都统计完 MOV AH,4CH ;返回DOS INT 21H CODE ENDS

END START

4.3 汇编语言程序设计实验

说明:本书介绍的所有实验都是在“LAB8000改进型伟福通用微控制器仿真实验系统”上完成的。

实验1 显示字符实验

一、实验目的

通过实验掌握下列知识:

1. 了解汇编语言程序的运行环境和所需的系统程序;

2. 熟悉在宏汇编程序MASM环境下,对源程序进行编辑、汇编、连接、运行。

3. 掌握常用的DEBUG命令。进一步熟练用DEBUG对源程序进行动态调试,掌握一些常用的调试命令和方法。

二、实验内容

在屏幕上显示一条'THIS IS A SAMPLE PROGRAM OF KEYBOARD AND DISPLAY'提示信息,如从键盘上输入ESC键,则结束程序,如输入的是小写字母,则在显示器上显示出来,如输入的是大写字母,则转换为小写字母输出。

三、实验步骤

实验软件环境: 编辑程序 EDIT或其它编辑程序

汇编程序 MASM.EXE 6.1X 连接程序 LINK.EXE 调试程序 DEBUG.COM 实验步骤:

1. 用文字编辑工具(常用EDIT或记事本)将源程序输入,保存时注意其扩展名应为.ASM,

文件应该存储在宏汇编程序MASM的路径下,文件名采用8.3结构,不能包含汉字。 2. 用宏汇编程序MASM对源文件进行汇编,产生.OBJ文件和.LST文件。若汇编时提示有错,

用文字编辑工具修改源程序后重新汇编,直至通过。设第一步中在磁盘上已建立了一个EXAMPLE.ASM源程序,操作如下所示: C:>MASM↙

Microsoft (R) Macro Assembler Version 5.00

Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved. Source filename [.ASM]:EXAMPLE↙ Object filename [EXAMPLE.OBJ]: ↙ Source listing [NUL.LST]:EXAMPLE↙ Cross reference [NUL.CRF]:EXAMPLE↙ Warning Severe Errors Errors 0 0 C:>

汇编程序MASM需要和用户进行上述相关信息交互,以便进行汇编、生成相应的文件。包括:

? 提示用户输入需要汇编的源程序名;

? 提示用户输入要建立的目标文件名,若采用默认文件名,则可直接按回车; ? 询问用户是否要建立汇编列表文件,若要,则打入文件名,否则按回车; ? 询问用户是否要建立交叉索引文件,若要,则打入文件名,否则按回车。 注意:

仅当屏幕上显示无错误时(警告错误为“0”,严重错误为“0”),才可进行下一步操作,否则要根据提供源程序的错误行号和错误性质,重新对源程序进行修改、编辑和汇编。 3. 查看.LST文件。

4. 用LINK将.OBJ文件连接成可执行的.EXE文件。

在DOS提示符下,打入LINK命令,对目标文件进行连接,产生可执行的EXE文件。操作如下所示:

C:> LINK

Microsoft (R) Overlay Linker Version 3.60

Copyright (C) Microsoft Corp 1983-1987. All rights reserved. Object Modules [.OBJ]: EXAMPLE↙ Run File [EXAMPLE.EXE]: ↙ List File [NUL.MAP]: ↙ Libraries [.LIB]: ↙ Warning: No STACK segment There was 1 error detected. C:>

连接程序Link需要和用户进行上述相关信息交互,以便连接和生成相应的文件。包括:

? 提示用户输入需要连接的目标模块名;

? 提示用户输入要建立的可执行文件名,若采用默认文件名,则直接按回车; ? 询问用户是否要建立地址分配文件,若要,则打入文件名,否则按回车; ? 询问用户是否用到库文件,如果用户自己建立了库文件,则键入库文件名,

否则按回车。

连接程序在连接过程发现有错,则会显示出错信息,用户应重新调用编辑程序对源程序进行修改,然后重新汇编、连接、直至无错。但连接程序给出的无堆栈段的警告性错误并不影响程序的执行,所以,到此为止,连接过程已经结束,生成了有效的可执行程序。 5. 在命令窗口下运行.EXE文件。即在屏幕上显示标题并提示你按键。每按一键在屏幕上显

示二个相同的字符,但大写字母被改成小写。按ESC键可返回系统。若未出现预期结果,用DEBUG检查调试程序。

使用“LAB8000改进型伟福通用微控制器仿真实验系统”完成实验的步骤:

1. 打开伟福软件模拟器,如图4-2所示。