微机原理,键盘输入实现任意两个数相加
微机原理课设实现数据累加
目录第1章总体设计方案 (2)1.1设计原理 (2)1.2设计思路 (2)1.3设计环境 (2)第2章详细设计方案 (4)2.1算法与程序的设计与实现 (4)2.2流程图的设计与实现 (6)第3章程序调试与结果测试 (7)3.1程序调试 (7)3.2程序测试及结果分析 (8)参考文献 (9)第1章总体设计方案1.1设计原理实现数据累加,计算1+2+............+99+100。
应用累加器和4个寄存器可以实现这个程序。
1.2设计思路每个运算步骤都要用到累加器A,需要一个寄存器存储100以控制循环,一个寄存器存储从1开始每次加1递增的累加数。
由于5050的十六进制是13BA,一个寄存器最大只能存放FF,所以需要用到两个计算器存放累加的结果。
在这里我用R0存储控制循环的数;用R1存放累加数,用R2和R3存放累加和,其中R2存放高位,R3存放低位。
1.3 设计环境实验所应用的设计环境:伟福COP2000型计算机组成原理实验仪、微机。
在COP2000试验仪上实现编程,所应用的编程语言为汇编语言。
在伟福试验仪中有相关的模型机指令集分为几大类:算术运算指令、逻辑运算指令、移位指令、数据传输指令、跳转指令、中断返回指令、输入输出指令。
本程序所用到的相应的指令集(1)算术逻辑运算指令ADD A,R?-------------将寄存器R?的值加入累加器A中ADD A,#II---------- 立即数#II加入累加器A中ADDC A,R?----------将寄存器R?的值加入累加器A中,考虑进位SUB A,#II-----------从累加器中减去立即数后加入累加器A中(2)数据传送指令MOV A,R?------------将寄存器R?的值送到累加器A中MOV R?,A------------将累加器A中的值送到寄存器A中MOV R?,#II----------将立即数II送到寄存器R?中(4)跳转指令JC MM---------------若进位标志置1,跳转到MM地址JZ MM---------------若零标志位置1,跳转到MM地址JMP MM---------------跳转到MM此为COP2000计算机组成原理实验软件截图:图 1.1 COP2000计算机组成原理集成调试软件第2章详细设计方案2.1 算法与程序的设计与实现在微指令编程中,JMP很像高级语言中的goto语句,JZ很想高级语言中的if 语句。
微机原理上机 汇编语言程序 编写程序求两个十进制数之和并将和以十进制数的形式送屏幕显示
上机作业二一.实验目的1.熟练把握汇编语言程序设计的方式及上机步骤。
2.把握算术运算指令的应用。
3.把握子程序的设计方式。
4.把握DOS功能的挪用方式。
二.实验仪器586微机一台三.实验内容编写程序求两个十进制数之和,并将和以十进制数的形式送屏幕显示。
编程要求与提示:[1] 从键盘输入两个十进制数(如与),以二进制数形式寄存在ADD1和ADD2为首址的存贮器单元,输入一个十进制数采纳子程序形式。
[2] 和以二进制数的形式存入SUM以下单元。
[3] 将和送到屏幕显示采纳子程序形式。
[4] 实验步骤如下:a. 用全屏幕编辑软件成立源程序。
b.用汇编程序对源程序进行汇编,形成目标程序。
c. 用连接程序对目标程序进行连接形成可执行文件。
d. 用DEBUG对连接通过的可执行程序进行调试。
四.源程序STACK SEGMENT STACK 'STACK'DW 100H DUP(?)TOP L ABEL WORDSTACK ENDSDATA SEGMENTFAKE DW 0KEYBUFFER DB 100DB ?DB 100 DUP(?)BUF DB 8 DUP(?),'$'ADD1 DW ?A1 DW ?ADD2 DW ?A2 DW ?SUM DW ?S1 DW ?STRING1 DB 'PLEASE input decimal data: $' DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AXMOV ES,AXMOV AX,STACK MOV SS,AXLEA SP,TOPCALL INPUT1 CALL TRANS10TO16 MOV ADD1,AX MOV A1,DXCALL DISPCR CALL INPUT1 CALL TRANS10TO16 MOV ADD2,AX MOV A2,DXCALL DISPCR MOV SUM,AX MOV S1,DXADD AX,ADD1 ADC DX,A1MOV S1,DXCALL far ptr ADISPMOV AH,4CHMOV AL,0INT 21HINPUT1 PROC NEARLEA DX,STRING1MOV AH,09HINT 21HMOV AH,0AHLEA DX,KEYBUFFERINT 21HLEA SI,KEYBUFFER+1retINPUT1 endpTRANS10TO16 PROC NEAR PUSH CXPUSH SI; PUSH BX ???XOR DX,DXXOR CX,CXMOV CL,[SI]INC SIMOV AL,[SI]INC SISUB AL,30HDEC CXJCXZ TRANSF2MOV BX,10TRANSF1: CALL MULAXI PUSH DXJO TRANSF_ERRMOV DL,[SI]INC SISUB DL,30HADD AL,DLADC AH,0JC TRANSF_ERRPOP DXLOOP TRANSF1TRANSF2: JMP TRANSF_OK TRANSF_ERR: MOV BX,-1 TRANSF_OK: P OP SIPOP CXretTRANS10TO16 endp MULAXI PROC NEAR PUSH CXPUSH AXMOV AX,DXMUL BXMOV CX,AXPOP AX ;XOR DX,DXMUL BXPUSH AXMOV AX,CXADD AL,DLADC AH,DHMOV DX,AXPOP AXPOP CXretMULAXI endp DISPCR PROC NEAR PUSH AXPUSH DXMOV AH,2MOV DL,0AHINT 21HMOV AH,2MOV DL,0DHINT 21HPOP DXPOP AXretDISPCR endp ADISP PROC FAR PUSH AXPUSH CXPUSH DXPUSH BXLEA SI,BUF+7MOV BX,10000DIV BXPUSH AXMOV AX,DXXOR DX,DXMOV BX,10MOV CX,4L1: DIV BXMOV [SI],DLXOR DL,DLADD BYTE PTR [SI],30H DEC SILOOP L1CMP SI,OFFSET BUF JC L2POP AXMOV CX,4JMP L1L2:LEA DX,BUFMOV AH,09HINT 21HPOP BXPOP DXPOP CXPOP AXretfADISP endpCODE ENDSEND START五、实验体会实验中碰到的问题和解决方式:在这几回的编程实验中,我碰到了许多问题。
微机原理实验报告-两个多位十进制数相加的实验等.doc
微机原理实验报告-两个多位十进制数相加的实验等微机原理实验报告班级:学号:姓名:实验一两个多位十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
二、实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
三、程序流程图图3-1四、参考程序清单DATA SEGMENTDATA1 DB 33H,39H,31H,37H,34H;被加数DATA1END E QU $-1DATA2 DB 34H,35H,30H,38H,32H;加数DATA2END EQU $-1SUM DB 5 DUP(?)DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE 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 DATA1ENDMOV DI,OFFSET DATA2ENDCALL ADDAMOV AX,4C00HINT 21HADDA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05HAD1: SUB BYTE PTR [SI],30HSUB BYTE PTR [DI],30HDEC SIDEC DIDEC BXJNZ AD1MOV SI,DXMOV DI,BPMOV CX,05HCLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALDEC SIDEC DILOOP AD2MOV SI,DXMOV DI,BPMOV BX,05HAD3: ADD BYTE PTR [SI],30HADD BYTE PTR [DI],30HDEC SIDEC DIDEC BXJNZ A D3RETADDA ENDP CODE ENDSEND S TART五、实验结果分析我们计算的结果是:84256他们结果是一样的。
南华大学微机原理汇编实验 键盘上输入两个数求和
微机原理实验5 一位带符号数加法的汇编语言程序设计班级学号姓名实验时间:年月日实验成绩:1.实验目的从键盘上输入两个数(数的大小在±9之间),然后在屏幕上显示两数之和(结果在±18之间)。
完成创建源程序文件,汇编,连接,运行,实验结果显示。
2.实验原理3.实验仪器设备4.实验过程5.实验结果DSEG SEGMENTs1 db ' please input the first number ','$'s2 db 10,13, ' please input the second number ','$'s3 db 10, 13, ' the sum is ','$'s4 db 10, 13, ' there are input errors!!!!! ','$'d1 db ?d2 db ?d3 db ' ','$'DSEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEGMAIN PROC FARmov ax, dsegmov ds, axmov bl,0mov cl,0mov ah,9hlea dx,s1int 21h ;显示字符串1 mov ah,1int 21hcmp al,2dhjnz m1mov bl,1mov ah,1int 21hm1: mov [d1],al ;读入第一个数mov ah,9hlea dx,s2int 21h ;显示字符串2mov ah,1int 21hcmp al,2dhjnz m2mov cl,1mov ah,1int 21hm2: mov [d2],al ;读入第二个数call subpmov al,[d1]call subpcmp cl,bljnz btfhmov al,[d2]add al,[d1]sub al,30hcmp al,39hjna mmadd al ,6mov [d3+1],31hsub al,10hmm: mov [d3+2],alcmp bl,1jz fhjmp zhhbtfh: mov al,[d1]cmp al,[d2]jna mksub al,[d2]add al,30hmov [d3+1],alcmp bl,1jz fhjmp zhhmk: mov al,[d2]sub al,[d1]add al,30hmov [d3+1],alcmp cl,1jz fhjmp zhhfh:mov [d3],2dh zhh: mov ah,9hlea dx,s3int 21h ;显示字符串3mov ah,9hlea dx,d3int 21hmov ah,1 ;以下退出int 21hmov ax,4c00hint 21hMAIN ENDPsubp proccmp al,30hjb k1cmp al,39hja k1jmp m9k1: mov ah,9hlea dx,s4int 21hm9: retsubp endpCSEG ENDSEND MAIN(注:文档可能无法思考全面,请浏览后下载,供参考。
实验二两个多位十进制数相加实验报告
南昌理工学院实验报告二O一二年月日课程名称:微机原理与接口技术实验名称:两个多位十进制数相加班级:姓名:同组人:指导教师评定:签名:【一、实验名称】两个多位十进制数相加【二、实验目的】1、熟悉DOS系统命令;学习数据传送和算术运算指令的用法。
2、熟悉在PC机上建立、汇编、链接、调试和执行汇编语言程序的过程。
3、初步练习用DEBUG调试程序运行8086汇编语言程序的过程。
【三、实验内容和原理】将两个5位十进制数相加。
要求被加数和加数均以ASCII码形式各自顺序存放在以DA TA1和DATA2为首地址的5个内存单元中(低位在前),结果送回DATA1处。
另外,程序利用DOS的9号调用功能完成将被加数、加数和最后的和在显示器上的显示。
【四、实验条件】微型计算机一台,软件MASM【五、实验过程】1、用编辑软件,输入以下汇编语言源程序:参考程序如下:data segmentdata1 db , , , , ,'$'data2 db , h, , , , '$'data endsstac segmentsta db 100 dup (?)stac endscode segmentassume cs:code, ds:data, ss:stac, es:datastart proc farpush dsxor ax, axpush axmov ax, datamov ds, axmov es, axmov ah, 9mov dx, offset data1int 21hmov ah, 2mov dl, '+'int 21hmov ah, 9mov dx, offset data2int 21hmov si, offset data1mov di, offset data2mov bx, 5push bxpush siconv1: and byte ptr[si+bx-1], 0fhand byte ptr[di+bx-1], 0fhdec bxjnz conv1mov cx, 5xor ax, axadd1: mov al, [si+4]mov bl, [di+4]adc al, blaaamov [si+4], aldec sidec diloop add1pop sipop bxconv2: or byte ptr[si+bx-1], 30hdec bxjnz conv2mov ah, 2mov dl, '='int 21hmov ah, 9mov dx, siint 21hretstart endpcode endsend start2.通过编译,连接形成可执行文件3.运行。
微机实验:两个多位十进制数相加的实验
实验一、两个多位十进制数相加的实验1、实验目的(1).学习数据传送和算术运算指令的用法。
(2).熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。
2、实验内容将两个多位十进制数相加。
要求被加数均以ASCII码形式各自顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回DATAl处。
3、程序框图4、参考程序:DATAS SEGMENTDAT1 DB 5 DUP (0)DAT2 DB 5 DUP (0)DAT3 DB 6 DUP(0)JH DB'+','$'HX DB'_______','$';此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV DL,20H; 输入空格用以竖式对齐MOV AH,02HINT 21HLEA BX,DAT1MOV CX,5INADD1: MOV AH,01HINT 21HMOV [BX],ALINC BXLOOP INADD1MOV DL,0AH; 换行MOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HLEA DX,JH; 输出加号MOV AH,09HINT 21HLEA SI,DAT2MOV CX,5INADD2: MOV AH,01HINT 21HMOV [SI],ALINC SILOOP INADD2MOV DL,0AH;换行MOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HLEA DX,HX; 输出横线MOV AH,09HINT 21HMOV DL,0AH;换行MOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21H;以下计算结果LEA BX,DAT1+4LEA SI,DAT2+4LEA DI,DAT3+5MOV CX,5CLC ;清除CF标志位L1: MOV AL,[BX]ADC AL,[SI]AAAPUSHFOR AL,30H; 将AL转换为ASCII码POPFMOV [DI],ALDEC DIDEC BXDEC SILOOP L1MOV CL,6;6位循环6次JNC OUT1;没有进位直接输出MOV byte ptr [DI],31H;有进位给最高位赋1 ;以下输出显示OUT1:MOV DL,[DI]INC DIMOV AH,02HINT 21HLOOP OUT1MOV AH,4CHINT 21HCODES ENDSEND START。
微机原理实验之两位十进制数相加
计算机硬件实验室实验报告课程名称:微机原理及应用
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
源代码:
Mov AH,1
Int 21H
Mov BH, AL
Mov AH,1
AND Bh, 0fH
Int 21h
Mov BL,AL
AND Bl, 0fH
Mov DL, '+'
Mov AH, 2
Int 21h
MOV AH, 1
INT 21H
Mov CH,AL
AND CH, 0fH
Mov AH, 1
INT 21H
Mov CL,AL
AND CL, 0fH
ADD BL, CL
Mov Al,BL
Mov AH,00H 四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)
结论如上图
五.结论
本次实验完成了简单的两个两位十进制数相加。
完成了表达式的输出,将实验跟理论相结合,加深了对知识的理解。
AAA Mov Bl,Al ADC BH,CH Mov AL,BH Mov AH,00H AAA Mov CH,AH Mov CL,Al ADD BL, 30H ADD CX, 3030H Mov DL, '=' Mov AH, 2 Int 21H Mov DL,CH Mov AH, 2 Int 21H Mov DL, CL Mov AH, 2 Int 21H Mov DL,BL Mov AH, 2 INT 21H。
武汉理工微机原理数字累加求和课设报告(DOC)【范本模板】
目录摘要............................................................... 11 实验任务......................................................... 21.1 实验题目..................................................... 21。
2 要求:...................................................... 22题目分析及方案选择............................................... 23方案流程图....................................................... 33.1 方案分析..................................................... 33.2 流程图....................................................... 44。
程序设计及分析.................................................. 64。
1 输入程序.................................................... 64。
2 求数字累加之和程序.......................................... 84.3 输出程序................................................... 105.运行结果及分析................................................. 106 心得体会....................................................... 117 参考文献....................................................... 12附录............................................................. 13摘要最近几十年,随着电子计算机的诞生和高速发展,社会和科技提到了前所未有的高度。
微机原理与接口技术:加法减法运算指令
1. 加法运算指令和调正指令ADD,ADC,INC,AAA,DAA(1)不带进位的加法运算指令ADDADD指令完成两个操作数相加,并将结果保存在目的操作数中。
指令格式:ADD OPRD1, OPRD2功能:操作数OPRD1与OPRD2相加,结果保存在OPRD1中。
说明:操作数OPRD1可以是累加器AL或AX,也可以是其它通用寄存器或存储器操作数,OPRD2可以是累加器、其它通用寄存器或存储器操作数,还可以是立即数。
OPRD1和OPRD2不能同时为存储器操作数,不能为段寄存器。
ADD指令的执行对全部6个状态标志位产生影响。
例如:ADD AL, BL ;AL+BL结果存回AL中。
ADD AX, SI ;AX+SI结果存回AX中。
ADD BX, 3DFH ;BX+03DFH结果存回BX中。
ADD DX, DA TA[BP+SI] ;DX与内存单元相加,结果存回DX中。
ADD BYTE PTR[DI], 30H ;内存单元与30H相加,结果存回内存单元中。
ADD [BX], AX ;内存单元[BX]与AX相加,结果存回[BX]中。
ADD [BX+SI], AL ;内存单元与AL相加,结果存回内存单元中。
【例题3-3】求D9H与6EH的和,并注明受影响的标志位状态。
MOV AL, 0D9HMOV BL, 6EHADD AL, BL结果AL=47H,标志位CF=1,PF=1,AF=1,ZF=0,SF=0,OF=0(2)带进位的加法运算指令ADCADC指令完成两个操作数相加之后,再加上Flags的进位标志CF。
CF的值可能为1或0。
指令格式:ADD OPRD1, OPRD2功能:操作数OPRD1与OPRD2相加后,再加上CF的值,结果保存在OPRD1中。
说明:对操作数的要求与ADD指令一样。
例如:ADC AL, BLADC AX, BXADC [DI], 30HADC指令主要用于多字节数的加法运算,以保证低位向高位的进位被正确接收。
完整版微机原理试验数据传送及两个多位十进制数相加
深圳大学实验报告课程名称: _________ 微机原理及应用实验实验项目名称:数据传送及两个多位十进制数相加学院_________________________________专业__________________________________________________指导教师: __________________________________________________报告人:_学号:班级: ________________实验时间: ________________________________________实验报告提交时间: ___________________________________________教务处制、实验名称:数据传送及两个多位十进制数相加二、实验目的(1)学习数据传送和算术运算指令的用法。
(2)熟悉在PC机上建立、汇编、链接、调试和运行 8088汇编语言程序的过程。
三、实验内容将两个多位十进制数相加。
要求被加数均以ASCII码形式各自顺序存放在以DATAI和DATA2为首的5个内存单元中(低位在前),结果送回DATAI处。
四、实验电路及连线(硬件实验)此实验属于软件实验,故无硬件实验的电路及连线。
五、程序说明(预习)包括程序功能,程序框图,算法说明及所用到的寄存器等。
功能:将被加数和加数分别显示,接着运行加法运算,然后将结果显示出来。
算法说明:①定义数据段:定义被加数和加数,且要使其用ASCII码以十六进制之间的转换;②定义堆栈段,并给SP_TO单元赋初值0;③定义代码段,并将源代码放在里面首先,编写主程序;接着,编写显示、回车换行和加法运算的子程序。
④程序结束。
所用到的寄存:AX SS、CS、DS ES、SI、SP、DI六、源程序清单(预习);DATAS SEGMENT ; DATA1 DB 33H,32H,38H,34H,37H DATA2 DB 34H,35H,39H,37H,31H DATAS ENDS数据段;定义DATA1为被加数;定义DATA2为加数STACKS SEGMENT ; 堆栈段STA DB 64 DUP(O) ; 为STA预留64个字节的存储空间SP_TOP DB 0 ; 定义SP_TO单元的数值为0 STACKS ENDSCODES SEGMENT ; 代码段ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX ; 设置数据段MOV AX,STACKSMOV SS,AX ; 设置堆栈段LEA SP,SP_TOP ; 设置栈顶指针MOV SI,OFFSET DATA1 ; 把DATA1偏移量地址赋予SIMOV BX,05CALL DISPL ; 显示被加数CALLCRLF ; 回车、换行MOV SI,OFFSET DATA2 ; 把DATA2偏移量地址赋予SIMOV BX,05CALL DISPL ; 显示加数CALLCRLF ; 回车、换行MOV DI,OFFSET DATA1 ; 把DATA1偏移量地址赋予DICALL ADDA ; 调用ADDAF程序,实行加法运算MOV BX,05CALL DISPL ; 显示结果CALLCRLF ; 回车、换行MOV AX,4C00H ;INT 21H ; 调用DOS21H功能,返回CRLF PROC NEAR ; 回车、显示功能过程定义,属性为 NEAR MOV DL,0DH ; 把回车的ASCII码0DH传给DLMOV AH,02H ; 送DOS的中断调用功能号INT 21H ; DOS 的中断调用MOV DL,0AH ; 把换行的ASCII码0AH传给DLMOV AH,02H ;INT 21H ; DOSRET ; CRLF ENDP ;送DOS的中断调用功能号的中断调用返回完成过程定义DISPL PROC NEAR DSL: MOV AH,02 ;MOV DL,[SI+BX-1];INT 21H ; DOSDEC BX ;BXJNZ DSL ;RET ; DISPL ENDP ; 显示功能过程定义,属性为NEAR 送显示功能号显示字符串中一字符的中断调用减1,修改偏移量如果BX未减到零,跳到DSL执行指令返回完成显示功能子程序定义ADDA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05实行加法运算子程序过程定义,属性为TRAN_HEX: SUB BYTE PTR[SI+BX-1],30H ;把 ASCII 码数转化为十六进制SUB BYTE PTR[DI+BX-1],30HDEC BX ;BXJNZ TRAN_HEXMOV SI,DXMOV DI,BPMOV CX,05 ;CLC ;THE_ADD: MOV AL,[SI]MOV BL,[DI]ADC AL,BL ;AAA ;MOV [SI],AL ;INC SI ;SIINC DI ;DILOOP THE_ADD ;MOV SI,DXMOV DI,BPMOV BX,05 减1,修改偏移量;如果BX未减到零,跳到TRAN_HEX执行指令包括进位,共5位进位标志位 CF清零 (clear carry flag )带进位相加,把结果存在AX进行AAA调整,非结合BCD码的加法调整结果送被加数区加1加1 (指向下一位)循环TRAN_ASCI: ADD BYTE PTR[SI+BX-1],30HADD BYT田TR[DI+BX-1],30H ; 使用PTR转换属性并相加,将十六进制数转化为ASCII表示DEC BX ; BX 减1,修改偏移量RET ; 返回ADDA ENDP ;加法子程序定义完成CODES ENDS ; 代码段完成END START七、实验源程序清单(实验后以电子报告形式存储到指定位置)1.源程序路径及文件名:实验三\l3.asm2.可执行程序路径及文件名:实验三\l3.exe;八、上机调试情况说明1.上机调试步骤A .通过dos对pts3.asm文件进行操作。
微机原理
结果=110E 21C8H BX 结果 存放在DX、AX里。 、 里 CX 存放在
AX(低位 低位) 低位 DX(高位 高位) 高位
;DX+BX+CF
位的CF对高 位有贡献, 位的OF无意义 低16位的 对高 位有贡献 低16位的 无意义 高16位运算的 位的 对高16位有贡献 位的 无意义, 位运算的 OF才为整个的 才为整个的OF。 才为整个的
可以用如下程序段实现这种多字节的加法: 可以用如下程序段实现这种多字节的加法:
2012-4-13
5/110
微机原理及应用
吴丽娟
CLC MOV MOV MOV ADD SI, 2000H
清进位位CF ; 清进位位 ; 取第一个数的首地址
AX, [SI] ; 将第一个数的低 位取到 将第一个数的低16位取到 位取到AX ] DI, 3000H ; 取第二个数的首地址
结果放在DI和 去1000H, 结果放在 和DI+1所指的单元中 所指的单元中
2012-4-13
10/110
微机原理及应用
吴丽娟
(2) 带借位的减法指令
SBB在形式和功能上都和 在形式和功能上都和SUB指令类似 只是 指令类似, 在形式和功能上都和 指令类似 只是SBB指令在执行减 指令在执行减 法运算时, 还要减去CF的值 在减法运算中, 的值。 法运算时 还要减去 的值。在减法运算中 CF的值就是两数相 的值就是两数相 减时, 向高位产生的借位, 所以, 在执行减法运算时, 减时 向高位产生的借位 所以 SBB在执行减法运算时 是用被减 在执行减法运算时 数减去减数, 并减去低位字节相减时产生的借位。 数减去减数 并减去低位字节相减时产生的借位。 和带进位位的 加法指令类似, 主要用在多字节减法运算中。 加法指令类似 SBB主要用在多字节减法运算中。例如: 主要用在多字节减法运算中 例如: SBB AX, 2030H ;将AX的内容减去立即数 的内容减去立即数2030H, 并减去进位 的内容减去立即数 ;位CF的值 的值 SBB WORD PTR [DI+2], 1000H ] ; 将DI+2和DI+3所指的两 和 所指的两
两个多位十进制数相加的实验Word版
学生实验报告(2010 —学年第学期)课程名称:微型计算机原理与接口技术开课实验室: 2011年月日注:报告内容按实验须知中几点要求进行。
一、实验目的1、学习数据传送和算术运算指令的用法。
2、熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。
3、学会PC机得安装4、认识编程过程二、实验原理及基本技术路线图或实验内容(方框原理图或程序流程图)将两个多位十进制数相加。
要求被加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
程序框图三、所用软件四、实验步骤整个程序分为4个部分:显示加数、转换、相加、输出结果。
五、源码程序编制及分析注释CRLF MACRO ;宏定义指令(回车执行程序)MOV DL,0DH ;回车MOV AH,02H ; 2号调用,显示回车INT 21HMOV DL,0AH ;换行MOV AH,02H ; 2号调用换行INT 21HENDM ;宏指令定义结束DATA SEGMENT ;数据段定义DATA1 DB 33H,39H,31H,37H,34H ;第一个数据(作为加数)47193DATA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为被加数)28056DATA ENDS ;数据段定义结束STACK SEGMENT ;堆栈段定义STA DB 20 DUP(?) ;定义从STA开始20个单元作为堆栈使用 TOP EQU LENGTH STA ;TOP等于堆栈单元数STACK ENDSCODE SEGMENT ;代码段定义ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART: MOV AX,DATAMOV DS,AX ;设置数据段MOV AX,STACKMOV SS,AX ;设置堆栈段MOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA2 ;DATA2的偏移地址送SIMOV BX,05 ;计数次数为5次CALL DISPL ;调用多次显示子程序DISPL(显示28056) CRLF ;回车换行MOV SI,OFFSET DATA1 ; DATA1的偏移地址送SIMOV BX,05 ;计数次数为5次CALL DISPL ;调用多次显示子程序DISPL(显示47193)CRLF ;回车换行MOV DI,OFFSET DATA2CALL ADDA ;使用加法运算程序MOV SI,OFFSET DATA1 ;将和显示在屏幕上MOV BX,05 ;显示结束CALL DISPL ;调用多次显示子程序DISPLCRLF ;执行回车换行程序MOV AX,4C00H ;返回系统提示符INT 21HDISPL PROC NEAR ;多次显示子程序DS1: MOV AH,02 ;显示功能号MOV DL,[SI+BX-1] ;显示字符串中一字符INT 21H ; DOS的中断调用DEC BX ; BX减1,修改偏移量JNZ DS1 ;如果BX未减到零跳到DSL执行指令RET ;返回DISPL ENDP ;完成显示功能子程序定义ADDA PROC NEAR ;实行加法运算子程序定义、属性为NEARMOV DX,SIMOV BP,DIMOV BX,05 ;转换5次AD1: SUB BYTE PTR [SI+BX-1],30H ;把加数的ASCLL转换为16进制 SUB BYTE PTR [DI+BX-1],30H ;把被加数的ASCLL转换为16进制 DEC BX ;修改偏移量JNZ AD1MOV SI,DXMOV DI,BPMOV CX,05 ;包括进位,共5位CLC ;清进位AD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BL ;进行代进位加法AAA ;非组合BCD码的加法调整MOV [SI],AL ;结果送被加数区INC SIINC DI ;指向下一位LOOP AD2 ;循环MOV SI,DXMOV DI,BPMOV BX,05AD3: ADD BYTE PTR [SI+BX-1],30HADD BYTE PTR [DI+BX-1],30HDEC BX ;十六进制的数字串转化JNZ AD3RETADDA ENDP ;加法程序结束CODE ENDS ;代码段结束END START ;整个程序结束五、实验结果六、心得体会通过这次实验让我对这个软件的编程有了更深的了解、知道如何安装这个软件、怎样运行程序。
微机原理及其接口实验报告--两个多字节数相加
两个多字节数相加一.实验目的1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
2.熟悉和掌握用DEBUG调试程序的方法。
二.实验内容将两个多字节数相加,要求加数和被加数分别存放在num1和num2为首的内存单元中。
结果送回num1处。
三.实验步骤1.生成可执行文件。
输入 SUM.ASM SUM.OBJ SUM.EXEedit MASM LINK DEBUG2.汇编源程序DATA SEGMENTNUM1 DB 1H,2H,3H,0NUM2 DB 4H,5H,6HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXCLCLEA BX,NUM1LEA SI,NUM2MOV CX,3LL:MOV AL,[SI]ADC [BX],ALINC BXINC SILOOP LLMOV AL,0ADC AL,0MOV [BX],ALMOV AH,4CHINT 21HCODE ENDSEND START3.在DEBUG下使用DEBUG命令调试程序。
-N SUM.EXE (指定sum.exe文件)-L (从磁盘读sum.exe)-U (反汇编)记录源程序的首地址为0BC6:0000,NUM1和NUM2的首地址分别为0BC5:0000, 0BC5:0004。
如图所示:-G=0BC6:0000 0BC6:001F (使用G命令执行程序)-D OBC5:0000 (显示内存单元的内容)四.心得体会在做实验之前,尽量把源程序看懂,结合书去看。
在实验进行时,对于一些数据作修改,进行调试能够更好的理解程序所执行的内容。
经过这次试验,自己对运用MASM软件进行简单的debug指令操作有了进一步的理解和认识。
【Java】编写Java程序,完成从键盘输入两个运算数据,计算两数之和并输出结果
【Java】编写Java程序,完成从键盘输⼊两个运算数据,计算两数之和并输出结果public class MyTest {public static void main(String[] args) {int a=2;int b=6;int c=a+b;System.out.println("结果为"+c);}}与C语⾔有些类似上⾯的⽅式不太灵活,我们进⾏改进控制台⽅式import java.io.*;public class MyTest {/*两数求和*/public static void main(final String[] args) throws IOException {System.out.println("请输⼊⼀个整数:");final byte t[] = new byte[10];System.in.read(t);final String sl = new String(t);final int a = Integer.parseInt(sl.trim());System.out.println("请输⼊⼀个⼩数:");System.in.read(t);final String s2 = new String(t);final double b = Double.parseDouble(s2.trim());// 处理数据final double c = a + b;System.out.println("计算结果为:"+c);}}GUIimport javax.swing.JOptionPane;public class MyTest {/*两数求和*/public static void main(final String[] args){//输⼊数据//图形化输⼊⽅案String s1=JOptionPane.showInputDialog("请输⼊⼀个整数:");int a=Integer.parseInt(s1);String s2=JOptionPane.showInputDialog("请输⼊⼀个⼩数:");double b=Double.parseDouble(s2);//处理数据double c=a+b;//输出结果JOptionPane.showMessageDialog(null,"结果为:"+a+"+"+b+"="+c);}}。
微机实验作业两个多位十进制数相加
微机实验作业两个多位十进制数相加实验二两个多位十进制数相加一、要求:将两个多位十进制数(如四位)相加,要求被加数、加数以ASCII 码形式按顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前)。
结果显示在屏幕上。
二、目的:1、学习数据传送和算术运算指令的用法。
2、熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序过程。
程序如下:STACK SEGMENT STACK 'STACK'DW 100H DUP(?)STACK ENDSDA TA SEGMENTADD1 DD H ;加数以组合十进制形式存放在双字单元ADD2 DD HSUM DD ?DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,ES:DATA,SS:STACKSTART: MOV AX,DA TAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SI,ADD1 ;将16位偏移地址传送到通用寄存器中LEA DI,ADD2LEA BX,SUMMOV AL,[SI]ADD AL,[DI] ;最低位的一个字节相加DAA ;加法组合BCD码调整MOV [BX],AL ;结果存放在SUM第一个字节MOV AL,[SI+1] ;第二个字节相加ADC AL,[DI+1]DAAMOV [BX+1],ALMOV AL,[SI+2]ADC AL,[DI+2]DAAMOV [BX+2],ALMOV AL,[SI+3]ADC AL,[DI+3]DAAMOV [BX+3],ALMOV DL,00 ;最高位字节有进位则显示"01" ADC DL,00 CALL DISPSUMMOV AH,4CH ;返回DOSINT 21HDISPSUM PROC NEAR ;结果显示子程序PUSH AXPUSH BXPUSH CXPUSH SIMOV SI ,4PUSH DXMOV CX,5LAB:PUSH CXPUSH BXMOV AL,DLMOV BL,DLMOV CL,4 ;显示高位字节SHR AL,CLADD AL,30HMOV AH,02MOV DL,ALINT 21H ;显示一位字符AND BL,0FH ;显示低位字节ADD BL,30HMOV AH,02MOV DL,BLINT 21HPOP BXPOP CXDEC SIMOV DL,[BX][SI] ;结果显示LOOP LAB POP DXPOP SIPOP CXPOP BXPOP AXRETDISPSUM ENDPCODE ENDSEND START。
单片机两数相加运算程序编写
单片机两数相加运算程序编写单片机是一种用于控制和操作电子设备的小型计算机芯片。
它通常用于嵌入式系统中,如家电、汽车和工业控制等领域。
单片机具有体积小、功耗低、成本低、可靠性高以及易于编程等特点,因此在各种应用中得到了广泛的应用。
在单片机中实现两个数的相加运算有多种方法。
下面我将介绍一种常见的方法,使用C语言编写。
首先,需要明确两个数的数据类型。
假设我们要相加的两个数为整数,可以选择int类型进行计算。
单片机上的整数类型通常为16位或32位,具体取决于所使用的单片机型号。
接下来,需要定义两个整数变量,并为其分配内存空间。
假设我们分别将两个数存储在变量a和变量b中。
```int a;int b;```然后,需要通过某种方式获取这两个数的值。
这可以通过外部输入设备(如按键、传感器)或通过代码直接赋值来实现。
以通过代码赋值为例,我们可以为变量a和b分别赋初值:```a=10;b=20;```接下来,我们需要定义一个变量来保存计算结果。
假设我们将结果存储在变量sum中。
```int sum;```然后,我们可以使用加法运算符将变量a和b相加,并将结果保存在变量sum中。
```sum = a + b;```最后,我们可以将计算得到的结果输出到单片机上的显示器或其他输出设备上,以便查看结果。
```display(sum);```上述代码展示了一个简化的单片机两数相加运算的程序。
在实际应用中,可能会涉及更多的变量和逻辑判断,以处理更复杂的计算和条件。
同时,还需要注意的是,不同的单片机型号和编程平台可能有不同的编程语言和指令集。
以上代码仅作为示例,具体实现可能会有所不同。
总结起来,单片机两数相加运算的程序编写包括定义变量、获取输入、进行运算和输出结果等步骤。
这里只是简单的示例,实际应用可能需要更复杂的代码逻辑和功能实现。
可以帮我写一段计算机程序嘛返回两个数的之和的函数
可以帮我写一段计算机程序嘛返回两个数的之和的函数计算机程序是一种通过编程语言来实现特定功能的软件。
在编写程序时,我们可以创建函数来执行特定的计算任务。
现在,我将为您编写一个函数,该函数将返回两个数字的和。
首先,我们需要定义一个函数,并指定它的名称和输入参数。
对于这个函数,我们将使用参数a和b来表示要相加的两个数字。
```pythondef calculate_sum(a, b):```接下来,我们需要在函数中编写代码来执行计算并返回结果。
我们可以使用加法运算符(+)来将两个数字相加,并使用return语句将结果返回。
```pythondef calculate_sum(a, b):sum = a + breturn sum```现在,我们已经完成了这个函数的编写。
让我们来测试一下这个函数是否正常工作。
```pythondef calculate_sum(a, b):sum = a + breturn sum#测试函数result = calculate_sum(5, 7)#输出结果print("两个数字的和为:", result)```通过运行上述程序,您将获得以下输出:```两个数字的和为:12```这说明我们的函数已经成功地计算并返回了两个数字的和。
当然,这只是一个简单的例子,展示了如何编写一个计算两个数字之和的函数。
在实际的程序开发中,函数的功能将更加复杂,还可能包含更多的参数和逻辑。
不过,这个例子应该能帮助您理解如何编写一个返回两个数字之和的函数。
微机原理 加法计算器设计及显示
实验报告课程名称:微机原理实验指导老师:成绩:实验名称:加法计算器及显示实验类型:同组学生姓名:一、实验目的和要求(必填) 二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得一、实验目的和要求1.掌握基于状态机的编程方法2.实现数字运算、键盘输入、LED显示的多任务协调编程二、实验内容和原理1.编写程序,输入两个两位十进制数并显示,按确认键后显示运算结果2.基本功能:能够输入输入数字(非数字无效)并显示结果3.附加功能:光标指示功能(通过LED闪烁实现)以及退格功能三、程序代码ORG 0000HSTART:MOV 78H,#0 ;初始化:78H放0的段码,其余放熄灭码MOV 79H,#10MOV 7AH,#10MOV 7BH,#10MOV 7CH,#10MOV R5,#0 ;R5是按键次数,初始置0MOV R6,#0 ;将0置入R6中MOV R7,#0 ;将0置入R7中MOV 30H,#0 ;30H是功能键存放单元,置为0MOV 31H,#0 ;31H单元初始置为0MOV 40H,#0 ;40H单元初始置为0MOV 41H,#0 ;41H单元初始置为0LOOP: LCALL DIR ;调用显示子程序LCALL KEY ;调用键盘检测程序INC R5 ;按键次数加1S1: CJNE A,#10,S2 ;不是”+”键,跳到S2LJMP FUN ;是”+"键,跳到FUNS2:CJNE A,#11,S3 ;不是"—"键,跳到S3LJMP FUN ;是”—”键,跳到FUNS3:CJNE A,#12,S4 ;不是”*”键,跳到S4LJMP FUN ; 是”*”键,跳到FUNS4: CJNE A,#13,S5 ;不是”/"键,跳到S5LJMP FUN ;是”/"键,跳到FUNS5:CJNE A,#14,S6 ; 不是”="键,跳到S6LJMP FUN ;是"=”键,跳到FUNS6: CJNE A,#15,N1 ;不是”CL"键,跳到N1LJMP START ;是"CL”键,跳到STARTN1: CJNE R5,#1,N2 ;若按键次数不等于1,跳到N2LJMP D11 ;跳到D11N2: CJNE R5,#2,START;若按键次数不等于2,跳到START LJMP T1 ;跳到T1D11:MOV R4,A ;将A写入R4MOV 78H,A ;输入值送显示个位缓存MOV 79H,#10 ;将10送到79H单元LJMP LOOP ;跳转到循环T1:MOV 53H,A ;将A写入53HMOV B,#10 ;将10置入BMOV A,R4 ;将上一次输入的R4写进AMUL AB ;A乘以10ADD A,53H ;53H里面的值与A相加MOV R4,A ;将新的值置入到R4MOV 79H,78H ;个位到十位MOV 78H,53H ;新数为个位LJMP LOOP ;跳转到循环FUN:MOV 78H,#10 ;将10置入到78HMOV 79H,#10 ;将10置入到79HMOV R0,30H ;与上次功能键交换MOV 30H,AMOV A,R0CJNE A,#10,FUN1 ;判断功能键LJMP ADDY ;”+"FUN1: CJNE A,#11,FUN2LJMP SUBT ;"-"FUN2: CJNE A,#12,FUN3LJMP MULT ;”*"FUN3: CJNE A,#13,FUN4LJMP DIVI ;”/”FUN4:CJNE A,#14,FUN5 ;首次按功能键,即A=#0 LJMP EQUA ;"="FUN5:MOV 40H,R4 ;保存第一个数MOV R5,#0 ;按键次数清零LJMP BCD ;将其拆为BCD码,以便后来将其显示OF: LJMP START ;跳转回开始ADDY: MOV A,40H ;加法,第一个数送累加器ADD A,R4 ;第一个数加第二个数MOV 40H,A ;存本次结果MOV R5,#0 ;按键次数清零LJMP BCD ;跳转到BCD程序SUBT: MOV A,40H ;减法,第一个数送累加器CLR C ;借位清零SUBB A,R4 ;带借位的减法,第一个数减第二个数JB CY,BCD2 ;借位为1,跳转到BCD2MOV 40H,A ;将减的结果送40HMOV R5,#0 ;按键次数清零LJMP BCD ;跳转到BCDMULT:MOV A,40H ;乘法,第一个数送累加器MOV B,A ;将A送BMOV A,R4 ;将第二个数送累加器MUL AB ;第一个数乘以第二个数MOV R5,#0 ;按键次数清零JB OV,BCD1 ;若乘法结果溢出,则跳转到BCD1 MOV 40H,A ;将A送40HLJMP BCD ;跳转到BCDDIVI: MOV A,R4 ;除法,第二个数送累加器MOV B,A ;将第二个数送BMOV A,40H ;将第一个数送ADIV AB ;A除以BJB OV,OF ;当B为0时跳到OFMOV 40H,A ;将A送40HMOV R5,#0 ;按键次数清零LJMP BCD ;跳转到BCDEQUA:MOV R5,#0 ;按键次数清零MOV 31H,A ;将A送31HLJMP BCD ;跳转到BCD;—---乘法溢出时的处理程序BCD1: ;乘法溢出时的处理程序MOV 78H, B ;将高8位送78HMOV 79H, A ;将低8位送79HLCALL HEX2BCD ;调用子程序把78H、79H中的数字,转换成BCD码,送到7AH 7BH 7CH MOV A,7CH ;下面,把万千百十个位,分别存入7CH 7BH 7AH 79H 78HMOV B, #16DIV AB ;除以16,目的是分离出高、低四位MOV 79H, A ;存放十位MOV 78H,B ;存放个位MOV A, 7AHMOV 7CH, A ;存放万位MOV A,7BHMOV B, #16DIV ABMOV 7BH, AMOV 7AH,BLJMP LOOPHEX2BCD: ;子程序:把78H、79H中的数字,转换成BCD码,送到7AH 7BH 7CH CLR AMOV 7AH,A ;先清零MOV 7BH,AMOV 7CH,AMOV R6,#16 ;共转换十六位数LOOPP:CLR CMOV A, 79H ;从待转换数的高端移出一位到CyRLC AMOV 79H, AMOV A,78HRLC AMOV 78H, AMOV A, 7CH ;送到BCD码的低端ADDC A, 7CH ;带进位加。