【报告】汇编语言程序设计报告

【报告】汇编语言程序设计报告
【报告】汇编语言程序设计报告

【关键字】报告

汇编语言程序设计报告

计算机学院

2011/6/7

题目要求

分支程序设计:

1、编写程序,键入学生成绩(百分制),按A、B、C、D显示在屏幕上。

子程序设计:

2、给定一个数组存放5个小写字母,用地址表传递方法编写子程序,将其

转换成大写字母,并显示在屏幕上。

循环程序设计:

3、设有一段文字,编写一段程序查找字母a出现的次数,并显示在屏幕上。

DOS功能调用:

4、在图形方式下,在屏幕中央绘制一个用“*”表示的等腰三角形。

5、编写一个生成ASCII码表的程序,并显示在屏幕上。

6、根据提示输入任意年份,编写判断闰年的程序,如果是闰年,

则在屏幕上显示“Y”,否则显示“N”。

7、显示杨辉三角形。要求:

(1)从键盘接收正整数n;

(2)屏幕显示杨辉三角形,显示n行信息;

编程思路:

1.

在数据段设置提示信息,成绩ABCD的显示信息,并预留空间。

利用DOS中断,取得输入的字符,输入字符的ASCII值在30H-39H之间为‘0-9’,不是则报错,值存入SCORE中,将SCORE的高位分别与9,8,7,6相比,

跳转到设置好的代码区,输出对应成绩(A,B,C,D).若为3位数,则跳到A区,输出A.

2. 在数据段设置ADDRESS存放数据偏移量和COUNT计数器

利用DOS中断,取得输入的字符串存入DX中,偏移量存入STRING,并存入ADDRESS中。COUNT存入ADDRESS+2地址中,调用子程序TURN,利用SI指针与ADDRESS配合将每个字母由大写转为小写。

3. 在数据段设置STRING用于存放键盘输入字符,COUNT存放字符个数,利用DOS中断,输入字符串存入STRING.编写CHECK模块用于检查输入的字符是否为a,循环执行CHECK模块,为a 则BL+1,不为a,SI+1继续检查,直至CX=0,最后输出结果。

4.

堆栈段预留128字节空间存放*.设置SI控制空格数,BX为输出*个数.设置3层循环,分别输出空格数,*数,回车.首先将保护CX行数,将其压入栈中,外层循环按CX列数,输出每行之前的空格数,之后根据BX输出*,此时一行输入完,输出回车换行后,BX+2即*数+2,

CX出栈,加入外循环,输出下一行信息。

5.

初始化时设置行列数,第一个字符的ASCII值,设置两层循环,首先CX入栈保护输出行数,外层循环控制输出行数,内循环输出列个数对应的字符数,将要输入的字符存入DL,每输出完一次DL+1,SI值即列数给CX,当CX=0时,输出回车换行,CX出栈,加入外循环准备下

一行的输出。

6.

数据段设置提示信息,W存放输入年份的数值M,BUF存放年份字符串。利用DOS中断,取得输入的年份字符串存入BUF中,字符个数存入CL,调用DATACATE把年份字符串转为16进制数值,在调用IFYEARS子模块判断其是否为闰年,输出相应信息。

DATACATE子模块总体设计思想,首先BUF+2给SI,利用循环,和SI指针从高位向低位逐个字符减去30H转为16进制数,将值存入W中。IFYEARS 子模块总体设计思想,将W值给AX,判断能否被100整除,能则在判是否整除400,能则为闰年,不能则不是闰年。若不能整除100,判是否整除4,能则为闰年,不能则不是,输出相应信息。

7.

数据段设置BUF用于存放三角中的数。

总体思想:基于组合数计算杨辉三角,即c(m,n)的输出。

设置两层循环控制输出的行列,一重循环系数m,范围1-n,二重循环系数n,范围1-m。利用DOS中断,将输入n存入num中。

主程序:内循环调用store将每行三角中的每个值存入buf中,调用外循环加入下一行。子程序store:由ch,cl传递参数m,n,求组合数C(m,n)

,并转换为10进制数存入buf中,再写入一个空格。

子程序multiply:由bh,bl传递参数p,q,求乘积p(p-1)(p-2)...(p-q+1),并由dx传出。

流程图:

1. 分支程序设计:

2. 子程序设计:

3. 循环程序设计:

4. DOS功能调用:

5.ASCII表输出

6.判断闰年

7.杨辉三角输出

源程序:

1.

DATA

STRING

S

A

RB

RC

RD

SCORE

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV DX,OFFSET STRING;

MOV AH,9

INT 21H;提示输入成绩,显示字符串,DS:DX=串首址

MOV DX,OFFSET SCORE;返回SCORE所在段偏移量

MOV AH,0AH

INT 21H;输入4个成绩

MOV DX,OFFSET S

MOV AH,9

INT 21H;

CMP AL, 30H

JB ERROR

CMP AL, 39H

JA ERROR

MOV BL,[SCORE+1]

CMP BL,03H

JZ AAR

MOV BL,[SCORE+2]

CMP BL,39H

JZ AAR

MOV BL,[SCORE+2]

CMP BL,38H

JZ EIGHT

MOV BL,[SCORE+2]

SUB BL,37H

JZ BBR

MOV BL,[SCORE+2]

CMP BL,36H

JZ CCR

JMP DDR ;不及格

EIGHT:

MOV BL,[SCORE+3] ;80分段的判断

SUB BL,35H

JAE AAR

JMP BBR

ERROR :

MOV AH, 09 ;错误提示

MOV DX, OFFSET MESSAGE

INT 21H

JMP START

AAR: MOV DX,OFFSET RA

JMP EXIT

BBR: MOV DX,OFFSET RB

JMP EXIT

CCR: MOV DX,OFFSET RC

JMP EXIT

DDR: MOV DX,OFFSET RD

JMP EXIT

EXIT:

MOV AH,9

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END START

2.

DATA SEGMENT

ADDRESS DW 0,0

STRING DB 6H

DB ?

DB 6H DUP(?),'$'

COUNT DW 0

ENT DB 13,10,'$'

DATA ENDS

STACK1 SEGMENT PARA STACK

DW 20H DUP(0)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK1

START: MOV AX,DATA

MOV DS,AX

MOV DX,OFFSET STRING

MOV AH,0AH

INT 21H

MOV ADDRESS,OFFSET STRING ; ADDRESS存放偏移量

MOV BX,OFFSET STRING

MOV DH,0

MOV DL,[BX+1] ;将字符个数存入COUNT

MOV COUNT,DX

MOV ADDRESS+2,OFFSET COUNT ;ADDRESS+2里存的为COUNT

CALL TURN ;小写转大写模块

MOV DX,OFFSET ENT

MOV AH,9

INT 21H

MOV DX,OFFSET STRING+2

MOV AH,09H

INT 21H

MOV AH,4CH

INT 21H

TURN PROC NEAR

PUSH SI

PUSH BX

PUSH DI

PUSH CX

MOV BX,OFFSET ADDRESS

MOV SI,[BX]

ADD SI,02H

MOV DI,[BX+2] ;BX+2 里存入的为字符个数

MOV CX,[DI]

L: SUB byte ptr [SI],20H

INC SI

LOOP L ;利用指针循环(CX控制)转变

POP CX

POP DI

POP BX

POP SI

RET

ENDP

CODE ENDS

END START

3.

DATA SEGMENT

STRING DB 100

DB ?

DB 100 DUP(?)

COUNT EQU $-STRING

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV DX,OFFSET STRING

MOV AH,0AH

INT 21H

MOV SI,OFFSET STRING + 2

MOV BL,0

MOV CX,COUNT

MOV DH,61H

CHECK: CMP [SI],DH

JNE NEXT

INC BL

NEXT: INC SI

LOOP CHECK

ADD BL,30H

MOV DL,0AH

MOV AH,02H

INT 21H

MOV DL,0DH

MOV AH,02H

MOV DL,BL

MOV AH, 02H

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END START 4.

STACK SEGMENT

DB 128(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START:

MOV SI,5;控制空格数

MOV BX,1;BX控制输出*

MOV CX,4;OUTLOOP: PUSH CX;保护列数

MOV CX,SI

MOV DL,20H;输出空格SPL: MOV AH,2H

INT 21H

LOOP SPL

MOV CX,BX

MOV DL,2AH;输出*

STL: MOV AH,2H

INT 21H

LOOP STL

MOV DL,0DH;输出回车

MOV AH,02H

INT 21H

MOV DL,0AH;换行

MOV AH,02H

INT 21H

DEC SI

ADD BX,2;多一行*数加2

POP CX

LOOP OUTLOOP;进下一行

MOV AH,4CH

INT 21H

CODE ENDS

END START

5.

CODE SEGMENT

ASSUME CS:CODE

START: MOV SI,10H0 ;列数16

MOV CX,7 ;行数7

MOV BL,20H ;第一个字符的ASCII代码

LOOP1: PUSH CX ;入栈保护循环数,控制行数

MOV CX,SI;CX为每行输出个数

LOOP2: MOV DL,BL

MOV AH,2

INT 21H;在屏幕上显示第一个字符

MOV DL,20H

MOV AH,2

INT 21H;在屏幕上显示第一个ASCII代码

INC BL;BL加1即ASCII代码加1

LOOP LOOP2;循环,准备显示下一个ASCII码字符

MOV DL,0AH

MOV AH,2H

INT 21H ;一行显示完,输出一个回车符

MOV DL,0DH

MOV AH,2

INT 21H ;输出一个换行符

POP CX ;一行输完,cx出栈

LOOP LOOP1 ;循环,准备显示下一行ASCII码字符

MOV AH,4CH

INT 21H

CODE ENDS

END START

6.

DATA SEGMENT

INFON DB 0DH,0AH,'Please input a year: $'

Y DB 0DH,0AH,'This is a leap year! $'

N DB 0DH,0AH,'This is not a leap year! $'

W DW 0 ;用于保存输入的年份的数值

BUF DB 8

DB ?

DB 8 DUP(?)

DATA ENDS

STACK SEGMENT STACK

DB 200 DUP(0)

STACK ENDS

CODE SEGMENT

ASSUME DS:DATA,SS:STACK,CS:CODE

START: MOV AX,DATA

MOV DS,AX

LEA DX,INFON ;在屏幕上显示提示信息

MOV AH,9 ;显示字符串

INT 21H

LEA DX,BUF ;从键盘输入年份字符串

MOV AH,0AH ;0AH功能调用从键盘接受字符串到内存的输入缓存区

INT 21H

XOR CH,CH ;ch要清0,否则循环次数有误.

MOV CL, BUF+1 ;把输入的字符的个数保存在cl中

CALL DATACATE ;调用datacate子程序把表示年份的字符串转换为数值

CALL IFYEARS ;调用ifyears子程序判断闰年

JC A1 ;进位标志1 为闰年

LEA DX,N

MOV AH,9

INT 21H

JMP EXIT

A1: LEA DX,Y

MOV AH,9

INT 21H

EXIT: MOV AH,4CH

INT 21H

DATACATE PROC NEAR ;把表示年份的字符串转换为数值

PUSH CX

DEC CX

LEA SI,BUF+2

TT1: INC SI

LOOP TT1

POP CX ;从高位向低位逐个

MOV AX,1

L1: PUSH AX

MOV DH,30H

MOV BX,10

MOV DL,[SI] ;字符减去30H后即可转换为十六进制数

XOR DH,DH

MUL DX

ADD W,AX

POP AX

MUL BX

DEC SI

LOOP L1

RET

DATACATE ENDP

IFYEARS PROC NEAR

PUSH BX

PUSH CX

PUSH DX

MOV AX,W

MOV DX,0

MOV BX,100

DIV BX

CMP DX,0

JE NEXT ;能被400整除,判能否被400整除

XOR DX,DX

MOV AX,W

MOV BX,4

DIV BX

CMP DX,0

JE LAB2

JMP LAB1

NEXT:

XOR DX,DX

MOV AX,W

MOV BX,400

DIV BX

CMP DX,0

JE LAB2

JMP LAB1

LAB1: CLC ;进位标志置0

JMP LAB3

LAB2: STC

LAB3: POP DX

POP CX

POP BX

RET

IFYEARS ENDP

CODE ENDS

7.

data segment

buf db 200 dup()

ends

code segment

start:

lea di,buf

mov ch,00h ;ch为一重循环系数m,范围1-9

loop_m:

mov cl,00h ;cl为二重循环系数n,范围1-m

mov al,0ah

stosb

mov al,0dh

stosb

inc ch

loop_n:

call store

inc cl

cmp cl,ch

jbe loop_n

cmp ch,09h

jb loop_m

mov [di],'$'

finish:

lea dx,buf

mov ah,09h

int 21h

mov ah,4ch

int 21h

;子程序store:由ch,cl传递参数m,n,求组合数C(m,n) ;并转换为10进制数存入buf中,再写入一个空格store proc near

push ax

push bx

push cx

push dx

;将n和m-n中较小者赋给cl,减小运算量

mov bl,ch

sub bl,cl

cmp cl,bl

jbe next

mov cl,bl

next:

jne next1

;n为0或n=m时直接往buf中写入1

mov al,01h

add al,'0'

stosb

mov al,' '

stosb

pop dx

pop cx

pop bx

pop ax

ret

next1: ;n!=0且n!=m时调用子过程计算mov bh,ch

mov bl,cl

;调用子过程multiply求分子

call multiply

mov ax,dx

mov bh,cl

;调用子过程multiply求分母

call multiply

div dl ;此时计算结果在al中

mov ah,0

mov dl,64h

div dl ;百位在al中,十位个位在ah中

cmp al,0

je next2

add al,'0'

mov [di],al

inc di

next2:

mov al,ah

mov ah,0

mov dl,0ah

div dl ;十位在al中,个位在ah中

cmp al,0

je next3

add al,'0'

stosb

next3:

add ah,'0'

mov [di],ah

inc di

stosb

pop dx

pop cx

pop bx

pop ax

ret

store endp

;子程序multiply:由bh,bl传递参数p,q

;求乘积p(p-1)(p-2)...(p-q+1),并由dx传出

multiply proc near

push ax

push bx

push cx

mov cx,0

mov cl,bl

mov bl,bh

mov bh,0

mov ax,1

mov dx,0

loop_mult:

mul bx

dec bx

loop loop_mult

mov dx,ax

pop cx

pop bx

pop ax

ret

multiply endp

code ends

end start

输出屏幕截图:

1. 分支程序设计:输出成绩A,B,C,D

2. 子程序设计:小写变大写

3. 循环程序设计:输出a出现的次数

4. DOS功能调用:输出等腰”*”三角形

5.输出ACSII表

6.判断闰年

7. 输出杨辉三角

汇编自学课程心得:

接触汇编语言之前,我们在计算机组成原理课程中就已经有所了解了,但也只是略微明白一些如jmp,mov这样的指令,极度缺乏系统性的学习。

感触最深的一点是在C语言中不到10个语句构成的程序,用汇编语言却要好几十行甚至上百行。这不得不让我们对汇编产生一种恐惧感。学习汇编语言能让我们更加了解计算机内部的组织结构,对我们计算机专业的学生来说,学习汇编也是提升综合能力的关键环节。

,习汇编语言,首要问题是学习80X86指令系统。如果能将指令系统中的各个助记符、格式等都能完全掌握并灵活运用,大部分工作就已经完成了。指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。如果不熟悉汇编指令的功能及其有关规定,那肯定不能灵活使用汇编语言。

在编写汇编程序时,应该注意特别容易出现的错误,例如在编写数据传送指令时,目的操作数和源操作数的类型一定要匹配,CS不能作为目的操作数,offset后只能跟简单地址符号,等等。

汇编语言中的程序结构,子程序等知识也会帮助我们编写出一个更加完善的汇编程序。另外,在编程中,我们还用到了DOS系统功能调用。

在学习汇编语言时,指令的功能是学习和掌握的重点,要准确有效并合理的使用这些指令,必须了解一些使用的规则。现对汇编语言编程时的规则进行总结,归纳起来有三点:1、要求指令操作数的寻址方式;2、指令对标志位的影响和标志位对指令的影响;3、指令的执行时间,对可完成同样功能的指令,要选用执行时间短的指令。

要学好汇编语言,实验是必不可少的环节。我们深有体会:书上的程序都能看懂,基本原理也都明白,但是在自己亲手编写程序时,却无从下手,甚至连第一句该怎么写都不知道。通过实验,可以在很大程度上加深印象。在书上看程序,一切都是理所当然,十分顺利,而自己动手,才会真正发现自己的不足之处。程序的编写在记事本中进行即可,掌握debug

的使用对实验是有很大帮助的。现在汇编语言的自学课程已经告一段落了,学习过程中遇到的所有困难以及遗留的难点都需要我们在其余时间里逐步攻克,在打好基础的前提下,学习更加专业的汇编知识。

此文档是由网络收集并进行重新排版整理.word可编辑版本!

汇编语言程序设计报告

实验一: 一、实验目的: 1. 学习汇编语言源程序的编辑、汇编、连接、运行全过程。 2. 了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。 3. 掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。 4. 掌握DOS系统功能调用的基本方法。 二、实验原理 通过调用(INT 21H)表中的01h号功能号从键盘输入一个字符并回显到视频显示器上 三、实验内容及算法流程、源程序清单 实验内容:编写程序,从键盘输入一个字符并回显到视频显示器上。 源程序清单: 实验1.asm 实验1.obj 实验1.exe code segment assume cs:code start: mov ah,1 int 21h mov ah,4ch int 21h code ends end start 实验二:编写程序,显示一个字符Q 一、实验目的 1、学习汇编语言源程序的编辑、汇编、连接、运行全过程。 2、了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。 3、掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。 4、掌握DOS系统功能调用的基本方法。 二、实验原理 通过调用(INT 21H)表中的02h号功能显示输出一个字符Y。

三、实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释) 实验内容: 编写程序,显示输出一个字符Q。 源程序清单: 实验2.asm 实验2.obj 实验2.exe code segment assume cs:code start: mov ah,02 mov dl,'Q' int 21h mov ah,4ch int 21h code ends end start 实验三:编写程序,在屏幕上显示输出“I love DOTA” 一、实验目的 1、学习汇编语言源程序的编辑、汇编、连接、运行全过程。 2、了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。 3、掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。 4、掌握DOS系统功能调用的基本方法。 二、实验原理 考察通过调用(INT 21H)表中的0ah号功能显示输出字符串 三、实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释) 实验内容: 编写程序,在屏幕上显示输出‘I love DOTA。 源程序清单: 实验3.asm 实验3.obj 实验3.exe data segment buf db 'I love DOTA.$'

实验四-循环结构汇编语言程序的设计实验报告

循环结构汇编语言程序设计实验报告

实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实

验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如 下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示:

四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:Masm.exe+Link.exe。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序Masm.exe汇编(翻译)后生成二进制目标程序,文件名为abc.obj (3)目标程序需要经Link.exe连接生成可执行程序,文件名为abc.exe 2)汇编环境 最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。将这两个文件拷入到已经建好的文件夹(例如 huibian)中,并将文件夹huibian放在硬盘根

目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序 5)调试成功后重新汇编、连接并生成可执行代码 6)执行程序,并对运行结果截图。 利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入数据为:13,0,59,900,587,1,657,234,34,48) 利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数据为13,0,59,900,587,1,657,234,34,48)

【报告】汇编语言程序设计报告

【关键字】报告 汇编语言程序设计报告 计算机学院 2011/6/7 题目要求 分支程序设计: 1、编写程序,键入学生成绩(百分制),按A、B、C、D显示在屏幕上。 子程序设计: 2、给定一个数组存放5个小写字母,用地址表传递方法编写子程序,将其 转换成大写字母,并显示在屏幕上。 循环程序设计: 3、设有一段文字,编写一段程序查找字母a出现的次数,并显示在屏幕上。 DOS功能调用: 4、在图形方式下,在屏幕中央绘制一个用“*”表示的等腰三角形。 5、编写一个生成ASCII码表的程序,并显示在屏幕上。 6、根据提示输入任意年份,编写判断闰年的程序,如果是闰年, 则在屏幕上显示“Y”,否则显示“N”。 7、显示杨辉三角形。要求: (1)从键盘接收正整数n; (2)屏幕显示杨辉三角形,显示n行信息; 编程思路: 1. 在数据段设置提示信息,成绩ABCD的显示信息,并预留空间。 利用DOS中断,取得输入的字符,输入字符的ASCII值在30H-39H之间为‘0-9’,不是则报错,值存入SCORE中,将SCORE的高位分别与9,8,7,6相比, 跳转到设置好的代码区,输出对应成绩(A,B,C,D).若为3位数,则跳到A区,输出A. 2. 在数据段设置ADDRESS存放数据偏移量和COUNT计数器 利用DOS中断,取得输入的字符串存入DX中,偏移量存入STRING,并存入ADDRESS中。COUNT存入ADDRESS+2地址中,调用子程序TURN,利用SI指针与ADDRESS配合将每个字母由大写转为小写。 3. 在数据段设置STRING用于存放键盘输入字符,COUNT存放字符个数,利用DOS中断,输入字符串存入STRING.编写CHECK模块用于检查输入的字符是否为a,循环执行CHECK模块,为a 则BL+1,不为a,SI+1继续检查,直至CX=0,最后输出结果。 4. 堆栈段预留128字节空间存放*.设置SI控制空格数,BX为输出*个数.设置3层循环,分别输出空格数,*数,回车.首先将保护CX行数,将其压入栈中,外层循环按CX列数,输出每行之前的空格数,之后根据BX输出*,此时一行输入完,输出回车换行后,BX+2即*数+2, CX出栈,加入外循环,输出下一行信息。 5. 初始化时设置行列数,第一个字符的ASCII值,设置两层循环,首先CX入栈保护输出行数,外层循环控制输出行数,内循环输出列个数对应的字符数,将要输入的字符存入DL,每输出完一次DL+1,SI值即列数给CX,当CX=0时,输出回车换行,CX出栈,加入外循环准备下

汇编语言程序设计实验报告

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH, 97H,64H,BBH,7FH,0FH,D8H。编程并显示结果:如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H 的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD 码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再 将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 第1页

99223344H = xxxxxxxxH 四、实验代码及结果 实验代码见代码附录 1.1程序运行结果 图1 无符号最大值结果截图 1.1 程序运行结果

图2 有符号最大值截图2.0 程序运行结果

图3 BCD码显示3.0 程序运行结果

图4 ASCII码显示4.0 程序运行结果

图5 移动次数显示5.0 程序运行结果

汇编语言程序设计报告模板总结模板计划模板.docx

《汇编语言》课程设 计报告 专业计算机科学与技术 学生姓名张竹青 班级Z计算机 151 学号1560704132 任课老师王志宏 完成日期2017年12月29日

目录 1 概述 (1) 1.1 设计目的 (1) 1.2 设计内容 (1) 2 系统需求分析 (1) 2.1 系统目标 (1) 2.2 主体功能 (1) 2.3 开发环境 (2) 3 系统概要设计 (2) 3.1 系统的功能模块划分 (2) 3.2 系统流程图 (3) 4 系统详细设计 (4) 4.1 界面设置 (4) 4.2 选择算法设置 (4) 4.3 十进制转换设置 (4) 5 测试 (5) 5.1 测试方案 (5) 5.2 测试结果 (5) 6 小结 (6) 参考文献 (7)

实现加减乘除四则运算的计算器 1 概述 1.1 设计目的 使用汇编语言,通过实现简单计算器的一般功能,如加、减、乘、除的计算来 了解并掌握 DOS系统功能的调试方法,学会画出编程的具体流程图,同时在程序 设 计过程中熟悉各种指令的应用和意义,以及如何进行上机编辑、汇编、连接和调试。 本课程设计也是对课堂上所学的基本理论知识和程序设计方法的巩固和深化, 提高我们的编程思想、分析问题和解决问题的综合应用能力,能够编写较复杂的应 用程序,最终达到熟练地掌握结构化程序设计技术和编写汇编源程序的基本方法的 目的。 1.2 设计内容 设计一个能实现加、减、乘、除计算的程序,要求该程序接受从键盘输入的十 六进制数,当程序执行时需在文件名后直接跟上计算表达式,每当读到一个有效的 表达式时对表达式进行相应的运算后,输出用十进制数或十六进制数表示的运算结果,如在命令提示符下执行结果如下: c:\tasm>js 3+2 5 2系统需求分析 2.1 系统目标 本次汇编语言课程设计的最终目的是要实现一个简单的加减乘除四则运算的 计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则 运算。具体功能如下: (1)调用中断把要做运算的两个数输入到屏幕上并用程序将他们存储起来 (2)判断用户所输入的运算是四则运算中的哪一种运算 (3)判断运算过程中是进位还是借位 (4)选择用何种输出方式 (5)实现清屏 2.2 主体功能 要求该程序接受的是十六进制数,执行相应的计算后,计算结果以十六进制数 或十进制数输出。本设计的使用说明如下: (1)按照提示选择数字 1,2,3,4 (2) 1: ADD 加法 (3) 2: SUB 减法 (4) 3: MUL 乘法

51汇编语言程序设计

第四章MCS-51汇编语言程序设计 重点及难点: 单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。 教学基本要求: 1、掌握汇编语言程序设计的基本概念; 2、掌握伪指令的格式、功能和使用方法; 3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法; 4、掌握常用汇编语言程序设计步骤和方法。 教学内容 §4.1汇编语言程序设计概述 一、汇编语言的特点 (1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。 (2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。 (3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。 (4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。 二、汇编语言的语句格式 [<标号>]:<操作码> [<操作数>];[<注释>] 三、汇编语言程序设计的步骤与特点 (1)建立数学模型 (2)确定算法 (3)制定程序流程图 (4)确定数据结构 (5)写出源程序 (6)上机调试程序 §4.2伪指令 伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。 MCS- 51常见汇编语言程序中常用的伪指令:

第四章MCS-51汇编语言程序设计91 1.ORG (ORiGin)汇编起始地址命令 [<标号:>] ORG <地址> 2.END (END of assembly)汇编终止命令 [<标号:>] END [<表达式>] 3.EQU (EQUate)赋值命令 <字符名称> EQU <赋值项> 4.DB (Define Byte)定义字节命令 [<标号:>] DB <8位数表> 5.DW (Define Word)定义数据字命令 [<标号:>] DW <16位数表> 6.DS (Define Stonage )定义存储区命令 [<标号:>] DW <16位数表> 7.BIT位定义命令 <字符名称> BIT <位地址> 8.DA TA数据地址赋值命令 <字符名称> DATA <表达式> §4.3单片机汇编语言程序的基本结构形式 一、顺序程序 [例4-1]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。 MOV R0 ,# 52H ;被加数的低字节地址 MOV R1 ,# 55H ;加数的低字节地址 MOV A ,@ R0 ADD A ,@ R1 ;低字节相加 MOV @ R0 , A ;存低字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;中间字节带进位相加 MOV @ R0 , A ;存中间字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;高字节带进位相加 MOV @ R0 , A ;存高字节相加结果 CLR A

8086汇编语言程序设计

实验1 简单汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。 1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的 地址。试编写汇编程序,完成Z←((W-X) ÷5-Y)?(R+ 2) 。 2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0 位置1,否则将该位置0。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验2 分支及循环程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握分支程序和循环程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验3 子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下: EXAMSCORE DB 01 ;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分 DB 02 ;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

《汇编语言程序设计》学习心得自主学习报告.doc

自主学习报告书 题目:学习汇编语言程序设计报告学习课程:《汇编语言程序设计》姓名: 专业: 学号: 福建工程学院国脉信息学院教务处制 二○一二年六月

学习汇编语言程序设计报告书 由于实际工作中对汇编语言程序设计应用较多,在业余时间我自主学习了北京大学出版社出版的《汇编语言程序设计》一书。这一本书介绍了80x86汇编语言程序设计的方法和技术,共分为两个部分:第一部分介绍80x86cpu的编程结构,汇编语言程序的格式和伪指令,80x86cpu的寻址方式和指令系统;第二部分深入讨论分支程序、循环程序、子程序基本程序设计方法,以及以中断为主的i/o程序设计,其中包括宏指令、多模块连接技术、汇编语言与高级语言的混合编程、dos和bios提供的常用中断调用,以及文件系统等内容。 通过本书,我深入的掌握了汇编语言的编程方法、思路和技巧,并对计算机的底层编程有一定认识;还对计算机底层运行程序的机制及计算机的工作原理有了深入的了解。 在学汇编的过程中,最重要的就是要掌握汇编语言中的指令的一些基本用法。当然要能够真正的了解其中的内涵,这样在实际的编程中也能够像运用高级语言一样灵活的变通。汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与计算机内部的结构联系应该联系很密切,而且我在学习中也深刻的了解到了这一点。比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。前面几章都是对计算机内部结构和一些常用的指令以及寻址方式的寻址方式。到后面学到子程序以及宏的作用才真正发现到其实跟高级语言差别不大。以C语言为例,C语言也

是由一个一个的函数组成的。没想到想汇编这样的低级语言也可以这样。在汇编语言的子程序和宏中,我个人更感觉宏的运用更像我们高级语言的子函数,通过定义好的宏,我们在后面直接调用就可以了。尤其是宏带参数的宏跟C语言中带参数的函数真的很像,根据参数的不同调用宏就能得到不同的结果。而汇编中的子程序没有这个传递参数这个功能。在调用子程序的时候要注意各寄存器中的内容。子程序是在程序执行期间由主程序调用的,它只占有它自身大小的一个空间,他不仅是源程序级别简化,形成的目标代码较短;而宏调用则是在汇编期间展开的,每调用依次进把宏定义体展开一次,它是源程序级的简化。因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间越大。如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素 汇编程序给人感觉最烦的就是好多程序的结果不能直接通过运行EXE文件显示出来,而更多的是经过DEBUG单步调试才能看到其内在变化,看是否正确。汇编程序不像其他的高级语言一样需要编译器,而是直接的就能在记事本上编写,然后进行汇编和连接就可以了。学习汇编调试,关键就是要掌握DEBUG的运用。汇编程序把汇编语言翻译成机器语言的过程称为汇编。是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。

《汇编语言程序设计》实验报告(一)

《汇编语言程序设计》实验报告(一) 姓名学号系别班级 指导教师实验日期 课程名称《汇编语言程序设计》同组实验者 一、实验名称:实验一汇编程序和连接程序的使用 二、实验目的: 1. 熟悉汇编语言的上机环境; 2. 学习EDIT,MASM,LINK程序的使用; 3. 掌握建立、汇编、链接、运行汇编语言程序的过程。 三、实验类型:验证 四、实验材料、工具、或软件 多媒体计算机、WINDOWS XP系统或纯DOS系统、MASM6.11以上版本或汇编语言程序设计实验集成环境。 五、实验要求 1. 编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。用串比较功能来完成程序所要求的功能。 2.完成课堂例题,并用DEBUG运行,观察结果。 六、试验内容与步骤:(附上必要的调试过程及运行结果截图,可加附页) 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。用串比较功能来完成程序所要求的功能。上机步骤如下: 1、调用https://www.360docs.net/doc/0616376721.html,程序建立汇编语言源程序.ASM 建立好的源文件以EX_1.ASM为文件名存盘 DATA SEGMENT STRING1 DB 'Visual C++ ' STRING2 DB 'Visual Basic' COUNT EQU $-STRING2 MESS1 DB 'MATCH!’,13,10,’$' MESS2 DB 'NO MATCH!’,13,10,’$' DATA ENDS code segment assume cs:code,ds:data,es:data main proc far start: push ds

汇编语言程序设计实验报告

实验报告实验名称汇编语言程序设计 | | 专业班级:信息安全 学号: 姓名:

实验一汇编语言上机过程和Debug常用调试命令 一.实验目的: 学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。 二.实验题目: 熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。在调试过程中,学习及掌握debug程序的各种操作命令。 三.问题描述: 试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。 四.方法说明: a)使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。 b)用汇编程序masm(或asm)对源文件汇编产生目标文件obj 如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。 c)用连接程序link 产生执行文件EXE. d)执行程序,可直接从DOS执行程序。 e)使用debug程序调试程序的方法。 五.实验步骤: 1.调用字处理程序EDIT 建立以sample.asm文件 datarea segment string1 db‘move the cursor backward.’ string2 db‘move the cursor backward.’ mess1 db ‘Match..’,13,10,’$’ mess2 db ‘No match!..’,13,10,’$’ datarea ends prognam segment main proc far assume cs:prognam,ds:datarea,es:datarea start: push ds sub ax,ax push ax mov ax,datarea mov ds,ax mov es,ax lea si,string1 lea di,string2 cld mov cx,25

汇编语言程序设计

汇编语言程序设计 实验报告 实验名称上机过程及顺序结构与分支结构程序设计实验班级 学号 姓名 日期2017年10月26号 成绩 评阅人 软件学院

一、实验目的与意义 理解并熟练掌握汇编语言程序设计过程中的编辑、汇编、链接和调试等各个步骤,提高对汇编课程内容的理解和汇编语言的掌握,通过上机练习加深对课程内容的理解和掌握。通过汇编语言编制的程序上机调试、运行检验程序设计是否正确。熟悉和掌握编辑、汇编、连接和调试四个实用程序的使用方法,掌握调试程序中的几个常用命令的使用方法。熟悉其基本的指令操作,debug调试操作命令以及分支结构、顺序结构和循环结构的程序设计。 二、实验环境 操作系统:Microsoft Windows8 集成环境:Masm for Windows 上机地点:信息楼B405教室 三、实验的预习内容 预习的主要内容: 1. 使用DEBUG命令的方法; 2. 熟悉掌握从理论上定义数据的类型(即DB,DW,DD,); 3. 分支结构和顺序结构的步骤以及相关的指令; 4. 常用的标志位状态及相应的作用; 实验思路: 在对题目进行分析后,分析出解题方法,并做出与实验思路相对应的程序框图。依照程序框图的内容输入相对应的代码,最终在调试代码后,发现并解决一系列的汇编语言错误。进一步优化算法。实验之前必须了解十进制、十六进制和ASCII码之间的转换。预习查表法相关命令,掌握顺序程序的结构,从键盘输入数据的命令及显示到屏幕上的命令。 实验一: 题目1:将程序编辑、汇编、连接并通过集成环境中的debug调试,观察运行结果;用E命令修改指定地址的数据,再用G命令执行程序查看变化,用A 命令将加法指令修改成减法指令,再将其编译运行,查看寄存器值变化的异同。 题目2:分别用DB、DW和DD数据段9H,0FAH,41H,27H,编译链接之后生成exe文件,再用debug的r命令找到数据段地址,用d命令指定数据段地址,观察汇编后在机器内部对应的存储情况。 实验二: 先设置数据段地址和堆栈段地址;设置堆栈段指针;读取一个字符然后存储在AL中;用BX来存储AL中字符对应的数值;将BX中的值作为偏移地址;并在数据段中查找对应字符串;最终输出结果结束程序。 实验三: 先初始化数据段地址与堆栈段地址;设置堆栈段指针;然后将数据段中的data1放入AL中;读取数据段中的data2并判断data2是否大于0;然后读取数

汇编语言程序设计

《汇编语言程序设计》课程教学大纲 学时:32 学分:2 理论学时:24 实验学时:8 面向专业:电科、电信、通信课程代码:B2700009 先开课程:C语言程序设计课程性质:必修 执笔人:王艳春审定人:陈龙猛、张金政 第一部分:理论教学部分 一、说明 1、课程的性质、地位和任务 本课程属于专业基础课,是电科、电信和通信专业学生必修的核心课程之一,是进一步学习微机原理、操作系统等课程的基础。掌握它有助于提高学生对计算机系统的设计、研究、开发和应用能力。汇编语言是一种面向机器、实践性很强的程序设计语言,必须结合一种实际的计算机来组织教学。因此,本课程选择最广泛使用的IBM PC作为具体的机型来介绍。通过课堂教学和上机实践,培养学生用汇编语言进行编程的思路、方法,养成良好的程序设计习惯,并了解底层I/O 驱动软件的编程方法,熟悉源程序汇编、链接和调试运行的步骤和方法,掌握dos、BIOS功能的调用方法及使用debug工具的调试手段,为后续课的学习打下扎实的基础。 2、课程教学和教改基本要求 课程的目的与教学基本要求:本课程主要介绍汇编语言和宏汇编的基本概念,80X86CPU的指令系统和寻址方式;介绍汇编语言程序格式、伪操作和上机全过程。通过实际例子,详细叙述顺序、分支、循环、子程序等基本程序结构以及程序设计的基本方法和技巧。学习这门课程,应达到以下几个要求: ①掌握汇编语言的基本理论知识和有关概念;掌握用汇编语言编写源程序的基本原则、方法和技巧; ②具有阅读,分析汇编语言程序的能力; ③通过上机实践,能够熟练地掌握汇编语言程序的编辑、汇编、连接、运行 过程及debug工具的调试手段。

汇编教程汇编语言编程实例

汇编语言编程实例一这一章,我们要把我们已学的知识集合起来。具体来讲,我们来写一个使用ODBC APIs的程序.为简单起见,这个程序中我使用Microsoft的Access数据库(Microso ft Access 97) . 注意:如果你使用的windows.inc 是1.18及其以下版本,在开始编译之前要修改其中的一个小bug.在windows.inc中查找 "SQL_NULL_HANDLE",将得到下面这行: SQL_NULL_HANDLE equ 0L 将0后面的"L"删除,象这样: SQL_NULL_HANDLE equ 0 这个程序是一个基于对话框的程序,有一个简单的菜单.当用户选择"connect"时,它将试图连接test.mdb数据库,如果连接成功,将显示由ODBC驱动程序返回的完整连接字符串.接下来,用户可选择"View All Records"命令,程序会使用listview control来显示数据库中的所有数据.用户还可以选择"Query"命令来查询特定的记录.例子程序将会显示一个小对话框提示用户输入想找的人名.当用户按下OK钮或回车键,程序将执行一个查询来查找符合条件的记录.当用户完成对数据库的操作时,可以选择"disconnect"命令与数据库断开连接. 现在看一下源程序: .386 .model flat,stdcall include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\odbc32.inc include \masm32\include\comctl32.inc include \masm32\include\user32.inc includelib \masm32\lib\odbc32.lib includelib \masm32\lib\comctl32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib IDD_MAINDLG equ 101 IDR_MAINMENU equ 102 IDC_DATALIST equ 1000 IDM_CONNECT equ 40001 IDM_DISCONNECT equ 40002 IDM_QUERY equ 40003 IDC_NAME equ 1000 IDC_OK equ 1001 IDC_CANCEL equ 1002 IDM_CUSTOMQUERY equ 40004 IDD_QUERYDLG equ 102 DlgProc proto hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD

汇编语言实验报告 20112914

合肥工业大学计算机与信息学院 实验报告 课程:汇编语言程序设计专业班级:信息安全11-1 学号:20112914 姓名:王佳淼

实验一Debug程序的使用 一.实验目的 1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。 2、掌握8086/8088的寻址方式及多字节数据的处理方法。 二.实验内容 1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。 2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。要求: 本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。 三.实验过程和程序 1、启动DOS操作系统 2、运行https://www.360docs.net/doc/0616376721.html,程序(若当前盘为C) C:>DEBUG↙ – ;(“–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG命令) 3、用“A”命令编辑和汇编源程序 –A ↙ 186E:0100 MOV AX,[0200]↙ 186E:0103 MOV BX,[0202]↙ 186E:0107 ADD AX,[0204]↙ 186E:010B ADC BX,[0206]↙ 186E:010F MOV [0208],AX↙ 186E:0112 MOV [020A],BX↙ 186E:0116 ↙ 4、用“U”命令反汇编验证源程序 –U CS:0100↙ 186E:0100 A10002 MOV AX,[0200] 186E:0103 8B1E0202 MOV BX,[0202] 186E:0107 03060402 ADD AX,[0204] 186E:010B 131E0602 ADC BX,[0206] 186E:010F A30802 MOV [0208],AX 186E:0112 891E0A02 MOV [020A],BX 186E:0116 –

汇编语言编程实验报告

汇编语言编程实验报告 学号: 姓名: 成绩:

目录 一、实验一: ................................................... 错误!未定义书签。 二、实验二: (4) 三、实验三: (8) 四、实验四: (10) 五、实验五: ................................................... 错误!未定义书签。 六、实验六: (19) 七、汇编实验总结 (23)

实验一 一.实验题目 【汇编语言补充作业T20】编写完整程序,利用DOS系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。 二.程序流程及思路 实现字符串输入,需要分成三个步骤: 1、在数据段中定义一个缓存区为存放字符串做准备; 2、DOS系统功能调用0AH号子功能,(DS:DX)= 输入缓冲区首址; 3、在输入的字符串尾加上‘$’字符,以作为输出结束条件。 实现字符串输出,则需要注意的问题是: 1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度 和字符串实际字符数; 2、输出回车换行可利用字符串:CR DB 0AH,0DH,’$’。 三.源程序清单 DATA SEGMENT N EQU 50 MAXLEN DB N ;缓冲区字符的最大长度 ACTLEN DB ? ;实际字符个数 STRING DB N DUP(?) ;字符空间 CR DB 0AH,0DH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX LEA DX,MAXLEN MOV AH,0AH INT 21H ;字符串输入 MOV AH,09H LEA DX,CR INT 21H ;回车换行 MOV BL,MAXLEN+1 ;取实际的字符长度 MOV BH,0 LEA SI,MAXLEN+2 ;取字符开始的首地址

汇编语言程序设计

第4章 汇编语言程序设计 §4.1 汇编语言的模式 一、汇编语言源程序的一般模式 [Name 模块名] [Title 标题] [定义宏] [定义数据段] [定义附加段] [定义堆栈段] 定义代码段 源程序结束 中括号括起的部分可以省略,可见在一个汇编语言源程序中必须要定义代码段,并且必须有源程序结束指令。 二、8086汇编语言程序的一个例子 Pg90。 §4.2 语句行的构成 汇编语言中的语句一般分为两种类型:指令性语句和指示性语句。 指令性语句的格式为: [标号:] 助记符 [操作数1[,操作数2]] [;注释] 指示性语句的格式为: [名称] 助记符 [参数1,参数2,……] [;注释] 标号和名称都是编程人员根据需要和一定的规则任意取的。也可以认为汇编语言的语句行是由标记和分隔符(空格)构成。 一、标记 1.IBM宏汇编的字符集 (1)字母 (2)数字符 (3)特殊字符 2.界符 用于定界一个标记的结束或一个标记的开始,本身具有一定的意义。 3.常量 出现在汇编语言源程序中的固定值称为常量。 (1)数值常量 ①二进制:以字母B结束。 ②十进制:以字母D或无字母结束。

③八进制:以字母Q(或O)结束。 ④十六进制:以字母H结束。 (2)字符常量 指用单引号或双引号引起的字符或字符串。 4.标识符 由程序员自己建立的字符序列(标号或名称)。一个标识符不能超过31个字符,不能以数字开头。 5.保留字 汇编语言中具有特殊意义的字符序列。 6.注释 一行中分号以后的部分。用于对一段或一行程序进行说明,便于阅读和理解。 二、符号 具有一定意义的字符序列。 1.寄存器名 2.变量 段属性、偏移属性、类型属性 3.标号 段属性、偏移属性、类型属性 4.常数 5.其它 三、表达式 由操作数和运算符组合而成的序列。 1.操作数 (1)立即数 (2)寄存器操作数 (3)存储器操作数 2.运算符 (1)算术运算符 +、-、*、/、MOD(求余) (2)逻辑运算符 AND、OR、NOT、XOR (3)关系运算符 EQ、NE、LT、LE、GT、GE 结果为“假”时,返回0,结果为“真”时,返回二进制全1。 §4.3 指示性语句

实验四循环结构汇编语言程序设计实验报告

循环结构汇编语言程序设 计实验报告 实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和内存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验内容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如下所示:

2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示: 四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:Masm.exe+Link.exe。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序Masm.exe汇编(翻译)后生成二进制目标程序,文件名为abc.obj (3)目标程序需要经Link.exe连接生成可执行程序,文件名为abc.exe 2)汇编环境 最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。将这两个文件拷入到已经建好的文件夹(例如 huibian)中,并将文件夹huibian放在硬盘根目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序

汇编语言程序设计实验报告

汇编语言程序设计 学生姓名:学号: 学院: 专业: 指导教师: 2011年 11 月 27日

实验三循环程序设计 一.实验目的 1.学习调试程序,查找逻辑错误; 2.掌握循环程序设计的方法; 3.掌握正确分配与使用寄存器。 二.实验内容与要求 题目1:数组中是一组无符号数,将最小数放在M单元中,经过汇编后,形成.EXE文件,先用G=0命令执行程序,用-D命令查看M单元的内容,会发现结果不正确。用单步执行命令T查找程序中的逻辑错误。DSEG SEGMENT MSG DB 13, 15, 7, 25, 24 M DB ? DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX MOV CX, 4 MOV AL, MSG MOV SI, OFFSET MSG+1 L1: CMP AL, [SI] JB NEXT MOV AL, [SI] NEXT: LOOP L1 MOV M, AL MOV AX, 4C00H INT 21H CSEG ENDS END START (1)程序说明:这个程序的目的是要在13, 15, 7, 25, 24中找到最小数,并且放到M单元中。

(2)调试说明:运行无问题 (3)错误问题:结果中M单元的内容是错误的,此时M为13,但真实值应为6 解决办法:该程序的循环是一个死循环,无法将每个数都进行比较,因此,需要每次循环时地址+1才能将每个数进行比较,所以需要在 循环上加“INC SI”。 (4)修改后程序及运行结果: DSEG SEGMENT MSG DB 13, 15, 7, 25, 24 M DB ?

单片机基础汇编语言编程实例

单片机基础汇编语言编程实例 单片机汇编语言编程 1.编写程序,用位处理指令实现“P1.4=P1.0∨(P1.1∧P1.2)∨P1.3”的逻辑 功能。 MOV C,P1.1ANL C,P1.2ORL C,P1.0ORL C,P1.3MOV P1.3,C2.编写程序,若累加器A 的内容分别满足下列条件,则程序转到LABLE 存储单元。设A 中存 放的的无符号数。(1)A≥10;(2)A>10;(3)A≤10。(1)CJNE A,#10,NEXTLJMP LABLENEXT:JNC LABLE(2)CJNE A,#10,NEXTLJMP NEXT2NEXT:JNC LABLENEXT2:(3)CJNE A,#10,NEXTLJMP LABLENEXT:JC LABLE3.编写程序,查找片内RAM 的30H~50H 单元中是 否有55H 这一数据,若有,则51H 单元置为FFH;若未找到,则将51H 单元 清0。MOV R0,29HNEXT:INC R0CJNE R0,#51H,NEXT2MOV 51H,#0FFHAJMP OVERNEXT2:CJNE @R0,#55H,NEXTMOV 51H,#0OVER:4.编写程序,查找片内RAM 的30H~50H 单元中出现0 的次数,并将查找的结果存入51H 单元。MOV R0,30HMOV 51H,#0NEXT:CJNE @R0,#00H,NEXT2INC 51HNEXT2:INC R0CJNE R0,#51H,NEXT5.在片外RAM 中有一个数据块,存有若干字符、数字,首地址为SOURCE 要求将该数据块传送到片内RAM 以DIST 开始的区域,直到遇到字符“$”时结束($也要传送,它的ASCII 码为24H)。MOV DPTR,#SOURCEMOV R0,#DISTNEXT:MOVX A,@DPTRMOV @R0,AINC DPTRINC R0CINE A,#24H,NEXT6.片内RAM 的30H 和31H 单元中存放着一个16 位的二进制数,高位在前,低位在后。编写程序对其求补,并存回原处。CLR CMOV A,#0SUBB A,31HMOV 31H,AMOV A,#0SUBB A,30HMOV 30H,A7.片内RAM 中有两个4 字节压缩的BCD 码形式存放的十进制数,一

相关文档
最新文档