精华内容
下载资源
问答
  • 太原理工大学 微机原理 实验一 多位进制数相加程序本科微型计算机原理及应用实验报告课程名称: 微型计算机原理及应用实验名称: 多位进制数相加程序实验地点: 微机原理实验室实验一 多位进制数相加程序实验...

    太原理工大学 微机原理 实验一 多位十进制数相加程序

    本科微型计算机原理及应用实验报告

    课程名称: 微型计算机原理及应用

    实验名称: 多位十进制数相加程序

    实验地点: 微机原理实验室

    实验一 多位十进制数相加程序

    实验目的

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

    实验内容

    将两个多位十进制数28056、47193相加,并显示加数、被加数、和。要求两个加数均以ASCII码形式各自顺序存放在DATA1和DATA2内存单元中,结果送回DATA1处(低位在前,高位在后)

    三、程序流程图

    N

    Y

    实验程序

    SHOW MACRO B

    MOV DL,B

    MOV AH,02H

    INT 21H

    ENDM

    DATA SEGMENT

    DATA1 DB 33H,39H,31H,37H,34H

    DATA2 DB 36H,35H,30H,38H,32H

    DATA3 DB '__',0DH,0AH,'$'

    DATA ENDS

    STACK SEGMENT STACK

    STA DB 20 DUP (?)

    TOP EQU LENGTH STA

    STACK ENDS

    CODE SEGMENT

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

    START: MOV AX,DATA

    MOV DS,AX

    MOV AX,STACK

    MOV SS,AX

    MOV AX,TOP

    MOV SP,AX

    MOV SI,OFFSET DATA2

    MOV BX,05

    SHOW 20H

    CALL DISPL

    SHOW 0DH

    SHOW 0AH

    MOV SI,OFFSET DATA1

    MOV BX,05

    SHOW 2BH

    CALL DISPL

    SHOW 0DH

    SHOW 0AH

    MOV CL,7

    S1: SHOW 2DH

    LOOP S1

    SHOW 0DH

    SHOW 0AH

    MOV SI,OFFSET DATA1

    MOV DI,OFFSET DATA2

    CALL ADDA

    MOV SI,OFFSET DATA1

    MOV BX,05

    SHOW 20H

    CALL DISPL

    MOV AX,4C00H

    INT 21H

    DISPL PROC NEAR

    DS1: SHOW [SI+BX-1]

    DEC BX

    JNZ DS1

    RET

    DISPL ENDP

    ADDA PROC NEAR

    MOV DX,SI

    MOV BP,DI

    MOV BX,05

    AD1: SUB BYTE PTR [SI+BX-1],30H

    SUB BYTE PTR [DI+BX-1],30H

    DEC BX

    JNZ AD1

    MOV SI,DX

    展开全文
  • 实验要求: 编程计算X+Y+Z=?...第二种方案,先将X、Y、Z的低十六位二进制数相加,再考虑X、Y、Z的高十六位二进制数相加。 实验仪器设备: 微机原理实验箱、安装了TPC_386EX软件的计算机、串口通信线、


    实验要求:

    编程计算X+Y+Z=?(X、Y、Z为32位二制数)。



    实验思考与原理:

    本实验是三个32位二制数相加运算,而8086指令系统中只有16位二进制数加法指令,因此,不能直接用加法指令ADD将两个数相加。假设三个32位数分别为X、Y、Z,从原理上来说,相加的方案有两种。第一种方案,将X与Y相加完后,再将它们的和与Z相加。第二种方案,先将X、Y、Z的低十六位二进制数相加,再考虑X、Y、Z的高十六位二进制数相加。

    实验仪器设备:

    微机原理实验箱、安装了TPC_386EX软件的计算机、串口通信线、键盘



    实验步骤:(采用方案二)

    1. 先将X与Y的低十六位二进制数相加,保存进位到某个单元或某个寄存器(假设为BX,用于存放低十六位二进制数相加的进位)。
    2. 再将X与Y的低十六位二进制数相加的结果与Z的低十六位二进制数相加,相加完后的进位还要加到BX中。
    3. 同样将X与Y的高十六位二进制数相加,保存进位到某个单元或某个寄存器(假设为DX,用于存放高十六位二进制数相加的进位)。
    4. 然后将X与Y的高十六位二进制数相加的结果与Z的高十六位二进制数相加,相加完后的进位还要加到DX中。
    5. 最后将X、Y与Z的高十六位二进制数相加的结果与BX相加,相加的进位还要加到DX中。


    实验程序:

    .MODEL SMALL
    .386
    DATA SEGMENT  ;定义一个数据段
          X  DD 90009000H
          Y  DD 70006000H
          Z  DD 60006000H
    DATA ENDS
    CODE 		SEGMENT   ;定义一个代码段     
    ASSUME 	CS:CODE, DS:DATA
    START: 	MOV AX, DATA
            MOV DS, AX
            XOR BX,BX; 存放进位的寄存器BX清0
            XOR DX,DX; 存放进位的寄存器DX清0
            LEA SI,X
            MOV AX,[SI]
    	    ADD AX,[SI+4]
                ADC BX,0;保存低十六位X+Y产生的进位
                ADD AX,[SI+8]
                MOV DI,AX;将高十六位数送入SI寄存器中,以免在子程序中影响CX的值(或者不用MOV指令,在子程序中对CX进行现场保护)
                ADC BX,0;保存低十六位X+Y+Z产生的进位
            MOV AX,[SI+2]
                ADD CX,[SI+6]
                ADC DX,0;保存高十六位X+Y产生的进位
    	    ADD CX,[SI+10]
                ADC DX,0;保存高十六位X+Y+Z产生的进位 
                ADD CX,BX;
                ADC DX,0;保存CX+BX产生的进位
            MOV SI,CX;将高十六位数送入SI寄存器中,以免在子程序中影响CX的值(或者不用MOV指令,在子程序中对CX进行现场保护)
            XCHG DX,AX
            CALL DISPAX;显示进位DX的内容
            XCHG SI,AX;
            CALL DISPAX;显示高十六位的内容
            XCHG DI,AX
            CALL DISPAX;显示低十六位的内容
            MOV AH,02
            MOV DL,48H;显示字母H
            INT 21H
            JMP $
           
    ;子程序DISPAX显示AX的内容
    DISPAX: XCHG AL,AH
    	    CALL DISPAL
    	    XCHG AH,AL
    	    CALL DISPAL
            RET
    DISPAL: PUSH AX
            PUSH AX
            MOV CL,4		;处理高位十六进制数
            SHR AL,CL
            CALL CHANG	;十六进制数变换成ASCII码
            MOV AH,02
            MOV DL,AL
            INT 21H			;显示一位字符
            POP AX
            AND AL,0FH		;处理低位十六进制数
            CALL CHANG	;十六进制数变换成ASCII码
            MOV AH,02
            MOV DL,AL
            INT 21H		;显示一位字符
            POP AX
            RET
    ; 十六进制数变换成ASCII码
    CHANG:  CMP AL,10
            JNGE CHANG1
            ADD AL,7
    CHANG1: ADD AL,30H
            RET
    
    CODE     ENDS
    END  START

    实验结果记录:

    实验总结及补充:

    该实验的关键是32位二进制数的相加方法以及32位结果数的显示。该程序调用了多个子程序,比较复杂,需要我们逐步分析一个个模块。初学微机不久,对汇编程序尚不熟练,以下是对类似程序16位二进制数相加程序一些重要指令的标注。

      

    展开全文
  • 微机原理实验报告-两个多位进制数相加的...、实验内容将两个多位进制数相加,要求被加和加均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。三、程序流程...

    41528d3028836879cd698677c3999917.gif微机原理实验报告-两个多位十进制数相加的实验等.doc

    微机原理实验报告班级学号姓名实验一两个多位十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。二、实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。三、程序流程图图31四、参考程序清单DATASEGMENTDATA1DB33H,39H,31H,37H,34H被加数DATA1ENDEQU1DATA2DB34H,35H,30H,38H,32H加数DATA2ENDEQU1SUMDB5DUPDATAENDSSTACKSEGMENTSTADB20DUPTOPEQULENGTHSTASTACKENDSCODESEGMENTASSUMECSCODE,DSDATA,SSSTACK,ESDATASTARTMOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXMOVSI,OFFSETDATA1ENDMOVDI,OFFSETDATA2ENDCALLADDAMOVAX,4C00HINT21HADDAPROCNEARMOVDX,SIMOVBP,DIMOVBX,05HAD1SUBBYTEPTRSI,30HSUBBYTEPTRDI,30HDECSIDECDIDECBXJNZAD1MOVSI,DXMOVDI,BPMOVCX,05HCLCAD2MOVAL,SIMOVBL,DIADCAL,BLAAAMOVSI,ALDECSIDECDILOOPAD2MOVSI,DXMOVDI,BPMOVBX,05HAD3ADDBYTEPTRSI,30HADDBYTEPTRDI,30HDECSIDECDIDECBXJNZAD3RETADDAENDPCODEENDSENDSTART五、实验结果分析我们计算的结果是84256他们结果是一样的。六、实验心得通过这次课程使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。实验二排序实验一、实验目的掌握用汇编语言编写排序程序的思路和方法。巩固在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。二、实验内容将指定内存出开始的数据(最多为4位数)按从大到小的顺序排列。第一个数字表示数据的个数(不是要比较的数值)。三、程序流程图图32四、程序清单DATASEGMENTADDRDW8,234,35,67,876,54,39,765,237DATAENDSSTACKSEGMENTSTADW32DUPTOPDWSTACKENDSCODESEGMENTASSUMECSCODE,DSDATA,ESDATA,SSSTACKSTARTMOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AXMOVSP,TOPMOVCX,WORDPTRADDR0DECCXLOOP1MOVDI,CXMOVBX,2LOOP2MOVAX,WORDPTRADDRBXCMPAX,WORDPTRADDRBX2JGECCCXCHGAX,WORDPTRADDRBX2MOVWORDPTRADDRBX,AXCCCADDBX,2LOOPLOOP2MOVCX,DILOOPLOOP1EXITMOVAX,4C00HINT21HCODEENDSENDSTART五、实验结果分析六、实验心得通过这次的实验,对于微机实验我渐入佳境,开始逐步了解了他的结构和调试的方法。但是对于它中间的过程还是不太熟悉,还需要自己努力的学习,增加自己的知识含量,也希望自己越来越好。实验三自编程序上机调试一一、实验目的掌握用汇编语言编写程序的思路和方法。巩固在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。二、实验内容选课本或作业题中题目上机调试。用乘法指令实现32位二进制数与16位二进制数相乘。首先把被乘数第八位和高八位分别与乘数相乘,高八位乘得结果左移16位与第八位乘得结果相加即为结果。三、程序框图四、程序源代码DATASEGMENTDATAXDW1001H,2001HDATAYDW2001HDATAENDSCODESEGMENTASSUMECSCODE,DSDATASTARTMOVAX,DATAMOVDS,AXMOVBX,1000HMOVSI,OFFSETDATAXMOVDI,DATAYMOVAX,SIMULDIMOVBX,AXMOVBX2,DXMOVAX,SI2MULDI程序入口低16位相乘高16位相乘程序出口对应项相加ADDBX2,AXADDBX4,DXMOVAH,4CHINT21HCODEENDSENDSTART五、实验结果运行结果在DS1000中六、实验心得这是自己第一次写,开始写不出来,只能去翻阅课本或上网查阅资料,希望能从中获得一些帮助,最后看到了这个题目,于是自己就编了一个自己尝试,可惜程序缺点很多,最后去网上仔细的研究,才敲定了这个实验。实验四自编程序上机调试二一、实验目的掌握用汇编语言编写程序的思路和方法。巩固在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。二、实验内容选课本或作业题中题目上机调试。设有两个8个字节长的BCD码数据BCD1及BCD2。BCD1数以1000H为首地址在内存中顺序存放;BCD2数以2000H为首地址在内存中顺序存放。要求相加后结果顺序存放在以2000H为首地址的内存区中(设结果BCD数仍不超过8个字节长)。三、程序流程图四、程序源代码DATASSEGMENTORG1000HBCD1DB01H,02H,03H,04H,05H,06H,07H,88HBCD2DB11H,12H,13H,14H,15H,16H,17H,18HDATASENDSCODESSEGMENTASSUMECSCODES,DSDATASSTARTMOVAX,DATASMOVDS,AXMOVBX,0MOVCX,8CLCAGAINMOVAL,BX1000HADCBX2000H,ALDAAINCBXLOOPAGAINMOVAH,4CHINT21HCODESENDSENDSTART五、实验结果运行BCD1DB01H,02H,03H,04H,05H,06H,07H,88HBCD2DB11H,12H,13H,14H,15H,16H,17H,18H结果如上DS2000H为首地址的连续八个字节单元中六、实验心得考虑两个8个字节长的BCD码相加,首先根据地址要求将数据放在对应的地址单元中,然后做加法,BCD码相加要用到调整指令,结果才为正确的BCD数。实验中要有全局观念,这样才能更好地做好这件事。实验五8255并行I/O口实验一、实验要求利用8255可编程并行口芯片,实现输入/输出实验,实验中用8255PA口作输入,PB口作输出。二、实验目的1、了解8255芯片结构及编程方法。2、了解8255输入/输出实验方法。三、预备

    展开全文
  • 微机原理实验报告-两个多位进制数相加...、实验内容将两个多位进制数相加,要求被加和加均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。三、程序流程图...

    微机原理实验报告-两个多位十进制数相加实验等

    微机原理实验报告

    班级:

    学号:

    姓名:

    实验一 两个多位十进制数相加的实验

    一、实验目的

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

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

    二、实验内容

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

    三、程序流程图

    图 3-1

    四、参考程序清单

    DATA SEGMENT

    DATA1 DB 33H,39H,31H,37H,34H;被加数

    DATA1END EQU $-1

    DATA2 DB 34H,35H,30H,38H,32H;加数

    DATA2ENDEQU $-1

    SUM DB 5 DUP(?)

    DATA ENDS

    STACK SEGMENT

    STA DB 20 DUP(?)

    TOP EQU LENGTH STA

    STACK ENDS

    CODE SEGMENT

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

    START: MOV AX,DATA

    MOV DS,AX

    MOV AX,STACK

    MOV SS,AX

    MOV AX,TOP

    MOV SP,AX

    MOVSI,OFFSET DATA1END

    MOVDI,OFFSET DATA2END

    CALLADDA

    MOVAX,4C00H

    INT21H

    ADDAPROCNEAR

    MOVDX,SI

    MOVBP,DI

    MOVBX,05H

    AD1: SUBBYTE PTR [SI],30H

    SUBBYTE PTR [DI],30H

    DECSI

    DECDI

    DECBX

    JNZAD1

    MOVSI,DX

    MOVDI,BP

    MOVCX,05H

    CLC

    AD2:MOVAL,[SI]

    MOVBL,[DI]

    ADCAL,BL

    AAA

    MOV[SI],AL

    DECSI

    DECDI

    LOOPAD2

    MOVSI,DX

    MOV DI,BP

    MOVBX,05H

    AD3: ADDBYTE PTR [SI],30H

    ADDBYTE PTR [DI],30H

    DECSI

    DECDI

    DECBX

    JNZAD3

    RET

    ADDAENDP

    CODEENDS

    ENDSTART

    五、实验结果分析

    我们计算的结果是:84256

    他们结果是一样的。

    六、实验心得

    通过这次课程使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。实验二 排序实验

    一、实验目的

    掌握用汇编语言编写排序程序的思路和方法。

    巩固在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。

    二、实验内容

    将指定内存出开始的数据(最多为4位数)按从大到小的顺序排列。第一个数字表示数据的个数(不是要比较的数值!!!)。

    三、程序流程图

    图 3-2

    四、程序清单

    DATA SEGMENT

    ADDR DW 8,234,35,67,876,54,39,765,237

    DATA ENDS

    STACK SEGMENT

    STA DW 32 DUP(?)

    TOP DW ?

    STACK ENDS

    CODE SEGMENT

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

    START: MOV AX,DATA

    展开全文
  • C++二进制数字相加用字符串返回的算法实现C++w二进制数字相加用字符串返回的算法实现完整源码(定义,实现,main函数测试) C++w二进制数字相加用字符串返回的算法实现完整源码(定义,实现,main函数测试) #include ...
  • Java两个二进制数求和

    2021-02-09 15:47:28
    在本教程中,您将学习一个Java程序,了解如何对两个二进制数求和。二进制数仅以“ 0”和“ 1”表示。没有其他数字。如果一个数字的数字不为0和1,则它不是二进制数字。我在互联网上看到很例子,它们都只显示程序,...
  • 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字1和0。 示例1: 输入: a = "11", b = "1" 输出: "100" 示例2: 输入: a = "1010", b = "1011" 输出: "10101" 二、实现 ...
  • 位二进制数的可控加法实验报告一、实验目的。1.了解四位二进制数运算的基本原理,制定设计方案。2.利用ISE软件进行可编程逻辑器件设计,完成逻辑仿真功能。3.使用编译器将设计实现,下载到BASYS2实验板上进行调试和...
  • 题目要求求两个二进制数的加法算法思路:1、要定义几个参数,carry代表进位,opa代表数组a的元素转换成数字,opb代表数组b的元素转换成数字。sum代表数组的和2、判断两个字符串是否长度相同,如果不同的要从左补齐...
  • 两个n位二进制数分别存储在两个n元数组A和B中,这两个整数的和存在一个n+1元的数组C中答:此问题主要是考察相加进位的问题,元素1+1 =0 并且往前进一ADD-BINARY(A,B)C=new integer[A.length+1]carry=0for i=A....
  • importjava.util.ArrayList;importjava.util.List;//TODO:Auto-generatedJavadoc/***TheClassCombine.*/publicclassCombine{/***Testcombine.*测试用二进制方法求组合函数*/publicstaticvoidTestCombine(intcou...
  • 设计要求: 设计一个4位二进制数乘法器,如下图所示。其中,a[3:0]为被乘数,b[3:0]为乘数,m[7:0]为积,即乘法结果。
  • --段控制信号输出,单个数码管字符显示 BT : out std_logic_vector(7 downto 0) --控制信号输出,八个数码管的选择 ); end tube; architecture behave of tube is signal scan : integer range 0 to 1; ...
  • } 原理:关键在低八位是否进位,对于低八位的最高,若二者均为1则必进位,若均为0则必不进位,关键讨论一个0一个1的情况,对二者低八位相加的结果进行判断,若相加结果的最高为0,则发生进位,若为1,则未发生...
  • 《四位二进制8421BCD码加法器》由会员分享,可在线阅读,更相关《四位二进制8421BCD码加法器(9页珍藏版)》请在人人文库网上搜索。1、课程设计报告设计题目: 四位二进制8421BCD码加法器 学 院: 理学院 专 业: 09...
  • 展开全部我这个算法不高,暂时想不到别的...两个数相加,会得到一个结果,和一个进位的结果,然后将这个进位的结果后面加0补位,然后再和这个结果相加。如此递归,知道进位全部是0为止publicclass${publicstaticv...
  • 问题:两个n位二进制数分别存储在两个n元数组A和B中,这两个整数的和存在一个n 1元的数组C中答:此问题主要是考察相加进位的问题,元素1 1 =0 并且往前进一ADD-BINARY(A,B)C=new integer[A.length 1]carry=0for i=...
  • 以前每次做大数相加的题都怕怕,感觉老是处理不好进位啥的,这次碰到了二进制数,和大数相加的原理差不多,这次我终于找到比较规范又简单的解法,这不得来写下博客。     题目可以直接找到,在...
  • 3、从最高开始进行加法 4、最高值进位为1,+1返回;否则直接返回结果 func addBinary(a string, b string) string { if len(a) < len(b){ a, b = b, a } lenAB := len(a)-len(b) for i := 0;i<len...
  • 在电子学中,加法器是一种数位电路,其可进行数字的加法计算。在现代的电脑中,加法器存在于算术逻辑单元(ALU)之中。 加法器可以用来表示各种数值,如:BCD、加三码,主要的加法器是以进制作运算。由于负...
  • 位二进制乘法器.doc

    2021-05-20 16:40:08
    位二进制乘法器设计报告原理此四乘法器主要运用次错位相加运算来实现乘法运算。由开关控制输入高电平或低电平产生两个二进制数(高电平有效),利用与门实现一和四的乘积运算,再将两次的乘积输入加法器,...
  • 描述:样例:a = 11,b = 1,返回 100a = 0, b = 0, 返回 0思路:先将二进制转换为十进制进行相加,再将计算后的十进制重新转换为二进制代码:class Solution:"""@param: a: a number@param: b: a number@return: ...
  • 分析:将二进制转化为十进制,只要将二进制数的每一乘以该的权然后相加 */ #include "iostream" using namespace std; //计算x的n次方 double power(double x,int n); int main() { int value=0; cout&...
  • 3.4二进制数相加

    2021-12-03 08:45:00
    二进制数相加,并且保存在 string 中,要注意的是如何将 string 和 int 之间互相转换,并且每位相加时,会有进位的可能,会影响之后相加的结果。 而且两个输入 string 的长度也可能会不同。这时我们需要新建一个 ...
  • 在32计算机中存储一个int类型的整形时是按照二进制的的32个比特为存储的,例如"25"存储时存储的是“00000000 00000000 00000000 00011001”,而将其二进制数到位得到的是“11001000 00000000 00000000 00000000...
  • 十六进制加法逢十六进一 。...解:2+3 = 5【不满16不进】6+12 = 18 【18-16=2(满16进1)】7+5=1212+1=13=D【1是上面进的1】3+0=3结果:3D25H逢十六进一、十六进制转换十进制16进制就是逢16进1,但我们只...
  • 十进制转换为二进制数 C++

    千次阅读 2021-04-12 21:57:07
    十进制转换为二进制数 C++前言一、十进制转换为二进制的数学算法二、代码实现1.设计转换函数transfer2.完整代码总结 前言 这篇文章和大家分享一下我个人对十进制转换为二进制数的想法,目前暂时更新只整数十...
  • 输入描述输入一个二进制整数n,其长度不大于10输出描述输出转换后的十进制,占一行样例输入110样例输出6solution:很学过C初学C++的人可能想到的是用字符数组形式读入再一计算成十进制输出。没必要。C++...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,739
精华内容 34,295
关键字:

多位二进制数相加