您的当前位置:首页正文

循环结构程序设计(汇编语言)

2023-01-27 来源:钮旅网


汇编语言 实验报告

实验名称: 姓 名: 学 号: 班 级:

循环结构程序设计

一、实验内容

1. 用多种循环方法实现1+2+3+…+20的程序(至少二种方法);

2. 编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入;(选做) 3、 编写一个汇编语言程序,要求将BX寄存器内的小写字母用大写字母显示出来。

4、ADDR单元是存放数据的内存单元,要求将该内存单元中的字依次用十六进制数显示出来。

二、实验目的

1. 掌握循环程序的结构。

2. 掌握循环程序的设计、编写及调试方法。

3. 掌握循环程序设计的基本方法。主要掌握几种基本的循环程序设计技巧,如计数法程序设计、当循环、直到循环等程序设计技术。

三、实验结果

1、将内存中的数据块中(BUFF为起始地址)奇数和偶数分别存入以ADDR1和ADDR2开始的存储块中,并分别统计其中的奇、偶数,将统计结果存放在RESULT开始的两个字存储单元中。

实验代码:(1.ASM 1.OBJ 1.EXE) data segment

buff dw 6,35,99,17,80,69,50,33 addr1 dw 8 dup(?) addr2 dw 8 dup(?) result dw 0,0

data ends code segment

assume cs:code,ds:data

start:

mov ax,data mov ds,ax mov cx,8d

mov si,0 mov di,0 mov bx,0 mov dx,0

L1:

test buff[si],0001h je L2 mov ax,buff[si] mov addr2[bx],ax add si,2 add bx,2 inc dl dec cx jmp L1

L2:

mov ax,buff[si] mov addr1[di],ax add di,2 add si,2 inc dh dec cx jmp L1 mov si,0

mov byte ptr result[si],dh add si,2

mov byte ptr result[si],dl

code ends

end start

运行结果如下:

2、不利用乘法指令实现乘法的程序 代码如下:(2.ASM 2.OBJ 2.EXE) data segment

x dw 30d y dw 10d

data ends code segment

assume cs:code,ds:data start:

push ds sub ax,ax push ax mov ax,data mov ds,ax

mov cx,x mov bx,y mov ax,0

L1:

add ax,bx loop L1

mov dx,ax mov ah,2 int 21h

code ends

end start

运行结果如下:

3、用多种循环方法实现1+2+3+…+20的程序(至少二种方法) 代码1:(31.ASM 31.OBJ 31.EXE) DATA SEGMENT X DW 0D Y DW 20D DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:

PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV BX,X MOV CX,Y MOV AX,0 L1:

INC BX ADD AX,BX LOOP L1 MOV DX,AX MOV AH,2 INT 21H CODE ENDS END START 运行结果1如下:(结果存于DX寄存器中)

实验代码2如下:(32.ASM 32.OBJ 32.EXE) DATA SEGMENT Y DW 20D DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:

PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV CX,Y MOV AX,0 MOV BX,0 L1:

INC BX ADD AX,BX CMP BX,20 JNZ L1 MOV DX,AX MOV AH,2 INT 21H CODE ENDS END START 运行结果2如下:(实验结果存于DX 寄存器中)

4、编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入 实验代码如下:(4.ASM 4.OBJ 4.EXE) code segment

assume cs:code start: mov ah,1 int 21h cmp al,0dh je exit cmp al,'0'

jb start cmp al,'9' jbe output1 cmp al,'A' jb start cmp al,'Z' jbe output cmp al,'a' jb start cmp al,'z' jbe output

output1: mov dl,al mov ah,2 int 21h jmp start

output:mov ah,02h mov dl,'c' int 21h jmp start

exit: mov ah,4ch int 21h code ends end start 运行结果如下:

5、编写一个汇编语言程序,要求将BX寄存器内的小写字母用大写字母显示出来。

实验代码如下:(5.ASM 5.OBJ 5.EXE)BX寄存器中的测试数据位3132H CODE SEGMENT ASSUME CS:CODE START:

MOV BX,6162H SUB BX,2020H MOV DL,BL MOV AH,02 INT 21H MOV BL,BH MOV DL,BL MOV AL,02 INT 21H MOV AH,4CH INT 21H CODE ENDS END START 运行结果如下图:

6、ADDR单元是存放数据的内存单元,要求将该内存单元中的字依次用十六进制数显示出来。 实验代码如下:(6.ASM 6.OBJ 6.EXE)测试数据为1EH,3DH,34H,98H DATA SEGMENT

ADDR DB 1EH,3DH,34H,98H DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:

MOV AX,DATA

MOV DS,AX MOV SI,0

MOV DI,OFFSET ADDR STEP:

MOV AL,[DI] ADD DI,1 MOV BL,AL MOV DL,AL MOV CL,4 SHR DL,CL CMP DL,9 JBE NEXT1 ADD DL,7 NEXT1: ADD DL,30H MOV AH,2

INT 21H ;显示高位ASCII码 MOV DL,BL AND DL,0FH CMP DL,9 JBE NEXT2 ADD DL,7 NEXT2: ADD DL,30H MOV AH,2

INT 21H ;显示低位ASCII码 INC SI CMP SI,4 JNZ STEP

MOV AH,4CH ;返回DOS INT 21H

CODE ENDS END START 运行结果如下:

四、实验心得体会

本次实验主要是循环结构的程序。通过本次实验,学习汇编语言中循环结构类型的程序的编辑、编译与连接,更好的掌握分支程序的结构。

通过本次实验,我对循环结构有了一定的理解,尤其是LOOP循环指令,对于cmp指令和JZN、JZ等指令也有了一定的了解

实验过程是一个不断探索和实践,发现错误和改正错误的一个过程。而在实验四这个试验中,首先,要解决的问题是熟悉和了解汇编语言中分支结构的内容。在完成实验内容的过程中,由于还是处于摸索过程中,所以刚开始的进度很慢,是对着实验过程,一步一步的执行,还要不时的进行截图。但,熟能生巧,到后来的实验就进行的比较快。

通过本次实验,掌握了汇编语言中循环结构这一部分的内容,通过上级实验,更好的理解我们在课本上看到的循环结构的内容,让我们在实验中更深一步的理解和应用。

因篇幅问题不能全部显示,请点此查看更多更全内容