用汇编语言制作一个加法器
一、实验目的
1、掌握条件分支的汇编程序设计方法。
2、熟悉汇编软件,掌握汇编程序的编写和调试方法。 3、掌握数据和字符的显示方法。
二、实验原理
在数据段上存放两个8位的非压缩BCD码数据X、Y,如下表:
X Y CARRY RESULT 09H 08H 把这两个BCD码相加,结果以ASCII码方式存放在RESULT中。如果有进位,CARRY=31H,否则CARRY=30H(31H为“1”的ASCII码,30H为“0”的ASCII码)。并在屏幕上显示结果。
提示,字符输出程序: MOV DL, “待输出的ASCII码” MOV AH, 2 INT 21H
如何取数据: MOV SI, OFFSET X MOV AL, [SI]
取数据(被加数和加数)相加,调整是否有进位是保存31H到carry否保存30H到carry调整的结果转为ASCII码保存到result拿出carry,显示拿出result,显示
三、实验内容
代码内容如下:
DATAS SEGMENT X DB 09H Y DB 08H L DB 00H CARRY DB ?
RESULT DB 10,13,'8+9=',?,?,10,13,10,'CARRY=',?,?,?,'$' DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS;,SS:STACKS START:
MOV AX,DATAS; MOV DS,AX; LEA SI,X; LEA DI,Y; MOV AL,[SI]; ADC AL,[DI];
MOV RESULT, AL;
JC DONE
MOV [CARRY],30H
JMP SHOW
DONE:MOV [CARRY],31H SHOW:
MOV BH,[CARRY] MOV [RESULT+17],BH
MOV AL,[RESULT]; AND AL,0FH; ADD AL,36H;
MOV [RESULT+7],AL; MOV AL,[RESULT]; MOV CL,4; SHR AL,CL; ADD AL, 30H;
MOV [RESULT+6],AL;
LEA DX,RESULT; MOV AH,09H INT 21H;
MOV AH,4CH INT 21H CODES ENDS END START
运行结果:
四、实验总结
本人之前学习过51单片机相关知识,并懂得用C语言写一些程序。对于汇
编语言只能看懂一些。通过对微机的学习、以及本次试验课程,我熟悉了汇编软件,掌握汇编程序的编写和调试方法;掌握了条件分支的汇编程序设计方法;掌握数据、字符和字符串的显示方法和学会了编写一些简单的程序,使我获益菲浅。但感觉还是C语言好用,希望通过深入学习发现汇编语言的魅力,以及深入了解微机这门课程的意义。