汇编实验报告

更新时间:2024-06-06 07:59:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

中南大学

汇编实验报告

学 院: 信息科学与工程学院 班 级: 计科工试1501班 学 号: 0902150323 姓 名: 张雨欣 指导老师:雷向东 完成时间: 2017.06.09

目 录

实验一、判断素数…………………3

实验二、判断单词个数……………9

实验三、数组元素排序……………13

心得体会……………………………21

实验一、判断素数

一、 实验内容

根据从键盘输入的数字判断其是否是素数,并在屏幕上打出判断结果。

二、 算法分析

调用子程序判断素数

思路:只能被1和它本身整除的数叫做素数,假设输入数X(十进制)

1.先将我们输入的字符转换为10进制对应的数存入BX 2.判断是否小于2:如果这个数是2或1,则一定是素数 3.从2开始除到X-1,判断每一次的余数是否为0 4.若有一次的余数为0,则不是素数 5.若余数都不为0,循环次数为X-2,则是素数

三、源代码

data segment

va1db 'The data is a prime number!$' va2db '-1$' data ends

code segment assumecs:code,ds:data start:

movax,data movds,ax

call decibin ;段内调用子程序 callcrlf

call judge callcrlf mov ah,4ch int 21h

decibin proc near ;子程序从键盘接收十进制 mov bx,0 newchar: mov ah,1 int 21h

sub al,30h ;转为十进制 jl exit ;小于0退出 cmp al,9

jg exit ;大于9退出 cbw

xchgax,bx ;将ax和bx中的内容互换 mov cx,10 mul cx xchgax,bx addbx,ax jmpnewchar exit: ret decibinendp

judge proc near movcx,bx sub cx,2 cmp bx,2 jle print1 mov dl,1 jud: movax,bx inc dl div dl cmp ah,0 jz print2

;判断程序

loopjud jmp print1 print1: mov ah,09h lea dx,va1 int 21h ret print2: mov ah,09h lea dx,va2 int 21h ret judgeendp

crlf proc near mov dl,0dh mov ah,2h int 21h mov dl,0ah mov ah,02h int 21h

ret ;返回 crlfendp

code ends

end start

三、 结果演示

实验二、判断单词个数

一、 实验内容

给定句子,编写程序判断句子中单词的个数。

二、 算法分析

设置bl标志位,当bl为1时表示当前元素是字母。设置循环判断每一位的元素是否在二十六个字母的大小写范围内。利用si确定到每一位元素,设置多个跳转条件。每判断一次就让si加一。

三、 源代码

.model small .data

stringdb \endstringdb ? .code main proc far movax,@data movds,ax

mov cx,(offset endstring-offset string) mov dl,0

mov bl,0;标志位为1是字母 movsi, offset string again:

cmp bl,0

jnz l1;zf 不为1跳转 mov al,[si] cmpal,'A' jb l4 cmpal,'Z' ja l3 mov bl,1 inc dl jmp l4 l3: cmpal,'a' jb l4 cmpal,'z' ja l4 mov bl,1 inc dl jmp l4 l1: mov al,[si] cmpal,'A' jae l5

mov bl,0 jmp l4 l5: cmpal,'Z' jbe l4 cmpal,'a' jae l7 mov bl,0 jmp l4 l7: cmpal,'z' jbe l4 mov bl,0 l4: incsi loop again add dl,30h mov ah,2h int 21h mov ax,4c00h int 21h mainendp

end

四、 运行测试

实验三、数组元素排序

一、 实验内容

实现从键盘输入两个数字并存入数组中,对数组中元素进行排序并打印在屏幕上。

二、算法分析

对于从键盘输入的每个数字都将其存进数组的一个内存单元中,并将数组第一个元素的有效地址置入DI,之后采用冒泡排序算法对数组元素进行排序。

二、 源代码

CODE SEGMENT

ASSUME CS:CODE ORG 100H START:

PUSH CS POP DS PUSH CS POP ES CALL INPUTNUM MOV AX,NUM MOV N,AX CALL BUBBLESORT MOV AH,2

MOV DL,10 INT 21H MOV DL,13 INT 21H MOV CX,N LEA SI,ARRAY @M1:

MOV AX,[SI] CALL DISPAX INC SI INC SI LOOP @M1

MOV AH,4CH INT 21H

N DW ?

;============================================ BUBBLESORT PROC NEAR LEA BX,ARRAY LEA SI,NUM MOV AX,SI

SUB AX,BX ROR AX,1

MOV WORD PTR[NUM],AX DEC WORD PTR[NUM]

MOV WORD PTR[I],0 ; 冒泡排序

LEA DI,ARRAY LINE1:

INC WORD PTR[I] MOV AX,WORD PTR[I] CMP AX,WORD PTR[NUM] JG LINE3

MOV WORD PTR[J],0 LINE2:

INC WORD PTR[J] MOV AX,WORD PTR[NUM] INC AX

SUB AX,WORD PTR[I] CMP WORD PTR[J],AX JG LINE1

MOV BX,WORD PTR[J]

以下采用

ROR BX,1

MOV AX,WORD PTR[DI][BX-2] CMP AX,WORD PTR[DI][BX] JAE LINE2

MOV CX,WORD PTR[DI][BX] MOV WORD PTR[DI][BX],AX MOV WORD PTR[DI][BX-2],CX JMP LINE2 LINE3: RET

I DW ?

J DW ? BUBBLESORT ENDP

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

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

INPUTNUM PROC NEAR

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

LEA DI,ARRAY ;将数组第一个元素的有效地址置入DI

MOV WORD PTR[NUM],0 STIN:

MOV AX,0 PUSH AX AGAIN1:

MOV AH,1 INT 21H

MOV BYTE PTR[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[DI],AX INC WORD PTR[NUM] CMP BYTE PTR[CHAR],13 JE STINEND INC DI INC DI JMP STIN STINEND: RET

ARRAY DW 100 DUP(0) NUM DW 0 CHAR DB ? INPUTNUM ENDP

;=============================================== DISPAX PROC NEAR PUSH BX PUSH CX PUSH DX PUSH SI

PUSH DS PUSH CS POP DS PUSH AX MOV AH,2 MOV DL,32 INT 21H POP AX

MOV BYTE PTR NZ,0 PUSH AX LEA SI,DIVARR MOV CX,5 @1:

POP AX MOV DX,0 MOV BX,[SI] DIV BX PUSH DX CMP AL,0 JNE @2

CMP BYTE PTR NZ,1 JE @2

CMP CX,1 JE @2 MOV DL,20H JMP @3 @2:

ADD AL,30H MOV DL,AL MOV BYTE PTR NZ,1 @3:

MOV AH,2 INT 21H INC SI INC SI LOOP @1 POP DX POP DS POP SI POP DX POP CX POP BX RET

DIVARR DW 10000,1000,100,10,1

NZ DB 0 DISPAX ENDP

;============================================= CODE ENDS

END START

三、 运行测试

心得体会

本学期我们学习了汇编语言,它是一种不同于我们之前学习的高级语言,汇编语言是一种计算机底层的语言,它是能够直接控制硬件的唯一语言。在学习过汇编语言之后,我感觉它不像C语言那般简单易懂,因为在汇编语言中会涉及到许多陌生的指令以及寄存器等等,这和我之前的编程模式大相径庭,所以在实验进行的初期我觉得寸步难行,完全没有头绪,后来我依据书上的一些代码例子,试着去理解和举一反三,在经过不断地尝试之后,我感觉我对于汇编语言的应用能力得到了很大的提高,也慢慢了解了汇编语言的使用方法。通过本次实验我明白学习任何一门语言最好的方法就是去实验,多写代码,多练习,那么对于代码的掌握能力就会在不知不觉中增长。

本文来源:https://www.bwwdw.com/article/x2d6.html

Top