汇编语言实验指导书

汇编语言实验指导书
汇编语言实验指导书

汇编语言实验指导书

前言

汇编语言是计算机专业的一门重要的专业基础课,主要介绍汇编语言程序设计的基本原理和方法。汇编语言是一门理论性和实践性较强的课程,辅助课堂教学的实验有助于帮助学生理解汇编语言的基本原理,锻炼学生的动手能力,提高学生的综合应用知识的能力。

本实验指导书按照汇编语言程序设计的教学大纲要求编写。依据循序渐进、由浅入深的规律,通过实例复习巩固所学知识,借助实例开展汇编语言程序设计。通过这种既具有构造性又具有创造性的学习活动,更便于初学者的理解和掌握,通过上机实验,并在实验后完成实验报告,又能进一步加深和拓宽所学知识。为了帮助老师和学生开展实验,我们特编了这本实验指导书,希望能对我校的《汇编语言》教学工作有所帮助。

本实验指导书所有实例均在PC机上调试通过。

目录

实验1 利用DEBUG调试汇编语言程序段 (54)

实验5 分支程序实验 (65)

实验6 循环程序实验 (68)

实验7 子程序实验 (69)

实验8 字符处理程序实验 (73)

实验1 利用DEBUG调试汇编语言程序段

一.实验目的

1.熟悉DEBUG有关命令的使用方法;

2.利用DEBUG掌握有关指令的功能;

3.利用DEBUG运行简单的程序段。

二.实验内容

1.进入和退出DEBUG程序;

2.学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命令、N命令、W命令等,也应该试用一下;

3.用DEBUG,验证乘法、除法、加法、减法、带进位加、带借位减、堆栈操作指令、串操作指令的功能。

三.实验要求

1.仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;

2.作为例子,准备用A命令,输入在显示器上显示字符“$”的系统调用程序段;

3.编写将AX左移9位的程序段。

四.实验环境

PC微机

DOS操作系统或Windows 操作系统

MASM.EXE,LINK.EXE,https://www.360docs.net/doc/e411551629.html,或宏汇编集成环境

五.实验步骤

1.在DOS提示符下,进入DEBUG程序;

2.在DOS目录下启动DEBUG;

3.详细记录每一步所用的命令,以及查看结果的方法和具体结果。

六.实验报告要求

1.如何启动和退出DEBUG程序;

2.整理每个DEBUG命令使用的方法,实际示例及执行结果。

七.思考题

启动DEBUG后,要装入某一个.EXE文件,应通过什么方法实现?

实验2 初级程序的编写与调试实验(一)

一.实验目的

1.进一步熟悉DEBUG命令;

2.掌握数据在内存中的存放方式和内存操作数的几种寻址方式,段寄存器和物理地址计算;

3.熟悉数据传送指令、算术运算指令、逻辑指令、数据串传送程序和数据串传送指令MOVS、STOS及重复前辍REP;

4.掌握简单的汇编语言程序编写与调试。

二.实验内容

1.内存操作数及各种寻址方式使用;

2.求累加和程序;

3.多字节加法程序;

4.数据串搬家程序;

5.段寄存器概念及字符串传送指令练习。

三.实验要求

1.仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;

2.阅读数据传送指令、算术运算指令、逻辑指令、数据串传送程序和数据串传送指令MOVS、STOS及重复前辍REP的内容;

3.用DEBUG的有关命令调试本实验中的求累加和程序、多字节加法程序、数据串搬家程序段。

四.实验环境

PC微机;

DOS操作系统或Windows 操作系统;

MASM.EXE,LINK.EXE,https://www.360docs.net/doc/e411551629.html,或宏汇编集成环境。

五.实验步骤

1.内存操作数及各种寻址方式使用

MOV AX,1234

MOV [1000],AX

MOV BX,1002

MOV BYTE PTR[BX],20

MOV DL,39

INC BX

MOV [BX],DL

DEC DL

MOV SI,3

MOV [BX+SI],DL

MOV [BX+SI+1],DL

MOV WORD PTR[BX+SI+2],2846

步骤:

(1) 用A命令键入上述程序,并用T命令逐条运行。

(2) 每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。

注意D命令显示结果中右边的ASCII字符及双字节数存放法。

2.求累加和程序:

程序:

MOV BX,1000

MOV CX,10

SUB AX,AX

LOP:ADD AL,[BX]

ADC AH,0

INC BX

J:LOOP LOP

INT3

步骤:

(1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替;

(2)用命令N AA 将此程序命名为文件AA(文件名可任取);

(3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址;

(4)用命令W 100将此程序存到AA命名的磁盘文件中;

(5)用命令Q退出DEBUG;

(6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序;

若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入;

(7)用E命令在内存地址1000H处键入16个数字;

(8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值;

(9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错;

(10)重复G、J与T,再检查AX是否正确;

(11)用G命令使程序运行到结束,检查AX值是否正确。

3.多字节加法程序

程序:

MOV DI,1000

MOV CX,8

MOV SI,2000

CLC

LOP:MOV AL,[SI]

ADC [DI],AL

INC SI

INC DI

LOOP LOP

INT 20

步骤:

(1) 用命令键入此程序

(2) 用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。

4.数据串搬家程序

(1)用A命令键入下列程序:

MOV SI,1000

MOV DI,1500

MOV CX,0FH

LOP:MOV AL,[SI]

MOV [DI],AL

INC SI

INC DI

LOOP LOP

INT 20

(2)用A命令DB伪指令在1000H键入下列字符串:

‘IBM_PC COMPUTER'

(3)用G命令运行此程序,并用D命令检查目的地址处的字符与源串是否一致。

5.段寄存器概念及字符串传送指令练习

(1) 用A命令键入下列程序:

MOV SI,0

MOV DI,0

MOV AX,1000

MOV DS,AX

MOV AX,1500

MOV ES,AX

MOV CX,0F

CLD

REP MOVSB

INT 20

(2) 用A命令DB伪指令在1000:0000处键入字符串'IBM_PC COMPUTER',并用D命检查之

(3) 用D命令检查0F00:1000处内容,看是否一样。为什么?

(4) 用G命令运行此程序,检查目的地址1500:0000处内容。并记下DS与ES值。

(5) 修改此程序,使ES与DS为同一值,以减少一条指令,而源物理地址和目的物理地址(是多少?)仍和原来一样。

6.自编程序

用16位减法指令编一个32位(4字节)数减法程序,两个源数及结果存放地址同多字节加法程序,调试并做记录。

六.实验报告要求

1.各项实验记录;

2.要求你修改的程序的清单(修改后)和调试记录;

3.自编程序原稿及调试后修正稿,写出原稿错在那里。

七.思考题

1.MOV BYTE PTR[BX],20

MOV WORD PTR[BX+SI+2],2846

上述指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。

2.用G命令运行多字节加法程序,并用D命令检查其结果(存放在哪里?),是否正确?

3.将多字节加法程序中的INT 20H指令改为INT 3,有何区别?若这条指令不加,行不行?试一试。

4.数据串搬家程序中的目的地址改为1002H,再运行此程序,看能不能把1000H开始的字符串搬到1002H开始的地方去?修改程序以做到这一点。

实验3 初级程序的编写与调试实验(二)

一.实验目的

1.掌握无条件转移指令、条件转移指令;

2.掌握利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法;

3.掌握直接向视频RAM送ASCII码进行屏幕显示的方法;

4.掌握屏幕字符显示程序编写与调试。

二.实验内容

1.字符、字符串的屏幕显示;

2.直接向VRAM送ASCII码显示字符;

3.用字符搜索法确定字符串长度;

4.16进制数化ASCII码的一般方法(显示内存内容)。

三.实验要求

1.仔细阅读有关无条件转移指令、条件转移指令的内容;

2.阅读利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的内容;

3.阅读实验指导书中的字符串屏幕显示程序、字符屏幕显示程序、直接向VRAM送ASCII码显示字符程序、用字符搜索法确定字符串长度程序、16进制数化ASCII码的一般方法的程序段,调试上述程序。

四.实验环境

PC微机;

DOS操作系统或Windows 操作系统;

MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境。

五.实验步骤

1.利用INT 21 0AH号功能调用显示字符串。

(1)用A命令在100H处键入下列程序:

MOV AH,9

MOV DX,110

INT 21

INT 20

(2)用A命令在110H处键入下列字符串的ASCII码:

DB 'This is a sample!$'

(3)用N命令和W命令将此程序(包括数据区)存入文件名为AA.OM的磁盘文件中。(存入前BX:CX必须置为文件长度值)。

(4)用Q命令退出DEBUG。

(5)在DOS命令下打AA,运行此程序,即在屏幕上显示'This is a sample!'字符串,若不

出现,用DEBUG检查程序有无错误。

2.利用INT 21H 2号功能显示字符

(1)用A命令在100H处键入下列程序:

XOR DL,DL

MOV CX,100

LOP:MOV AH,2

INT 21

INC DL

PUSH CX

MOV CX,8

DELY:PUSH CX

MOV CX,0

J:LOOP J

POP CX

LOOP DELY

POP CX

LOOP LOP

INT 20

(2)用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?

(3)按CTRL+BREAK退出此程序,若一次不行可多做几次。

3.直接向VRAM送ASCII码显示字符

(1)用A命令在100H处键入下列程序

MOV AX,B000

MOV DS,AX

XOR AL,AL

XOR BX,BX

MOV CX,100

LOP:MOV [BX],AL

INC BX

INC AL

PUSH CX

MOV CX,8

DELY:PUSH CX

MOV CX,0

J:LOOP J

POP CX

LOOP DELY

POP CX

LOOP LOP

INT 20

(2)用N命令和W命令将此程序存入https://www.360docs.net/doc/e411551629.html,文件中。(一定要先存入!)

(3)用G命令运行此程序,仔细观察每一个ASCII码显示结果,并和字符表及上一道程

序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT 21H 2号功能调用有何不同?

4.用字符搜索法确定字符串长度

(1)用A命令在100H开始的内存处键入下列程序

JMP START

DB 'This is the program to measure'

DB 'the length of a string!$'

START:MOV BX,102

MOV AL,24

XOR CL,CL

LOP:CMP AL,[BX]

JZ EXIT

INC BX

INC CL

JMP LOP

EXIT:INT3

(2)用G命令运行此程序,并检查CL的统计长度是否与你自己统计的实际长度是否一样?

5.用字符搜索法确定字符串长度

(1)用A命令在100H处键入下列程序:

MOVSI,0

MOVBL,10

LOP:MOVDL,[SI]

MOVCL,4

SHRDL,CL

CMPDL,0A

JC J1

ADD DL,7

J1:ADD DL,30

MOV AH,2

INT 21

MOV DL,[SI]

AND DL,0F

CMP DL,0A

JC J2

ADD DL,7

J2:ADD DL,30

MOV AH,2

INT 21

MOV DL,20

MOV AH,2

INT 21

INC SI

DEC BL

JNZ LOP

INT 20

(2)用N,W命令将此程序用CC.COM文件名存入磁盘。

(3)用Q命令退出DEBUG。

(4)在DOS命令状态下直接运行CC.COM命令文件,应在屏幕上显示出内存从0000H 开始的16个字节的内容,若有错误,用DEBUG检查之。

(5)自编程序:修改上面程序,使除以16进制数形式显示内存内容外,还能在其右边显示该16进制码所对应的ASCII字符,07-0D的控制字符用'.'代替。

六.实验报告要求

1、各项实验记录及观察体会。

2、自编程序草稿及调试结果。

七.思考题

利用INT 21H 显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同?

实验4 汇编语言程序上机过程

一.实验目的

熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。了解汇编语言程序的汇编、运行环境。

二.实验内容

1.掌握常用的编辑工具软件(如WORD、EDIT)、MASM和LINK的使用;

2.伪指令:SEGMENT,ENDS,ASSUME,END,OFFSET,DUP;

3.利用的INT 21H的1号功能实现键盘输入的方法;

三.实验要求

1.仔细阅读有关伪指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的内容;

2.了解利用的INT 21H的1号功能实现键盘输入的方法,了解.EXE文件和.COM文件的区别及用INT 21H 4C号功能返回系统的方法;

3.阅读下面程序段。

四.实验环境

PC微机

DOS操作系统或Windows 操作系统

MASM。EXE,LINK。EXE,DEBUG。COM或宏汇编集成环境

五.实验步骤

程序:

data segment

message db 'This is a sample program of keyboard and disply'

db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'

data ends

stack segment para stack 'stack'

db 50 dup(?)

stack ends

code segment

assume cs:code,ds:data,ss:stack

start:mov ax,data

mov ds,ax

mov dx,offset message

mov ah,9

int 21h

again:mov ah,1

int 21h

cmp al,1bh

je exit

cmp al,61h

jc nd

cmp al,7ah

ja nd

and al,11011111b

nd:mov dl,al

mov ah,2

int 21h

jmp again

exit:mov ah,4ch

int 21h

code ends

end start

实验步骤:

1.用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。

2.用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。

3.用TYPE命令显示1产生的.LST文件。

4.用LINK将.OBJ文件连接成可执行的.EXE文件。

5.在DOS状态下运行LINK产生的.EXE文件。即在屏幕上显示标题并提示你按键。每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。按ESC键可返回DOS。若未出现预期结果,用DEBUG检查程序。

六.实验报告要求

汇编,连接及调试时产生的错误,其原因及解决办法。

七.思考题

1.若在源程序中把INT 21H的'H'省去,会产生什么现象?

2.把INT 21H 4CH号功能改为INT 20H,行不行?

实验5 分支程序实验

一.实验目的

1.掌握分支程序的设计方法;

2.掌握利用DEBUG修改参数、检查结果的方法;

3.熟悉汇编语言源程序的编辑、汇编、连接及调试过程。

二.实验内容

1.编写一个程序,显示AL寄存器中的两位十六进制数

2.编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z 字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。

三.实验要求

1.编写实验内容要求的两个程序;

2.写出调试以上程序,即修改程序参数,检查结果的操作方法;

3.熟悉源程序汇编、连接命令的使用方法即要回答的内容。

四.实验环境

PC微机

DOS操作系统或Windows 操作系统

MASM.EXE,LINK.EXE,https://www.360docs.net/doc/e411551629.html,或宏汇编集成环境

五.实验步骤

1.用EDIT或其它编辑软件,编写.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM。

2.对其进行汇编及连接,产生.EXE文件。

3.对.EXE文件进行调试运行。

(1)用DEBUG调试运行,学会修改AL内容的方法;

(2)对DSPKEY.EXE键入不同的字符,分别进行调试;

(3)在MS-DOS下运行这两个.EXE文件。

六.实验报告要求

1.画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。

2.说明本实验是如何利用DEBUG进行调试的。

七.思考题

编写显示AX中四位十六进制数程序,画出程序的流程图。

实验参考程序清单

(1) 显示AL中两位十六进制数程序:

;DISPHEX.ASM

CODE SEGMENT

ASSUME CS:CODE

START:MOV AL,3EH

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码

MOV AH,4CH

INT 21H

CODE ENDS ;返回DOS

END START

(2) 显示键入字符程序

;DISPKEY.ASM

CODE SEGEMENT

ASSUME CS:CODE

START:MOV AH,1

INT 21H ;等待键入字符,送AL

CMP AL,0DH ;是否是回车符?

JZ DONE ;是则转DONE退出程序

CMP AL,’0’

JB NEXT

CMP AL,’9’

JA CHARUP

MOV DL,AL

MOV AH,2

INT 21H

JMP START CHARUP:CMP AL,41H

JB NEXT

CMP AL,5AH

JA CHRDN DISPC:MOV DL,’C’

MOV AH,2

INT 21H NEXT:JMP START CHRDN:CMP AL,61H

JB NEXT

CMP AL,7AH

JA NEXT

JMP DISPC DONE:MOV AH,4CH

INT 21H CODE:ENDS

END START

实验6 循环程序实验

一.实验目的

1.掌握循环程序的设计方法;

2.学会针对不同的问题,选用不同的组织循环的方法;

3.进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。

二.实验内容

1.编写一个程序,显示BX寄存器中的两位十六进制数;

2.编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z 字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。

三.实验要求

1.编写实验内容要求的两个程序;

2.写出调试以上程序,即修改程序参数,检查结果的操作方法;

3.熟悉源程序汇编、连接命令的使用方法即要回答的内容。

四.实验环境

PC微机

DOS操作系统或Windows 操作系统

MASM.EXE,LINK.EXE,https://www.360docs.net/doc/e411551629.html,或宏汇编集成环境

五.实验步骤

1.用EDIT或其它编辑软件,编写.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM;

2.对其进行汇编及连接,产生.EXE文件;

3.对.EXE文件进行调试运行。

(1)用DEBUG调试运行,学会修改AL内容的方法;

(2)对DSPKEY.EXE键入不同的字符,分别进行调试;

(3)在MS-DOS下运行这两个.EXE文件。

六.实验报告要求

画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。

七.思考题

编写一循环程序,测量一字符串长度,并用16进制数显示之。

实验7 子程序实验

一.实验目的

1.掌握主程序与子程序之间的调用关系及调用方法;

2.掌握子程序调用过程中近程调用与远程调用的区别;

3.掌握通过堆栈转送参数的方法。

二.实验内容

1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。

2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。

三.实验要求

1.第一个实验程序用子程序的近程调用实现。由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。实验过程中可以从堆栈的内容看到两个子程序的返回地址值。由于是近调用,地址值只包括返回地址的段内偏移量。在每个子程序的执行中,检查CS值是不变的。

2.第二个程序是利用远调用的方法调用子程序的。在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。

3.第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。一段是将参数(此处是串首址TABLE,串的长度N及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。有关该方法的原理此处不再介绍。

4.预习子程序设计的基本方法,根据实验内容要求,画出子程序及主程序的流程图;熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。

四.实验环境

PC微机

DOS操作系统或Windows 操作系统

MASM.EXE,LINK.EXE,https://www.360docs.net/doc/e411551629.html,或宏汇编集成环境

五.实验步骤

1.编辑、汇编两个源程序,生成相应的可执行文件(.EXE)

2.用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。

3.检查程序执行的结果是否正确。

六.实验报告要求

1.说明用堆栈传送参数的过程及其具体方法。

2.分析实验结果及所遇到问题,并说明解决的方法。

七.思考题

分析远程调用与近程调用的区别,在用DEBUG有关命令观察时,执行过程有何不同。参考程序清单

1.码型转换程序清单:

;CONV.ASN

DATA SEGMENT

BUF DB 0ABH,0CDH,0DEH,01H,02H,03H

DB 3AH,4BH,5CH,6FH

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

MOV CX,10

LEA BX,BUF

AGAIN:MOV AL,[BX]

CALL HEXASC

INC BX

LOOP AGAIN

MOV AH,4CH

INT 21H

HEXASC PROC NEAR

MOV DL,AL

PUSH CX

MOV CL,4

SHR DL,CL

POP CX

CALL DISP ;显示高位HEX数

MOV DL,AL

AND DL,0FH

CALL DISP

RET

HEXASC ENDP

DISP PROP

CMP DL,9

JBE NEXT

ADD DL,7

NEXT:ADD DL,30H

MOV AH,2

INT 21H ;显示

RET

DISP ENDP

CODE ENDS

END START

2.统计并显示某键入字符的个数的程序:

;COUNTER.ASM

DATA SEGMENT

CHAR DB ‘b’

BUF DB 50H,? ,50H DUP(?)

DATA ENDS

MCODE SEGMENT

ASSUME CS:MCODE,DS:DATA START:MOV AX,DATA

MOV DS,AX

LEA DX,BUF

MOV AH,9

INT 21H

LEA SI BUF

MOV CL,[SI+1]

MOV CH,0 ;CX中为字符串长度

INC SI

INC SI ;SI指向串首址TABLE

MOV AL,CHAR

MOV AH,0 ;AX中为待查字符

PUSH SI

PUSH CX

PUSH AX ;参数送堆栈

CALL CHECK

POP AX :统计个数在AL中

MOV DL,CHAR

MOV AH,2

INT 21H

MOV DL,AL

AND DL,0FH

CMP DL,9

JBE NEXT

ADD DL,7

NEXT:ADD DL,30H

MOV AH,2

汇编语言实验报告

合肥工业大学计算机与信息学院 实验报告 课程:汇编语言程序设计专业班级: 学号: 姓名:

实验一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/e411551629.html,程序(若当前盘为C) C:>DEBUG↙ – ;(“–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG命令) 3、用“A”命令编辑和汇编源程序 -A 136C:0100 MOV AX,[0200] 136C:0103 MOV BX,[0202] 136C:0107 ADD AX,[0204] 136C:010B ADC BX,[0206] 136C:010F MOV [0208],AX 136C:0112 MOV [020A],BX 136C:0116 4、用“U”命令反汇编验证源程序 -U CS:0100 136C:0100 A10002 MOV AX,[0200] 136C:0103 8B1E0202 MOV BX,[0202] 136C:0107 03060402 ADD AX,[0204] 136C:010B 131E0602 ADC BX,[0206] 136C:010F A30802 MOV [0208],AX 136C:0112 891E0A02 MOV [020A],BX 136C:0116 0000 ADD [BX+SI],AL 136C:0118 0000 ADD [BX+SI],AL 136C:011A 0000 ADD [BX+SI],AL 136C:011C 3400 XOR AL,00 136C:011E 5B POP BX 136C:011F 1300 ADC AX,[BX+SI] - 5、程序未执行前,用“R”命令观察,相关寄存器的内容。

汇编实验指导书

汇编语言实验指导书 授课教师李娜 授课对象 05计科、网络、06计科 授课时间 07-08学年第一学期 授课地点一、二、四机房 课程简介 一.实验课程的性质和目的 汇编语言程序设计是计算机专业的一门专业基础课,是学好计算机底层系统构成的课程。汇编语言程序设计是一门实用性很强的课程。汇编语言程序程序设计实验教案是教案的重要环节,是理论教案的重要补充,只有通过实验,学生才能熟练掌握汇编语言程序设计的基本方法,并对其有更深刻的认识。本门实验课是单独设课。 二.实验教案的方法和手段 为了提高实验教案效果,实验严把预习、实验、实验报告3个环节。实验在软件实验室机房完成,单独设组,个人完成实验,每项实验以小班为单位,实验考勤采用电子签到制度。 预习:安排学生学习实验内容,了解实验的过程和操作规程,并布置思考题和预习报告,让学生有目的地去查阅与实验相关的资料。 实验:实验开始前由指导教师讲解实验要点,提出注意事项。实验过程中,主题是学生,教师是辅助作用,要求学生独立完成实验。 实验报告:实验结束后,强调学生及时填写实验记录表,对实验过程进行详细记录,对实验结果细致地分析、讨论,完成相关思考题作业。 三.课程学时 本实验课实验总学时为32学时。 四.实验成绩的考核方法 汇编语言实验成绩按百分制核定。实验过程占50%,实验报告占50%。五.大纲的适用范围 本大纲适用计算机科学与技术专业和计算机应用与维护专业学生。 六.主要设备与器材配备

七.实验项目汇总表 实验一熟悉汇编语言编程环境 一.实验目的 <1)熟悉汇编语言编程环境; <2)掌握基本汇编程序。。 二.实验仪器设备 计算机 三.实验重点、难点 熟悉汇编语言编程环境; DEBUG常用命令的正确使用。-T/-U/-Q/-G 四.实验题目 比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘metch’,否则,显示’no match’。 五.实验内容、步骤 1.调用EDIT建立ASM源文件。 2.用汇编程序MASM对源文件汇编产生目标文件OBJ。 <如有问题,可用DEBUG调试。) 3.用LINK联接程序产生执行文件EXE。 4.执行程序。 附:源程序 ;PROGRAM TITLE GOES HERE—COMPARE STRING ;******************************************************** data segment string1 db 'move the cursor backward.' String2 db 'move the cursor backward.'

汇编语言循环程序实验报告

东北大学 计算机硬件技术基础实验报告 一、实验目的 (1) 加深对循环结构的理解; (2) 掌握循环程序的设计方法; (3) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。 二、实验内容 1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。 2.设STR字符串是以0结尾。试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。 3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。 三、算法描述流程图 实验内容1、2、3的流程图分别为图1、图2、图3。

图 1 图 2 图3

四、实验步骤 1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。 1)输入源程序: DATA SEGMENT BUF DW 23,123,-12,-210,45,0,90,-453 BUF1 DW 8 DUP(0) BUF2 DW 8 DUP(0) A DW ? B DW ? DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA BX, BUF LEA SI, BUF1 LEA DI, BUF2 MOV A,0 MOV B,0 MOV CX,8 L0: MOV AX,[BX] CMP AX,0 JGE L1 MOV [DI],AX ADD DI,2 INC B JMP NEXT L1: MOV [SI],AX ADD SI,2 INC A NEXT: ADD BX,2 LOOP L0 MOV AH, 4CH INT 21H CODE ENDS END START 2)运行程序。

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

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

实验四循环结构汇编语言程序设计 一、实验目的 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)

汇编语言程序设计实验指导书

汇编语言实验报告题目:子程序设计 班级:rbw111 姓名:吴德鹏 学号:201107092416 完成日期:2013.12.22

概述: 《汇编语言程序设计》实验指导书是非计算机、非电类的其他专业:包括纺织、机械、热能等专业的《汇编语言程序设计》课程配套使用的实验指导。在理论课的教学中着重介绍微机系统的组成及工作原理,针对INTEL 8088/8086系列介绍相应的指令系统和汇编语言程序设计,介绍了接口的一般概念和CPU与外设交换信息的常用方式的软硬件设计思想。实验课测重培养学生的汇编语言设计能力及一些简单接口程序设计的方法,训练学生汇编语言程序调试的能力。通过实验,使学生加深对课堂教学内容的理解,培养学生综合使用微型机的初步能力。其中实验一、实验二是后续实验的基础,通过该实验,学生应能了解汇编语言源程序的一般格式,熟悉汇编语言程序的上机过程和调试程序的基本方法,重点放在DEBUG调试程序的命令使用方法上。也可以将实验一、实验二合并为一个实验,按照*实验一的要求进行;实验三、四、五进一步培养学生的各种结构的程序设计能力;实验六主要是简单接口的综合应用,为学生建立一个微机应用系统的概念,使学生通过具体的实例对相关的接口有感性认识,提高学生的实际动手能力和独立解决问题的能力。教师可以根据专业学时的多少和学生的具体情况来开设实验。 一、实验目的: 1.进一步熟悉分支、循环程序设计的方法及用DEBUG调式程序的方法。 2.熟练掌握子程序的参数传递的方式、子程序的嵌套、递归调用及其设计方法和技巧。 3、培养学生创新精神和独立运用所学基本知识和技能分析问题和解决问题的能力。 二、实验属性: 显示学生名次表:编制一程序,要求接收从键盘输入的一个班的学生成绩,并存放于50字的grade数组中,其中grade+i保存学号为i+1的学生的成绩。然后根据grade中的学生成绩,把学生名次填入50字的rank数组中,其中rank+i的内容是学号为i+1学生的名次。再按学号顺序把名次从终端上显示出来。 说明:程序设计中应体现出模块化程序设计思想和方法。 三、实验仪器设备: 提供实验条件。 Pc机并在debug的环境下进行调试

计算机组成原理实验1-汇编语言实验

微处理器与接口技术 实验指导

实验一监控程序与汇编语言程序设计实验 一、实验要求 1、实验之前认真预习,明确实验的目的和具体实验内容,设计好主要的待实验的程序,做好实验之前的必要准备。 2、想好实验的操作步骤,明确通过实验到底可以学习哪些知识,想一想怎么样有意识地提高教学实验的真正效果。 3、在教学实验过程中,要爱护教学实验设备,认真记录和仔细分析遇到的现象与问题,找出解决问题的办法,有意识地提高自己创新思维能力。 4、实验之后认真写出实验报告,重点在于预习时准备的内容,实验数据,实验过程、遇到的现象和解决问题的办法,自己的收获体会,对改进教学实验安排的建议等。善于总结和发现问题,写好实验报告是培养实际工作能力非常重要的一个环节,应给以足够的重视。 二、实验目的 【1】学习和了解TEC-XP16教学实验系统监控命令的用法; 【2】学习和了解TEC-XP16教学实验系统的指令系统;

【3】学习简单的TEC-XP16教学实验系统汇编程序设计。 三、实验注意事项 (一)实验箱检查 【1】连接电源线和通讯线前TEC-XP16实验系统的电源开关一定要处于断开状态,否则可能会对TEC-XP16实验系统上的芯片和PC机的串口造成损害。 【2】五位控制开关的功能示意图如下: 【3】几种常用的工作方式【开关拨到上方表示为1,拨到下方为0】 (二)软件操作注意事项 【1】用户在选择串口时,选定的是PC机的串口1或串口2,而不是TEC-XP16实验系统上的串口。即选定的是用户实验时通讯线接的PC机的端口; 【2】如果在运行到第五步时没有出现应该出现的界面,用户需要检查是不是打开了两个软件界面,若是,关掉其中一个再试; 【3】有时若TEC-XP16实验系统不通讯,也可以重新启动软件或是重新启动PC再试; 【4】在打开该应用软件时,其它的同样会用到该串口的应用软件要先关掉。

汇编语言学习知识程序设计实验

目录 目录 (1) 实验一利用DEBUG熟悉常用指令的使用 (2) 一、实验目的 (2) 二、示例 (2) 三、实验题 (2) 实验二汇编程序和连接程序的使用 (6) 一、实验目的。 (6) 二、示例。 (6) 三、实验题。 (8) 实验三顺序结构程序设计 (11) 一、实验目的 (11) 二、示例 (11) 三、实验题 (12) 四、实验报告 (15) 实验四循环结构程序设计 (16) 一、实验目的 (16) 二、示例 (16) 三、实验题 (18) 实验五分支结构程序设计 (21) 一、实验目的 (21) 二、示例 (21) 三、实验题 (22) 实验六子程序设计 (29) 一、实验目的 (29) 二、实验题 (29)

实验一利用DEBUG熟悉常用指令的使用 一、实验目的 熟悉指令系统,掌握常用指令的用法;通过实验加深对各种寻址方式的理解;能熟练使用DEBUG中的命令对指令进行反汇编,观察并了解机器代码。 二、示例 请分别用一条汇编语言指令完成如下功能:(过程略)。 1.用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。 ADD AL,[BX][SI] 2.用位移量为0520H的直接寻址方式把存储器中的一个字与3412H相加,并把结果送回该存储单元。 ADD WORF PTR [0520H],3412H 三、实验题 1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执行完后AX寄存器的内容。要求输入指令,相应存储单元的内容要事先设置,单步 P执行,观察执行结果。 (设置存储器的值)

汇编语言-实验二 循环与子程序程序设计

实验二循环与子程序程序设计 一、实验目的 1) 加深对循环结构的理解。 2)掌握循环程序的设计方法。 3)学习子程序的定义和调用方法。 4)掌握子程序、子程序的嵌套、递归子程序的结构。 5) 掌握子程序设计、编制及调试。 6) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。 二、实验内容 1) 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。 2)将从3000H内存单元开始的100个字节存储单元全部清0。 3)编制在屏幕上显示九九乘法表的程序。 4)编制在屏幕上显示用*组成的三角形的程序。 5)设有五个字数据存放在以BUF为首地址的内存单元中,要求采用调用多个字数据相加的子程序方法编程,和的低位字放在RESULT单元,和的高位字放在RESULT+2单元,并将结果显示在屏幕上。 6)编写一个递归子程序,计算指数函数X n的值,其中X,n从键盘输入。 三、源程序 EXAM2-1 DA TA SEGMENT BUF DB’S=1+2×3+3×4+4×5+…+N(N+1)+…=’,’$’ RES DW 4 DUP(0),’$’ DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START:MOV AX,DA TA MOV DS,AX MOV DX, OFFSET BUF MOV AH,09H

INT 21H MOV DX, 1 MOV BL, 2 NEXT:MOV AL,BL INC BL MUL BL ADD DX,AX CMP AX,200 JNA NEXT MOV CX,0004H MOV DI,OFFSET RES ADD DI,03H NEXT1:MOV AX, DX AND AX, 000FH CMP AL,0AH JB NEXT2 ADD AL,07 NEXT2:ADD AL, 30H MOV [DI],AL DEC DI PUSH CX MOV CL,04 SHR DX,CL POP CX LOOP NEXT1 MOV DX,OFFSET RES MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START 执行程序EXAM2-1·EXE,屏幕上显示结果: S=1+2×3+3×4+4×5+...+N(N+1)+ (045) EXAM2-2 ORG 2000H 2000 BF0030 MOV DI, 3000 2003 B164 MOV CL, 64 2005 C60500 MOV BYTE PTR[DI],0 2008 47 INC DI 2009 FEC9 DEC CL 200B 75F8 JNZ 2005 200D F4 HLT

汇编语言程序设计-实验指导书

汇编语言程序设计 实验指导书 编写:郑利平 合肥工业大学计算机与信息学院 2008-9-1

汇编语言程序设计实验指导书 《汇编语言程序设计》实验是学习本课程的每个考生必须要通过的一个重要的实践环节,根据“汇编语言程序设计自学考试大纲”规定:上机实验单独作为本课程的实验考核成绩。《汇编语言程序设计》是一门实践性很强的课程,只有多上机操作,对汇编语言源程序进行编辑、汇编、连接、调试和运行全过程的训练,才能加深对本课程基本知识的理解,才能熟练地掌握程序设计的方法与技巧,才能学好本课程。 本实验指导书是完全按照《汇编语言程序设计自学考试大纲》中“实验大纲”的要求编写的,为便于考生较好完成上机操作和实验报告,特此作出如下说明和要求: (1)做好上机实验的准备工作:应考者对每个实验需要进行预习,了解相关内容和具体要求,熟悉上机操作步骤,学会相关系统软件的使用,掌握各种操作调试命令。 (2)编写源程序:按照实验题目的要求,应考者要事先独立完成汇编语言源程序的编写工作,并对源程序进行认真的静态检查,减少错误的发生。 (3)完成实验报告:做完上机实验,应考者要严格按照实验报告的格式要求写出实验报告。实验报告的内容为:实验名称、实验的目的、实验的内容和要求、实验步骤、实验结果并附上源程序清单和程序流程图。

实验一DEBUG的使用 (一)实验目的 1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。 2、掌握8086/8088的寻址方式及多字节数据的处理方法。 (二)实验设备 硬件环境:IBM-PC及其兼容机 软件环境:操作系统DOS3.0版本以上 调试程序https://www.360docs.net/doc/e411551629.html, (三)实验内容和要求 实验内容: 1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。 2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H 单元中。 实验要求: 本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。 (四)预习要求 1、复习DOS启动方式和DOS有关命令的使用; 2、阅读本书后的附录,熟悉掌握DEBUG调试程序中的A、D、E、G、Q、R、T、U命令的书写格式及功能; 3、复习寻址方式和相关的数据传送指令及算术运算指令。 (五)实验步骤 1、启动DOS操作系统 2、运行https://www.360docs.net/doc/e411551629.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↙

北京理工大学汇编语言实验报告实验五 子程序设计实验

实验五子程序设计实验(设计性实验) 一、实验要求和目的 1.熟悉汇编语言程序设计结构; 2.熟悉汇编语言子程序设计方法; 3.熟悉利用汇编语言子程序参数传递方法; 4.熟悉汇编语言字符串处理基本指令的使用方法; 5.掌握利用汇编语言实现字符串的输入输出程序设计方法; 6.掌握数制转换程序实现方法。 二、软硬件环境 1、硬件环境:计算机系统windows; 2、软件环境:装有MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 A)子程序知识要点: 1、掌握子程序的定义语句; 过程名 PROC [near/far] 过程体 RET 过程名 ENDP 2.子程序结构形式 一个完整的子程序一般应包含下列内容: 1. )子程序的说明部分 在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法. 说明时,应含如下内容: .子程序名:命名时要名中见意. .子程序的功能:说明子程序完成的任务; .子程序入口参数:说明子程序运行所需参数及存放位置; .子程序出口参数:说明子程序运行结果的参数及存放位置; .子程序所占用的寄存器和工作单元; .子程序调用示例; 2、)掌握子程序的调用与返回 在汇编语言中,子程序的调用用CALL,返回用RET 指令来完成。 .段内调用与返回:调用子程序指令与子程序同在一个段内。因此只修改IP; .段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。 3.)子程序的现场保护与恢复 保护现场:在子程序设计时,CPU 内部寄存器内容的保护和恢复。 一般利用堆栈实现现场保护和恢复的格式: 过程名PROC [NEAR/FAR]

余敦辉《汇编语言》实验指导书实验1-实验3

《汇编语言》实验指导书

目录 实验一Debug命令的使用 (3) 实验二基本汇编指令的使用 (9) 实验三汇编语言程序的调试与运行 (13) 实验四系统功能调用程序的调试与运行………………错误!未定义书签。 实验五分支程序设计……………………………………错误!未定义书签。 实验六循环程序设计……………………………………错误!未定义书签。 实验七子程序设计………………………………………错误!未定义书签。 实验八高级汇编语言程序设计…………………………错误!未定义书签。 实验九I/O程序设计……………………………………错误!未定义书签。 实验十中断程序设计……………………………………错误!未定义书签。 实验十一综合程序设计 (38)

实验一Debug命令的使用 一、知识点 1、DEBUG简介 DEBUG.EXE是DOS提供的用于调试可执行程序的一个工具软件。在汇编语言程序调试中很常用。 DEBUG的提示符是“-”,所有DEBUG调试命令军在此提示符下输入。 DEBUG命令都是一个字母,后跟一个或多个参数,也可使用默认参数。 DEBUG命令的使用注意问题: (1)字母不分大小写 (2)只使用十六进制数,但没有带后缀字母“H” (3)命令如果不符合DEBUG的规则,则将以“error”提示,并以“^”指示出错位置。 (4)每个命令只有按下回车键后才有效,可以用Ctrl+Break终止命令的执行。 2、Debug的调入和退出 以WIN7环境为例,点击“开始/运行…”,在“运行”对话框中输入命令:cmd,然后点击“确定”,进入DOS命令行状态: C:\Documents and Settings\lfy> 然后输入命令: >Debug 进入Debug调试状态,出现Debug命令提示府“-”,在此提示符下可运行所需要的Debug 命令了。 退出Debug的命令:Q 3、Debug常用命令 (1)汇编命令A,格式为: - A [地址] 功能:从指定地址开始允许输入汇编指令,并将该指令汇编成机器指令代码从指定地址开始存放。若不指定地址,则系统从默认的地址开始存放。按回车键退出汇编状态 应用:用于调试一条指令或几条指令组成的一个程序段。

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

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 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 程序运行结果

汇编语言实验报告(子程序)

西安财经学院信息学院 姓名 学号 10051704 班级计本1004班 指导教师张娟 《汇编语言程序设计》实验报告 实验名子程序结构程序设计 实验室实验楼403 实验日期 2013/06/09 1、实验目的及要求 1. 学习子程序的编写,主子程序的调用 2. 不同模块间程序的调用和调试 二、实验环境 硬件环境:一台微型计算机; 软件环境:windows 7 链接程序:LINK.EXE 调试环境:DOSBOX虚拟平台。 3、实验内容 数据段中的6个字符,“ABCDEF”,调用子程序将其逐个显示出来。子程序的功能是显示一个字符。 四、实验过程 1. 通过编译程序、链接程序分别生成OBJ和EXE文件后,直接运 行查看结果如下: 2. 反汇编,查看程序的指令,如下所示:

3. 用 -d 查看数据段内存放的数据: 4. 单步执行

查看堆栈段的内容:

继续单步执行:

5、源程序清单 程序源代码如下: DATA SEGMENT MAG DB ‘ABCDEF’ DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV SI, 0 MOV CX, 6 LL: MOV DL, MAG[SI] CALL MADD INC SI LOOP LL MOV AH, 4CH INT 21H MADD PROC MOV AH, 02H INT 21H RET MADD ENDP CODE ENDS END START 6、实验体会 本次实验完成比较顺利。首先,程序是在网上找的,但是我用纸笔写下来仔细地看程序的每一行代码,都弄清楚以后,才建立的文件一步一步执行下来的。其实实验中还是遇到了一些小问题,但都能够顺利解决,所以本次实验不仅巩固了理论知识、培养了动手能力,还增加了做实验的自信心。对以后的学习都有很大的帮助。

汇编语言——输入输出程序设计实验

实验四输入/输出实验(2学时综合性实验) 1.实验目的 (1) 掌握输入输出程序设计的概念和方法。 (2) 了解PC机外围芯片8259的功能。 (3)学习如何在PC机上编写具有输入输出功能的程序,包括8259芯片的使用方法。 2.实验说明 本实验要求自行编写一个显示器输出处理程序,它可以完成内存中保存的一串字符在屏幕显示, 因此本实验既属于输入输出实验,也属于中断实验。 3.实验内容 编写一个显示器输出处理中断程序(名为NEW09),实现DOS 21H中断的9号功能,在屏幕上输出内存缓冲区BUF中以”$”结束的一串字符串。要求:缓冲区的偏移地址采用DX寄存器进行传递。 4.实验准备 (1) 预习输入输出程序设计的特点和方法。 (2) 仔细阅读参考程序,弄清外围芯片接口初始化的意义和方法。 5.实验步骤 (1) 建立源文件,并通过汇编和连接,产生可执行文件。 (2) 运行程序,观察常规字符键及功能键按下时程序的反应, DATAS SEGMENT buf db'li hongbin','$';此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS

main proc far START: mov al,68h mov ah,35h int 21h push es push bx push ds mov bx,offset buf mov dx,offset new09 mov ax,seg new09 mov ds,ax MOV AX,DATAS MOV DS,AX pop ds pop bx pop es sti mov al,68h mov ah,25h int 21h main endp

汇编语言程序设计实验篇emu

1.汇编语言程序设计实验篇 1.1.汇编系统软件简介 Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。 1.1.1创建程序 https://www.360docs.net/doc/e411551629.html, TEMPLATE程序 本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。 在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。

在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。 输入全部指令后,单击按钮,保存相应的程序段。 2.EXE TEMPLATE程序 本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。

在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。 在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验) 一、实验目的 1、掌握主程序与子程序之间的调用关系及其调用方法。 2、掌握子程序调用过程中近程调用与远程调用的区别。 3、熟练掌握码型变换的程序。 二、实验内容 1、从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制 数,并在屏幕上显示。要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。数据可循环输入,遇‘00’结束。 三、实验准备 1、预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。 2、熟悉键盘输入和字符显示的程序段的编制。 四、实验步骤 1、编辑、汇编源程序,生成可执行文件。 2、执行程序,检查输入、输出结果,看是否正确。如不正确,用DEBUG检查,修改 源程序,再汇编、运行,直到程序正确为止。 3、用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆 栈的变化情况。 五、实验报告要求 1、分析近程调用和远程调用的主要区别。用DEBUG命令观察执行过程有何不同。 2、分析实验结果及所遇到的问题的解决方法。 主程序流程图 转换子程序TRAN流程图

七、程序清单 STA SEGMENT STACK ’STACK’ DB 100 DUP(0) STA ENDS GSAG SEGMENT PARA ‘CODE’ ASSUME CS:CSAG MAIN PROC FAR STRA T: PUSH DS SUB AX,AX PUSH AX REV: MOV AH,1 INT 21H MOV BL,AL INT 21H MOV AH,AL MOV AL,BL CMP AX,3030H JE ENDTRAN CALL NEAR PTR TRAN CALL FAR PTR CON MOV AL,0DH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP JMP REV ENDTRAN: RET MAIN ENDP TRAN PROC NEAR AND AX,0F0FH MOV BL,AL MOV BL,AL MOV CL,3 SHL AL,CL MOV CL,1 SHL BL,CL ADD AL,BL ADD AL,AH RET TRAN ENDP CSAG ENDS CSBG SEGMENT PARA’CODE’ ASSUME CS:CSBG

实验指导书参考2

汇编语言程序设计实验指导书

汇编语言程序设计实验指导书 《汇编语言程序设计》实验是学习本课程的每个考生必须要通过的一个重要的实践环节,根据“汇编语言程序设计自学考试大纲”规定:上机实验单独作为本课程的实验考核成绩。《汇编语言程序设计》是一门实践性很强的课程,只有多上机操作,对汇编语言源程序进行编辑、汇编、连接、调试和运行全过程的训练,才能加深对本课程基本知识的理解,才能熟练地掌握程序设计的方法与技巧,才能学好本课程。 本实验指导书是完全按照《汇编语言程序设计自学考试大纲》中“实验大纲”的要求编写的,为便于考生较好完成上机操作和实验报告,特此作出如下说明和要求: (1)做好上机实验的准备工作:应考者对每个实验需要进行预习,了解相关内容和具体要求,熟悉上机操作步骤,学会相关系统软件的使用,掌握各种操作调试命令。 (2)编写源程序:按照实验题目的要求,应考者要事先独立完成汇编语言源程序的编写工作,并对源程序进行认真的静态检查,减少错误的发生。 (3)完成实验报告:做完上机实验,应考者要严格按照实验报告的格式要求写出实验报告。实验报告的内容为:实验名称、实验的目的、实验的内容和要求、实验步骤、实验结果并附上源程序清单和程序流程图。

实验一DEBUG的使用 (一)实验目的 1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。 2、掌握8086/8088的寻址方式及多字节数据的处理方法。 (二)实验设备 硬件环境:IBM-PC及其兼容机 软件环境:操作系统DOS3.0版本以上 调试程序https://www.360docs.net/doc/e411551629.html, (三)实验内容和要求 实验内容: 1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。 2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H 单元中。 实验要求: 本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。 (四)预习要求 1、复习DOS启动方式和DOS有关命令的使用; 2、阅读本书后的附录,熟悉掌握DEBUG调试程序中的A、D、E、G、Q、R、T、U命令的书写格式及功能; 3、复习寻址方式和相关的数据传送指令及算术运算指令。 (五)实验步骤 1、启动DOS操作系统 2、运行https://www.360docs.net/doc/e411551629.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↙

汇编语言程序设计实验

第2章汇编语言程序设计实验 2.1、实验1-1——多字节数的运算 1、实验目的计科1406 熟悉汇编语言的上机环境和各种工具(编辑、汇编、连接、调试);201416010608掌握完整段和简化段两种汇编程序的编写;李文俊 掌握简单汇编程序的处理和调试过程。 2、实验内容 ⑴、两个长度为3个字节(3B)的二进制无符号数,分别存放在首地址为buf1和buf2的连续内存单元中,编程求这两者之和,并将结果放在起始地址为res的内存单元中。例如,这两个数据为888888H、456789H,则其和应为[1]CDF011H。 要求: ?用完整段和简化段两种方式实现。 ?观察它们的反汇编结果并进行比较,单步运行程序。 注意: ?程序运行前先将res清0,程序运行后观察res单元中的数据是否符合预期。 ?数据存放应“高对高、低对低”。 ⑵、将两数改为3B的压缩BCD码,重复以上实验过程。例如,这两个数据为888888H、456789H,则其和应为[1]345677H(表示[1]345677)。 ?注意,每两个字节相加后,应紧接着进行二-十进制调整。 3、实验扩展和思考 ⑴、计算两个长度为3B的二进制数据之差应如何进行操作? ⑵、计算两个长度为3B的压缩BCD码数据之差应如何进行操作? ============================================================================ ==== 实验报告 ============================================================================

第五次汇编语言实验报告 子程序设计

汇编语言实验报告 Assembly Language Programming Lab Reports ______________________________________________________________________________ 班级:姓名:学号:实验日期: 学院:专业: 实验顺序:原创:___ 实验名称:子程序设计 实验分数:_______ 考评日期:________ 指导教师: ______________________________________________________________________________ 一.实验目的 1、掌握过程调用伪指令: PROC,ENDP,NEAR和FAR。 2、掌握 CALL,RET,RET n。理解子程序调用时现场保护和恢复现场的意义。 3、掌握子程序传递参数的三种方式,寄存器,内存单元,堆栈。 4、培养在复杂的程序设计时,采用模块化结构划分功能,分解程序的意识。 5、对子函数的嵌套调用和递归调用有一定的理解。 ______________________________________________________________________________二.实验环境 操作系统:windows 8 编译程序:masm 5.0 ______________________________________________________________________________三.实验原理 1.子程序递归,堆栈传参 2.寄存器、存储器传参 ______________________________________________________________________________ 四.实验步骤及结果分析 1.子程序递归调用(求阶乘) 用堆栈进行传递参数 高级语言函数调用过程 Fac(n) = fac(n-1)*n n>0 Fac(n)= 1 n=0 高级语言递归调用,形参中的内容在这层递归调用结束后才会被释放 实参5 实参 4 实参 3 实参2 实参 1 形参n=5 形参n =4 形参n =3 形参n =2 形参n =1 Fac(4)*5 Fac(3)*4 Fac(2)*3 Fac(1)*2 Fac(0)*1 Fac(n-1)*n Fac(n-1)*n Fac(n-1)*n Fac(n-1)*n Fac(n-1)*n

相关文档
最新文档