微机实验 两个多位十进制数相加的实验
2.1多位十进制数相加程序
太原理工大学现代科技学院课程实验报告专业班级学号姓名指导教师实验名称 多位十进制数相加程序 专业班级 学号 姓名 成绩 一、实验目的: 学习数据传送和算数运算指令的用法 二、实验内容: 将两个多位十进制数28056,47193相加,并显示加数,被加数, 和。
要求两个加数均以ASC Ⅱ码形式各自顺序存放在DATA1和 DATA2内存单元中,结果送回DATA1处(低位在前,高位在后)。
三、程序流程图:四、程序列表: ……………………………………装………………………………………订…………………………………………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 MOV DI,BP MOV CX,05 CLC AD2: MOV AL,[SI] MOV BL,[DI] ADC AL,BL AAA MOV [SI],AL INC SI INC DI LOOP AD2 MOV SI,DX MOV DI,BP MOV BX,05 AD3: ADD BYTE PTR [SI+BX-1],30H ADD BYTE PTR [DI+BX-1],30H DEC BX JNZ AD3 RET ADDA ENDP CODE ENDS END START……………………………………装………………………………………订………………………………………截图:……………………………………装………………………………………订…………………………………………。
微机原理上机 汇编语言程序 编写程序求两个十进制数之和并将和以十进制数的形式送屏幕显示
上机作业二一.实验目的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五、实验体会实验中碰到的问题和解决方式:在这几回的编程实验中,我碰到了许多问题。
多位十进制数加法器设计.
深圳大学实验报告课程名称:微机原理及应用实验实验项目名称:多位十进制数加法器设计学院:物理科学与技术学院专业:应用物理指导教师:报告人:学号:班级:应用物理班实验时间:2015-10-19实验报告提交时间:2015-11-02教务处制五、程序说明(预习)七、实验源程序清单(实验后以电子报告形式存储到指定位置)1.源程序路径及文件名:ADD2.ASM ADD1.ASM2.可执行程序路径及文件名:八、上机调试情况说明EMU8086:一:没有键盘录入1.结果显示如下:2.程序运行时的各段地址:3.两个子程序IP入口:4.改变两个加数数值5.子程序格式及其调用方法和宏汇编区别子程序格式:子程序名称PROC NEAR ; 子程序定义; …子程序内容RET ;子程序返回子程序名称ENDP ;子程序结束调用格式:CALL 子程序名称注意事项:1、子程序不能直接传递参数,需要自行定义变量。
2、注意保护现场和恢复现场。
宏汇编与子程序的区别:1、宏汇编有宏展开,子程序没有2、宏汇编可以传递参数。
二:键盘录入DOS:例如:250+250=500例如:62142+63123=125265九、实验结果与分析结果如下:十、实验总结(必备部分,评分重要依据之一)本次实验实则是对实验二的加强巩固基础上,进行更加友好的人机交互设计;通过本次实验不仅在程序中首先把两个加数固定,在实验二的基础上扩展位数,考虑到最高位进位的情况,并最终得出正确结果;后来又通过键盘录入两个加数,增加了人机交互的设计,如此一来,更加加深了对寄存器的使用,汇编语言宏定义,子程序调用以及DOS功能调用的学习。
同时,通过本次实验的学习,更加熟练了EMU8086工具的使用,也把理论课上学习到的汇编操作指令实际操作,对汇编语言的风格加深认识。
MOV DL,BLINT 21HCRLFJMP BEGINERROR:CRLFMOV AH,09H ;显示输入错误LEA DX,STRING3INT 21HCRLFJMP BEGINEXIT:CRLFMOV AH,09H ;显示成功退出LEA DX,STRING4INT 21HMOV AH,4CHINT 21HCODE ENDSEND START(2)请问你的程序能否处理加数和被加数都介于0~65535范围但计算结果超出该范围的情况?如何改进?可以,如图:主要考虑到最高位是否进位,可以设置一个进位变量加以判断。
多位十进制数加法器实验-2014
实验三多位十进制数加法器设计1、实验目的(1)继续熟练掌握在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程;(2)学习数据传送和算术运算指令的用法;(3)掌握子程序设计方法;(4)掌握宏汇编设计方法;(5)掌握键盘输出的DOS功能调用方法。
2、实验内容(1)将两个多位十进制数相加。
要求被加数、加数均以ASCII码形式各自按高位高地址的规律分别顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回结果变量DATA3处,并屏幕显示结果。
(2)在以上程序基础上,设计一个多位十进制数加法器,键盘输入十进制加数和被加数,将输入和输出结果以竖式形式显示在屏幕。
3、提示:(1)算法说明:以42136与12547相加为例,首先将两个数中的每一位都以ASCII码存入相应的内存单元,然后将每一位数都减去30H,并将被加数DATA1和加数DATA2相对应位相加(BCD码加法及其十进制调整,要考虑低位向高位的进位),存入相应的结果DATA3存储单元中,最后将该单元中的每一位数转换成相应的ASCII码,调用DOS系统功能调用的显示字符指令,显示两数相加的结果。
(2)部分程序代码:DATA SEGMENT ;数据段…;补充必要的代码,定义被加数、加数和结果变量DATA ENDSSTACK SEGMENT STACK ;堆栈段STA DB 64 DUP(0)SP_TOP DB 0STACK ENDSCODE SEGMENT ; 代码段…;补充必要的代码;显示回车换行功能用宏定义CRLF实现,放在代码段最前面CRLF MACROMOV DL,0DH ;回车(0DH为回车的ASCII 码)MOV AH,02H ; 送DOS 的中断调用功能号INT 21H ; DOS 的中断调用...;补充必要的代码:用DOS功能调用实现换行,0AH为换行的ASCII 码ENDMSTART:...; 补充必要的代码:程序开头必须要有的五条指令; 显示被加数,并回车换行MOV BX, OFFSET DATA1MOV SI, 05CALL DISPL ; 显示被加数,DISPL为显示子程序CRLF ; 回车、换行宏调用…; 补充必要的代码,显示加数CALL ADDA ;调用加法运算子程序…; 补充必要的代码,显示结果…; 补充必要的代码:回车、换行...; 补充必要代码:主程序结束,返回DOS;DISPL为字符串显示子程序DISPL PROC NEAR ; 子程序定义DSL: MOV AH,02 ; 送显示功能号MOV DL,[BX+SI-1] ; 显示字符串中一字符INT 21H ; DOS INT 21 功能调用DEC SI ;修改偏移量JNZ DSLRETDISPL ENDP; 多位数加法子程序ADDA PROC NEAR...;需要自编的求和核心程序RETADDA ENDP;代码段与程序结束CODE ENDSEND START(3)加法器的设计:需要用到字符串输入和字符串输出的DOS功能调用。
微机实验:两个多位十进制数相加的实验
实验一、两个多位十进制数相加的实验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。
两个多位十进制数相加实验
实验一两个多位十进制数相加实验一实验目的1学习数据传送及算术运算指令的用法2 进一步熟悉汇编语言上机过程二、实验要求1 独立完成每个实验项目2 按照程序流程图编好实验程序三程序框图Array加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验二将键盘输入的小写字母转换成大写字母一实验目的了解小写字母和大写字母在计算机内的表示方法,学习如何转换二、实验要求1 独立完成每个实验项目2三程序框架加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验三输入字符一实验目的1学习数据传送及算术运算指令的用法2 进一步熟悉汇编语言上机过程加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验四8255A并行口实验一、实验目的加深理解逐次逼近法模数转换器的特征和工作原理,掌握ADC0809的接口方法以及A/D输入程序的设计和调试方法。
二、实验要求1 理解实验程序2 掌握各个芯片的原理和使用方法。
三、实验原理PC口8位接8个开关K1~ K8,PB口8位接8个发光二极管,从PC口读入8位开关量送PB口显示。
拨动K1~ K8,PB口上接的8个发光二极管L1~ L8对应显示K1~ K8的状态。
程序:CODE SEGMENTASSUME CS:CODEIOCONPT EQU 0073HIOAPT EQU 0070HIOBPT EQU 0071HIOCPT EQU 0072HIOBDATA EQU 0500HCONTPORT EQU 00DFHDATAPORT EQU 00DEHDATA1 EQU 0640HSTART: J MP IOLEDIOLED: CALL FORMATCALL LEDDISPMOV DS,AXMOV AL,82HMOV DX,IOCONPTOUT DX,ALMOV DX,IOBPTIN AL,DXMOV BYTE PTR DS:[0501H],ALMOV DX,IOCONPTMOV AL,80HOUT DX,ALMOV DX,IOBPTMOV AL,DS:[0501H]OR AL,0F0HOUT DX,ALMOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY1IOLED0: MOV AL,10100101BMOV DX,IOCPTOUT DX,ALCALL DELAY1CALL DELAY1OR AL,0F0HOUT DX,ALMOV CX,8HIOLED1: MOV DX,IOBPTMOV AL,DS:[0501H]AND AL,10101111BOUT DX,ALCALL DELAY2OR AL,01010000BOUT DX,ALCALL DELAY2LOOP IOLED1MOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY2MOV AL,01011010BOUT DX,ALCALL DELAY1CALL DELAY1OUT DX,ALMOV CX,8HIOLED2: MOV DX,IOBPTMOV AL,DS:[0501H]AND AL,01011111BOUT DX,ALCALL DELAY2OR AL,10100000BOUT DX,ALCALL DELAY2LOOP IOLED2MOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY2JMP IOLED0DELAY1: PUSH AXPUSH CXMOV CX,0030HDELY2: CALL DELAY2LOOP DELY2POP CXPOP AXRETDELAY2: PUSH CXMOV CX,8000HDELA1: LOOP DELA1POP CXRETLEDDISP:MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV BYTE PTR DS:[0600H],00 LED1: CMP BYTE PTR DS:[0600H],07H JA LED2MOV BL,DS:[0600H]MOV BH,0HMOV AL,CS:[BX+DATA1]MOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:[0600H],01HJNZ LED1LED2: RETFORMAT: MOV BX,0MOV WORD PTR DS:[BX+0640H],405BHADD BX,2MOV WORD PTR DS:[BX+0640H],4040HADD BX,2MOV WORD PTR DS:[BX+0640H],6D6DHADD BX,2MOV WORD PTR DS:[BX+0640H],7F5BHRETCODE ENDSEND START四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在实验机箱上连好实验线路3 观察实验现象4 分析实验结果实验五8259中断控制器实验一、实验目的1.掌握8259中断控制器的接口方法.2.掌握8259中断控制器的应用编程.二、实验要求1 理解实验程序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。
微机原理实验之两位十进制数相加
微机原理实验之两位十进制数相加实验目的:了解和掌握两位十进制数相加的原理和方法,熟悉数字电路的组成和工作原理。
实验器材:数字计算器、示波器、两位十进制加法器。
实验原理:在计算机中,数字电路是基础。
而十进制数相加是数字电路中最基本的运算之一、十进制数可以用二进制数表示,通过逻辑门和添加器电路可以实现十进制数的加法运算。
十进制数是由0~9这10个基本数字组成。
每一位都有从0到9的取值范围。
当两位十进制数相加时,需要对个位、十位等位上的数字进行相加,并向高一位进位。
具体的加法过程可以通过数字电路来实现。
一个两位十进制数相加的示例:23+56首先从个位数开始相加,3+6=9,个位上的结果是9;然后从十位数开始相加,2+5=7,十位上的结果是7;将个位和十位上的结果合并,得到最终结果79实验步骤:1.准备好实验器材,确保电路连接的正确性。
2.输入两个需要相加的两位十进制数,例如23和56,将这两个十进制数转化为二进制数。
3.将两个二进制数输入到相应的输入端口,将输入数送入两位十进制加法器。
4.确认输入数的有效性,检查输入数的范围是否符合要求。
5.等待计算器输出结果,结果以二进制数的形式表示。
6.确认结果的正确性,将输出数转化为十进制数。
7.对比计算结果与预期结果,分析原因。
实验结果:输入数:23、56预期结果:79实际结果:79分析和讨论:在本次实验中,我使用了两位十进制加法器,将两个两位十进制数相加。
实验结果显示,实际结果与预期结果一致,说明实验顺利完成。
通过这个实验,我了解到了两位十进制数相加的原理和方法。
在实际应用中,十进制数相加往往需要通过数字电路来实现。
对于更高位数的十进制数相加,可以通过级联多个十进制加法器来实现。
总结:通过本次实验,我掌握了两位十进制数相加的原理和方法,了解了数字电路的组成和工作原理。
继续深入学习和实践,在实际应用中灵活运用数字电路知识,将有助于提高计算和运算效率。
微机原理软件实验
微机原理实验报告专业:工业工程姓名:刘雷学号:089094082指导老师:陈全目录软件实验一汇编语言程序的调试与运行 (3)一.实验目的 (3)二.实验内容 (3)三.程序框图 (3)四.程序清单 (4)五.调试步骤 (6)六.思考题 (6)软件实验二分支程序设计 (14)一.实验目的 (14)二.实验内容与要求 (14)三.程序框图 (15)四.程序清单: (16)五.思考题 (17)软件实验三循环程序设计 (18)一.实验目的 (18)二.实验内容与要求 (18)三.程序框图 (19)四.程序清单(将程序补充完整) (20)软件实验四子程序结构 (22)一.实验目的 (22)二.实验内容与要求 (22)三.程序框图: (23)四.部分程序清单 (23)五.步骤 (25)六.思考题 (25)软件实验一汇编语言程序的调试与运行一.实验目的1.学习数据传送和算术运算指令的用法2.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。
二.实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在DATA1和DA TA2为首的5个内存单元中,结果送回DATA1处。
三.程序框图图1.1 两个多位十进制相加程序流程图四.程序清单DISP MACRO XMOV DL,X ;要显示的字符送DL寄存器MOV AH,02H ;DOS功能调用号是02HINT 21H ;21H中断程序是DOS功能调用ENDMDATA SEGMENTDATA1 DB '12732'DATA2 DB '06815'N EQU $-DA TA2DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP (?)TOP EQU $-STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DA TA START:MOV AX,DA TAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXLEA SI,DATA1 ;☆MOV BX,0MOV CX,NCALL DISPL ;显示被加数DISP '+'LEA SI,DATA2MOV BX,0MOV CX,NCALL DISPL ;显示加数DISP '='LEA DI,DA TA1MOV CX,NCALL ADDA ;调用加法子程序LEA SI,DATA1MOV BX,0MOV CX,NCALL DISPL ;显示运算结果DISP 0DHDISP 0AHMOV AX,4C00HINT 21HDISPL PROC ;显示子程序DS1: MOV AH,02HMOV DL,[SI+BX]INT 21HINC BXLOOP DS1RETDISPL ENDPADDA PROC ;加法子程序PUSH CXMOV BX,0AD1: SUB BYTE PTR [SI+BX],30HSUB BYTE PTR [DI+BX],30HINC BXLOOP AD1POP CXPUSH CXMOV BX,N-1 ;☆☆CLCAD2: MOV AL,[SI+BX]ADC AL,[DI+BX]AAAMOV [DI+BX],ALDEC BXLOOP AD2POP CXPUSH CXMOV BX,0 ;☆☆☆AD3: ADD BYTE PTR [DI+BX],30HINC BXLOOP AD3POP CXRET ;☆☆☆☆ADDA ENDPCODE ENDSEND START五.调试步骤1.编辑源程序,建立一个以后缀为.ASM的文件.2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。
实验一两个多位十进制数相加的实验
实验一两个多位十进制数相加的实验一、实验目的1、学习数据传送和算术运算指令的用法。
2、熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
二、实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
三、程序框图四、程序清单DATA SEGMENT ;定义数据段DATA1 DB 33H,39H,31H,37H,34H ;被加数DATA1END EQU $-1DATA2 DB 34H,35H,30H,38H,32H ;加数DATA2END EQU $-1SUM DB 5 DUP() ;定义5个空字节DATA ENDSSTACK SEGMENT ;定义堆栈段STA DB 20 DUP() ;取从STA开始的20个字节为堆栈段TOP EQU LENGTH STA ;将堆栈段长度存放在TOP中STACK ENDS ;堆栈段定义结束CODE SEGMENT ;定义程序代码段ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA ;表明程序代码段与段地址之间的关系START: MOV AX,DATAMOV DS,AX ;将段地址送入段地址寄存器MOV AX,STACKMOV SS,AX ;将当前堆栈段首地址送入SSMOV SP,AX ;将堆栈段首地址送入堆栈指针寄存器MOV SI,OFFSET DATA1END ;将DATA1的偏移地址送入SIMOV DI,OFFSET DATA2END ;将DATA2的偏移地址送入DICALL ADDA ;调用子程序ADDAMOV AX,4C00HINT 21H ;中断调用ADDA PROC NEAR ;子程序段MOV DX,SI ;DX=0004HMOV BP,DI ;BP=0009HMOV BX,05H ;程序调用次数AD1: SUB BYTE PTR[SI],30H ;将被加数的ASCII码转换成十六进制数SUB BYTE PTR[DI],30H ;将加数的ASCII码转换成十六进制数DEC SI ;SI中的内容自减1DEC DI ;DI中的内容自减1DEC BX ;程序调用次数自减1JNZ AD1 ;条件转移MOV SI,DX ;回到初始位置MOV DI,BPMOV CX,05H ;循环次数控制CLC ;清除CF位AD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BL ;从低位开始进行带进/借位的加法运算AAA ;转换成非压缩BCD码,低位存于AL,高位存于AH MOV [SI],AL ;将AL中的内容存入SI所在地址DEC SI ;偏移地址自减DEC DI ;偏移地址自减LOOP AD2 ;循环控制指令MOV SI,DXMOV DI,BPMOV BX,05HAD3: ADD BYTE PTR[SI],30H ;将16进制数转换为ASCII码表示 ADD BYTE PTR[DI],30HDEC SI ;偏移地址自减DEC DIDEC BXJNZ AD3RET ;返回指令ADDA ENDP ;结束子程序CODE ENDS ;结束程序代码段END START五、实验结果(截屏--软件实验或者拍照---硬件实验)六、实验结果分析(预期结果与实际结果的对照)1、数据段分析用ASCII码值的形式表示被加数和加数被加数=39174;加数=450822、堆栈段分析用于存放计算过程中的过程量。
04两个多位十进制数相加实验
实验原理
(2)BCD算术运算调整的基本原理 以组合十进制数加法运算为例: 当两数相加后,进位位C和半进位位A均为零,即 结果的高低4位均未大于9,则不需调整; 当两数相加后,结果的低4位大于9,即半进位位 A=1,则结果加06H; 当两数相加后,结果的高4位大于9,则结果加 60H; 当两数相加后,结果的低4位大于9,即半进位位 A=1,且同时进位位C=1,则结果加66H。
实验报告要求
1、记录实验中具体数据,并做整理和分析。
2、对程序进行逐行的详细注释。
3、将程序试改为减法,写出修改后的程序
指令、画出流程图、记录运行数据。
调用号
1 2 8
Байду номын сангаас功能
输入并显示一个字符
入口参数
出口参数
屏幕显示一个字符
DL中预先放入待显 示字符的ASCII码 执行后输入字符的 ASCII码存在AL中 DS:DX中存入字符 串首地址,字符串 必须要有$作为最后 结尾 DS:DX中设置字符 串首地址,且第1个 单元为允许输入最 大字符个数(外加1 个回车符) 执行后,实际输入 的字符个数存在字 符串第2个单元,字 符内容从字符串第3 个单元开始依次存 放 有输入AL=FFH, 无输入AL=0
键盘输入一个字符
9
屏幕显示字符串
10(0AH)
键盘输入同时屏幕显 示字符串
11(0BH)
检测有无键盘输入
下次实验内容
实验名称:
汇编语言程序设计实验(课堂测试)
实验内容:
根据后面提供的题目,由教师上课时随 机指定,当堂完成其中一个程序题目的编写、 编译、调试、运行等全过程。
汇编程序题
1、两个字节数(十六进制数)相减A-B送D,并以十六进制形式显 示结果。 2、两个十进制数相加,求其和,要求显示结果。(设两个加数及其 和均为位数相等的无符号数,且最多不超过5位) 3、将一个十进制正数(不超过4位数),转换成对应16进制数,显 示到屏幕上。 4、一个四位16进制数,按照二进制形式显示到屏幕上。 5、将一串十进制数字,分别用正序和反序显示到屏幕上。比如原始 序列为426135,其正序与之相同,反序就是531624. 6、将一串(2~10个)无序的十进制数字,按从小到大的顺序重新 排好后显示到屏幕上。 7、将一串不带符号的十进制数,求其最大值和最小值。
微原实验——两个四位十进制数相加并显示结果
微原实验——两个四位十进制数相加并显示结果一、实验目的1.通过上机实验,熟悉汇编语言开发环境,了解代码编译,连接,执行的相关过程。
2.熟悉汇编语言的书写与使用,在调试程序的过程中熟悉不同代码的执行效率与效果。
二、实验原理从键盘输入2个4位二进制数,相加并显示结果。
三、实验设备及软件硬件:PC软件:TPC2003+汇编集成开发环境四、实验内容(代码及注释)DATA SEGMENTX1 DB 4 DUP(0) ;第一个加数X2 DB 4 DUP(0) ;第二个加数X3 DB 5 DUP(0) ;两数之和y1db 'please input the first number:','$'y2db 'please input the second number','$'y3db 'the result is:','$'DATA ENDS ;数据段STACK SEGMENT STACKDW 100 DUP(?)STACK ENDS ;堆栈段CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKKEYIN PROC ;键盘输入函数AGAIN: MOV AH,8INT 21HCMP AL,30HJB AGAINCMP AL,39HJA AGAIN ;若不为数字,重新输入PUSH AXMOV DL,ALMOV AH,2INT 21H ;若为数字,入栈保存并显示POP AXRETKEYIN ENDPMAIN PROCMOV AX,DATAMOV DS,AXMOV DX,OFFSET Y1MOV AH,9INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;打印y1字符串,并在结尾输出回车MOV SI,OFFSET X1MOV CX,4NEXT1: CALL KEYINAND AL,0FH ;调整ASC码数字为纯数字以便相加MOV [SI],ALINC SILOOP NEXT1MOV SI,OFFSET X2MOV CX,4 ;将第一个加数保存在变量X1中MOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;输出回车MOV DX,OFFSET Y2MOV AH,9INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;打印y2字符串,并在结尾输出回车NEXT2: CALL KEYINAND AL,0FH ;调整ASC码数字为纯数字以便相加MOV [SI],ALINC SILOOP NEXT2 ;将第二个加数保存在变量X2中MOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;输出回车MOV DX,OFFSET Y3MOV AH,9INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;打印y3字符串,并在结尾输出回车MOV SI,(OFFSET X1)+3MOV DI,(OFFSET X2)+3MOV BX,(OFFSET X3)+4MOV CX,4OR CX,CX ;CF位清零PLUS: MOV AL,[SI]ADC AL,[DI]AAA ;十进制调整命令MOV [BX],ALDEC DIDEC SIDEC BXLOOP PLUSMOV AL,0ADC AL,0MOV [BX],ALMOV BX,OFFSET X1MOV CX,4NEXT4: MOV DL,[BX]ADD dl,30h ;将纯数字调整为ASC码以便打印MOV AH,2INT 21HINC BXLOOP NEXT4 ;打印加数X1MOV DL,2BHMOV AH,2INT 21H ;打印’+’号MOV BX,OFFSET X2MOV CX,4NEXT5: MOV DL,[BX]ADD DL,30HMOV AH,2INT 21HINC BXLOOP NEXT5 ;打印X2MOV DL,3DHMOV AH,2INT 21H ;打印’=’号MOV BX,OFFSET X3SUB BYTE PTR [BX],0JZ OUT1 ;判断结果最高位是否为零,若为零则跳至OUT1处MOV CX,5NEXT3: MOV DL,[BX]ADD DL,30HMOV AH,2INT 21HINC BXLOOP NEXT3 ;最高位不为零,打印五位数CMP CX,0JZ END1 ;若已经输出完毕,则跳至END1直接结束程序OUT1: MOV CX,4 ;结果最高位为零,打印四位数NEXT6: MOV DL,[BX+1]ADD DL,30HMOV AH,2INT 21HINC BXLOOP NEXT6END1: MOV AH,4CHINT 21HMAIN ENDPCODE ENDS ;结束程序END MAIN五、程序流程图从键盘输入字符或数字六、实验结果七、实验感想在本实验中,由于TPC编译平台问题,编译运行后的操作窗口过大,看不到显示的实验结果,还一直以为是代码有问题。
两个多位十进制数相加的实验
学生实验报告(2010 —2011 学年第 2 学期)课程名称:微机原理与接口技术开课实验室:205教室 2011年5 月10日一.实验目的1.学习数据传送和算术运算指令的用法。
2..熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。
二、实验原理及基本技术路线图或实验内容(方框原理图或程序流程图)1、实验内容将两个多位十进制数相加。
要求被加数均以ASCII码形式各自顺序存放在以DA TA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
三、所用仪器、材料和软件(设备和软件名称、型号、规格等)所用的软件为Masm for windows集成实验环境2009四、实验方法、步骤1、编写程序代码2、运行程序,修改错误代码3、再次运行代码直至运行出正确结果五、源码程序编制及分析注释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的偏移地址送SI MOV BX,05 ;计数次数为5次CALL DISPL ;调用多次显示子程序DISPL (显示28056)CRLF ;回车换行MOV SI,OFFSET DATA1 ;DATA1的偏移地址送SI MOV BX,05 ;计数次数为5次CALL DISPL ;调用多次显示子程序DISPL (显示47193)CRLF ;回车换行MOV DI,OFFSET DATA2CALL ADDA ;使用加法运算程序MOV SI,OFFSET DATA1 ;将和显示在屏幕上MOV BX,05 ;显示结束CALL DISPL ;调用多次显示子程序DISPL CRLF ;执行回车换行程序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.实验结果:2.心得体会初学《微机原理》时,感觉摸不着头绪概念及原理性的问题不知道该如何下手。
微机实验两个多位十进制数相加的实验
实验2 两个多位十进制数相加的实验一、实验目的1. 学习数据传送和算术运算指令的用法。
2. 熟悉在PC机上建立、汇编、连接、调试和运行8088汇编语言程序的过程。
二、实验内容将两个多位十进制数相加,要求被加数均以ASCII码形式各自顺序存放在以DA TA1和DA TA2为首的5个内存单元中(低位在前),结果送回DA TA1处。
附加题要求将加法过程显示与屏幕。
同学可以自己设计程序也可对代码段进行填空以及问答来完成程序。
(附加题范例在第二页);该程序完成54321+54321=108642的多位十进制加法运算,和存放与DAT3DATA SEGMENTDAT1 DB'12345';问一个多位十进制数各位是以何种顺序存放于内存的。
DAT2 DB'12345';个位存放于高地址或者为低地址。
DAT3 DB 6 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA BX,DAT1LEA SI,DAT2LEA DI,DAT3MOV CX,5CLC ;为什么要加入这条指令L1: MOV AL[BX]ADC AL,[SI] ;BYTE PTR[BX]+[SI]+CF→AL 例‘1’+‘1’+0= 62H→AL__________;填空________________; AL=02HPUSHF;为什么要加入pushf popf这两条指令OR AL,30H;为什么要加入这条指令POPFMOV [DI],AL__________;填空__________________;填空__________________ ;填空________LOOP L1JNC L2MOV [DI],31HINC DIhltCODE ENDSEND START三、程序框图(见下页)附加题1范例;该程序完成54321+54321=108642的多位十进制加法运算,和存放与DAT3并显示于屏幕DATA SEGMENTDAT1 DB'12345';问一个多位十进制数各位是以何种顺序存放于内存的。
实验5(两个任意位十进制数相加)
两个任意位十进制数相加
1、掌握使用运算类指令编程及调试方法; 、掌握使用运算类指令编程及调试方法; 2、了解INT 21H部分功能号的功能和使用方法 、了解 部分功能号的功能和使用方法 3、掌握循环结构程序的设计和调试方法。 、掌握循环结构程序的设计和调试方法。 二、实验内容 从键盘输入两个任意位十进制数,求出它们的和( 从键盘输入两个任意位十进制数,求出它们的和(只 考虑最高位无进位的情况) 并显示结果。 考虑最高位无进位的情况) ,并显示结果。 三、程序流程图
四、源程序(加注释) 源程序(加注释) 五、实验步骤 写出上机操作的具体步骤, 写出上机操作的具体步骤,每一步要求仅写出具体命 令。 提示:生成EXE文件后,在DOS方式下(不用进入 文件后, 方式下( 提示:生成 文件后 方式下 DEBUG环境)运行该 环境) 文件, 环境 运行该EXE文件,键盘输入两个任意位 文件 键盘输入两个任意位 十进制数,检查屏幕上显示的结果是否正确。 十进制数,检
微机原理实验一两个多位十进制数相加实验试做报告
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
多位十进制数相加程序
太原理工大学现代科技学院课程实验报告专业班级学号姓名指导教师多位十进制数相加程序一、实验目的学习数据传送和算术运算指令的用法二、实验内容将两个多位十进制数28056、47193相加,并显示加数、被加数、和。
要求两个加数均以ASCII码形式各自顺序存放在DATA1和DATA2内存单元中,结果送回DATA1处(低位在前,高位在后)三、程序流程图开始显示加数和被加数加数和被加数由ASCⅡ码表示转化为十六进制计数值5-->CX清除最低位进位执行ADC带进位相加AAA调整调整偏移量显示加数和被加数NCX-1=0Y将十六进制结果转化为ASCⅡ码表示的数字显示结果结束四、实验程序SHOW MACRO BMOV DL,BMOV AH,02HINT 21HENDMDATA SEGMENTDATA1 DB 33H,39H,31H,37H,34HDATA2 DB 36H,35H,30H,38H,32HDATA3 DB '__',0DH,0AH,'$'DATA ENDSSTACK SEGMENT STACKSTA 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 DATA2MOV BX,05SHOW 20HCALL DISPLSHOW 0DHSHOW 0AHMOV SI,OFFSET DATA1 MOV BX,05SHOW 2BHCALL DISPLSHOW 0DHSHOW 0AHMOV CL,7S1: SHOW 2DHLOOP S1SHOW 0DHSHOW 0AHMOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 CALL ADDAMOV SI,OFFSET DATA1 MOV BX,05SHOW 20HCALL DISPLMOV AX,4C00HINT 21HDISPL PROC NEARDS1: SHOW [SI+BX-1]DEC BXJNZ DS1RETDISPL ENDPADDA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05AD1: SUB BYTE PTR [SI+BX-1],30H SUB BYTE PTR [DI+BX-1],30H DEC BXJNZ AD1MOV SI,DXMOV DI,BPMOV CX,05CLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALINC SIINC DILOOP AD2MOV SI,DXMOV DI,BPMOV BX,05AD3: ADD BYTE PTR [SI+BX-1],30H ADD BYTE PTR [DI+BX-1],30H DEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START五、实验步骤1、在windows环境下,打开“开始”菜单,选择“运行”项,然后输入”CMD”,按“确定”进去DOS环境。
微机原理与接口技术实验
实验一熟悉汇编语言环境及建立汇编的过程一、实验目的1.熟悉汇编语言环境。
2.掌握汇编语言的上机过程。
3.了解汇编语言程序的编程格式。
4.学习数据传送和算术运算指令的用法。
5.熟悉在PC机上建立汇编链接调试和运行汇编语言程序的过程。
二、实验要求1.通过一个小程序的编写达到以上的实验目的。
2.并完成两个多位十进制数相加的实验。
三、实验原理1.汇编语言程序的上机过程用汇编语言编写的程序称为源程序,源程序也不能由机器直接执行,而必须翻译成机器代码组成的目标程序,这个翻译过程称为汇编。
在微型机中,当前绝大多数情况下,汇编过程是通过软件自动完成的,用来把汇编语言编写的程序自动翻译成目标的软件叫汇编程序,汇编过程如下:2.汇编、连接过程将两个多位十进制数相加。
要求加数和被加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
3.ADC 带进位相加指令的功能和指令格式AAA 、DAA、 AAS、 DAS指令的功能和指令格式4.伪指令SEGMENT 、ENDS、 ASSUME、MACRO、ENDM的使用子程序的定义(PROC NEAR/FAR ENDP),以及子程序调用和返回指令:CALL、RET 的使用5.循环指令LOOP的格式以及退出循环的条件6.中断指令的使用四、实验步骤一、学习汇编过程1.打开编辑环境2.输入程序CODE SEGMENTASSUME CS:CODESTART:MOV AL,01HMOV BL,40HADD AL,BLMOV DL,ALMOV AH,02HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START3.保存源程序,以.ASM为扩展名。
C:\MASM\1.ASM4.建立汇编过程(1)用宏汇编程序汇编源程序C:\MASM>MASM 1.ASM汇编程序有3个输出文件【.obj】文件,【.LST】文件,【.CRF】文件,.OBJ文件是我们所需要的文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验2 两个多位十进制数相加的实验
一、实验目的
1. 学习数据传送和算术运算指令的用法。
2. 熟悉在PC机上建立、汇编、连接、调试和运行8088汇编语言程序的过程。
二、实验内容
将两个多位十进制数相加,要求被加数均以ASCII码形式各自顺序存放在以DA TA1和DA TA2为首的5个内存单元中(低位在前),结果送回DATA1处。
附加题要求将加法过程显示与屏幕。
同学可以自己设计程序也可对代码段进行填空以及问答来完成程序。
(附加题范例在第二页)
;该程序完成54321+54321=108642的多位十进制加法运算,和存放与DAT3
DATA SEGMENT
DAT1 DB'12345';问一个多位十进制数各位是以何种顺序存放于内存的。
DAT2 DB'12345';个位存放于高地址或者为低地址。
DAT3 DB 6 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA BX,DAT1
LEA SI,DAT2
LEA DI,DAT3
MOV CX,5
CLC ;为什么要加入这条指令
L1: MOV AL[BX]
ADC AL,[SI] ;BYTE PTR[BX]+[SI]+CF→AL 例‘1’+‘1’+0= 62H→AL
__________;填空________________; AL=02H
PUSHF;为什么要加入pushf popf这两条指令
OR AL,30H;为什么要加入这条指令
POPF
MOV [DI],AL
__________;填空________
__________;填空________
__________ ;填空________
LOOP L1
JNC L2
MOV [DI],31H
INC DI
hlt
CODE ENDS
END START
三、程序框图(见下页)
附加题1范例
;该程序完成54321+54321=108642的多位十进制加法运算,和存放与DAT3并显示于屏幕DATA SEGMENT
DAT1 DB'12345';问一个多位十进制数各位是以何种顺序存放于内存的。
DAT2 DB'12345'
DAT3 DB 6 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA BX,DAT1
LEA SI,DAT2
LEA DI,DAT3
MOV CX,5
CLC
L1: MOV AL[BX]
ADC AL,[SI]
;填空________________
PUSHF;为什么要加入pushf popf这两条指令
OR AL,30H;为什么要加入这条指令
POPF
MOV [DI],AL
;填空________
;填空________
;填空________
LOOP L1
JNC L2
MOV [DI],01H
;下面是附加显示
L2: ADD [DI],30H
INC DI
PUSH DI ;分析此时DI指向和的哪一位?
PUSH SI
PUSH BX
POP SI
DEC SI ;为什么要减一
MOV CX,5
CALL DISP
MOV DL,'+'
MOV AH,2
INT 21H
;填空_________
DEC SI
MOV CX,5
CALL DISP
MOV DL,'='
MOV AH,2
INT 21H
POP SI
DEC SI
MOV CX,;______填空
CALL DISP
HLT
;disp入口参数SI为显示字符串的末偏移地址以及显示字符串的个数CX
;DISP以倒序的方式逐个显示一个多位十进制数的
DISP PROC
L3: MOV DL,[SI]
MOV AH,2
INT 21H
;填空_____________
LOOP L3
;填空________
DISP ENDP
CODE ENDS
附加题2:
程序中变量如下数据段所定义,D1-D4为用ASCII字符串表示的十进制数字(说明:低地址为高的权位如DA1字符串表示一千两百三十四),完成D1-D4的累加并存入D5 DATA SEGMENT
D1 DB ‘1234’
D2 ‘DB ‘2234’
D3 DB ‘3234’
D4 DB ‘5345’
D5 DB 5 DUP(0)
DATA ENDS
附加题3:
程序中变量如下数据段所定义,D1-D4为用ASCII字符串表示的十进制数字(说明:低地址为高的权位如DA1低地址为十位,高地址为个位),每个字符串以0DH结束。
要求将D1-D4转换为数值形式存入DA1-DA4(说明:’34’十进制数字符串转换后DA4为20H
DATA SEGMENT
D1 DB ‘16’,0DH
D2 ‘DB ‘123’,0DH
D3 DB ‘2344’, 0DH
D4 DB ‘55345’,0DH
DA1 DW 0 DA2 DW 0 DA3 DW 0 DA4 DW 0 DATA ENDS
实验3 两个数相乘的实验
一、实验目的
掌握乘法指令和循环指令的用法
二、实验内容
实现十进制数的乘法。
被乘数和乘数均以ASCII码的形式存放在内存中,乘积存放于内存.。
附加:将乘法过程在屏幕上显示出来。
即实现1234×4=4963 以及1234×45=55530;
要求被乘数、乘数不超过65535,积不超过4294967295即(FFFFFFFFH)。