汇编实验报告电子科技大学.docx

上传人:b****1 文档编号:3132422 上传时间:2023-05-05 格式:DOCX 页数:36 大小:994.89KB
下载 相关 举报
汇编实验报告电子科技大学.docx_第1页
第1页 / 共36页
汇编实验报告电子科技大学.docx_第2页
第2页 / 共36页
汇编实验报告电子科技大学.docx_第3页
第3页 / 共36页
汇编实验报告电子科技大学.docx_第4页
第4页 / 共36页
汇编实验报告电子科技大学.docx_第5页
第5页 / 共36页
汇编实验报告电子科技大学.docx_第6页
第6页 / 共36页
汇编实验报告电子科技大学.docx_第7页
第7页 / 共36页
汇编实验报告电子科技大学.docx_第8页
第8页 / 共36页
汇编实验报告电子科技大学.docx_第9页
第9页 / 共36页
汇编实验报告电子科技大学.docx_第10页
第10页 / 共36页
汇编实验报告电子科技大学.docx_第11页
第11页 / 共36页
汇编实验报告电子科技大学.docx_第12页
第12页 / 共36页
汇编实验报告电子科技大学.docx_第13页
第13页 / 共36页
汇编实验报告电子科技大学.docx_第14页
第14页 / 共36页
汇编实验报告电子科技大学.docx_第15页
第15页 / 共36页
汇编实验报告电子科技大学.docx_第16页
第16页 / 共36页
汇编实验报告电子科技大学.docx_第17页
第17页 / 共36页
汇编实验报告电子科技大学.docx_第18页
第18页 / 共36页
汇编实验报告电子科技大学.docx_第19页
第19页 / 共36页
汇编实验报告电子科技大学.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

汇编实验报告电子科技大学.docx

《汇编实验报告电子科技大学.docx》由会员分享,可在线阅读,更多相关《汇编实验报告电子科技大学.docx(36页珍藏版)》请在冰点文库上搜索。

汇编实验报告电子科技大学.docx

汇编实验报告电子科技大学

计算机专业类课程

实验报告

课程名称:

汇编语言程序设计

学  院:

计算机

专  业:

计算机工程

学生姓名:

周乃彬

学  号:

2012060020005

指导教师:

唐勇

日  期:

 2014年11月20日

电子科技大学

实验报告

实验一

一、实验名称:

汇编源程序的上机调试操作基础训练

二、实验学时:

4

三、实验内容和目的:

内容:

1.DEBUG命令的使用

2.程序的调试与运行

3.编写程序计算以下表达式:

Z=(5X+2Y-7)/2

设X、Y的值放在字节变量VARX、VARY中,结果存放在字节单元VARZ中。

目的:

1.掌握DEBUG的基本命令及其功能

2.学习数据传送和算术运算指令的用法

3.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。

四、实验原理:

1.DEBUG.EXE是DOS提供的可用于调试可执行程序的一个工具软件,也是可用于汇编语言程序设计的一种调试工具

2.在DOS的提示符下,可如下键入Debug启动调试程序:

DEBUG  [路径\文件名] [参数1] [参数2]

3.运行命令G(Go)从指定地址处开始运行程序,直到遇到断点或者程序正常结束。

格式为:

G [=地址] [断点地址1,断点地址2,...,断点地址10]

4.追踪命令T(Trace),也称为单步命令,每执行一条指令就显示运行结果,使程序员可以细致地观察程序的执行情况。

有两种格式:

1)逐条指令追踪:

-T[=地址]

该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。

2)多条指令追踪:

-T[=地址][值]

该命令从指定地址起执行n条命令后停下来,n由[值]确定

5.继续命令P(Proceed),格式为:

-P[=地址] [数值]

类似T命令,逐条执行指令、显示结果。

但是当遇到子程序调用、中断功能调用和循环指令等时,不在子程序、中断服务程序或循环体中单步执行,而是直接执行完成子程序、中断服务程序或循环体,然后显示结果。

6.显示内存单元内容的命令D(Dump)命令显示主存单元的内容,格式为:

-D[地址]或-D[范围]

-d100    ;显示数据段100h开始的主存单元

-dcs:

0    ;显示代码段的主存内容L3;显示三个变量

-d2f0L20;显示ds:

2f0h开始的20h个主存数据

7.汇编程序以汇编语言程序文件作为输入,并由它产生两种输出文件——目标程序文件和源程序列表,如图所示:

其中,目标程序文件(.OBJ)经连接定位后交给机器执行;源程序列表文件(.LST)将列出源程序、目标程序和机器语言代码及符号表。

其中,符号表是汇编程序所提供的一种诊断手段,它包括程序中所用的所有符号和名字,以及这些符号和名字所指定的地址值。

如果程序出错,可以比较容易地从这个符号表中检查出错误。

五、实验器材(设备、元器件)

windowsXP,Masm50

六、实验步骤:

1.编辑源程序,建立一个以后缀为.ASM的文件.

2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。

无错时继续第3步。

3.连接目标程序,产生可执行程序。

4.用DEBUG程序调试可执行程序,记录数据段的内容。

七、实验数据及结果分析:

实验代码:

DATASEGMENT

VARXDB1

VARYDB2

VARZDB?

DATAENDS

STACK1SEGMENTPARASTACK

DW20HDUP(0)

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX

MOVAL,0H

MOVAL,VARX

MOVCL,2H

SHLAL,CL;4*x

ADDAL,VARX;5*x

MOVBL,VARY

SHLBL,CL;2*y

ADDAL,BL;5*X+2*Y

SUBAL,7H;5*X+2y-7

SARAL,1H;(5x+2y-7)/2

MOVVARZ,AL;

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

实验截图:

八、实验结论、心得体会和改进建议:

1.通过实验使我知道了和熟悉了汇编程序设计的步骤

2.建立数学模型:

遇到一个题目,首先要进行全面的分析,根据问题提出的条件特点,找出规律,找出问题的数学模型或者制定解决问题的规律。

3.合理分配存储空间和寄存器

电子科技大学

实验报告

实验二

一、实验名称:

分支程序与循环程序设计

二、实验学时:

4

三、实验内容和目的:

内容:

1.根据输入的字母进行大小写转换(若是输入小写字母则转换成为大写字母,反之),若输入的不是字母则提示出错并重新输入。

2.显示九九表

目的:

1.掌握分支程序的结构。

2.掌握分支程序的设计与调试方法。

3.掌握循环程序设计与调试方法

4.掌握正确分配与使用寄存器。

四、实验原理:

1.预留存储器空间RES1、RES2和RES3。

RES1DB0

RES2DB0

RES3DB0

2.按照顺序正确取出要判定的数据

LEABX,BUF

LL:

MOVAL,[BX];要注意正确选用间址寄存器

INCBX

判定语句及其相应的跳转语句

JMPLL

3.正确存放数据到指定的空间

MOVDL,0;存放数据个数,初值为0

INCDL

MOVRES1,DL

4.从键盘输入字符中断

Movah,1

Int21h;结果是al←输入字符的ASCII码

5.显示一个字符中断

Movah,2

Movdl,要显示字符的ASCII码

Int21h;

6.屏幕显示字符串(9号功能调用)

格式:

MOVDX,字符串的偏移地址

   MOVAH,09H

   INT21H

在使用9号功能调用时,应当注意以下问题:

   ①待显示的字符串必须先放在内存一数据区(DS段)中,且以‘$’符号作为结束标志。

   ②应当将字符串首地址的段基址和偏移地址分别存入DS和DX寄存器中。

7.部分需要注意的指令

ADC带进位加法----将进位标志CF的值加在和中

·INC加1.

·SUB减法.

·SBB带借位减法----连着借位CF一起减去

·DEC减1.

·NEC求补----变反加1

·CMP----比较执行两操作数相减,影响标志位OF、SF、ZF、PF和CF,即通过标志位的状态进行两数大小的比较。

·MUL无符号乘法

·IMUL整数乘法

以上两条,结果如下:

对字节操作数,(AX)←(AL)*src;对字操作数,(DX,AX)←(AX)*src

·DIV无符号除法.

·IDIV整数除法.

以上两条,结果回送:

商回送AL,余数回送AH,(字节运算);

或商回送AX,余数回送DX,(字运算).

五、实验器材(设备、元器件)

windowsXP,Masm50,Windows7,MasmforWindows(一个集成软件,运行、链接、调试全包括)

六、实验步骤:

1.编写源程序文件;

2.汇编,若发现语法错误或者格式错误则修改;

3.链接,形成可执行文件;

4.画流程图:

5运行程序,得到正确结果;

6撰写实验报告

七、实验数据及结果分析:

1.根据输入的字母进行大小写转换流程图

根据输入的字母进行大小写转换源程序

datasegment

promotedb'pleaseinputacharacter:

$'

errorhintsdb'inputerror!

onlycharacterplease!

$'

outputdb?

dataends

stack1segmentparastack

dw20hdup(0)

stack1ends

codesegsegment

assumeds:

data,ss:

stack1,cs:

codeseg

start:

movax,data

movds,ax

leadx,promote

movah,9

int21h

movah,1

int21h

cmpal,41h

jaelowercasebuf

jberrorhint

lowercasebuf:

cmpal,5ah

jbelowercase

jauppercasebuf

uppercasebuf:

cmpal,61h

jberrorhint

jaeuppercase

lowercase:

addal,32

movoutput,al

jmpdone

uppercase:

subal,32

movoutput,al

jmpdone

errorhint:

leadx,errorhints

movah,0ah

int21h

movah,4ch

int21h

done:

movah,2

movdl,output

int21h

movah,4ch

int21h

codesegends

endstart

根据输入的字母进行大小写转换截图:

2.九九乘法表流程图:

九九乘法表源程序

codesegment;数据段开始

mainprocfar;子程序调用时使用的参数

assumecs:

code;设定数据放入cs寄存器

pushds;DS寄存器入栈

movax,0;ax寄存器赋值0

pushax;ax寄存器入栈

movbl,1;乘数赋值为1

lop2:

movbh,1;被乘数赋值为1

lop1:

moval,bh;被乘数存放如al寄存器当中

mulbl;将bl与bh相乘结果送到ax中

aam;乘法调整指令

addbh,30h;变为ASCII的值

addbl,30h

movcx,ax

movdl,bh;用21中断显示被乘数

movah,2

int21h

movdl,'*';显示乘号

movah,2

int21h

movdl,bl;显示乘数

movah,2

int21h

movdl,'=';显示等号

movah,2

int21h

cmpch,0;查看高位有没有值

jetu;等于转移

addch,30h;若有则显示

movdl,ch

movah,2

int21h

tu:

addcl,30h;否则显示低位

movdl,cl

movah,2

int21h

movdl,'';显示空格movah,2

int21h

subbh,30h;将ASCII还原为BCD数

subbl,30h

incbh;将被乘数加一

cmpbh,bl;比较看是不是要换行

jnalop1;不高于转移

movdl,0ah;换行与置首位显示

movah,2

int21h

movdl,0dh;置于首位置并显示

movah,2

int21h

incbl;否则乘数加一

cmpbl,9;比较乘数与9的大小,是不是要结束

jnalop2

movah,4ch;返回dos

int21h

mainendp

codeends

endmain

九九乘法表截图:

实验分析:

打印九九乘法表时,需注意换行问题,以及循环时的下标变换。

八、实验结论、心得体会和改进建议:

1通过本次实验过程.掌握分支程序的结构,认识到汇编语言和其他语言一样丰富,有着多种分支结构,汇编语言从底层支持语句的跳转这样在实现一些分支语句时既有效率有简洁直观。

2.通过本次实验过程还还掌握分支程序的设计与调试方法;

3.通过本次实验过程还掌握循环程序设计与调试方法;

4.通过本次实验过程还掌握正确分配与使用寄存器;

5.回答思考:

思考:

LOOP指令是先循环再减CX还是先减CX后判定再循环?

答:

先减去CX

 

电子科技大学

实验报告

实验三

一、实验名称:

数制、码制和子程序的编程与调试

二、实验学时:

4

三、实验内容和目的:

内容:

1、从键盘输入两个2位十进制正数,相加,结果以十六进制数形式显示在屏幕上。

(要求结果显示完整的算式)

2、从键盘输入两个2位十进制正数转换成组合BCD码后,相加,结果以十进制形式显示在屏幕上。

(要求结果显示完整的算式)

目的:

1.熟练掌握编写汇编语言原程序的基本方法和基本框架。

2.熟练使用DEBUG调试程序。

3.掌握十六进制数与ASCII码之间,ASCII码与BCD码之间的转换。

4.掌握用DOS功能调用,实现字符的输入和显示。

5.掌握子程序的编程与调试方法。

四、实验原理:

1.字符串输入功能调用(0AH号功能调用)

格式:

MOVDX,已定义缓冲区的偏移地址

      MOVAH,0AH

         INT21H

功能:

从键盘接收字符,并存放到内存缓冲区。

①执行前先定义一个输入缓冲区,缓冲区内第一个字节定义为允许最多输入的字符个数,该个数包括回车符0DH在内。

第二个字节保留,在执行程序完毕后存入输入的实际字符个数(不含回车)。

从第三个字节开始存入从键盘上接收字符的ASCII码。

若实际输入的字符个数少于定义的最大字符个数,则缓冲区其他单元自动清0。

若实际输入的字符个数大于定义的字符个数,其后输入的字符丢弃不用,一直到输入回车键为止。

②应当将缓冲区首地址的段基址和偏移地址分别存入DS和DX寄存器中。

2.组合BCD码是用4个二进制位表示一个十进制位,如:

MOVAL,68H 

MOVBL,28H 

ADDAL,BL  ;AL=68H+28H=90H

DAA     ;十进制调整:

AL=96H

4.十进制数加法调整指令DAA

功能:

用于对组合BCD码相加的结果进行调整,使结果仍为组合的BCD码。

分析:

二进制加法是逢二进一,而BCD码≤9时逢二进一,BCD码>9时将逢十进一。

因此,对于>9的BCD码要进行调整,才能得到正确的运算结果。

具体的调整方法是:

加6调整。

五、实验器材(设备、元器件)

Windows7,MasmforWindows(一个集成软件,运行、链接、调试全包括)

六、实验步骤:

1.编写源程序文件;

2.汇编,若发现语法错误或者格式错误则修改;

3.链接,形成可执行文件;

4.画流程图:

5运行程序,得到正确结果;

6撰写实验报告

七、实验数据及结果分析:

1.从键盘输入两个2位十六进制数,相加,结果以十进制形式显示在屏幕上

流程图:

源程序:

DATASEGMENT

MSG1DB13,10,'Pleaseinputnumber_1:

$'

MSG2DB13,10,'Pleaseinputnumber_2:

$'

CRLFDB13,10,'$'

NNDB?

?

MMDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEADX,MSG1

MOVAH,9

INT21H

CALLIN_CHAR

MOVMM,AL

LEADX,MSG2

MOVAH,9

INT21H

CALLIN_CHAR

MOVNN,AL

LEADX,CRLF

MOVAH,9

INT21H

MOVAL,MM

CALLOUT_NUM

MOVDL,'+'

MOVAH,2

INT21H

MOVAL,NN

CALLOUT_NUM

MOVDL,'='

MOVAH,2

INT21H

MOVAL,NN

ADDAL,MM

MOVAH,0

ADCAH,0

CALLOUT_1

EXIT:

MOVAH,4CH

INT21H;返回DOS

IN_CHAR:

LEABX,NN

MOVCX,2

IN_1:

MOVAH,1

INT21H

CMPAL,'0'

JBIN_1

CMPAL,'F'

JAIN_1

CMPAL,'9'

JBE_09

CMPAL,'A'

JBIN_1

SUBAL,7

_09:

SUBAL,30H

MOV[BX],AL

INCBX

LOOPIN_1

XCHGAL,NN

MOVBL,16

MULBL

ADDAL,NN

RET

OUT_NUM:

MOVAH,0

OUT_1:

MOVDX,0

MOVBX,100

DIVBX

XCHGAX,DX

CALLOUT_CHAR

MOVDX,0

MOVBX,10

DIVBX

XCHGAX,DX

CALLOUT_CHAR

MOVDL,AL

CALLOUT_CHAR

RET

OUT_CHAR:

PUSHAX

ADDDL,30H

MOVAH,2

INT21H

POPAX

RET

CODEENDS

ENDSTART

截图:

2、从键盘输入两个2位十进制正数转换成组合BCD码后,相加,结果以十进制形式显示在屏幕上。

流程图:

源程序:

datasegment

hint1db'pleaseinputthefirstnumber:

$'

hint2db'pleaseinputthesecondnumber:

$'

opt1db3,?

3dup(?

),'$'

opt2db3,?

3dup(?

),'$'

hint3db'?

?

+'

hint4db'?

?

='

hint5db'$'

dataends

stack1segmentparastack

dw20hdup(0)

stack1ends

codesegment

assumeds:

data,ss:

stack1,cs:

code

start:

movax,data

movds,ax

movah,9

leadx,hint1

int21h

movah,0ah

leadx,opt1

int21h

leadx,opt2

int21h

moval,opt1+2

movhint3,al

moval,opt1+3

movhint3+1,al

moval,opt2+2

movhint4,al

moval,opt2+3

movhint4+1,al

moval,opt1+2

movcl,4

salal,cl

movbl,opt1+3

subbl,30h

addal,bl

movbl,opt2+2

movcl,4

salbl,cl

movcl,opt2+3

subcl,30h

addbl,cl

addal,bl

jcset0

jncset1

set0:

movbl,30h

jmpdone

set1:

movbl,31h

jmpdone

done:

movhint5,bl

daa

movbl,al

movcl,4

saral,cl

addal,30h

movhint5+1,al

andbl,0fh

addbl,30h

movhint5+2,bl

movah,9

leadx,hint3

int21h

movah,4ch

int21h

codeends

endstart

截图:

八、实验结论、心得体会和改进建议:

1.通过本次实验熟练掌握编写汇编语言原程序的基本方法和基本框架。

2.通过本次实验已经熟练使用DEBUG调试程序。

3.通过本次实验掌握十六进制数与ASCII码之间,ASCII码与BCD码之间的转换,从数码变换的角度入手,着重强调了子程序的调用以及跳转指令的使用,并且使数码在计算机内部的表示方法深入人心。

4.通过本次实验还掌握用DOS功能调用,实现字符的输入和显示。

5.通过本次实验还掌握子程序的编程与调试方法。

6.思考:

上例中,bcdbuf预留的空间是否可以缩减?

程序是否可以精简?

(假定我们转换的都是带符号数)

上例用加乘的方式实现了转换,如果用乘加的方式是否可行?

答:

不能。

 

电子科技大学

实验报告

实验四

一、实验名称:

串操作指令及其应用程序的设计与调试运行

二、实验学时:

4

三、实验内容和目的:

内容:

.从键盘输入两个长度不同的字符串,设字符串长度小于25个字符。

要求在屏幕上以右边对齐的形式显示出来。

目的:

1.熟悉串操作指令的基本格式和使用方法。

2.掌握常用的串操作程序的设计方法。

3.熟悉串操作程序的调试运行过程。

四、实验原理:

1.需要用到9号DOS功能调用显示字符串,以实现人机对话。

比如:

在数据段中设置两个存放提示信息的字符串,一个是提示用户输入,另一个是指示显示结果:

massage1DB‘pleaseinputastring:

’,0AH,0DH,‘$’

massage2DB‘Right-adjustingofstring:

’,0AH,0DH,‘$’

2.需要用到10号DOS功能调用输入连续的字符串,并为这些字串预留存储空间,比如:

NUMEQU25

STRING1DBNUM,0,NUMDUP(‘‘),0AH,0DH,‘$’

STRING2DBNUM,0,NUMDUP(‘‘),0AH,0DH,‘$’

3.需要用到的串操作指令有:

1)串传送指令MOVSB/MOVSW

功能:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2