南华大学微机原理汇编实验5键盘上输入两个数求和

合集下载

微机原理实验:加减法

微机原理实验:加减法
mov cx, 8 ; 循环次数
print: mov ah, 2
mov dl, '0'
test bl, 10000000b
jz zero
mov dl, '1'
zero: int 21h
shl bl, 1
loop print
; 设置背景及字体颜色
mov cx, 9 ; 字符数量
mov di, 01h ; 起始地址
jz zero_2
mov dl, '1'
zero_2: int 21h
shl bh, 1
loop print_2
; 设置背景及字体颜色来自mov cx, 9 ; 字符数量
mov di, 01h ; 起始地址
color_2: mov [di], 11100000b ;黄底(1110) ,黑字(0000)
add di, 2
color: mov [di], 11110001b ;白底(1111) ,蓝字(0001)
add di, 2
loop color
mov dl, 'b'
mov ah, 2
int 21h
mov ax, 4c00h
int 21h
(二)减法部分
name "add-sub"
org 100h
; set segment register
mov ax, 0b800h
mov ds, ax
; 8 + 10 = 18 (decimal) or bin=00010010b
mov al, 8
mov bl, 10
add bl, al
mov bh, bl ;保存加法结果

用汇编编写的两个十进制数相加程序

用汇编编写的两个十进制数相加程序

用汇编编写的两个十进制数相加程序一、设计目的:对两个用ASCII码表示的十进制数直接相加,以得到它们的和.设被加数放在以SBCD1为首地址的单元中,加数放在以SBCD2为首地址的单元中。

二、实验设备:安装汇编软件的可操控计算机一台三、实验分析:需要注意的是如何用ASCII码表示十进制数,并且如何将一个数放入一个地址单元的首地址,而两个数的相加不是本设计的要点,着重在于解决以上两个问题。

在这里还有一个结果显示为两位数的问题,设计出的源程序在计算时其能显示的结果的最大值只能到9,无法显示十位数。

在随后改进的程序中加入了一个进位的子程序,首先对计算结果进行判断是否大于9,如果大于9则进入子程序。

从而使计算结果得以显示出一个十位数。

四、程序流程图:五、实验源程序六、实验程序:SSEG SEGMENT PARA STACK 'stack'dw 100h dup(0) ;初始化堆栈大小为100SSEG ENDSDSEG SEGMENTSBCD1 DB ?SBCD2 DB ?SBCD3 DB ?;数据段:在此处添加程序所需的数据DSEG ENDSESEG SEGMENT;附加段:在此处添加程序所需的数据ESEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEG, es:ESEG, ss:SSEGMAIN PROC FAR ;主程序入口mov ax, dsegmov ds, axmov ax,esegmov es, axmov ah,1int 21hmov [SBCD1],almov bl,almov dl,'+'mov ah,2int 21hmov ah,1int 21hmov [SBCD2],aladd bl,alsub dl,dlmov dl,'='mov ah,2int 21hmov dl,blsub dl,48cmp dl,57mov bl,dljnz jinweimov dl,blmov ah,2int 21hjmp exitjinwei: mov dl,'1'mov ah,2int 21hsub bl,10mov dl,blmov ah,2int 21hjmp exitexit: mov ah,1int 21hmov ax, 4c00h ;程序结束,返回到操作系统系统int 21hMAIN ENDPCSEG ENDSEND MAIN。

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

微机原理实验报告-两个多位十进制数相加的实验等.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他们结果是一样的。

微机软件实验习题与答案(完整版)

微机软件实验习题与答案(完整版)

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

完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB'input the first number:','$'STRING2 DB 13,10,'input the second number:','$'STRING3 DB 13,10,'the output is:','$'DATA1 DB 6 DUP(00H),'$'DATA2 DB 6 DUP(00H),'$'DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码LEA SI,DATA1LEA DI,DATA2L0:LEA DX,STRING1;打印字符串STRING1MOV AH,09INT 21HINPUT1: ;输入第一个数MOV AH,01;输入字符至AL中INT 21HCMP AL,'/'JE L1MOV [SI],ALINC SIJMP INPUT1L1:LEA DX,STRING2;打印字符串STRING2MOV AH,09INT 21HINPUT2: ;输入第二个数MOV AH,01;输入字符至ALINT 21HCMP AL,'/'JE L2MOV [DI],ALINC DIJMP INPUT2L2:MOV SI,0CLC;清空进位标志位CFMOV CX,6PLUSE: ;相加;SUB DATA1[SI],30H;SUB DATA2[SI],30H;这里不能使用这两条指令,因为如果DATA1[5]=00H,00H-30H需要借位相减,使CF=1MOV AL,DATA1[SI]ADC AL,DATA2[SI]AAA;加法调整指令,可使两个ASCII数直接相加MOV DATA1[SI],AL;和赋给DATA1[SI]INC SILOOP PLUSEL3:LEA DX,STRING3;打印字符串STRING3MOV AH,09INT 21HMOV CX,6MOV SI,6SHOW:DEC SICMP DATA1[SI],00HJE SHOWSHOW2:MOV DL,DATA1[SI]ADD DL,30HMOV AH,02INT 21HCMP SI,0JE L4DEC SIJMP SHOW2L4: MOV AH,4CHINT 21HCODES ENDSEND START运行结果如下:输入为低位在前,即输入1234和99999相加实际上是4321和99999相加(即:4321+99999=104320)实验2 两个数相乘的实验(无符号数相乘)实验内容:实现十进制数的乘法。

微机原理实验之两位十进制数相加

微机原理实验之两位十进制数相加

计算机硬件实验室实验报告课程名称:微机原理及应用
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
源代码:
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。

完整版微机原理试验数据传送及两个多位十进制数相加

完整版微机原理试验数据传送及两个多位十进制数相加

深圳大学实验报告课程名称: _________ 微机原理及应用实验实验项目名称:数据传送及两个多位十进制数相加学院_________________________________专业__________________________________________________指导教师: __________________________________________________报告人:_学号:班级: ________________实验时间: ________________________________________实验报告提交时间: ___________________________________________教务处制、实验名称:数据传送及两个多位十进制数相加二、实验目的(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文件进行操作。

微机原理实验(含解答程序)

微机原理实验(含解答程序)

微机原理实验(含解答程序)-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN微机原理实验课题(共16个内容,附解答程序)(汇编程序可以使用MASM FOR WINDOWS)1.将偏移地址为2000h开始的100个单元依次设置为0~99。

2.将两个64位的二进制数相加,记录相加的和以及各个状态标志的值。

3. 编写程序,在屏幕上分行显示自己的姓名、学号。

4. 编写程序,通过键盘输入0——9之间的一个数字,利用查表法计算其平方。

在DEBUG下查看执行结果。

5. 用分支结构设计程序实现符号函数100010xy xx>⎧⎪==⎨⎪-<⎩,要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。

6. 在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。

7. 在键盘上输入一个字符,判断它是一个数字、大写字母还是小写字母,若为数字,则显示digital,若为字母,显示letter,否则,显示other。

8. 将字节型变量x的低四位(一位十六进制数)以十六进制数的形式显示。

9. 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N (N+1)大于200为止,并将结果由屏幕上显示出来。

10. 将字形变量x以二进制数的形式在屏幕上显示输出。

11. 将字形变量x以十六进制数的形式在屏幕上显示输出。

12. 将内存单元缓冲区中的符号数(20个)按从小到大的顺序排列,并以十六进制数的形式显示。

13. 编制程序计算S=1+2+3+……+N,并将结果由屏幕上显示出来。

(要求:在屏幕上显示提示信息,提示输入N,N用十六进制表示,且N小于0FH,用子程序实现(段内),将输入的结果用十六进制数输出显示,显示结果的程序用子程序是实现(段间))。

14.要求在键盘上输入一个小于四位的十进制数,将其转换为二进制数存放,并讲转换后的结果以十六进制数的形式在屏幕上显示出来。

微机原理 统计成绩 汇编语言程序

微机原理  统计成绩  汇编语言程序

微机原理统计成绩汇编语言程序题目要求:通过键盘输入需要统计的学生的个数和成绩,按照优秀(>=90),良好,中等,及格,不及格,进行分类,并显示各个等级的人数。

提示:1.要求先输入学生的人数,后输入成绩;程序中输入人数时,若是一位数需按enter 键表示输入人数完成;若是2位数,程序自动跳转至下一步;2.程序按照子程序编写,若要进行改动,可以直接改动或复制所需的子程序,注意变量的传递;3.程序多加了查错的功能,若成绩大于100,则认为输入的成绩错误;4.输入成绩时,成绩之间用一个空格隔开,另外程序长度有限,未引入delete键功能,即不小心输入错误的成绩时,不能用delete删除,以重新成绩,否则会出错。

5.程序已验证无误。

6.本人能力有限,程序仅供初级学习汇编语言者交流与讨论。

DA TA SEGMENTtishi1 DB 'please input number of people:',0DH,0AH,'$' ;显示提示信息tishi2 DB 0DH,0AH,'please input the mark:',0DH,0AH,'$'tishi3 DB 0DH,0AH,'A:','$'tishi4 DB 0DH,0AH,'B:','$'tishi5 DB 0DH,0AH,'C:','$'tishi6 DB 0DH,0AH,'D:','$'tishi7 DB 0DH,0AH,'E:','$'tishi8 DB 0DH,0AH,'ERROR:','$'renshu DW ?MARKS DW 100 DUP(?)A DB 0B DB 0C DB 0D DB 0E DB 0F DB 0SHUJU DB ?SHI DB ?GEI DB ?DA TA ENDSSTACK SEGMENTTOP DB 50 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV SS,AXLEA DX,tishi1 ;提示输入人数MOV AH,09H ;显示INT 21HXOR BX,BX ;寄存器清零XOR CX,CXXOR AX,AXXOR DX,DXMOV AH,01HINT 21HSUB AL,30H ;ASC码变成十进数MOV BL,ALMOV AH,01HINT 21HCMP AL,0DH ;比较回车?不是**,存储JZ cunrenshuSUB AL,30HMOV DL,ALMOV AL,BLMOV CL,0AHMUL CLADD AL,DLMOV BX,AXcunrenshu:MOV renshu,BXXOR BX,BX ;寄存器清零XOR CX,CXXOR SI,SILEA DX,tishi2 ;提示输入成绩MOV AH,09HINT 21Hshuchengji:MOV AH,01HINT 21HCMP AL,0DH ;是否为回车键JZ jieshu ;是,跳到jieshuCMP AL,20H ;是否为空格JZ cunchengji ;是,跳cunchengjiSUB AL,30H ;变为数字MOV CL,4SHL BX,CL ;左移四位ADD BL,ALJMP shuchengjicunchengji:MOV MARKS[SI],BX ;保存到MARKS中ADD SI,2JMP shuchengjijieshu: MOV MARKS[SI],BXXOR SI,SIMOV CX,renshu ;人数->CXLOP: MOV BX,MARKS[SI] ;比较大小CMP BX,60HJAE MARK_60 ;大于等于60跳MARK_60INC E ;否则E加1JMP QUIT ;跳QUITMARK_60:CMP BX,70HJAE MARK_70INC DJMP QUITMARK_70:CMP BX,80HJAE MARK_80INC CJMP QUITMARK_80:CMP BX,90HJAE MARK_90INC BJMP QUITMARK_90:CMP BX,100HJA SERRORINC AJMP QUITSERROR: INC FJMP QUITQUIT: ADD SI,2 ;指针加2LOOP LOPJZ shuchuA ;CX=0,跳至输出shuchuA:LEA DX,tishi3MOV AH,09HINT 21HXOR BX,BXXOR DX,DXMOV BL,A ;A给SHUJUMOV SHUJU,BLCALL CHANGE ;调用转换子程序CALL SHOW ;调用显示子程序shuchuB:LEA DX,tishi4MOV AH,09HINT 21HMOV BL,BMOV SHUJU,BLCALL CHANGECALL SHOWshuchuC:LEA DX,tishi5MOV AH,09HINT 21HMOV BL,CMOV SHUJU,BLCALL CHANGECALL SHOWshuchuD:LEA DX,tishi6MOV AH,09HINT 21HMOV BL,DMOV SHUJU,BLCALL CHANGECALL SHOWshuchuE:LEA DX,tishi7MOV AH,09HINT 21HMOV BL,EMOV SHUJU,BLCALL CHANGECALL SHOWSCERROR:LEA DX,tishi8MOV AH,09HINT 21HMOV BL,FMOV SHUJU,BLCALL CHANGECALL SHOWJMP $MOV AH,4CHINT 21HSHOW PROC NEAR ;定义SHOW子程序PUSH AX ;现场保护PUSH CXMOV AL,SHI ;输出十位数ADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AL,GEI ;输出个位数ADD AL,30HMOV DL,ALMOV AH,02HINT 21HPOP CXPOP AXRETSHOW ENDPCHANGE PROC NEAR ;十六进制转换为十进制PUSH AX ;现场保护PUSH CXMOV AL,SHUJUMOV AH,0MOV BL,0AH ;BL赋值为10DIV BL ;AL除以10MOV SHI,AL ;商给SHIMOV GEI,AH ;余数给GEIPOP CXPOP AXRETCHANGE ENDPCODE ENDSEND START。

汇编语言与微机原理及接口技术实验项目说明

汇编语言与微机原理及接口技术实验项目说明

8086汇编语言与微机原理及接口技术实验项目说明序号课程项目基本要求扩展要求思考内容1 汇编语言与微机原理及接口技术[0001]输入输出实验1.熟悉emu8086仿真系统2.实现控制台输入输出3.设计并单步调试实现一位十进制数的加法运算(屏幕效果为3+2=5,红色为输入其他为自动输出)1.实现两位十进制和的输出2.实现一位十进制四则运算3.实现多位数运算1.输入输出数据和计算用数据的区别2.单字符输入输出和串输入输出的不同2 汇编语言与微机原理及接口技术[0002]分支程序实验1.实现控制台输入输出2.实现两位十进制数猜数字游戏(基本要求:输入两位数和预设数值比较,对于输出>小于输出<等于输出=并退出)1.每次输出都换行2.显示远大于>>(大于两倍)和远小于<<(小于二分之一)1.控制符的显示输出2.同样分支功能的不同指令实现方法3 汇编语言与微机原理及接口技术[0003]循环程序实验1.实现内存数据访问2.用两种方法实现对五个字从大到小排序1.用冒泡法时实现快排 1.冒泡法属于快速排序的原因4 汇编语言与微机原理及接口技术[0004]子程序及中断实验1.实现子程序和中断服务子程序的设计2.编写子程序设置40H中断为自定义中断服务子程序3.编写中断服务子程序实现AX=AX+BX4.编写主程序调用子程序和中断1.保留原中断服务子程序功能1.中断向量表结构2.中断服务程序链的实现5 汇编语言与微机原理及接口技术[0005]存储器访问实验1.实现存储器串操作访问2.编程实现安全的串拷贝功能1.源串和目的串有重叠的处理方法1.如何提高操作速度6 汇编语言与微机原理及接口技术[0006]8255交通灯实验1.使用IO方式实现十字路口交通灯控制2.分别实现南北向和东西向绿灯等时和不等时的控制1.如何实现丁字路口交通灯1.交通灯状态与IO的关系2.IO端口的寻址方式7 汇编语言与微机原理及接口技术[0007]温度控制实验1.使用IO方式实现温度采集和加热控制2.控制温度保持在75℃到80℃并维持2分钟1.控制温度曲线如给定要求(先加热到60℃保持1分钟;加热到70℃保持2分钟;然后降温到50℃并保持)1.如果采用中断方式应该如何设计中断服务子程序(假设硬件系统功能完整).8 汇编语言与微机原理及接口技术[0012]综合性实验1.使用proteus设计一个8088最小系统,并配备内存自检程序,自检结果通过数码管或者发光二级管给出指示.1.给最小系统增加输入小键盘2.给最小系统增加6位输出数码管1.基于8086系统的专用计算机设计思路.实验过程需要实现基本要求,对于扩展要求至少要画出实现的流程或者应采用的算法,在实验报告中体现出对于思考内容的想法。

微机原理实验一两个多位十进制数相加实验试做报告

微机原理实验一两个多位十进制数相加实验试做报告
INT21H
CODE ENDS
END START
运行结果:
75249
上述程序有很多不方便的地方,比如①加数和被加数以低字节在前高字节 在后顺序存放在内存单元中,不符合我们日常的习惯,如果改为高字节在前低 字节在后的形式存放数据,程序如何改变?②程序只显示了相加结果,没有显 示加数和被加数,如果要求显示加数和被加数,程序如何修改?③如果按47193+28056=75249格式显示,程序如何修改?
【实验说明】
汇编语言没有十进制加法指令,ADD/ADC加法指令的运算对象是二进制 数,如果要进行BCD码数的加法,需要对结果进行修正。组合BCD码的加法调 整指令为DAA,它针对AL寄存器中的组合BCD码数之和进行修正。对于未组合BCD码的加法调整指令为AAA(加法的ASCII码调整指令),它将存于AL寄存 器中的一位ASCII码数加法运算的结果调整为一位拆开型十进制数,仍保留在AL中,如果向高位有进位(AF=1),则进到AH中。
CODE,DS:
DATA
START:
MOV AX,DATA
MOV DS,AX
MOV CX,5;计数
MOV SI,0;做指针用,因从DATA1的第一个数取数,故SI=OCLC
NEXT:
MOVAL,DATA1[SI];取被加数给AL
ADCAL,DATA2[SI];取加数和AL相加
AAA:未组合十进制数加法调整指令
运行结果:
47193
28056
75249
3程序清单(wjsy3a.asm)
DISP MACRO M
MOV AH,2
MOV DL,M
INT21H
ENDM
DATA SEGMENT
DATA1DB 34H,37H,31H,39H,33H

微机原理实验报告二 4位BCD码相加

微机原理实验报告二 4位BCD码相加

4位BCD码相加实验一,实验目的:学习字符型数据与数值型数据的相互转换方法,了解BCD码输入及相加的方法。

二,实验内容:在数据段中定义3个变量x1,x2,x3,用于存储从微机键盘上输入两个4位BCD码(低位数据占高地址存放),x3用于存储这两个BCD码的和。

从键盘输入两个4位BCD码,检查是否为数字键,非数字键不接收。

将输入的两个4位字符型数据转换为4位非压缩型BCD码存于数据段中的变量中。

将2个4位非压缩型BCD码相加,将结果利用INT 21H的2号功能显示在微机屏幕上。

三,实验流程图:四,实验程序:STACK SEGMENT STACKDW 100 DUP(?)STACK ENDSDATA SEGMENTX1 DB 4 DUP(0)X2 DB 4 DUP(0)X3 DB 5 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK KEYIN PROCAGAIN: MOV AH,8INT 21HCMP AL,30HJB AGAINCMP AL,39HJA AGAINPUSH AXMOV DL,ALMOV AH,2INT 21HPOP AXRETKEYIN ENDPMAIN PROCMOV SI,OFFSET X1MOV CX,4NEXT1:CALL KEYINAND AL,0FHMOV [SI],ALINC SILOOP NEXT1JIAHAO: MOV AH,8INT 21HCMP AL,2BHJNE JIAHAOMOV DL,2BHMOV AH,2INT 21HMOV SI,OFFSET X2MOV CX,4NEXT2:CALL KEYINAND AL,0FHMOV [SI],ALINC SILOOP NEXT2MOV SI,(OFFSET X1)+3 MOV DI,(OFFSET X2)+3 MOV BX,(OFFSET X3)+4 MOV CX,4OR CX,CXHUICHE: MOV AH,8INT 21HCMP AL,0DHJNE HUICHEMOV DL,3DHMOV AH,2INT 21HPLUS: MOV AL,[SI]ADC AL,[DI]AAAMOV [BX],ALDEC SIDEC DIDEC BXLOOP PLUSMOV AL,0ADC AL,0MOV [BX],ALMOV BX,OFFSET X3MOV CX,5NEXT3: MOV DL,[BX]ADD DL,30HMOV AH,2INT 21HINC BXLOOP NEXT3MAIN ENDPCODE ENDSEND MAIN五,实验感想:经过这次的实验,新的实验收获主要有以下几点:首先,若在输入端有输入条件,比如键入某些值有效某些值无效,在使用INT 21H功能时应先用8号功能输入但不回显,程序内部判断条件是否成立,最后再使用2号功能在屏幕上显示;第二,在做算术运算时,要使用数字的真实二进制,因此再输入数字后,应将其转换为相应二进制再存储;最后,在显示运算结果时,进位也要显示出来,所以在数据段定义时就需留足结果的位数。

输入任意长度两个数字(正负皆可),计算两个数字的和

输入任意长度两个数字(正负皆可),计算两个数字的和

#include<stdio.h>#include<string.h>void add(const char *num1,const char *num2,char *result){int lenth1=strlen(num1),lenth2=strlen(num2);int first1=num1[0];int first2=num2[0];int max=0;int min=0;int difference=0;int sum=0;int flag=0;int negative=0;intsavez=0;int zero=0;intaaa=0;if(lenth1>=lenth2){max=lenth1;min=lenth2;difference=max-min;}else{max=lenth2;min=lenth1;difference=max-min;}/*intaa='-';printf("%d\n",aa);*/if(first1==45&&first2==45) //先判断结果是否为负negative=1;else if(first1==45){if(lenth1>lenth2+1)negative=1;else if(lenth1==lenth2+1){for(int k=0;k<lenth2;k++)if(num1[k+1]>num2[k]){negative=1;break;}else if(num1[k+1]<num2[k])break;}}else if(first2==45){if(lenth1<lenth2-1)negative=1;else if(lenth2==lenth1+1){for(int k=0;k<lenth1;k++)if(num2[k+1]>num1[k]){negative=1;break;}else if(num2[k+1]<num1[k])break;}}elsenegative=0;if(negative==0) //当确定结果为正数时{for(inti=max-1;i>=0;i--) //当两个数的长度相等时{if(num1[0]!=45&&num2[0]!=45) //如果两个数都为正数{if(i>=difference){if(lenth1>=lenth2)sum=num1[i]-48+num2[i-difference]-48+flag;elsesum=num2[i]-48+num1[i-difference]-48+flag;}else{if(lenth1>=lenth2)sum=num1[i]-48+flag;elsesum=num2[i]-48+flag;}}else if(lenth1==lenth2-1||lenth2==lenth1-1) //如果其中一个数为负数,并且数字位数相等{if(i>=difference){if(lenth1<lenth2)sum=num1[i-difference]-num2[i]-flag;elsesum=num2[i-difference]-num1[i]-flag;if(sum<0){sum=10+sum;flag=1;}elseflag=0;}elsesum=45;}else if(first1==45) //第一个数为负数{if(i>=difference+1)sum=num2[i]-num1[i-difference]-flag;elsesum=num2[i]-48-flag;}else if(first2==45) //第二个数为负数{if(i>=difference+1)sum=num1[i]-num2[i-difference]-flag;elsesum=num1[i]-48-flag;}if(sum==45&&i==0){for(int j=0;j<max;j++){if(j==max-1)result[j]='\0';elseresult[j]=result[j+1];}}else if(sum>=10&&i==0){result[i]=sum-10+48;for(int j=max;j>=0;j--){result[j]=result[j-1];if(j==0)result[0]='1';}}else if(sum>=10){result[i]=sum-10+48;flag=1;}else if(sum<0){sum=10+sum;result[i]=sum+48;flag=1;}else{result[i]=sum+48;flag=0;}if(i==0&&result[0]=='0'){for(int k=0;k<strlen(result);k++){if(result[k]!='0'){zero=0;savez=k;break;}elsezero=1;}for(int j=0;j<strlen(result)-savez&&zero==0;j++) {result[j]=result[j+savez];if(j==strlen(result)-savez-1)result[j+1]='\0';}if(zero==1){result[0]='0';result[1]='\0';}}}}else if(negative==1){if(first1==45&&first2==45) //当两个数都为负数的时候{for(inti=max-1;i>=0;i--){if(i>=difference+1&&i!=0){if(lenth1>=lenth2)sum=num1[i]-48+num2[i-difference]-48+flag;elsesum=num2[i]-48+num1[i-difference]-48+flag;}else if(i<difference+1&&i!=0){if(lenth1>=lenth2)sum=num1[i]-48+flag;elsesum=num2[i]-48+flag;}if(sum>=10){result[i]=sum-10+48;flag=1;}else{result[i]=sum+48;flag=0;}if(i==0&&flag==1){result[0]='1';for(int j=max;j>=0;j--){if(j==0)result[j]='-';elseresult[j]=result[j-1];}result[max+1]='\0';}else if(i==0&&flag==0){result[0]='-';result[max]='\0';}}}else{for(inti=max-1;i>=0;i--){if(i>0){if(i>=difference){if(lenth1>=lenth2)sum=num1[i]-num2[i-difference]-flag;elsesum=num2[i]-num1[i-difference]-flag;}else{if(lenth1>=lenth2)sum=num1[i]-48-flag;elsesum=num2[i]-48-flag;}}elsesum=45;if(sum<0){sum=10+sum;flag=1;}elseflag=0;if(i==0)result[i]=sum;elseresult[i]=sum+48;if(i==1&&result[1]=='0'){for(int k=1;k<max;k++){if(result[k]!='0'){savez=k;break;}}for(int j=1;j<=max-savez;j++){result[j]=result[j+savez-1];if(j==max-savez)result[j+1]='\0';}}//printf("%d\t%d\t%d\t%d\n",sum,negative,max,result[i]);}result[max]='\0';}}//printf("%d\t%d\t%d\t%d\n",sum,negative,savez,zero); }void main(){char num1[100];char num2[100];scanf("%s%s",num1,num2);char result[100]={'0'};add(num1,num2,result);printf("%s\t%s\n",num1,num2);printf("%s\n",result);}。

微机软件实验习题与答案(完整版)

微机软件实验习题与答案(完整版)

微机原理软件实验实验1 两个多位十进制数相加的实验实验容:将两个多位十进制数相加,要求加数和被加数均以ASCII码形式各自顺序存放以DATA1和DATA2为首的5个存单元中(低位在前),结果送回DATA1处。

完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB'input the first number:','$'STRING2 DB 13,10,'input the second number:','$'STRING3 DB 13,10,'the output is:','$'DATA1 DB 6 DUP(00H),'$'DATA2 DB 6 DUP(00H),'$'DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码LEA SI,DATA1LEA DI,DATA2L0:LEA DX,STRING1;打印字符串STRING1MOV AH,09INT 21HINPUT1: ;输入第一个数MOV AH,01;输入字符至AL中INT 21HCMP AL,'/'JE L1MOV [SI],ALINC SIJMP INPUT1L1:LEA DX,STRING2;打印字符串STRING2MOV AH,09INT 21HINPUT2: ;输入第二个数MOV AH,01;输入字符至ALINT 21HCMP AL,'/'JE L2MOV [DI],ALINC DIJMP INPUT2L2:MOV SI,0CLC;清空进位标志位CFMOV CX,6PLUSE: ;相加;SUB DATA1[SI],30H;SUB DATA2[SI],30H;这里不能使用这两条指令,因为如果DATA1[5]=00H,00H-30H需要借位相减,使CF=1MOV AL,DATA1[SI]ADC AL,DATA2[SI]AAA;加法调整指令,可使两个ASCII数直接相加MOV DATA1[SI],AL;和赋给DATA1[SI]INC SILOOP PLUSEL3:LEA DX,STRING3;打印字符串STRING3MOV AH,09INT 21HMOV CX,6MOV SI,6SHOW:DEC SICMP DATA1[SI],00HJE SHOWSHOW2:MOV DL,DATA1[SI]ADD DL,30HMOV AH,02INT 21HCMP SI,0JE L4DEC SIJMP SHOW2L4: MOV AH,4CHINT 21HCODES ENDSEND START运行结果如下:输入为低位在前,即输入1234和99999相加实际上是4321和99999相加(即:4321+99999=104320)实验2 两个数相乘的实验(无符号数相乘)实验容:实现十进制数的乘法。

【Java】编写Java程序,完成从键盘输入两个运算数据,计算两数之和并输出结果

【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);}}。

从键盘输入两个命题变元P和Q的真值-求它们的合取、析取、蕴含和等价的真值

从键盘输入两个命题变元P和Q的真值-求它们的合取、析取、蕴含和等价的真值

从键盘输入两个命题变元P和Q的真值-求它们的合取、析取、蕴含和等价的真值(总11页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--长治学院《离散数学》实验报告专业:计算机科学与技术班级:计科1202班学号:姓名:武文超组别: 1指导老师:李艳玲目录一、实验目的 (3)二、算法思想 (3)三、流程图 (4)四、实验结果(截图) (5)五、程序代码 (7)六、总结 (10)一、实验目的本实验课程是信息专业学生的一门专业基础课程,通过实验,帮助学生更好地掌握计算机科学技术常用的离散数学中的概念、性质和运算;通过实验提高学生编写实验报告、总结实验结果的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。

熟悉掌握合取、析取、蕴涵和等价,进一步能用它们来解决实际问题。

二、算法思想1. 从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、蕴含和等价的真值。

(1)合取:二元命题联结词。

将两个命题P、Q联结起来,构成一个新的命题P∧Q, 读作P、Q的合取, 也可读作P与Q。

这个新命题的真值与构成它的命题P、Q的真值间的关系为只有当两个命题变项P = T, Q = T时方可P∧Q =T, 而P、Q只要有一为F则P∧Q = F。

这样看来,P∧Q可用来表示日常用语P与Q, 或P并且Q。

(2)析取:二元命题联结词。

将两个命题P、Q联结起来,构成一个新的命题P∨Q, 读作P、Q的析取, 也可读作P或Q。

这个新命题的真值与构成它的命题P、Q的真值间的关系为只有当两个命题变项P = F, Q = F时方可P∨Q =F, 而P、Q只要有一为T则P∨Q = T。

这样看来,P∨Q可用来表示日常用语P或者Q。

(3)蕴含:二元命题联结词。

将两个命题P、Q联结起来,构成一个新的命题P→Q, 读作P条件Q, 也可读作如果P,那么Q。

这个新命题的真值与构成它的命题P、Q的真值间的关系为只有当两个命题变项P = T, Q = F时方可P→Q =F, 其余均为T。

C语言程式从键盘输入两个小数,输出它们的和及乘积

C语言程式从键盘输入两个小数,输出它们的和及乘积

C语言程式从键盘输入两个小数,输出它们的和及乘积C语言程式从键盘输入两个小数,输出它们的和及乘积void main (){float i = 0;float j = 0;scanf("%f, %f",&i,&j);printf("%f + %f = %f\n", i, j, i + j);printf("%f * %f = %f\n", i, j, i * j);return;}从键盘输入3个正整数,求他们的乘积并输出来的c语言程式#include "stdio.h"int main(void){ long a,b,c,result; printf("输入三个数:"); scanf("%ld%ld%ld",&a,&b,&c); result=a*b*c; printf("三数之积为:%ld\n",result); return 0;}C语言问题:从键盘输入两个矩阵,输出两个矩阵的乘积下面程式是举个例子(3,4)*(4,3)=(3,3)void main(){int a[3][4]={{1,2,3,4},{4,5,6,7},{7,8,9,10}};int b[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};int i,j,c[3][3];for(i=0;i<3;i++){for(j=0;j<3;j++){c[i][j]=a[i][0]*b[0][j]+a[i][1]*b[1][j]+a[i][2]*b[2][j]+a[i][3]*b[3 ][j];矩阵乘法公式printf(" %d ",c[i][j]);}printf("\n");}}C语言程式:实现从键盘输入一个整数,输出该数的平方。

c语言俩数求和

c语言俩数求和

c语言俩数求和C语言是一门广泛应用于计算机编程的高级程序设计语言。

在C语言中,求两个数的和是一项基础操作。

本文将介绍C语言中实现两数求和的方法和相关知识点。

我们需要了解C语言中的变量和数据类型。

变量是程序中用来存储数据的一种容器,而数据类型则定义了变量中可以存储的数据类型和所占用的内存大小。

在C语言中,基本的数据类型包括整型、浮点型、字符型等。

在C语言中,我们可以用赋值语句将数据存储到变量中。

例如,我们可以定义两个整型变量a和b,并将它们的值分别赋为3和5:int a = 3;int b = 5;接下来,我们就可以使用加法运算符“+”将a和b相加,并将结果存储到一个新的变量sum中:int sum = a + b;这个语句的意思是将a和b的和赋值给sum变量。

注意,sum变量的数据类型也必须为整型,否则会出现类型不匹配的错误。

除了使用变量和运算符,C语言中还有一些常用的库函数可以用来实现两数求和。

例如,我们可以使用scanf函数从用户输入中读取两个数,然后使用printf函数将它们的和输出到屏幕上:#include <stdio.h>int main(){int a, b, sum;printf("Enter two numbers: ");scanf("%d %d", &a, &b);sum = a + b;printf("Sum of the two numbers = %d", sum);return 0;}在这段代码中,我们使用了stdio.h库头文件来包含标准输入输出函数,定义了三个整型变量a、b和sum,以及使用printf函数输出提示信息和计算结果。

scanf函数用来从用户输入中读取两个整数,并将它们存储到a和b变量中。

注意,scanf函数中的“%d”格式控制符必须与变量类型匹配,否则会引发格式化错误。

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

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

学生实验报告(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 ;实行加法运算子程序定义、属性为NEAR MOV 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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理实验5 一位带符号数加法的汇编语言程序设计
班级学号姓名
实验时间:年月日实验成绩:
1.实验目的
从键盘上输入两个数(数的大小在±9之间),然后在屏幕上显示两数之和(结果在±18之间)。

完成创建源程序文件,汇编,连接,运行,实验结果显示。

2.实验原理
3.实验仪器设备
4.实验过程
5.实验结果
DSEG SEGMENT
s1 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 ENDS
CSEG SEGMENT
a ssume cs:CSEG, ds:DSEG
MAIN PROC FAR
m ov ax, dseg
m ov ds, ax
m ov bl,0
mov cl,0
mov ah,9h
lea dx,s1
int 21h ;显示字符串1 mov ah,1
int 21h
cmp al,2dh
jnz m1
mov bl,1
mov ah,1
int 21h
m1: mov [d1],al ;读入第一个数
mov ah,9h
lea dx,s2
i nt 21h ;显示字符串2
mov ah,1
int 21h
cmp al,2dh
jnz m2
mov cl,1
mov ah,1
int 21h
m2: mov [d2],al ;读入第二个数
c all subp
mov al,[d1]
call subp
cmp cl,bl
jnz btfh
mov al,[d2]
add al,[d1]
sub al,30h
cmp al,39h
jna mm
add al ,6
mov [d3+1],31h
sub al,10h
mm: mov [d3+2],al
cmp bl,1
jz fh
jmp zhh
btfh: mov al,[d1]
cmp al,[d2]
jna mk
sub al,[d2]
add al,30h
mov [d3+1],al
cmp bl,1
jz fh
jmp zhh
mk: mov al,[d2]
sub al,[d1]
add al,30h
mov [d3+1],al cmp cl,1
jz fh
jmp zhh
fh:mov [d3],2dh zhh: m ov ah,9h
lea dx,s3
i nt 21h ;显示字符串3
mov ah,9h
lea dx,d3
i nt 21h
mov ah,1 ;以下退出
int 21h
mov ax,4c00h
int 21h
MAIN ENDP
subp proc
cmp al,30h
jb k1
cmp al,39h
ja k1
jmp m9
k1: mov ah,9h
lea dx,s4
i nt 21h
m9: ret
subp endp
CSEG ENDS END MAIN。

相关文档
最新文档