实验二 无符号十进制数加

合集下载

实验二 算术运算类操作实验 (基础与设计)

实验二 算术运算类操作实验 (基础与设计)

实验二算术运算类操作实验 (基础与设计)一、实验要求和目的1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式;2、掌握各类运算类指令对各状态标志位的影响及测试方法;3、熟悉汇编语言二进制多字节加减法基本指令的使用方法;4、熟悉无符号数和有符号数乘法和除法指令的使用;5、掌握符号位扩展指令的使用。

6、掌握BCD 码调整指令的使用方法二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识本实验主要进行算术运算程序设计和调试,涉及到的知识点包括:1.加减法处理指令主要有加法指令ADD,带进位加法ADC,减法指令SUB,带进位减法指令SBB。

2.乘除法指令和符号位扩展指令主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令IDIV,以及符号位从字节扩展到字的指令CBW 和从字扩展到双字的指令CWD。

3.BCD 码的调整指令主要有非压缩的BCD 码加法调整指令DAA,压缩的BCD 码减法调整指令DAS,非压缩的BCD 码加法调整指令AAA,非压缩的BCD 码减法调整指令AAS,乘法的非压缩BCD码调整指令AAM,除法的非压缩BCD 码调整指令AAD。

8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令,可对下表所示的数据类型进行数据运算。

四、实验内容与步骤1、对于两组无符号数,087H 和034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响。

设计流程:源代码:DATAS SEGMENTARRAY DW 087H,034H,0C2H,05FHJIA DW 2 DUP(?) ;储存两组加法结果JIAN DW 2 DUP(?) ;储存两组减法结果CHENG DW 2 DUP(?) ;储存两组乘法结果CHU DW 2 DUP(?) ;储存两组除法结果DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV SI,0MOV BX,0SUB BX,2SUB SI,4L1:ADD SI,4ADD BX,2MOV AX,ARRAY[SI] ;第一个运算数ADD AX,ARRAY[SI+2] ;加法运算MOV JIA[BX],AX ;储存加法结果MOV AX,ARRAY[SI]SUB AX,ARRAY[SI+2] ;减法运算MOV JIAN[BX],AX ;储存减法结果MOV AX,ARRAY[SI]MUL ARRAY[SI+2] ;乘法运算MOV CHENG[BX],AX ;储存乘法结果MOV AX,ARRAY[SI]MOV CX,ARRAY[SI+2]DIV CL ;除法运算MOV CHU[BX],AX ;储存除法结果CMP BX,2JNZ L1MOV AH,4CHINT 21HCODES ENDSEND START程序结果:通过-t逐步运行程序,逐步查看每次运算后标志位的状态,结果如下:2、在数据段定义了两个多精度的有符号16 进制数,FIRST 和SECOND ,1)求两数的和与差,并将结果存放在THIRD 为首地址的缓冲区中;2)如果把两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在FORTH 为首地址的缓冲区中。

多位十进制数加法实验报告

多位十进制数加法实验报告

多位十进制数加法实验报告实验一两个多位十进制数相加的实验实验一两个多位十进制数相加的实验一、实验目的1、学习数据传送和算术运算指令的用法。

2、熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。

二、实验内容将两个多位十进制数相加。

要求被加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。

三、程序框图四、程序清单CRLF MACROMOV DL,0DHMOV AH,02HINT21HMOV DL,0AHMOV AH,02HINT21HENDMDATA SEGMENTDATA1DB 33H,39H,31H,37H,34HDATA2DB 36H,35H,30H,38H,32HDATA ENDSSTACKSEGMENTSTA DB20 DUP(?)TOP EQU LENGTH STASTACKENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA2MOV BX,05CALL DISPLCRLFMOV SI,OFFSET DATA1MOV BX,05CALL DISPLCRLFMOV DI,OFFSET DATA2CALL ADDAMOV SI,OFFSET DATA1MOV BX,05CALL DISPLCRLFMOV AX,4C00HINT21HDISPLPROC NEARDS1: MOV AH,02MOV DL,[SI+BX-1]INT21HDEC BXJNZ DS1RETDISPLENDPADDA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05AD1: SUBBYTE PTR [SI+BX-1],30HSUBBYTE PTR [DI+BX-1],30HDECBXJNZAD1MOV SI,DXMOV DI,BPMOV CX,05CLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALINCSIINCDILOOP AD2MOV SI,DXMOV DI,BPMOV BX,05AD3: ADDBYTE PTR [SI+BX-1],30H ADDBYTE PTR [DI+BX-1],30HDECBXJNZ AD3RETADDA ENDPCODE ENDSEND START五、实验要求1.读懂源程序,写出源程序注释。

十进制数的加减法运算规则知识点总结

十进制数的加减法运算规则知识点总结

十进制数的加减法运算规则知识点总结在数学中,加法和减法是最基本的运算操作之一。

而在十进制数系统中,我们常常需要进行十进制数的加减法运算。

下面将总结十进制数的加减法运算规则的知识点,帮助你更好地理解和掌握这些运算。

一、十进制数的基本概念十进制数是由0到9这10个数字组成的数,其中每一位的权值是10的幂次,从右到左依次为个位、十位、百位、千位等。

例如,数值275表示2个百、7个十和5个个。

二、十进制数的加法运算1. 对应位上的数字相加,若和小于10,则直接写在结果上;若和大于等于10,则只保留余数,进位加到更高位上。

示例:234+ 56------2902. 若两数相加时有进位,则从更高位上的数向更低位依次进位。

示例:879+ 273------1152三、十进制数的减法运算1. 从相应位上的数字减去被减数位上的数字,若差大于等于0,则直接写在结果上;若差小于0,则向高位借1。

示例:435- 267------1682. 若借位时,若被减数的前一位为0,则需要继续向前借位,直到借位为非零数。

示例:570- 279------291四、退位和进位1. 在减法运算中,退位是指从高位借1,以便进行减法运算;进位是指在加法运算中,当相加的和大于等于10时,向更高位进1。

示例:57+ 39------962. 退位和进位是十进制数加减法的基本规则,是为了保持运算的正确性。

五、运算顺序和分组规则1. 在多位数的加减法运算中,从右到左一位一位地进行运算。

2. 可以根据需要在运算过程中进行适当的分组,方便计算和理解。

示例:4+ 72- 9------67六、运算中的注意事项1. 进行十进制数的加减法运算时,要注意保持竖直对齐,确保每一位的对应。

2. 注意进位和退位的操作,以确保运算的正确性。

3. 细心检查计算过程和答案,避免计算错误。

综上所述,十进制数的加减法运算规则包括对应位数的数字相加减、进位和退位的操作。

掌握了这些规则,你就能够准确地进行十进制数的加减法运算,解决实际生活中的问题。

实验项目2

实验项目2

实验2:数据及运算【实验目的】1、掌握C语言数据类型,熟悉如何定义一个整形、字符型和实型的变量,以及对他们赋值的方法。

2、握不同的类型数据之间赋值的规律。

3、学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。

4、程序的编辑、编译、连接和运行的过程。

【实验步骤】按照下列要求,分别编写、运行以及调试程序。

1、输入并运行下面的程序#include <stdio.h>void main(void){char c1, c2;c1 = 'a';c2 ='b';printf (“%c %c\n”, c1, c2);}(1).运行此程序。

结果分析:定义c1和c2为字符,将a和b的值分别赋给c1和c2,程序的输出形式是以字符的形式输出,所以输出的结果是以原样输出的。

(2).在此基础上增加一个语句:printf(“%d%d\n”,c1,c2);再运行,并分析结果。

结果分析:定义c1和c2为字符,将a和b的值分别赋给c1和c2,程序的输出形式分别是以字符的形式和十进制形式输出,所以输出的结果是以原样输出和数字输出。

(3).再将第2行改为:int c1,c2;再使之运行,并观察结果。

结果分析:定义c1和c2为整形,将a和b的值分别赋给c1和c2,但程序的输出形式是以字符的形式输出,所以输出的结果是以原样输出的。

(4).再将第 3、4行改为:c1 = a; /* 不用单撇号 */c2 = b;再使之运行,分析其运行结果结果分析:其中a和b是字符,应该用‘’将其包含,程序有错,所以得不到输出结果。

(5).再将第 3、4行改为:c1 = ”a”; /* 用双撇号 */c2 = ”b”;再使之运行,分析其运行结果。

结果分析:“”其作用是包含字串符,而不是包含一个字符,此程序步骤有误,所以得不到输出结果。

(6).再将第 3、4行改为:c1 = 300; /* 用大于255的整数 */c2 = 400;再使之运行,分析其运行结果结果分析:定义c1和c2为字符,将300和400的值分别赋给c1和c2,输出形式是以字符c1,c2的ASCII值形输出,2、输入并运行以下给出的程序#include <stdio.h>void main(void){char c1 = ‘a’, c2 = ‘b’, c3 = ‘c’, c4 = ‘\101’, c5 = ‘\116’;printf (“a%c b%c\tc%c\tabc\n”,c1, c2, c3);printf(“\t\b%c%c”, c4, c5);}在上机前先用人工分析程序,写出应得结果,上机后将二者对照。

实验二 算术运算

实验二  算术运算

汇编语言实验报告(二)班级:01540802班姓名:南征学号: 20080705信息与电子学院实验二算术运算一、实验目的熟悉利用汇编语言对多精度十六进制和十进制的编程方法,弄清带符号数及不带符号数的运算区别,理解各状态标志位的含义,以及运算结果对各状态标志的影响,掌握无符号数的乘除法运算并保证运算结果不溢出。

二、实验要点对汇编语言的算术运算要分清是有符号的运算还是无符号的运算,当对无符号数进行加减时,要考虑进位CF,对于有符号数进行加减时,要考虑运算结果是否溢出。

为防止溢出,常将操作数利用CBW或CWD指令进行符号扩展后再进行加减运算。

对于多精度的加减运算时,对高位字节或字的加减法要分别采用ADC和DBB;对低位字节或字采用不带进位的加减指令ADD和SUB;在利用循环计算多字节的加减法时,可以用CLC指令将CF初始化为0,然后在循环体内统一使用带进位(或借位)的加减法指令。

在汇编语言进行十进制的加减运算时,首先需将操作数用BCD码示,并且要考虑操作数是用组合的BCD码还是用一个字节表示一个十进制数。

对于组合的BCD码加减法,其结果应放在AL寄存器中,再用DAA和DAS指令进行二——十进制调整。

二对于未组合的BCD码加减法,用AAA和AAS对结果进行二——十进制调整。

此外在进行十进制数减法时,要考虑用大数减小数,因为十进制数运算不能用补码表示。

对于有符号数惩罚要用IMUL指令,对无符号数乘法要用MUL指令。

字乘时AX为约定的一个乘数,其积在DX:AX中;字节相乘时AL为约定的一个乘数,其积在AX中。

乘法指令中的操作数,不得为立即数,可以为通用寄存器或存储器操作数。

对于除法要用IDIV、DIV分别对有符号数和无符号数进行除法运算。

字除法时被除数约定在DX:AX中;字节相除时,被除数约定在AX中,除法指令中的操作数可以为通用寄存器或者存储器操作数,但不得是立即数。

在进行除法运算时要考虑除数是否为零,以及其商是否溢出,在出现除零溢出时,将产生类型号为0的内部中断。

无符号十进制数加法实验

无符号十进制数加法实验

31H30H52H51H50H二进制+二进制52H50H一、实验目的:掌握MCS -51汇编语言设计,熟悉Keil µVision2仿真开发系统软件的操作方法。

二、实验内容:编写并调试一个无符号十进制数加法程序,其功能为将两个字节的二进制被加数2EA3H (存放在(31H )(30H ))和加数571DH (存放在(41H )(40H ))转换成压缩BCD 码(即4位十进制数)的被加数(存放在(52H )(51H )(50H ))和加数(存放在(62H )(61H )(60H )),并将它们相加的结果以压缩BCD 码的形式写入(52H )(51H )(50H )中。

(实验结果:(52H )=03H ;(51H )=42H ;(50H )=40H )二、实验设备:计算机、Keil µVision2仿真开发系统软件图2-1图2-2四、实验框图:五、实验步骤: 1、 在Win2000环境下打开Keil µVision2仿真开发系统软件; 2、 源文件的建立:使用菜单“文件/新建”或者点击工具栏中新建文件按钮,即可在项目窗口右侧打开一个新的文本编辑窗口,在该窗口中写入用户程序。

保存该文件时注意必须加上扩展名(汇编语言一般为.ASM 或.A51),假设我们的源程序名为exam1.asm 。

说明:源文件就是一般的文本文件,不一定使用Keil 软件编写,可以使用任意文本编辑器编写,而且,Keil 的编辑器对汉字的支持不好。

主程序框图图2-3图2-4图2-6 图2-53、工程文件的建立:点击“工程/新建工程”菜单,出现如图2-1所示的对话框。

选择CPU厂商及型号(如Ateml公司的89C51),点击“确定”,回到如图2-2所示的主界面。

点击“SourceGroup 1”中加入刚才写好的源文件exam1.asm4、工程设置:点击“工程/目标’Target 1’属性”出现如图2-3所示对话框。

湖南工业大学电自专业89s51单片机实验报告(DOC)

湖南工业大学电自专业89s51单片机实验报告(DOC)

实验一二进制转换成十进制实验一、实验设备1.THGQC-1型嵌入式单片机实验开发系统-套。

2.PC机一台。

二、实验目的掌握汇编语言设计和实验步骤,熟悉在KEIL环境下观察内部RAM 的方法。

三、实验内容单片机中的数值有各种表达方式,这是单片机的基础。

掌握各种数制之间的转换是一种基本功。

本实验内容是将一个给定的一字节二进制数,通过编程将其转换成十进制码。

四、实验步骤1)启动PC机,打开KEIL软件,软件设置为模拟调试状态。

在所建的Project文件中添加TOBCD.ASM文件,打开TOBCD.ASM文件,阅读、分析、理解程序,编译程序进行调试(如何建立工程请看附录说明)2)打开RAM观察窗口,根据示例程序注释设置断点,运行程序。

程序具体功能是将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#0ffh。

打开MEMORY WINDOW数据窗口,(在MEMORY#1中输入D:30H)观察RAM地址30H、31H、32H的数据变化30H更新为02,31H更新为05,32H更新为05。

3)修改源程序中给累加器A的赋值,重复实验,观察实验效果。

4)打开CPU寄存器窗口,选择单步或跟踪执行方式运行程序,观察各寄存器的变化可以看到程序执行的过程,加深对实验的了解。

五、实验程序参考框图六、实验程序RESULT EQU 30HORG 0000HJMP STARTORG 0100HSTART:MOV SP,#40HMOV A,#0FFHCALL BINTOBCDNOP ;此处设置断点,察看RAM 30H,31H,32HLJMP $BINTOBCD:MOV B,#100DIV ABMOV RESULT,A ;除以100得百位数MOV A,BMOV B,#10DIV ABMOV RESULT+1,A ;余数除以10得十位数MOV RESULT+2,B ;余数为个位数RETEND七.实验程序编译和结果分析图1为keil2程序编辑器的编译窗口。

《编译原理》实验报告

《编译原理》实验报告
i=0; zf=0; j=0; h=0; while(wfh[i]!='$') { ch1=wfh[i]; ch2=wfh[i+1]; if(ch1>='0' && ch1<='9') { if((ch2>='0'&& ch2<='9') || ch2=='.' || zf=1; else zf=0; } if(ch1=='.') { if(ch2>='0'&& ch2<='9'&& j<=1 ) zf=1;
ch2=='e'||ch2=='$' )
zf=1; elsh
zf=0; } if(ch1=='e'){ if(ch2>='0' && ch2<='9' && h<=1||ch2=='+'||ch2=='-')
zf=1; else zf=0; } if(ch1=='+' || ch1=='-'){
if(i==0) break; if(ch2>='0' && ch2<='9'||ch2=='$') zf=1; else zf=0; } if (zf==0) break; else i++; } if(zf==0) printf("Input number are error!\n"); else printf("Input number are right!\n"); }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二无符号十进制数加、减法实验
一、实验目的
1.掌握MCS-51汇编语言程序设计和调试方法。

2.熟悉KeilC的使用。

二、实验原理
51单片机具有强的加、减、乘、除四种基本的数学运算功能,这些运算均是直接对8位无符号二进制数而言。

利用溢出标志,可以把加、减法操作于有符号的运算;利用十进制调整指令,又可以使运算直接用十进制数(BCD码)来运算。

1.加法有下列四种指令形式:
1)ADD:完成A寄存器和第二数之间的加法,结果送A寄存器中。

2)ADDC:带进位加,同上操作,只是要加上前一次运算的进位CY的值。

以上指令均影响到标志位AC、CY、OV,P。

3)DA:十进制调整。

若A寄存器低4位的值(和数的低四位)大于9,或辅助进位标志AC=1(即第三位向第四位产生进位),则和数加6,以产生低四位正确的BCD码值。

同样,如果A寄存器的高四位的值大于9或CY=1,则高四位加6调整产生正确的高4位BCD码值。

加6调整后产生最高进位时,则置位CY。

注意:本指令只能紧跟加法指令(ADD或ADDC)的后面,其它无效。

4)INC:将源操作数加1,结果送回操作单元,不影响标志位。

加法指令有如下几条:
ADD A,Rn
ADD A,direct
ADD A,@Ri
ADD A,#data
ADDC A,Rn
ADDC A,direct
ADDC A,@Ri
ADDC A,#data
DA A
INC A
INC Rn
INC DPTR
INC @Ri
INC direct
2.51的减法指令只有两类:
1.SUBB:带借位减。

从累加器A减去指定的变量进位标志,结果送回累加器A,它要考虑前一次运算操作对CY的影响。

因此,在做多字节减法时,第一次使用SUBB之前应将CY清尽。

2.DEC:将操作数减一,不影响标志。

归纳起来,减法指令有如下几条:
SUBB A,Rn DEC Rn
SUBB A,direct DEC @R
SUBB A,@Ri DEC A
SUBB A,#data DEC direct
由于没有十进制减法指令,为了用十进制加法调整,必须采用补码相加的办法,用9AH减去减数,即得出十为模的减数的补码。

三、实验内容
1.编写并调试一个n字节无符号十进制整数加法程序,其功能为将存放在内部RAM的两个几字节压缩的BCD码(即2n位十进制数)相加,和数存放在R0指出的内部RAM中(原被加数单元),字节数存放于R7。

入口:addr1—被加数低位;addr1+n-1—被加数高位;
addr2—加数低位;addr2+n-1—加数高位;
(R7)=n
出口:addr1—和数(n+1个字节)低位;
addr1+n—和数高位。

例如:被加数存放在…41H、40H单元,加数存放在…51H、50H单元运行结果为(41H)(40H)+(51H)(50H)→(42H)(41H)(40H),(R0)=40H 2.编写并调试一个几字节无符号十进制整数减法实验程序,其功能为将(R0)指出的内部RAM中的n字节无符号压缩BCD码十进制数减去(R1)指出的内部RAM中n字节无符号压缩BCD码十进制数,差送被减数单元。

减法子程序入口时,(R0)、(R1)分别指向被减数和减数的低位字节,字节数存放在R7中,出口时R0指向差的低位字节,CY=1为正,CY=0为负,结果为补码。

四、实验内容1程序框图见图2-1
五、实验内容2参考程序如下
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN:MOV R0,#20H
MOV R1,#30H
MOV R7,#04H
ACALL DSUB
HERE:SJMP HERE
DSUB:CLR C
PUSH R0
LOOP:MOV A, #9AH
SUBB A,@R1
ADD A,@R0
DA A
MOV @R0,A
INC R0
INC R1
CPL C
DJNZ R7,LOOP
POP R0
RET
图2-1 十进制加法程序框图
六、调试方法
在KeilC中利用修改寄存器和内部RAM内容的方法,启动系统从实验程序开始运行到最后一条指令。

再分别检查相应的出口结果,若有错误,改用单步或断点运行,最后用不同的参数测试程序,直至正确。

七、思考题
实验1若将入口地址从8031内部RAM改为外部扩展RAM,应如何修改程序?
实验2程序中每字节减法做完后指令CPL C意义何在?。

相关文档
最新文档