汇编实验之四则运算

汇编实验之四则运算
汇编实验之四则运算

计算机原理实验室实验报告

课程名称:

姓名学号班级成绩

设备名称及软件环境

实验名称四则运算实验日期

一.实验内容

从键盘输入一个十进制两位数的四则运算表达式,

如23*56-(8*19)/6+67-8=,编程计算表达式的值,

输出十进制结果(有可能是三位或四位十进制),+-*/位置任意。

并要求程序能反复执行直道对“还要继续吗?(y/n)”之类的提示回答“n”或“N”为止。二.理论分析或算法分析

根据题目的要求,可以把整个源程序大致划分为几个基本结构:

程序加法、减法、乘法、除法、显示结果五个部分。

首先用1号功能以输入字符的形式接收输入的算式,再判断输入字符ASCII码,如果是+、-、*、/、=或数字,则跳转到相应功能模块,并把输入的字符转为数值传入BX寄存器,在各功能模块中继续用1号功能输入字符,执行以上操作,将输入号符转为数据存入DX中,由于*、/优先级要高,加、减模块的实现中要根据输入运算符号进行将BX入栈操作,如果是相同优先级运算符,则直接将BX,DX中的数据进行相应运算,输入=则输出运算结果,这时输出字符串Continue?,用户输入y/n执行继续计算和退出操作

三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)

主程序流程:

代码 : 根据题目的要求,可以把整个源程序大致划分为几个基本结构,程序加法、减法、乘法、除法、显示结果五个部分

源程序:

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS

NEXTLINE MACRO ;显示换行宏

MOV AH,2

MOV DL,10

开始 从键盘输入字符 AL=‘+’ AL=‘-’ AL=‘*’ AL=‘=’ AL=‘/’ 输出结果 结束

从键盘输入加数并执行加运算 从键盘输入加数并执行减运算

从键盘输入加数并执行乘运算 从键盘输入加数并执行除运算 Y Y Y Y Y N N N

N

MOV AH,2

MOV DL,13

INT 21H

ENDM

START:

MOV AX,DATAS

MOV DS,AX

MOV BX,0

INPUT1:

MOV AH,1 ;从键盘输入一个字符

INT 21H

CMP AL,'+' ;判断是否为+

JZ ADDITION

CMP AL,'-' ;判断是否为-

JZ SUBTRATION

CMP AL,'*' ;判断是否为*

JZ MULTIPLICATION

CMP AL,'/' 判断是否为/

JZ DIVISION

CMP AL,'=' 判断是否为=

JZ RESULT

CMP AL,58 判断输入是否为数字

JS L1

JMP INPUT1

L1:

CMP AL,47节

JNS L2

JMP INPUT1

L2:

SUB AL,48 如果输入为数字,将数值计入BX MOV CL,AL

MOV AX,BX

MOV CH,10

MUL CH

ADD AL,CL

MOV BX,AX

JMP INPUT1

ADDITION: 输入+后,进入加法运算

MOV DX,0

INPUT2:

MOV AH,1 从键盘输入字符

INT 21H

CMP AL,'+' 判断是否为+

JZ L23

CMP AL,'-' 判断是否为-

JZ L24

CMP AL,'*' 判断是否为*

JZ L25

CMP AL,'/' 判断是否为/

JZ L26

CMP AL,'=' 判断是否为=

JZ L27

CMP AL,58 判断是否为数字

JS L21

JMP INPUT2

L21:

CMP AL,47

JNS L22

JMP INPUT2 如果不是数字,则跳转到INPUT2 L22:

SUB AL,48 将输入字符转换为数值

MOV CL,AL

MOV AX,DX

MOV CH,10

MUL CH

ADD AL,CL

MOV DX,AX

JMP INPUT2

L23:

ADD BX,DX 执行加运算

JMP ADDITION

L24:

ADD BX,DX

JMP SUBTRATION

L25:

ADD BX,DX

JMP MULTIPLICATION

L26:

ADD BX,DX

JMP DIVISION

L27:

ADD BX,DX

JMP RESULT

SUBTRATION: 如果输入-,则执行减法

MOV DX,0

MOV AH,1

INT 21H

CMP AL,'+' 判断是否为+

JZ L33

CMP AL,'-' 判断是否为-

JZ L34

CMP AL,'*' 判断是否为*

JZ L35

CMP AL,'/' 判断是否为/

JZ L36

CMP AL,'=' 判断是否为=

JZ L37

CMP AL,58 判断是否为数字 JS L31

JMP INPUT3

L31:

CMP AL,47

JNS L32

JMP INPUT3

L32:

SUB AL,48 将字符转换为数值 MOV CL,AL

MOV AX,DX

MOV CH,10

MUL CH

ADD AL,CL

MOV DX,AX

JMP INPUT3

L33:

SUB BX,DX 执行减法操作 JMP ADDITION

L34:

SUB BX,DX

JMP SUBTRATION

L35:

SUB BX,DX

JMP MULTIPLICATION

L36:

SUB BX,DX

JMP DIVISION

L37:

SUB BX,DX

JMP RESULT

MULTIPLICATION:

MOV DX,0

INPUT4:

MOV AH,1

INT 21H

CMP AL,'+' JZ L43 CMP AL,'-' JZ L44 CMP AL,'*' 判断是否为*

JZ L45

CMP AL,'/' 判断是否为/

JZ L46

CMP AL,'=' 判断是否为=

JZ L47

CMP AL,58 判断是否为数字

JS L41

JMP INPUT4

L41:

CMP AL,47

JNS L42

JMP INPUT4

L42:

SUB AL,48 将字符转换为数值

MOV CL,AL

MOV AX,DX 将字输入数字加入数值

MOV CH,10

MUL CH

ADD AL,CL

MOV DX,AX

JMP INPUT4

L43:

MOV AX,BX 将BX 移入AX

MUL DX 与DX 中的数进行乘运算

MOV BX,AX 将AX 中的数值返回BX

JMP ADDITION

L44:

MOV AX,BX 将BX 移入AX

MUL DX 与DX 中的数进行乘运算

MOV BX,AX 将AX 中的数值返回BX

JMP SUBTRATION

L45:

MOV AX,BX 将BX 移入AX

MUL DX 与DX 中的数进行乘运算

判断是否为+

判断是否为-

JMP MULTIPLICATION

L46:

MOV AX,BX 将BX移入AX

MUL DX 与DX中的数进行乘运算 MOV BX,AX 将AX中的数值返回BX JMP DIVISION

L47:

MOV AX,BX 将BX移入AX

MUL DX 与DX中的数进行乘运算 MOV BX,AX 将AX中的数值返回BX JMP RESULT

DIVISION:

MOV DX,0

INPUT5:

MOV AH,1

INT 21H

CMP AL,'+' JZ L53

CMP AL,'-' JZ L54

CMP AL,'*' JZ L55

CMP AL,'/' JZ L56

CMP AL,'=' JZ L57

CMP AL,58 JS L51

JMP INPUT5 L51:

CMP AL,47 JNS L52

JMP INPUT5 L52:

SUB AL,48 MOV CL,AL MOV AX,DX MOV CH,10 MUL CH

ADD AL,CL MOV DX,AX JMP INPUT5 L53: 判断是否为+ 判断是否为- 判断是否为* 判断是否为/ 判断是否为= 判断是否为数字

DIV DX

MOV AH,0

MOV BX,AX

JMP ADDITION

L54:

MOV AX,BX

DIV DL

MOV AH,0

MOV BX,AX

JMP SUBTRATION

L55:

MOV AX,BX

DIV DL

MOV AH,0

MOV BX,AX

JMP MULTIPLICATION

L56:

MOV AX,BX

DIV DL

MOV AH,0

MOV BX,AX

JMP DIVISION

L57:

MOV AX,BX

DIV DL

MOV AH,0

MOV BX,AX

JMP RESULT

RESULT:显示结果

MOV CH,10

MOV CL,100

R1: 将BX中的计算结果以十进制输出 MOV AX,BX

DIV CL

MOV DL,AL

MOV DH,AH

MOV AL,AH

MOV AH,0

MOV BX,AX

ADD DL,48

MOV AH,2

INT 21H

MOV AH,0

MOV AL,CL

DIV CH

CMP CL,1

JZ R2

JMP R1

R2:

MOV DL,DH

ADD DL,48

MOV AH,2

INT 21H

S2:

NEXTLINE

LEA DX,STRING 询问是否继续输入

MOV AH,9

INT 21H

MOV AH,1

INT 21H

CMP AL,'y' 输入y则跳转到S1

JE S1

CMP AL,'n' 输入n则跳转到S3,即结束程序

JE S3

JNE S2

S3:

MOV AH,4CH

INT 21H

CODES ENDS

四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)

运行结果

输入要计算的式子,按等号输出结果,计算机提示是否继续输入,输入字符y,继续输入,键入n 退出程序,如果键入字符为其他,则反回提示输入

如图:

五.结论

程序的主要功能是实现四则运算,整个程序中主要分为,输入算式,加法,减法,乘法,除法和以十进制显示结果这几个部分

本程序基本实现了四则运算的功能,但还没能实现带有括号的四则运算,还有在除法运算中不能运算较大的数,会产生溢出现象

一开始的时候自己编出来的程序有很多问题,尤其是在循环程序上,因此查阅了不少资料,也请教了好几个同学帮着修改,调试了好久才能正常运行。由于能力有限,程序还是有不完美的地方。这次的综合实验让我对汇编有了更深刻的认识,对各种指令有了进一步的理解。

报告提交日期

第三章 8086汇编语言程序格式

第三章8086汇编语言程序格式 练习题 3.4.1 单项选择题 1.下列选项中不能作为名字项的是()。 A.FH B.A3 C.3B D.FADC 2.下列指令不正确的是()。 A.MOV AL,123 B.MOV AL,123Q C.MOV AL,123D D.MOV AL,123H 3.下列指令不正确的是()。 A.MOV BL,OFFSET A B.LEA BX,A C.MOV BX,OFFSET A D.MOV BX,A 4.若定义“BUF DB 1,2,3,4”,执行MOV AL,TYPE BUF 后AL=()。 A.0 B.1 C.2 D.3 5.若定义“A EQU 100”,执行“MOV AX,A”后,AX=()。 A.A的偏移地址B.A单元中的内容 C.100 D.A的段地址 6.若定义“B DW 1,2,10 DUP(0)”,则该伪指令分配()字节单元。 A.10 B.20 C.22 D.24 7.若定义“C DD 2,4”,则该伪指令分配()个字节单元。 A.2 B.4 C.6 D.8 8、伪指令是()规定的汇编说明符,它在源程序汇编时进行说明。 A、DEBUG B、LINK C、MASM D、EDIT 9.在上机操作过程中,MASM命令执行后,除了生成一个目标文件外,根据选择还可以生成一个()文件。 A..LST B..EXE C..MAP D..ASM 10.LINK命令执行后可以生成一个以()为扩展名的文件。 A.ASM B.EXE C.OBJ D.COM 11.一个段最大可定义()字节。 A.1M B.64K C.32K D.16K 12.若要求一个段的起始位置能被256整除的单元开始,在定位方式选项中应选()。 A.BYTE B.WORD C.PARA D.PAGE 13.宏指令与子程序相比,在多次调用时,宏指令调用的目标程序长度比子程序调用的()。 A.相同B.长C.短D.不定 14.宏指令与子程序相比,子程序调用的执行速度比宏指令的()。 A.相同B.快C.慢D.不定 15.ASSUME伪指令说明了汇编程序所定义段与段寄存器的关系,它只影响()的设定。 A.源程序B.目标程序C.汇编程序D.连接程序

汇编语言实验报告

汇编语言实验报告 专业: 班级: 姓名: 学号: 2011年12月14日

目录 实验1 利用DEBUG调试汇编语言程序段 (3) 实验2 初级程序的编写与调试实验(一) (11) 实验3 初级程序的编写与调试实验(二) (20) 实验4 汇编语言程序上机过程 (28) 实验5 分支程序实验 (33) 实验6 循环程序实验 (40) 实验7 子程序实验 (45)

实验1 利用DEBUG调试汇编语言程序段一.实验目的 1.熟悉DEBUG有关命令的使用方法; 2.利用DEBUG掌握有关指令的功能; 3.利用DEBUG运行简单的程序段。 二.实验内容 1.进入和退出DEBUG程序; 1)开始—运行,输入cmd,点确定进入命令窗口 2)在命令窗口中输入dubug进入debug程序 3)进入debug窗口后,输入q命令退出debug 2.学会DEBUG中的 1)D命令(显示内存数据D 段地址:偏移地址) 例1:-D100;显示DS段, 0100开始的128个节内容

说明:指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。 ①DSEGREG[起始地址] [L 长度] ;显示SEGREG段中(缺省内默认为DS), 以[起始地址] (缺省内为当前的偏移地址),开始的[L 长度] (缺省内默认为128)个字节的内容. ② D SEGREG[段地址:偏移地址] ;显示SEGREG段中(缺省内默认为DS), [段地址:偏移地址]开始的[L 长度] (缺省内默认为128)个字节内容 -D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H) -D DS:100 ;显示DS段, 0100H开始的128个字节内容 -D CS:200 ;显示CS段, 0200H开始的128个字节内容 -D 200:100 ;显示DS段, 0200:0100H开始的128个字节内容

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

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

汇编语言综合实验报告

XXXX大学XX学院 实验报告 课程名称:汇编语言 学号: 姓名: 系: 专业: 年级: 指导教师: 职称: 20xx~20xx学年第一学期

实验项目列表 序号实验项目名称成绩指导教师 1 实验一汇编程序的汇编及运行 2 实验二顺序程序设计 3 实验三分支循环程序设计 4 实验四 DOS功能调用 5 实验五子程序设计 总平均

福建农林大学金山学院实验报告 系:专业:年级: 姓名:学号:实验课程:汇编语言 实验室号:__ __ 实验设备号:实验时间: 90分钟 指导教师签字:成绩: 实验一汇编程序的汇编及运行 1.实验目的和要求 (1)熟悉汇编程序的汇编、连接、执行过程 (2)生成LST文件,查看LST文件 (3)生成OBJ文件,修改语法错误 (4)生成EXE文件 (5)执行 2.实验环境 IBM—PC机及其兼容机 实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:https://www.360docs.net/doc/3e13322921.html,;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。 3.实验内容及实验数据记录 (1)将数据段输入,取名1.txt,保存在MASM文件夹下。生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少? DA TA SEGMENT ORG 20H NUM1=8 NUM2=NUM1+10H DA1 DB ‘IBM PC’ DA2 DB 0AH, 0DH COUNT EQU $-DA1

数学四则运算简计算

四则运算中的简便运算 公式: 1、加法交换律:a+b=b+a 2、加法结合律:(a+b)+c=a+(b+c) 3、乘法交换律:a?b=b?a 4、乘法结合律:(a?b)?c=a?(b?c) 5、乘法分配律:(a+b)?c=a?c+b?c a?(b+c)=a?b+a?c(加号也可以换成减号) 能简便运算的要简算,不能简算的按四则运算来计算。 一、加法 类型一:利用加法交换律、结合律,观察数的末位特征,将数凑成整数进行简算。 123+45+55 74+86+26+14 163+78+22+37 类型二:算式中的大部分数字都接近整十,整百,整千……根据“多加的要减去”原则计算。如,把199看做200-1 199+299+399 99+198+97+6 99+999+9999 类型三:只有两个数相加,其中一个数字接近整十,整百,整千……根据“多加的要减去”,“少加的要再加”的原则进行计算,如,加99看做加100-1;加103看做加100+3 163+99 634+103 193+98 846+202 二、减法 类型一:连续减去两个数或者两个数以上,等于减去它们的和。 186-63-37 899-132-68 478-26-174 类型二:只有两个数相见,其中减数接近整十,整百,整千……根据“多减的加回来”,“少减的要再减”的原则计算,如,减99看做减100+1;减104看做减100-4(与加法类型三属于同类型题目) 189-99 569-104 363-97 483-102

三、加减混合计算 类型一:移动数字,符号跟着后面的符号,开头的数的符号都是加号,如,632-143-32中,632的符号是加号,143的符号是减号,32的符号是减号。移动是为了减法能消去尾数,加法可以凑整。 789+63-89 843-88+57 144-33-44 632+184-132 类型二:添括号,去括号以达到减法消除尾数,加法能凑整的目的。原则是:减号后面添括号,去括号,括号里面要变号;加号后面添括号,去括号,括号里面不变号。 638-139+39 546+188-88 436-(36+24) 563+(76-63) 四、乘法 类型一:利用乘法交换律,结合律,25?4=100,125?8=1000进行简算。 768?25?4 125?76?8 125?39?8?25?4 类型二:利用25?4=100,125?8=1000拆数。题目中出现25,125,需要找的4,8隐藏在另外的因数中。 25?32 125?64 125?32?25 25?44 125?78 类型三:乘法分配律具体应用 (一)公式的正运算,(a+b)?c= a?c+b?c a?(b+c)=a?b+a?c(加号也可以换成减号)(40+8) ?25 125?(8+80) 36?(100+50) 24?(2+10) 86?(1000-2)15?(40-8)

汇编语言综合实验报告

综合性设计性实验报告 班级:计算机科学与技术专2014 级 4 班实验项目名称:循环显示1 0 个数字符号 实验项目性质:综合性 实验所属课程:计算机组成原理与汇编语言 实验室(中心):实验室(4 0 7 ) 指导教师: 实验完成时间: 2016 年 5 月 27

一、实验目的 (1)掌握子程序的定义和调用方法。 (2)掌握子程序的编写方法及参数传递的方法。 二、实验内容及要求 本实验内容主要是编写一个显示过程汇编程序,使得在屏幕上依次显示10 个数字符号,每一行13 个字符,然后循环进行显示。实验要求是在代码段中编写这个过程,并要求用主程序调用该过程。 三、实验设备及软件 实验室(407)电脑一台以及编译器DEBUG MASM LINK软件。 四、设计方案 ㈠题目(老师给定或学生自定) 循环显示10个字符 ㈡设计的主要思路 首先,先定义一个数据段和代码段。数据段内定义一个名称为prl大小为一个字节的字符串,即本人学号。代码段内首先借助段寻址伪指令ASSUME规定好代码段和数据段分别在段寄存器CS、DS。然后start内将数据段段地址放入DS中。接下来定义一个子程序dgdsp,其实现的功能主要是先将bl(字符数目控制)清零,dl(字符范围0-9)赋值为字符0的ascll码。然后定义一个lp循环,循环内调用DOS2号功能显示字符,并bl、dl自增,接着比较dl与字符9的ascll码值的大小,若大于就将dl重置为字符0的ascll码。若小于则跳转到next循环,next循环中主要比较bl与13的大小,若小于则跳转到lp,若大于就进入bbb子程序。bbb子程序主要是先保护DX将其压栈,然后使用DOS9号功能显示prl字符串,最后将DX出栈。然后进入next循环将DX压栈,分别使用DOS0a、02号功能将dl输入显示,最后将DX出栈。分别将bl、al清零,最后跳转到lp子程序继续循环执行。 流程图如下:

汇编语言实验报告——累加

《汇编语言》实验报告 ——累加器制作 2014级计算机科学与工程学院 学号: 姓名 一、实验要求: 1.显示 INPUT N :,提示用户输入数字字串 2.检测输入字串的合法性,非法给出提示 3.将输入数字字串转化为数值,存入变量n 4.累加1~n ,存入变量sum 5.以十进制显示sum 二、流程图: 开始 输入 判断是否为回车 判断是否为数字 是 转化为数值,将堆栈中 的高位数字乘10然后与低位数字相加,放入堆 栈 否 显示“error ” 结束 否 是 判断cx=0 否 将CX加到A X中 是 得出sum的值 将结果除以10并将余数存入堆栈,累计位数cx,直至商为0 将堆栈中的数字依次输出显示,直至cx=0

三、源代码: DATAS SEGMENT str1 db "Input N:","$" str2 db "sum=","$" str3 db 0ah,"error","$" n dw 0 sum dw 0 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX LEA dx,str1;输出提示符 mov ah,9 int 21h input: mov ah,01;输入数字 int 21h cmp al,0dh;判断是否为回车 jz step1 cmp al,"0";判断字符合法性 jb error cmp al,"9" ja error sub al,"0";转化为ASCII码 mov ah,0;此段将高位乘10 push ax mov ax,n shl ax,1 push ax mov cl,2 shl ax,cl

四则运算和简便运算定律

教案过程 一、复习预习 1.换位学习 让学生以“老师的口吻”为老师讲解已学过的运算定律 2.学生与老师交流(运算中怎样简便?):讨论“我的想法对不对?” 二、知识讲解 考点/易错点1 两个数相加,交换加数的位置,和不变。这叫做加法交换律。 考点/易错点2 三个数相加,先把前两个数相加,再加第三个数。或者先把后两个数相加,再加第一个数,和不变。这叫做加法结合律。 考点/易错点3 乘法运算中交换两个因数的位置,积不变。这叫做乘法交换律。 考点/易错点4 乘法运算中,先乘前两个数,或者先乘后两个数,积不变。这叫做乘法结合律。

考点/易错点5 两个数的和与一个数相乘,可以先把它们与这个数分别相乘,再相加。这叫做乘法分配律。 考点/易错点6 1.要想运用运算定律做好简便运算,要仔细观察算式,如果只有加法,一般用到加法交换和结合律,如果算式里只有乘法,一般用到乘法交换和结合律,如果既有加又有乘,一般用到乘法分配律。当然要注意一些变式。 2.还要观察算式里面的特殊数字,如25和4,125和8,2和5等,有时101可以变成(100+1),想想如何利用好这些特殊数字。 三、例题精析 【例题1】 【题干】357+288+143 【答案】788 【解读】357+288+143 =357+143+288 =500+288 =788 【例题2】 【题干】 138+293+62+107 【答案】600 【解读】138+293+62+107 =(138+62)+(293+107) =200+400 =600 【例题3】 【题干】25×17×4

【答案】1700 【解读】25×17×4 =25×4×17 =100×17 =1700 【例题4】 【题干】(25×125)×(8×4)【答案】100000 【解读】(25×125)×(8×4) =(25×4)×(8×125) =100×1000 =100000 【例题5】 【题干】 25×(40+4) 【答案】1100 【解读】 25×(40+4) = 25×40+25×4 =1000+100 =1100 【例题6】 【题干】 125×64 【答案】8000 【解读】 125×64 =125×(8×8)

大学课程汇编语言的实验报告

实验报告 实验课程: 学生姓名: 学号: 专业班级:电气信息类III班 2011年12月20日

目录 (1)汇编语言程序上机过程 (2) (2)字符串处理程序实验 (6) (3)子程序实验 (13) (4)中断程序实验 (21) (5)C++调用汇编子程序 (25)

南昌大学实验报告 ---(1)汇编语言程序上机过程学生姓名:学号:专业班级: 实验类型:□验证■综合□设计□创新实验日期:2011.11.12/13实验成绩:一、实验目的 熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。了解汇编语言程序的汇编、运行环境。 二、实验内容 1.掌握常用的编辑工具软件(如WORD、EDIT)、MASM和LINK的使用; 2.伪指令:SEGMENT,ENDS,ASSUME,END,OFFSET,DUP; 3.利用的INT21H的1号功能实现键盘输入的方法; 三、实验环境 PC微机 DOS操作系统或Windows操作系统 MASM.EXE,LINK.EXE,https://www.360docs.net/doc/3e13322921.html,或宏汇编集成环境 四、实验要求 1.仔细阅读有关伪指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的内容; 2.了解利用的INT21H的1号功能实现键盘输入的方法,了解.EXE文件和.COM文件的区别及用INT21H4C号功能返回系统的方法; 3.阅读下面程序段。 五、主要实验步骤 程序: data segment message db'This is a sample program of keyboard and disply' db0dh,0ah,'Please strike the key!',0dh,0ah,'$' data ends stack segment para stack'stack' db50dup(?) 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 int21h again:mov ah,1

四则运算(简便运算)

四则运算(简便运算) 一、掌握运算技巧 1. 归类组合:将不同类数(如分母相同或易于通分的数)分别组合; 2. 凑整:将相加可得整数的数凑整,将相加得零的数(如互为相反数)相低消。 3. 分解:将一个数分解成几个数和的形式,或分解为它的因数相乘的形式。 4. 约简:将互为倒数的数或有倍数关系的数约简。 5. 倒序相加:利用运算律,改变运算顺序,简化计算。 6. 正逆用运算律:正难则反, 逆用运算定律以简化计算。 乘法分配律a(b+c)=ab+ac 在运算中可简化计算。而反过来,ab+ac=a(b+c)同样成立,有时逆用也可使运算简便。 二、混合运算的运算顺序: 1、从高级到低级:先算乘除,再算加减; 例1:计算:3+50×5 1÷2-1 解:原式=3+50×51×2 1-1 =3+5-1 =7 2、从内向外:如果有括号,就先算小括号里的,再算中括号里的,最后算大括号里的 例2:计算:)]59(8[)]3 163(10[--??-- 解:原式=[10-(3-2)]×(8-4) =(10-1)×4 =9×4 =36 3、从左向右:同级运算,按照从左至右的顺序进行 例3:计算:3 887)12787431(+÷-- 解:原式=3 887)241424212442(+÷-- =3 878247+? =3 831+ =3 三、简便运算典型例题 例1、4544×37 练习: 1514×8 25 2×126 原式=(1—45 1)×37 =1×37—45 1×37

=37— 4537 =3645 8 例2、27×2615 练习:19981997×1999 35×36 11 73×7574 原式=(26+1)×26 15 =26×2615+26 15 =15+26 15 =1526 15 例3、73151×81 练习: 64171×91 22201×21 1 71×5761 原式=(72+1516)×8 1 =72×81+1516×8 1 =9+15 2 =915 2 例4、51×27+53×41 练习: 61×35+65×17 81×5+85×5+8 1×10 原式=53×9+5 3×41 =5 3×(9+41) =5 3×50 =30 例5、65×131+95×132+185×136 练习:17 1×94+175×91 71×43+73×61+76×121 原式=61×135+92×135+186×13 5 =(61+92+186)×13 5 =1813×13 5 =18 5

汇编程序调试实验报告

微机原理与接口技术 作 业 班级: 目录 一、........................................................... 实验目的:2 二、............................................................. 实验环境2 三、............................................................. 实验过程3 (一)................................................. 基础知识储备3

(二)............................................. 汇编语言程序设计3

(三)汇编程序调试 (3) 四、............................................................. 调试实例4 (一)....................................................... 实例一4 (二)....................................................... 实例二6 (三)....................................................... 实例三9 (四)....................................................... 实例四12五、............................................................. 实验总结15 (一)..................................................... 实验收获15 (二)..................................................... 实验感悟16 一、实验目的: 汇编语言是一种用助记符表示的程序设计语言。用汇编语言编写的源程序生成的目标 代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、I/O接口驱动等程序设计。通过本次实验,熟练掌握汇编程序的调试,深入了解MAS汇编语言及其程序设计方法。 、实验环境 EDIT编辑器、MASME编程序、LINK连接程序、TD调试程序

四年级数学下册四则运算和简便运算练习题

一、填空题。(18分) 1、在没有括号的算式里,如果只有加、减法,或者只有乘、除法,按()顺序计算。如果有乘、除法和加、减法,要先算(),再算()。 2、计算76+4×(35-18),应先算(),再算(),最后算()。 3、计算24 ×150+60÷4,如果要改变运算顺序,先算除法,再算加法,最后算乘法,算式应该是()。 4、一个数加上0,得();0乘任何数都得();0除以()都得0。 5、53与35的和乘它们的差,积是多少综合算式是()。 6、计算24×4-81÷9时,()法和()法可以同时计算。 7、(360-65×2)÷5的运算顺序是先算()法,再算()法,最后算()法 8、计算380×[(65-25)÷4]时,先算()法,再算()法,最后算()法,结果是()。 9、根据下面的算式列出综合算式。(2分) (1)221×3=663 (2)217+123=340 208÷16=13 340÷17=20 663+13=676 500-20=480 综合算式综合算式 10、()+35=()+55,这里运用了加法(),用字母表示是()。 11、a×8+8×25= _____×(+)。 12、计算(23×125)×8时,为了计算简便,可以先算(),这样计算是根据(),用字母表示可以写成() 13、用简便方法计算326+592+74,要先算(),这是应用了()律 14、(x+y)+z=x+(y+z),这道算式运用()。 15、乘法分配律可用字母表示可写成()。 二、判断题。对的打√,错的打×。)(11分) 1、48 ×6表示6个48相乘的积是多少。() 2、因为0÷8=0,所以8÷0=0。() 3、285÷3×5和285×5÷3的结果相同。() 4、60×6÷3和60×(6÷3)的运算顺序相同。() 5、25×4÷25×4的计算结果等于1。() 6、137+6-137+6=0 () +33+67=27+100 ()8、125×16=125×8×2 () 9、134-75+25=134-(75+25)() 10、先乘前两个数,或者先乘后两个数,积不变,这是结合律。() 11、1250÷(25×5)=1250÷25×5 () 三、选择题。(2分) 1、已知○+△=☆,☆÷□=●,下面算式中正确的是()。 A. ○+△÷□=● B. ○+☆÷□=● C.(○+△)÷□=● ~ 2、750减去25的差,去乘20加上13的和,积是多少正确列式是() A、(750-25)×(20+13) B、(20+13)×(750-25) C、750-25×20+13 3、小虎的体重是36千克,是堂弟体重的2倍,而叔叔的体重是堂弟的4倍。叔叔的体重是多少千克列式是()。 ×2×4 ÷2×4 C. 36×2÷4 4、101×125= () A、100×125+1 B、125×100+125 C、125×100×1 D、100×125×1×125 四、用自己喜欢的方法计算(50分) 5×18+650÷13 70×[84÷(43-29)] 170-45÷15×23 197-12×9+61 28×【160÷(40-30)】 (224-185)×12÷26 135-168÷(26-14) 、 48×9+42×9 39×25-25×19 6400÷32

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

汇编语言程序设计实验报告三(子程序设计实验) 一、实验目的 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

汇编语言的编程步骤与调试方法

汇编语言的编程步骤与调试方法 一、汇编源程序的建立 1. 使用工具 (1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文 件; (2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件- 目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表; (3)Link连接程序,对使用的目标文件和库文件进行连接,生 成.exe文件,同时调试用.map-地址映像文件; 如果源程序无语法错误,上述三步将生成可运行的.exe文件, 如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存 在错误,需要进行调试。 (4)Debug调试程序,对.exe文件进行调试,修改,直到程序正 确。 图3 目标程序生成步骤图2. 编程过程 (1)用文本编辑软件,编写扩展名为.asm的源文程序文件。 (2)用汇编程序对编好的源文件进行汇编。 命令行:masm [*.asm] ↙ 如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。 使用MASM50汇编程序进行汇编,输入命令行masm或者masm *.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj,*.lst和*.crf。 *.obj-目标文件,用于连接生成可执行文件; *.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于

调试; *.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。 (3)目标文件的连接 命令行:link [*.obj] [*.obj] [*.lib] ↙ 连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。 *.map-地址映像文件,给出内存地址分配的有关信息。 下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe 文件。 (4)执行程序 执行*.exe文件,观察程序运行结果,如果存在错误,需要进行调试。调试工具DEBUG是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG有助于汇编语言程序员对于逻辑错误的调试。 二、汇编程序的调试

小学六年级数学四则运算简便运算500题(无重复)

小学数学四则运算一一简便运算大汇总 简便运算 4 丄+3.2+ 5 ?+6?8 3 3 ,11 7 、” 2 — )X7293.54-3-4- 12 18 24 2 7 3.4X99 + 3.4 4.8X1.010.4X(2.5F73) 4 5 (1. 6-1-1.64-1.6 + 1.6) X25 (- + --1) 亠 1 7 x lOol 9 6 18 ?36 25 7 7 15 2 12.3-2.45-5.7-4. 55—F2—+ —X — 9 5 11 9 0. 125X0. 25X64 25X (8X0.4) XI. 25 4 4 I 7—-(2—- — ) 15 15 23 1125-997 998+1246+9989 (87004-870+87) 4-87 125X8.8 1.3+4. 25 + 3.7+3. 75 17. 15- (3.5-2. 85)

6.8x16.8 + 19.3x3.2 81.5x15.8 + 81.5x51.8 + 6 7.6x1 8.5 64.2X87 + 0. 642X1300 78X36+7.8X741-7- 5 1x1+0. 125x1+0.5 8 2 2 2. 424--+4. 58X11-4^3 4 3 3. 84-3. 94-3. 94-0. 1+0. 1-r 3. 9 4.75-9.63 + (8.25-1.37) 7.48 + 3.17-(2.48-6.38) 48x1.08 + 1.2x56.8 3 2 2 3-X 25- + 37.9X 6- 5 5 5 7汕+岭)養 3333871x79.790x666611 0.9999x0.7 + 0.1111x2.7 36x1.09+1.2x67.3 25^-100 — 26

汇编语言实验报告

汇编语言程序设计实验报告 学院:计算机科学与技术 专业:计算机科学与技术 指导教师: ** 班级: ** 学号: ** 姓名:**

实验一集成环境及调试工具 一、实验题目 认识Tddebug集成操作软件 二、分析设计思想,绘制实验原理图、流程图 (一)、汇编语言程序的开发过程如图1.1所示,这个过程主要有编辑、编译、链接几个步骤构成。 图1.1 汇编语言程序开发过程 1、源程序的编辑 E: > EDIT TEST.ASM 编辑过程就是将源程序输入内存,生成一个扩展名为ASM的文本文件并存入硬盘。2、源程序的编译 E:>TASM TEST.ASM 编译也称为汇编,就是利用汇编器(如TASM或MASM)对源程序进行编译,生成扩展名为OBJ的目标文件。在编译过程中,检查语法错误,若有错,则不生成目标代码文件,并给出错误信息。根据错误信息应返回到编辑状态,修改源程序。 3、目标程序的链接 E:> TLINK TEST.OBJ 链接过程是利用链接程序(如TLINK或LINK)将用户目标程序和库文件链接、定位,生成扩展名为EXE的可执行文件。链接时,如果链接文件找不到所需要的链接信息,则发出错误信息,不生成可执行文件。 4、调试可执行程序 E:>TD TEST.EXE 如果生成的EXE文件运行后,并没有按照设计意图运行,就需要对程序进行调试,找出错误。再对源程序进行修改,即重复进行编辑、编译、链接、调试,直到生成完全正确的可执行文件为止。 (二)、Tddebug集成操作软件使用说明 1.该软件是集编辑(Edit.exe)、编译(Tasm.exe)、连接(Link.exe)和调试(TD.exe)

汇编语言程序设计复习

知识点 第一章基础知识 (1)正负数的补码表示, 掌握计算机中数和字符的表示; eg.假设机器字长为8位,[+3]补=00000011B,[-3]补= 11111101 H 。 十六进制数0FFF8H表示的十进制正数为65528D,表示的十进制负数为-8D。 8位二进制数被看成是带符号补码整数时,其最小值是-128,最大值是 127 。 第二章80x86计算机组织 (1)中央处理机CPU的组成和80x86寄存器组,重点:专用寄存器,段寄存器 eg: IP寄存器中保存的是?代码段中的偏移地址FLAGS标志寄存器中共有几位条件状态位6位,有几位控制状态位2位,标志寄存器分为哪2类?陷阱标志,中断标志。 (2)存储单元的地址和内容每一个字节单元给以一个唯一的存储器地址,称为物理地址;一个存储单元中存放的信息称为该存储单元的内容。存储器地址的分段,(低位字节存放)低地址,(高位字节存放)高地址;实模式下逻辑地址、选择器和偏移地址;物理地址的表示段基地址加上偏移地址。 eg.如果SS=6000H,说明堆栈段起始物理地址是_____60000H___。 已知字节(00018H)=14H,字节(00017H)=20H,则字(00017H)为__1420H______。 如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)= 0235H ,(DS)= 0E60H . 第三章80x86的指令系统和寻址方式 与数据有关的寻址方式(立即寻址方式,寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址寻址方式)和与转移地址有关的寻址方式(段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址)。数据传送指令(通用数据传送指令、累加器专用传送指令、输入输出指令)、算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:目的操作数必须是累加器)、除法指令(*被除数在累加器中,除法指令执行完以后,商和余数在?))、逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)、串处理指令(与REP相配合工作的MOVS、STOS、LODS 指令,与REPE/REPZ和REPNE/REPNZ联合工作的CMPS、SCAS指令)、控制转移指令(无条件转移指令、条件转移指令、循环指令、子程序调用指令、中断)。eg.【习题3.8】假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,

四年级数学四则运算与简便计算

欢迎阅读 四则运算与简便计算练习题 一、计算下面各题 121 -111 ÷ 37(120 - 103)× 50 (284+16)×(512-8208÷18) 120-36×4÷18+35 (58+37)÷(64-9×5)45 × 20 × 3 ( (121 1000 9846- 121 - 45 ×74? (120 707 - 19× (270 (2010- 50+160÷40(58+370)÷(64-45) 120-144÷18+35 347+45×2-4160÷52 (58+37)÷(64-9×5)95÷(64-45) 178-145÷5×6+42 420+580-64×21÷28 812-700÷(9+31×11) (124-85)×12÷26 (59+21)×(96÷8) 325÷13×(266-250) 140-90÷5+678

二、面各题,怎样简便就怎样计算。(24分) 49×102-2×49 125×76×8 103×32 41000÷8÷125 6756-193-207 5824÷8×(85-78) 840÷28+70×18 794-198 68×25 72×125 97×360+3×360 384+ 756-×184+ 380+ 256- 28×4 102×35 98×42 (乘法分配律的运用) 26×39+61×26 356×9-56×9 78×101-78 52×76+47×76+76 134×56-134+45×134 99×55+55 (乘法分配律的综合运用)

48×52×2-4×48 25×23×(40+4)999×999+1999 四、综合练习: 158+262+138 375+219+381+225 5001-247-1021-232 32×(25+125) (181+2564)+2719 378+44+114+242+222 276+228+353+219 178×101-178 (375+1034)+(966+125) 7755-102×76 2357- 25 25× 138× 704 25×32 102× 178× 75× 83× 25×(24+16)704×25 7300÷25÷4 98×199 123×18-123×3+85×123 178×99+178 75×24 138×25×4 79×42+79+79×57 7300÷25÷4 8100÷4÷75 (13×125)×(3×8)

小学六年级数学四则运算简便运算500题

小学数学四则运算——简便运算大汇总 简便运算 431+3.2+532+6.8 25×(8×0.4)×1.25 7154-(2154-23 1) (1211+187+245)×72 93.5÷321÷7 2 1125-997 998+1246+9989 (8700+870+87)÷87 125×8.8 1.3+4.25+3.7+3.75 17.15-(3.5-2.85) 3.4×99+3.4 4.8×1.01 0.4×(2.5÷73) (1.6+1.6+1.6+1.6)×25 (94+65-187)÷361 7 1 100257 12.3-2.45-5.7-4.55 9 7÷251+115×92 0.125×0.25×64

64.2×87+0.642×1300 78×36+7.8×741-754 2113×17+12 17×8 87×21+0.125×2 1+0.5 2.42÷43+4.58×31 1-4÷3 25÷1002625 4.25-365-(261-143) 3.8÷3.9+3.9÷0.1+0.1÷3.9 12.1-(151+21 1)×105 )37.125.8(63.975.4-+- )38.648.2(17.348.7--+ 511)9518.3(957-+- 4 1666617907921333387?+? 7.21111.07.09999.0?+? 3.672.109.136?+? 8.562.108.148?+? 5 2 69.375225533?+? 2.3 3.198.168.6?+? 5.186.678.515.818.155.81?+?+?

汇编实验报告(详细版).

计算机组成与汇编语言(实验报告) 内容: 实验一、六、七、八 院系专业:计算机学院计算机科学与技术 姓名:xxxxxxxxx 学号:2011004xxxxx 完成时间:2012年12月1日

计算机组成与汇编语言实验报告 姓名xxxx 学号2011004xxxxx 计分 专业软件工程班级xxxx 实验日期2012年 12 月 1日实验名称实验一数制转换 实验目的 ●熟悉各种进制数据之间的相互转换方法。 ●掌握二-十进制数据的相互转换程序设计。 实验内容 1.将编写好的程序1输入、编译、连接并运行。 程序1清单 #include #include #include void main() { int i,l,s0=0,s=0; char a[17]; while(l!=16) { printf("请输入一个16位的二进制数:\n"); gets(a); l=strlen(a); for(i=0;i<16;i++) { if(a[i]!='0'&&a[i]!='1') {

printf("输入的二进制数不正确!!"); break; } } } if(a[15]=='1') s++; for(i=1;i<16;i++) { if(a[15-i]=='1') s+=(1<

说明:如果不是16位二进制则会提示错误。 2.将编写好的程序2输入、编译、连接并运行。 程序2清单 #include #include void main() { int t0,t1,t2,t3,i,j; int a[16]; printf("请输入一个十进制数:"); scanf("%d",&t0); t1=t0; for(i=0;i<16;i++) { t2=t1/2; if(t2>1) a[i]=t1%2; else if(t1==1) { a[0]=1; for(i=1;i<16;i++) a[i]=0; } else if(t1==2) { a[i]=0; a[i+1]=1; for(j=i+2;j<16;j++)

相关文档
最新文档