实验一 两个多位十进制数相减实验
- 格式:doc
- 大小:28.29 KB
- 文档页数:3
一、实验目的1. 理解不同进制之间的转换原理。
2. 掌握二进制、八进制、十进制和十六进制之间的相互转换方法。
3. 培养实际操作能力和逻辑思维能力。
二、实验原理进制转换是计算机科学和数字电路中的基本概念。
常见的进制有二进制、八进制、十进制和十六进制。
它们之间的转换主要基于位权原理。
- 二进制:基数为2,只有0和1两个数字,每一位的值是2的幂次方。
- 八进制:基数为8,每一位的值是8的幂次方。
- 十进制:基数为10,每一位的值是10的幂次方。
- 十六进制:基数为16,每一位的值是16的幂次方,其中A-F表示10-15。
三、实验器材- 计算机- 文档编辑软件(如Microsoft Word)四、实验步骤1. 二进制转十进制- 将二进制数按照位权原理进行计算。
- 例如,二进制数1101转换为十进制:\(1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 8 + 4 + 0 + 1 = 13\)。
2. 十进制转二进制- 使用除以2的方法,将十进制数不断除以2,记录余数。
- 将余数从下到上排列,得到二进制数。
- 例如,十进制数13转换为二进制:\(13 \div 2 = 6\) 余 1,\(6 \div 2 = 3\) 余 0,\(3 \div 2 = 1\) 余 1,\(1 \div 2 = 0\) 余 1,所以13的二进制为1101。
3. 八进制转十进制- 将八进制数按照位权原理进行计算。
- 例如,八进制数123转换为十进制:\(1 \times 8^2 + 2 \times 8^1 + 3 \times 8^0 = 64 + 16 + 3 = 83\)。
4. 十进制转八进制- 使用除以8的方法,将十进制数不断除以8,记录余数。
- 将余数从下到上排列,得到八进制数。
- 例如,十进制数83转换为八进制:\(83 \div 8 = 10\) 余 3,\(10 \div 8 = 1\) 余 2,\(1 \div 8 = 0\) 余 1,所以83的八进制为123。
十进制的加减教案教案:十进制的加减教学目标:1. 了解十进制数的加法和减法运算规则;2. 能够应用加法和减法运算规则进行十进制数的计算;3. 培养学生的数学思维,提高计算能力。
教学准备:1. 教师准备白板、黑板笔和教学课件;2. 学生准备笔、纸和计算器。
教学流程:引入:教师可以通过一个简单的问题引起学生的思考:“如果小明手里有3个苹果,小红手里有2个苹果,他们两个一共有多少个苹果?”带领学生回答这个问题,并引导他们通过数学符号进行计算。
教学内容1:十进制数的加法步骤1:教师通过白板或教学课件展示一个简单的加法算式,如321 + 123。
步骤2:解释加法运算的规则,即从右向左逐位相加,按照个位、十位、百位等顺序进行计算。
当某一位的和大于等于10时,需要进位到高一位。
步骤3:教师以一个示例进行讲解,详细解释每一步的计算过程。
可通过拆分数位、对齐数字等方式使学生更好地理解。
步骤4:教师设计一些简单的加法练习题,让学生进行计算,并进行讲解。
教学内容2:十进制数的减法步骤1:教师通过白板或教学课件展示一个简单的减法算式,如754 - 356。
步骤2:解释减法运算的规则,即从右向左逐位相减,按照个位、十位、百位等顺序进行计算。
当被减数的某一位小于减数的相应位时,需要向高位借位。
步骤3:教师以一个示例进行讲解,详细解释每一步的计算过程。
可通过拆分数位、对齐数字等方式使学生更好地理解。
步骤4:教师设计一些简单的减法练习题,让学生进行计算,并进行讲解。
巩固练习:教师为学生设计一些综合性的加减法计算题,让学生进行练习。
学生可以用纸和笔进行计算,并使用计算器进行核对答案。
教师可以随机抽几个学生上台展示自己的计算过程。
拓展练习:教师可以为学生出一些较难的十进制加减法题目,让学生挑战更高难度的计算。
鼓励学生自己思考解决方法,并进行交流讨论。
总结:教师对本节课所学的加法和减法运算规则进行总结。
请学生回答以下问题:1. 十进制数的加法运算规则是什么?2. 十进制数的减法运算规则是什么?3. 你理解了加法和减法运算规则后,觉得数学计算更容易了吗?作业布置:教师布置相应的课后作业,内容为一些加减法题目。
两个十进制按位与的计算结果
"十进制按位与的计算结果,探索数字之间的奇妙交织"
在数字世界中,我们经常需要对数字进行各种运算,其中按位与运算是一种常见的操作。
当我们将两个十进制数字进行按位与运算时,我们会发现其中蕴藏着许多奇妙的数学现象和逻辑推理。
假设我们有两个十进制数字,27和18。
它们的二进制表示分别为11011和10010。
当我们对它们进行按位与运算时,我们会得到结果10,即2的十进制表示。
这个结果背后的数学原理值得我们深入探索。
首先,按位与运算是一种逻辑运算,它要求两个数字的对应位同时为1时,结果位才为1。
这意味着按位与运算能够帮助我们发现数字之间的共同特征和交集。
在我们的例子中,27和18的二进制表示中,只有第二位上同时为1,因此按位与的结果为2。
其次,按位与运算还有许多实际应用。
在计算机领域,按位与运算常常用于掩码操作和位操作,帮助我们对数据进行精确的处理和筛选。
通过深入理解按位与运算的原理和特性,我们能够更好地
应用它们于实际问题中,提高计算效率和数据处理精度。
最后,按位与运算的结果也反映了数字之间的奇妙交织。
在我们的例子中,27和18这两个数字看似毫无关联,但通过按位与运算,我们发现了它们之间的共同之处,这种数学上的交织和联系让我们对数字世界有了更深刻的理解。
因此,十进制按位与的计算结果不仅仅是一种数学运算,更是数字世界中的奇妙探索。
通过深入研究和理解按位与运算的原理和应用,我们能够更好地理解数字之间的关系,提高计算效率,拓展数学思维,从而更好地应对现实生活和工作中的挑战。
实验一多字节数求和运算,字节拆分运算一.实验目的1.熟悉emu8086调试程序的使用。
2.编写两个4字节数的加法、减法运算程序,并运用emu8086进行调试。
3. 编写字节拆分运算程序,并运用emu8086进行调试二.实验目的1.学习数据传送和算术运算指令2.熟悉在PC机上调试程序的方法三.emu8086调试程序的使用1.启动emu8086a.在WINDOWS下双击emu8086图标,启动界面如图1所示,用户可以选择新建文本、程序实例、启动指南、近期文档。
2.新建文件单击图1中的“New”选项,软件会弹出如图2所示的选择界面。
选择empty workspace的选项,打开一个完全空的文档。
3. 编辑程序如图3所示为编辑程序界面。
该编辑界面集文档编辑、指令编译、程序加载、系统工具、在线帮助为一体。
编写完程序后,用户只需单击工具栏上的“emulate”按钮即可仿真运行程序。
4.仿真运行当用户将程序加载到仿真器后,会同时打开仿真器界面和源程序界面,用户在仿真器界面中也可以同时看到源代码和编译后的机器码。
点击的任意一条源程序指令,则对应的机器代码显示为被选显示状态,与此同时,上面的代码指针也会相应变化。
用户也可以通过这种操作了解,数据段和堆栈段中各变量或数据在存储器中的情况。
用户可以利用工具栏中的“single step”按钮进行单步跟踪调试,以便仔细观察各寄存器、存储器、变量、标记位等情况,这对于程序初始调试时十分有用;当程序调试完毕,或需要连续运行观察时,则可以使用“run”按钮;当希望返回上一步操作时,则可以使用“step back”按钮;若单击“reload”按钮,则仿真器会重新加载程序,并将指令指针指向程序的第一条指令;您也可以利用“load”按钮,从您保存的文件夹中加载其它程序。
用户除使用上述工具栏中的按钮进行仿真调试外,还可以利用其菜单中的其它功能进行更高级的调试和设置。
四.多字节加法要求:在当前的数据段内(段基址寄存器DS)的偏移地址为1000H处定义4各字节的被加数78H、56H、34H、12H(即被加数为12345678H);在偏移地址2000H处定义4字节加数12H、34H、56H、78H(即加数为78563412H)程序流程:程序清单:MOV SI,1000H ;置被加数指针MOV DI,2000H ;置加数指针MOV CX,4 ;数据个数CLC ;清进位标志AGAIN: MOV AL,[SI] ;取被加数ADC AL,[DI] ;加加数MOV [SI],AL ;和送回至加数INC SI ;修改数据指针INC DILOOP AGAIN ;记数—1=0?五. 拆分字符拆字10051H程序:MOV AX,1000HMOV DS,AX ;数据段基址DS=1000HMOV SI,50H ;需拆字的指针SI=50HMOV AL,[SI] ;取字节给ALAND AL,0FH ;屏蔽高4位MOV [SI+1],AL ;得到的数据存入10051MOV AL,[SI] ;再取出需拆字的字节MOV CL,4SHR AL,CL ;逻辑右移4次,高4位补0MOV [SI+2],AL ;存入10052单元五.实验内容(实验程序及结果写在练习本上)。
实验一两个多位十进制数相加实验一、实验目的1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
2.掌握数据传送、算术运算、BCD码调整和循环指令的用法,掌握字符显示的方法。
3.熟悉和掌握用DEBUG调试程序的方法。
二、实验内容及要求1.将两个5位十进制数相加,要求被加数(本题选47193)和加数(本题选28056)均以ASCII码形式各自顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回以DATA3为首的5个内存单元中(低位在前),并显示相加的结果。
2.如果考虑可能产生的进位,则要显示完整的结果,程序如何修改?3.应该Masm for Windows 集成实验环境调试运行并讲解程序,并用屏幕录像软件录制全过程,全程开启摄像头,以MP4G格式上传,完成实验报告的书写。
三、实验程序和结果DATA SEGMENT ;定义数据段DATA1 DB 33H,39H,31H,37H,34H ;被加数DATA2 DB 36H,35H,30H,38H,32H ;加数DATA3 DB 5 DUP(?) ;定义五个空子节DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA ;表明程序代码段与段地址之间的关系START: MOV AX,DATAMOV DS,AX ;将段地址送入段地址寄存器MOV CX,5 ;循环控制次数MOV SI,0CLC ;清除CF位NEXT: MOV AL,DATA1[SI]ADC AL,DATA2[SI] ;从低位开始进行带进位/借位的加法运算AAA ;转换成非压缩BCD码,低位存AL,高位存AHMOV DATA3[SI],AL ;将AL中的内容存入SI所在地址INC SILOOP NEXTMOV SI,5DISP: ADD DATA3[SI-1],30H ;将16进制数转换为ASCII码表示 MOV DL,DATA3[SI-1]MOV AH,2INT 21HDEC SI ;偏移地址自减JNZ DISPMOV AH,4CHINT 21H ;终断调用CODE ENDS ;结束程序代码段END START(页面不足请附页)四、实验总结和体会通过本次实验我对汇编有了更加具体的认识,也明白了汇编中各个寄存器的作用及寄存器间是怎样联系的,也初步明白了什么是断地址,什么是堆栈,以及汇编的基本结构和循环结构的基本运用,但是我了解的只是初步的,汇编中还有很多我不明白和不了解的地方,最重要的是汇编语句掌握不牢固,不能很快的知道一些专用的汇编语句的意义,这方面还是比较薄弱的,还需要在今后的实验和学习中不断的学习和练习。
标准实验报告学生姓名:指导教师:一、实验室名称:二、实验项目名称:综合课程设计——两位十进制数加减法的实现三、实验原理:1、FPGA的矩阵键盘开发板上设计了行列式矩阵编码键盘,规模为4*4,可作为外部输入。
其对应管脚分布如下:2、自由按键电路KEY1 对应P102,KEY2 对应P101。
3、拨码开关板上设计了一组8 位的拨码开关,ON为低电平,OFF为高电平。
拨码开关可供用户输入一些高低电平。
4、键盘扫描及数码显示对键盘的扫描分为三步,首先检测由于没有按键按下,然后在有按键按下的情况下,先进行行扫描找出对应按键是哪行按下,接着是对应的列扫描最终确定是哪一个按键。
给对应的按键赋上预先设定的值连接到数码管便能控制数码管显示。
我们需要如下几个信号来实现编写这一部分程序:key_code,用来控制数码管显示相应的值;row,用来控制行扫描;column,用来控制列扫描。
要利用8个数码管显示8个不同的数字,由于此为动态显示,送到每一段的值都一样,利用显示使能en,来控制亮灭,同时提高显示时钟频率,可以实现8位数码管的不同值显示。
5、去抖利用普通的CASE语句编写的程序会出现按键按下值会一直递增的现象,我们需要一个优化的能够实现对长按下的键只记一次。
需要重新自己设定一个去抖参数。
个人思想如下:设定去抖参数qudou,当没有按键按下时其自动置为0,在检测按键时如果同时检测都qudou=0才做对应键值加1的操作且同时把去抖参数置为1;如此便能够实现。
6、两位十进制加减法实现原理加数和被加数的输入由矩阵键盘扫描完成,具体实现是,利用状态机,一个状态来进行加数的输入然后跳转到另一状态,进行被加数的输入,两个数输入完成后,下一状态为显示结果。
同时需要一位来控制是做加法还是减法。
状态机设计,利用VHDL设计有限状态机分为两个定义,三个进程。
两个定义分别用来定义状态变量以及状态机的状态;三个进程分别用来描述状态寄存器状态,状态转移进程以及状态输出。
实验一、两个多位十进制数相加的实验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 掌握各个芯片的原理和使用方法。
微机原理实验南昌航空大学实验报告学生姓名:学号:专业班级:电子信息工程实验类型: 验证□综合□设计□创新实验日期:实验成绩:一、实验项目名称实验一、多位十进制数相减实验二、实验目的(1)学习数据传送和算术运算指令的用法。
(2)熟悉在PC机上建立、汇编、连接、调试和运行汇编语言的过程。
三、实验要求将两个多位十进制数相减,要求被减数、减数均以ASCII码形式按顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
实验程序框图如下图所示:四、实验程序DATA SEGMENTDATA1 DB 33H,39H,31H,37H,38H ;第一个数据(作为被减数)DATA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为减数)MES1 DB'-','$'MES2 DB'=','$'DATA ENDSSTACK SEGMENT;堆栈段STA DB20 DUP(?) ;定义由20个字节组成的数据缓冲区(数组),每个字节的初值不确定TOP EQU LENGTH STA 返回利用DUP定义的数组元素的个数到TOP,TOP=20;STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA; START: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXMOV AX,TOP 段使用设定语句,确定段寄存器与段的对应关系:从现在开始:CS寄存器对应CODE段,DS寄存器对应数据段,SS寄存器对应STACK段,ES寄存器对应数据段.段使用设定语句是伪指令,它不能设置段寄存器的值,只能通过指令语句给DS, ES, SS赋值,CS 由系统自动赋值。
堆栈指针寄存器赋值MOV SP,AX MOV SI,OFFSET DATA1 被减数送SIMOV BX,05 位数5送BX 中,作为显示子程序的循环控制变量CALL DISPL ;调用显示子程序,显示被减数 MOVAH,09HLEA DX,MES1INT 21HMOV SI,OFFSET DATA2 减数送SI MOV BX,05CALL DISPL 调用显示子程序,显示减数 MOV AH,09HLEA DX,MES2INT 21HMOV SI,OFFSET DATA1 被减数送SIMOV DI,OFFSET DATA2 减数送DICALL SUBA ;调用减法子程序 ,进行减法运算MOV SI,OFFSET DATA1 运算结果送SI MOV BX,05 ;CALL DISPL 调用显示子程序,显示运算结果MOV DL,0DHMOV AH,02HINT 21H MOV DL,0AHMOV AH,02HINT 21H INT 21H MOV AX,4C00H INT 21HDISPL PROC NEAR ;显示子程序(显示5个字符:BX=5) DSI: MOV AH,02 AH=02H,显示一个字符到屏幕 MOV DL,[SI+BX-1] ;显示字符串中一字符 INT 21HDEC BX ;修改偏移量JNZ DSI BX 不等于0,继续显示 RET DISPL ENDPSUBA PROC NEARMOV DX,SI 把被减数数据地址送到DXMOV BP,DI 把减数数据地址送到BP MOV BX,05SU1: SUB DOS 功能调用:AH=09H,显示字符串到屏幕,DX::要显示的内容。
实验一两个多位十进制数相减实验
一、实验要求:将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序存放在以DATAI
和DATA2为首的5个内存单元中(低位在前),结果送回DATAI处。
二、实验目的:1.学习数据传送和算术运算指令的用法。
2.熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
三、实验程序框图:
开始
显示减数和被减数
被减数和减数转换成十六进制数
设置计数值
消除最低进位数
制进位减
结果送被减数区
调整偏移量
计数值-1=10
结果转换成ASCII码字符串
显示结果
结果
四、实验程序:
DA TA SEGMENT
DA TA1 DB 33H,39H,31H,37H,38H ;第一个数据(作为被减数)DA TA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为减数)MES1 DB '-','$'
MES2 DB '=','$'
DA TA ENDS
STACK SEGMENT ;堆栈段
STA DB 20 DUP(0)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DA TA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV SI,OFFSET DA TA1
MOV BX,05
CALL DISPL ;显示被减数
MOV AH,09H
LEA DX,MES1
INT 21H
MOV SI,OFFSET DATA2
MOV BX,05 ;显示减数
CALL DISPL
MOV AH,09H
LEA DX,MES2
INT 21H
MOV SI,OFFSET DA TA1
MOV DI,OFFSET DATA2
CALL SUBA ;减法运算
MOV SI,OFFSET DATA1
MOV BX,05 ;显示结果
CALL DISPL
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
INT 21H
MOV AX,4C00H
INT 21H
DISPL PROC NEAR ;显示子功能
DSI: MOV AH,02
MOV DL,[SI+BX-1] ;显示字符串中一字符
INT 21H
DEC BX ;修改偏移量
JNZ DSI
RET
DISPL ENDP
SUBA PROC NEAR
MOV DX,SI
MOV BP,DI
MOV BX,05
SU1: SUB BYTE PTR[SI+BX-1],30H
SUB BYTE PTR[DI+BX-1],30H
DEC BX ;将ASCII 码表示的数字串
JNZ SU1 ;转化为十六进制的数字串
MOV SI,DX
MOV DI,BP
MOV CX,05 ;包括进位,共5位
CLC ;清进单位
SU2: MOV AL,[SI]
MOV BL,[DI]
SBB AL,BL ;带进位相减
AAS ;非组合BCD码的减法调整
MOV [SI],AL ;结果送被减数区
INC SI
INC DI ;指向下一位
LOOP SU2 ;循环
MOV SI,DX
MOV DI,BP
MOV BX,05
SU3: ADD BYTE PTR [SI+BX-1],30H
ADD BYTE PTR [DI+BX-1],30H
DEC BX ;十六进制的数字串转化ASCII码表示的数字串
JNZ SU3
RET
SUBA ENDP
CODE ENDS
END START。