汇编语言实验报告
发布时间:2024-11-06
发布时间:2024-11-06
中南大学
汇编语言课程设计
实验报告
学生姓名 学 号 指导教师 学 院 信息科学与工程学院 专业班级 完成时间
实验一 建立汇编语言的工作环境
1、建立M文件:为了说明汇编语言程序上机运行过程,先举例如下:请把字母a的字符串从源缓冲区传送到目的缓冲区,可以用编辑程序在磁盘上建立如下源程序EX_MOVS.ASM,源程序如下:
data segment
source_buffer db 40 dup(‘a’)
data ends
extra segment
dest_buffer db 40 dup(?) extra ends code segment main proc far
assume cs:code,ds:data,es:extra start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov ax,extra mov es,ax
lea si,source_buffer lea di,source_buffer cld
mov cx,40 rep movsb ret main endp code ends end start
2、用MASM程序产生OBJ文件:源文件建立后,就要用汇编程序对源文件汇编,汇编后产生二进制的目标文件,其操作与汇编如图所示:
3、用LINK程序产生EXE文件:其操作与汇编如下图所示:
4、程序的执行:在建立了EXE文件之后,就可以直接从DOS执行程序,程序运行结束并返回DOS,执行如下所示: C>EX_MOVS C>
但是,程序并未显示出结果,则可通过DEBUG命令A显示其结果。
实验二 熟悉使用DEBUG的简单命令
1、基本命令:
2、加法和带进位加法:
3、减法和带借位减法:
4、证乘法和除法:
5、堆栈操作指令:
6、在显示器上显示字符“$”:
实验三 汇编程序运行软件练习
1、例:习题5.19的源程序运行,说明该程序没有语法编写方面的错误,是否能完成题目要求的功能还须进一步检查程序的每一步运行结果情况,如下图所示:
2、例题:习题3.28 下列程序段执行完后,BX寄存器的内容是什么?
MOV CL, 3
MOV BX, 0B7H ROL BX,1 ROR BX, CL
程序运行结果如下图所示,由此可看出(BX)=0C02DH。
3、例题:3.18 已知程序段如下:
MOV AX, 1234H ;(AX)=1234H,标志位不变 MOV CL, 4 ;(AX)和标志位都不变
ROL AX, CL ;(AX)=2341H,CF=1,SF和ZF不变 DEC AX ;(AX)=2340H,CF=1不变,SF=0,ZF=0 MOV CX, 4 ;(AX)和标志位都不变 MUL CX ;(AX)=8D00H,CF=OF=0 INT 20H
程序运行结果如下图所示,由此可看出程序段执行后AX寄存器里的内容为(AX)=8D00H,(DX)=0。
4、例题:下列程序段中的每条指令执行完后,AX寄存器及CF、SF、ZF和OF的内容是什么?
MOV AX, 0 ;(AX)=0,标志位不变
DEC AX ;(AX)=0FFFFH,CF不变,SF=1,ZF=0,OF=0 ADD AX, 7FFFH ;(AX)=7FFEH,CF=1,SF=0,ZF=0,OF=0 ADD AX, 2 ;(AX)=8000H,CF=0,SF=1,ZF=0,OF=1 NOT AX ;(AX)=7FFFH,标志位不变
SUB AX, 0FFFFH ;(AX)=8000H,CF=1,SF=1,ZF=0,OF=1 ADD AX, 8000H ;(AX)=0,CF=1,SF=0,ZF=1,OF=1
SUB AX, 1 ;(AX)=0FFFFH,CF=1,SF=1,ZF=0,OF=0 AND AX, 58D1H ;(AX)=58D1H,CF=0,SF=0,ZF=0,OF=0 SAL AX, 1 ;(AX)=0B1A2H,CF=0,SF=1,ZF=0,OF=1 SAR AX, 1 ;(AX)=0D8D1H,CF=0,SF=1,ZF=0,OF=0 NEG AX ;(AX)= 272FH,CF=1,SF=0,ZF=0,OF=0 ROR AX, 1 ;(AX)= 9397H,CF=1,SF和ZF不变,OF=1 程序运行结果如下图所示,可单步运行查看每条指令执行完后寄存器AX的内容,由此可看出程序段执行后 (AX)=9397H。
实验四 对教材书习题第五章实现汇编
5.16、在首地址为DATA的字数组中存放着100H个16位补码数,试编写一个程序求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均
值,将结果放在BX寄存器中。 答:程序如下:
DATA SEGMENT
DATA DW100H DUP (?)
DATA ENDS CSEG SEGMENT MAIN PROC FAR
ASSUME CS: CSEG, DS: DSEG START:PUSH DS;设置返回DOS SUB AX, AX
PUSH AX
MOV AX, DSEG
MOV DS, AX;给DS赋值
BEGIN:MOV CX, 100H;循环计数器 MOV SI, 0
MOV BX, 0;和((DI),(BX))的初始值 MOV DI, 0
NEXT:MOV AX, DATA [SI] CWD
ADD BX, AX;求和
ADC DI, DX;加上进位位
ADD SI, 2 LOOP NEXT
MOV DX, DI;将((DI),(BX))中的累加和放入((DX),(AX))中 MOV AX, BX
MOV CX, 100H
IDIV CX;带符号数求平均值,放入(AX)中 MOV BX, 0 MOV SI, 0
COMP:CMP AX, DATA [SI];寻找小于平均值的数 JLENO
INC BX;小于平均值数的个数+1 NO:ADD SI, 2 LOOP COMP
RET
MAIN ENDP
CSEG ENDS;以上定义代码段 END START
5.19 已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一程序把既在A中又在B中出现的整数存放于数组C中。 答:程序如下:
DSEG SEGMENT A DW 15 DUP (?) B DW 20 DUP (?)
C DW 15 DUP (‘ ’)
DSEG ENDS
;-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR
ASSUME CS: CSEG, DS: DSEG START:PUSH DS;设置返回DOS SUB AX, AX PUSH AX
MOV AX, DSEG
MOV DS, AX;给DS赋值 BEGIN:MOV SI, 0
MOV BX, 0
MOV CX, 15;外循环计数器 LOOP1:PUSH CX
MOV CX, 20;内循环计数器
MOV DI, 0
MOV AX, A [SI];取A数组中的一个数
LOOP2:CMP B [DI], AX;和B数组中的数相等吗? JNE NO
MOV C [BX], AX;相等存入C数组中 ADD BX, 2 NO:ADD DI, 2 LOOP LOOP2 ADD SI, 2 POP CX
LOOP LOOP1 RET
MAIN ENDP CSEG ENDS
END START
5.21 试编写一程序,要求比较数组ARRAY中的三个16位补码数,并根据比较结果在终端上显示如下信息: (1) 如果三个数都不相等则显示0;
(2) 如果三个数有二个数相等则显示1; (3) 如果三个数都相等则显示2。
答:DSEG SEGMENT
ARRAY DW3 DUP (?) DSEG ENDS CSEG SEGMENT MAIN PROC FAR ASSUME CS: CSEG, DS: DSEG START:PUSH DS;设置返回DOS SUB AX, AX
PUSH AX
MOV AX, DSEG
MOV DS, AX;给DS赋值
BEGIN:LEA SI, ARRAY
MOV DX, 0;(DX)用于存放所求的结果 MOV AX, [SI]
MOV BX, [SI+2]
CMP AX, BX;比较第一和第二两个数是否相等 JNE NEXT1
INC DX
NEXT1:CMP [SI+4], AX;比较第一和第三两个数是否相等 JNE NEXT2
INC DX
NEXT2:CMP [SI+4], BX;比较第二和第三两个数是否相等 JNE NUM INC DX
NUM:CMP DX, 3 JL DISP DEC DX
DISP:ADD DL, 30H;转换为ASCII码 MOV AH, 2;显示一个字符 INT 21H RET
MAIN ENDP
CSEG ENDS;以上定义代码段 END START
实验五 对教材书习题第三章实现汇编
3.18 已知程序段如下:
MOV AX, 1234H;(AX)=1234H,标志位不变 MOV CL, 4;(AX)和标志位都不变
ROL AX, CL;(AX)=2341H,CF=1,SF和ZF不变 DEC AX;(AX)=2340H,CF=1不变,SF=0,ZF=0 MOV CX, 4;(AX)和标志位都不变
MUL CX;(AX)=8D00H,CF=OF=0,其它标志无定义 INT 20H
试问:
(1) 每条指令执行完后,AX寄存器的内容是什么?
(2) 每条指令执行完后,进位、符号和零标志的值是什么? (3) 程序结束时,AX和DX的内容是什么? 答:(1)、(2)见注释;
(3) (AX)=8D00H,(DX)=0
3.19 下列程序段中的每条指令执行完后,AX寄存器及CF、SF、ZF和OF的内容是什么?
MOV AX, 0 ;(AX)=0,标志位不变
DEC AX ;(AX)=0FFFFH,CF不变,SF=1,ZF=0,OF=0 ADD AX, 7FFFH ;(AX)=7FFEH,CF=1,SF=0,ZF=0,OF=0 ADD AX, 2 ;(AX)=8000H,CF=0,SF=1,ZF=0,OF=1 NOT AX ;(AX)=7FFFH,标志位不变
SUB AX, 0FFFFH ;(AX)=8000H,CF=1,SF=1,ZF=0,OF=1 ADD AX, 8000H ;(AX)=0,CF=1,SF=0,ZF=1,OF=1 SUB AX, 1 ;(AX)=0FFFFH,CF=1,SF=1,ZF=0,OF=0 AND AX, 58D1H ;(AX)=58D1H,CF=0,SF=0,ZF=0,OF=0 SAL AX, 1 ;(AX)=0B1A2H,CF=0,SF=1,ZF=0,OF=1 SAR AX, 1 ;(AX)=0D8D1H,CF=0,SF=1,ZF=0,OF=0 NEG AX ;(AX)= 272FH,CF=1,SF=0,ZF=0,OF=0 ROR AX, 1 ;(AX)= 9397H,CF=1,SF和ZF不变,OF=1
3.26 试分析下面的程序段完成什么功能?
MOV CL, 04 SHL DX, CL MOV BL, AH SHL AX, CL SHR BL, CL OR DL, BL
答:本程序段将((DX),(AX)) 的双字同时左移4位,即将此双字乘以10H (16)。
3.28 下列程序段执行完后,BX寄存器的内容是什么?
MOV CL, 3
MOV BX, 0B7H ROL BX,1
ROR BX, CL
答:(BX)=0C02DH。
3.35 指令CMP AX, BX后面跟着一条格式为J…L1的条件转移指令,其中…可以是B、NB、BE、NBE、L、NL、LE、NLE中的任意一个。如果AX和BX的内容给定如下:
AX BX (1) 1F52H 1F52H (2) 88C9H 88C9H (3) FF82H 007EH (4) 58BAH 020EH (5) FFC5H FF8BH
问以上8条转移指令中的哪几条将引起转移到L1?
答:(1) JNB、JBE、JNL、JLE
(2) JNB、JBE、JNL、JLE (3) JNB、JNBE、JL、JLE (4) JNB、JNBE、JNL、JNLE (5) JNB、JNBE、JL、JLE
3.38 在下列程序的括号中分别填入如下指令:
(1) LOOP L20 (2) LOOPEL20 (3) LOOPNEL20
试说明在三种情况下,当程序执行完后,AX、BX、 CX、DX四个寄存器的内容分别是什么?
TITL EEX http://
COD ESG SEGMENT
ASSUME CS:CODESG, DS: CODSEG, SS: CODSEG ORG 100H
BEGIN:MOV AX, 01 MOV BX, 02 MOV DX, 03 MOV CX, 04 L20: INC AX ADD BX, AX SHR DX, 1 ( ) RET
CODE SGENDS END BEGIN
答:(1) (AX)=5H,(BX)=10H,(CX)=0H,(DX)=0H (2) (AX)=2H,(BX)=4H,(CX)=3H,(DX)=1H (3) (AX)=3H,(BX)=7H,(CX)=2H,(DX)=0H
3.49 试编写一程序段,要求把BL中的数除以CL中的数,并把其商乘以2,最后的结果存入DX寄存器中。
答:MOV AL,BL
MOV AH,0;假定为无符号数,否则用CBW指令即可 DIV CL MOV AH,0 SHL AX,1 MOV DX,AX
实验三 微机接口硬件实验
本次接口实验是基于《微机原理与接口技术》课程知识的硬件操作实践。在本学期的学习中,我初步了解了计算机的内部结构以及其内部存储器的有关知识,进而学习了汇编语言的基础知识,并了解了微机接口技术及其有关应用。
接口有存储器接口和 I/O接口。课本主要介绍了I/O接口。I/O接口的功能是负责实现CPU通过系统总线把I/O电路和 外围设备联系在一起。具体是设置数据的寄存、缓冲逻辑,以适应CPU与外设之间的速度差异,接口通常由一些寄存器或RAM芯片组成,如果芯片足够大还可以实现批量数据的传输;能够进行信息格式的转换,例如串行和并行的转换;能够协调CPU和外设两者在信息的类型和电平的差异,如电平转换驱动器、数/模或模/数转换器等; 协调时序差异; 地址译码和设备选择功能; 设置中断和DMA控制逻辑,以保证在中断和DMA允许的情况下产生中断和DMA请求信号,并在接受到中断和DMA应答之后完成中断处理和DMA传输。课本第五章主要介绍了实用接口技术:中断接口技术、定时/计数器控制接口技术、并行接口技术等,以及主要芯片8259A、8253、8255A的结构、工作方式和写初始化字和控制字。通过学习对接口技术有了一个整体的认识。
本次实验就是基于常用接口芯片的,实验过程中,由于对接口器材不熟悉,操作时遇到了很多困难,比如接线不正确、连接时未成功等等,而且有些器材不是很精确,因此没能得出实验结果。经过多次的连接和调试,有些实验还是得出了实验所要求的波形、现象等。通过此次实验进一步学习了接口技术,从宏观上认识了微机接口技术的工作过程,从而很好的巩固了所学的理论知识。
上一篇:初中名词单复数专项练习6