汇编语言实验报告
时间:2025-02-23
时间:2025-02-23
中南大学
汇编语言课程设计
实验报告
学生姓名 学 号 指导教师 学 院 信息科学与工程学院 专业班级 完成时间
实验一 建立汇编语言的工作环境
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;外循环计数器 LOO …… 此处隐藏:4435字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:初中名词单复数专项练习6