微机原理上机 汇编语言程序 编写程序求两个十进制数之和,并将和以十进制数的形式送屏幕显示

合集下载

两个多位十进制数相加

两个多位十进制数相加

实验1 两个多位十进制数相加的实验
一、实验目的
1、熟悉DOS系统命令,学习数据传送和算术运算指令的用法
2、熟悉在PC机上建立、汇编、链接、调试和执行汇编语言程序的过程。

3、初步练习用DEBUG调试程序运行8086汇编语言程序的思想。

二、实验内容
将两个多位数相加,要求数和被加数均以BCD码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元内(低位在前),结果送回DATA1处。

三、对照程序框图完成下列程序
data segment
data1 db 03h,09h,01h,07h,04h
data2 db 06h,05h,00h,08h,02h
data ends
code segment
assume cs:code,dds:data
start: mov ax,data
mov si,offset data1
mov di,offset data2
mov ax,05
clc
ad: mov al,[si]
mov bl,[di]
adc al,bl
aaa
mov [si],al
inc si
inc di
loop ad
hlt
code ends
end start
四、实验结果
Data1 段存储相加结果:09,04,02,05,07,Data2 段的被加数存储:06,05,00,08,02。

微机实验名称 多位十进制数相加程序

微机实验名称  多位十进制数相加程序

太原理工大学现代科技学院实验报告 实验名称 多位十进制数相加程序 同组人 专业班级通信 学号 姓名 成绩 一、实验目的 学习数据传送和算术运算指令的用法 二、实验内容 将两个多位十进制数28056、47193相加,并显示加数、被加数、和。

要求两个加数均以ASCII 码形式各自顺序存放在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、在windows 环境下,打开“开始”菜单,选择“运行”项,然后输入”CMD ”,按“确定”进去DOS 环境。

数据传送及两个多位十进制数相加

数据传送及两个多位十进制数相加

数据传送及两个多位⼗进制数相加深圳⼤学实验报告课程名称:微机原理及应⽤实验实验项⽬名称:数据传送及两个多位⼗进制数相加学院:物理科学与技术学院专业:应⽤物理指导教师:李雄军报告⼈:学号:班级:实验时间:实验报告提交时间:⼀、实验⽬的(1)继续熟练掌握在PC机上建⽴、汇编、链接、调试和运⾏8088汇编语⾔程序的过程;(2)学习数据传送和算术运算指令的⽤法;(3)掌握⼦程序设计⽅法;(4)掌握宏汇编设计⽅法。

⼆、实验内容将两个多位⼗进制数(若为16位⼆进制表⽰的⽆符号数)相加。

要求被加数均以ASCII码形式各⾃顺序存放在以DATAl和DATA2为⾸的5个内存单元中(低位在前),结果送回DATAl处。

三、程序流程图开始显⽰加数和被加数加数和被加数以ASCⅡ码表⽰的数字串形式转化为由⼗六进制表⽰的数字串形式赋计数值给CX清除最低位进执⾏ADC带进位相加AAA调整结果送被加数区调整偏移量显⽰加数和被加数CX-1=0⼗六进制结果转化为ASCⅡ显⽰结果结束算法说明:以42136与12547相加为例,⾸先将两个数中的每⼀位都以ASCII码存⼊相应的内存单元,然后将每⼀位数都减去30H,并将被加数和加数相对应位相加(要考虑低位向⾼位的进位),存⼊相应的被加数存储单元中,最后将该单元中的每⼀位数转换成相应的ASCII码,调⽤DOS系统的显⽰字符指令,显⽰两数相加的结果。

四、源程序代码DATA SEGMENT ; 数据段DATA1 DB 31H,33H,31H,31H,33H ;定义DATA1为被加数DATA2 DB 33H,33H,33H,32H,33H ;定义DATA2为加数DATA ENDS ;STACK SEGMENT STACK ;堆栈段STA DB 64 DUP(0) ;SP_TOP DB 0 ;定义SP_TOP单元数值为0STACK ENDS ;堆栈段结束CODE SEGMENT ; 代码段ASSUME CS:CODE , DS:DATA , ES:DATA , SS:STACK ; 指定段寄存器CFLF MACRO ;显⽰回车换⾏功能⽤宏定义CFLF实现,放在代码段最前⾯MOV DL,0DH ;回车(0DH为回车的ASCII 码)MOV AH,02H ; 送DOS 的中断调⽤功能号INT 21H ; DOS 的中断调⽤MOV DL,0AH ;⽤DOS功能调⽤实现换⾏,0AH为换⾏的ASCII 码MOV AH,02H ;显⽰字符到屏幕上INT 21H ;DOS中断调⽤CFLF ENDM ;结束宏定义START: MOV AX, DATA ;设置数据段MOV DS, AX ;数据段初始化MOV AX, STACK ;设置堆栈段MOV SS, AX ;堆栈段初始化MOV AL,SP_TOP ;设置栈顶指针MOV SI, OFFSET DATA1 ;显⽰被加数,并回车换⾏MOV BX,05 ;CALL DISPL ; 显⽰被加数,DISPL为显⽰⼦程序CFLF ; 回车、换⾏宏调⽤MOV SI, OFFSET DATA2 ;显⽰加数MOV BX,05 ;设置计数器赋值05CALL DISPL ;显⽰加数CFLF ;回车换⾏CALL ADDA ;调⽤加法运算⼦程序MOV SI,OFFSET DATA1 ;把DATA1的偏移量地址赋给SI MOV BX,05 ;CALL DISPL ; 显⽰结果CFLF ; 回车、换⾏MOV AX,4C00H ; 返回DOSINT 21H ;DOS中断调⽤DISPL PROC NEAR ;DISP为字符串显⽰⼦程序DSL: MOV AH,02 ;送显⽰功能号MOV DL,[SI+BX-1] ;显⽰字符串中⼀字符INT 21H ;DOS INT 21 功能调⽤DEC BX ;BX-1,修改偏移量JNZ DSL ;若BX不等于0,跳转到DSLRET ;返回DISPL ENDP ;⼦程序结束ADDA PROC NEAR ;加法⼦程序MOV SI, OFFSET DATA1 ;取被加数的偏移地址MOV DI, OFFSET DATA2 ;取加数偏移地址MOV AH,0 ;进位清零MOV CX,05 ;设置循环次数AD1:MOV AL,[SI] ;取被加数偏移量地址内容SUB AL,30H ;MOV BL,[DI] ;取加数偏移量地址内容SUB BL,30H ;ADD AL, BL ;ADD AL, AH ;加上进位MOV AH,0 ;进位清零AAA ;BCD⼗进制转换MOV [SI],AL ;存回DATA1的相应单元INC DI ;INC SI ;DEC CX ;JNZ AD1 ;CX未减到0继续跳转,重新执⾏次位相加MOV BX,05 ;MOV SI, OFFSET DATA1 ;AD2:ADD [SI+BX-1],30H ;相加之后转化为相应的ASCII码DEC BX ;改变循环次数JNE AD2 ;BX未减到0则跳转⾄AD2RET ;返回ADDA ENDP ;加法⼦程序结束CODE ENDS ;代码段与程序结束END START ;程序结束五、实验结果1.编译、连接⽣成可执⾏⽂件,分别在debug和Emu8086下调试该可执⾏⽂件在debug下运⾏:在emu8086下运⾏:2.给出程序运⾏时的各段地址(CS=?,DS=?SS=?ES=?)及两个⼦程序⼊⼝的IP. DISPL:IP=0054 ADDA:IP=0037CS=F400,DS=0710,SS=0711,ES=07003.试改变加数和被加数,如何从内存中观察结果的变化?4.总结⼦程序格式及其调⽤⽅法;结合本程序说明宏调⽤与⼦程序的区别。

微机原理 实验一 加法程序

微机原理  实验一 加法程序

实验一加法程序一、实验目的:学习数据传送和算术运算指令的用法。

二、实验内容:将两个多位十进制28056,47193相加,并显示加数,被加数,和。

要求两个加数均以ASCII码形式各自顺序存放在DATA1和DATA2内存单元中,结果送回DATA1处(低位在前,高位在后)。

三,程序流程图:程序流程如图2.1所示。

图2.1十进制数相加程序流程图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 DATA1MOV BX,05SHOW 2BhCALL DISPLSHOW 0DHSHOW 0AHS1: SHOW 2DHLOOP S1SHOW 0DH SHOW 0AHMOV SI,OFFSET DATA1MOV DI,OFFSET DATA2CALL ADDAMOV SI,OFFSET DATA1MOV 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 DIMOV SI,DXMOV DI,BPMOV BX,05AD3: ADD BYTE PTR [SI+BX-1],30HADD BYTE PTR [DI+BX-1],30HDEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START编写完源程序后,保存为文件名为“JIAFA.ASM”的文件。

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

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

两个十进制数相加的汇编程序汇编语言是一种底层的编程语言,用于编写计算机的指令集。

在汇编语言中,可以使用指令来执行加法操作。

下面是一个用汇编语言编写的程序,用于将两个十进制数相加。

1. 首先,我们需要将两个十进制数保存在内存中。

假设第一个数为A,第二个数为B。

我们可以使用数据段来定义这两个数,并将它们存储在内存中的某个位置。

例如,我们可以将A存储在内存的地址1000处,将B存储在内存的地址1004处。

2. 接下来,我们需要使用寄存器来执行加法操作。

我们可以使用通用寄存器来保存结果。

假设我们将结果保存在寄存器AX中。

3. 首先,将A加载到AX寄存器中。

我们使用MOV指令将A从内存加载到AX 寄存器。

指令为:MOV AX, [1000]。

这将从内存地址1000处读取数据,并将其存储在AX寄存器中。

4. 接下来,将B加载到BX寄存器中。

我们使用MOV指令将B从内存加载到BX寄存器。

指令为:MOV BX, [1004]。

这将从内存地址1004处读取数据,并将其存储在BX寄存器中。

5. 现在,我们需要将AX和BX寄存器中的值相加,并将结果保存在AX寄存器中。

我们使用ADD指令执行加法操作。

指令为:ADD AX, BX。

这将将AX寄存器和BX寄存器中的值相加,并将结果存储在AX寄存器中。

6. 最后,我们可以将结果从AX寄存器中写回内存。

我们使用MOV指令将结果从AX寄存器写回内存。

指令为:MOV [1008], AX。

这将将AX寄存器中的值写回内存地址1008处。

7. 程序结束后,我们可以从内存地址1008处读取结果,并将其输出。

这是一个简单的汇编程序,用于将两个十进制数相加。

程序首先将两个数加载到寄存器中,然后执行加法操作,并将结果存储在寄存器中,最后将结果写回内存。

请注意,这只是一个示例程序,实际的汇编程序可能会更加复杂,并考虑到输入的错误处理和边界情况。

微机原理上机 汇编语言程序 编写程序求两个十进制数之和并将和以十进制数的形式送屏幕显示

微机原理上机  汇编语言程序  编写程序求两个十进制数之和并将和以十进制数的形式送屏幕显示

上机作业二一.实验目的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五、实验体会实验中碰到的问题和解决方式:在这几回的编程实验中,我碰到了许多问题。

汇编语言程序设计——十个数相加

汇编语言程序设计——十个数相加

课内实践课报告
课程名称汇编语言程序设计
专业计算机科学与技术
班级2班
学号08030208
姓名陈思娜
指导教师杨丽华
成绩
2009年11月11日
一、实验目的:
通过应用汇编语言在D O S环境下的E D I T掌握
算术运算指令。

二、实验原理:通过8088指令系统编写汇编程序完成相
关任务
三、实验操作过程:
十个数相加!
DATA SEGMENT
DAT1 DB 11H,22H,33H,44H,55H,66H,77H,88H,99H,0AAH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CL,09H
MOV DI,OFFSET DAT1
MOV AL,[DI]
AGAIN: INC DI
ADD AL,[DI]
LOOP AGAIN
CODE ENDS
END START
四、实验结果分析:
编写:
编译通过,无语法错误
编译后联编
分步看:
五、实验心得:
通过做这些题目,发现自己还有好多需要学习的,在以后的学习中,我会更加深入的研究。

找到并提出更多的问题,并且加以解决。

更好的学习汇编语言。

指导教师签字:
09年 11 月 11 日。

两个两位十进制数相加

两个两位十进制数相加

DATAS SEGMENT ;数据段代码DATA1 DB '23+88=','$';定义运算式DATA2 DB 3 DUP(?) ;定义结果存放单元DATAS ENDS ;数据段结束CODES SEGMENT ;代码段代码ASSUME CS:CODES,DS:DATAS,ES:DATASSTART:MOV AX,DATASMOV DS,AX ;送段地址MOV DX,OFFSET DATA1 ;送DATA1偏移地址→DXMOV AH,09H ;DOS 9号功能调用(输出字符串)INT 21HMOV SI,OFFSET DATA2 ;送DATA2偏移地址→SIXOR AH,AH ;AH清零MOV DI,DX ;送DATA1偏移地址→DIMOV AL,[DI+1] ;送'3'→AL(33H→AL)ADD AL,[DI+4] ;'3'+'8'→AL(33H+38H=6BH)AAA ;非压缩BCD加法运算调整,AL变为01H,进位放AH=01H OR AL,30H ;转换成ASCII码→AL(31H→AL)MOV [SI+2],AL ;AL→[SI+2](存个位)MOV AL,[DI] ;送'2'→AL(32H→AL)ADD AL,[DI+3] ;'2'+'8'→AL(32H+38H=6AH)ADD AL,AH ;加个位产生的进位(6BH→AL)XOR AH,AH ;AH清零AAA ;非压缩BCD加法运算调整,AL变为01H,进位放AH=01H OR AL,30H ;转换成ASCII码→AL(31H→AL)MOV [SI+1],AL ;AL→[SI+1](存十位)OR AH,30H ;转换成ASCII码→AH(31H→AH)MOV [SI],AH ;AH→[SI+1](存百位)MOV AH,02H ;DOS 2号功能调用(输出字符)MOV CX,03H ;输出字符个数WOLF: ;循环体标号MOV DL,[SI] ;[SI]→DL(31H→DL)INT 21HINC SI ;偏移地址增大(SI+1→SI)LOOP WOLF ;循环MOV AH,4CH ;返回DOSINT 21HCODES ENDS ;代码段代码结束END START。

实验二数据传送及两个多位十进制数相加的实验

实验二数据传送及两个多位十进制数相加的实验

实验二数据传送及两个多位十进制数相加的实验1、实验目的(1).学习数据传送和算术运算指令的用法。

(2).熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。

2、实验内容将两个多位十进制数相加。

要求被加数均以ASCII码形式各自顺序存放在以DA TAl和DA TA2为首的5个内存单元中(低位在前),结果送回DA T Al处。

3、部分程序代码DATA SEGMENT ;数据段……...... ;补充必要的代码,定义被加数和加数DATA ENDSSTACK SEGMENT STACK ;堆栈段STA DB 64 DUP(0)SP_TOP DB 0STACK ENDSCODE SEGMENT ;代码段...... ;补充必要的代码START:...... ;补充必要的代码MOV SI, OFFSET DATA1MOV BX,05CALL DISPL ; 显示被加数CALL CRLF ; 回车、换行...... ;补充必要的代码,显示加数CALL CRLF ; 回车、换行LEA DI, DA TA2CALL ADDA ;加法运算...... ;补充必要的代码,显示结果CALL CRLF ; 回车、换行......; 主程序结束,返回DOSCRLF PROC NEAR ;回车、换行于功能MOV DL,0DH ;回车(0DH为回车的ASCII 码)MOV AH,02H ; 送DOS 的中断调用功能号INT 21H ; DOS 的中断调用MOV DL,0AH ;换行(0AH为换行的ASCII 码)MOV AH,02H ; 送DOS 的中断调用功能号INT 21H ; DOS 的中断调用RETCRLF ENDPDISPL PROC NEAR ; 显示子程序DSL: MOV AH,02 ; 送显示功能号MOV DL,[SI+BX-1] ; 显示字符串中一字符INT 21H ; DOS INT 21 功能调用DEC BX ;修改偏移量JNZ DSLRETDISPL ENDPADDA PROC NEAR......;需要自编的求和核心程序RETADDA ENDPCODE ENDSEND START4.实验及报告要求:1)要求画出完整的程序流程图。

任意两个20位十进制数相加的例程

任意两个20位十进制数相加的例程
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
ASSUME ES:DATA,SS:STACK
MAIN PROC FAR
START:
PUSH DS
XOR AX,AX
PUSH AX ;将程序段前缀入栈,利用RET返回时调用INT20H,返回DOS
REPZ SCASB ;跳过0值不显示
DEC DI
MOV AL," "
REPZ SCASB
MOV DX,DI ;显示缓冲区首址
DEC DX ;调整指针,指向要显示的第一个字符
MOV AH,09H
INT 21H ;利用DOS系统功能调用显示字串
DISPCHR PROC
MOV AH,02H
INT 21H ;调用DOS中断,显示DL中字符
LEA BX,STR2
CALL DISPSTR ;调用显示子程序,显示提示输入加数字符串
LEA BX,ADD2
CALL INPUT ;输入加数
LEA BX,ADD1
CALL ADDAIGN ;被加数个位对齐到高地址
LEA BX,ADD2
CALL ADDAIGN ;加数个位对齐到高地址
POP AX
POP DX
RET
DISPSTR ENDP
;**************************************************
;子程序名称:ADDALIGN
;子程序功能:将加数或被加数个位对齐(按最长20位处理)
; 入口参数:BX为处理的加数或被加数首址
STR1 DB "ADD1:","$"

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

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

实验一两个多位十进制数相加实验一、实验目的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(页面不足请附页)四、实验总结和体会通过本次实验我对汇编有了更加具体的认识,也明白了汇编中各个寄存器的作用及寄存器间是怎样联系的,也初步明白了什么是断地址,什么是堆栈,以及汇编的基本结构和循环结构的基本运用,但是我了解的只是初步的,汇编中还有很多我不明白和不了解的地方,最重要的是汇编语句掌握不牢固,不能很快的知道一些专用的汇编语句的意义,这方面还是比较薄弱的,还需要在今后的实验和学习中不断的学习和练习。

微机实验-2(多精度十进制加法程序设计)

微机实验-2(多精度十进制加法程序设计)

实验内容及要求
2、完成程序的设计、调试程序并学习 DEBUG工具的D命令、E命令、F命令、R 命令、G命令、U命令、单T命令、N命令、 L命令、Q命令等常用调试命令的使用,运 L Q 行程序并记录结果。 3、完成实验报告。
实验内容及要求
编程思路
该题目要求掌握加法ADD、ADC指令和十进制 调整DAA指令的应用和循环程序的编程方法。为 了实现指定功能,应从以下几个方面考虑: 【1】组织数据时,要按照高位在高地址,低位在 低地址的原则。 【2】完成多精度字节数据相加运算,最低字节用 ADD指令,而其它高位字节则要用ADC指令。 还要考虑最后的进位位存储。
实验内容及要求
1、编写程序将内存两个多精度十进制数相加。 4619534937+2531498790 = 11151033727 要求被加数和加数均以压缩BCD码形式分别存放在 以DATA1和DATA2为首的连续5个字节单元中,结果 送以RESULT为首存储区。 已知变量DATA1和DATA2定义如下: DATA1 DB 37H,49H,53H,19H,46H ;被加数 DATA2 DB 90H,87H,49H,31H,65H ;加数 RESULT DB 6 DUP(?) ;结果
十进制加法计数器高精度加法微机原理实验微机实验报告微机接口实验报告微机原理实验报告微机实验微机原理实验答案南邮微机实验东南大学微机实验
实验二 多精度十进制 加法程序设计
实验目的
1、学习数据传送和算术运算指令的用 法。 2、学习循环程序编程方法。 3、掌握多字节加法计算程序的设计方 法。 4、学会使用DEBUG工具调试程序。
实验内容及要求
【3】因为被加数和加数都以压缩BCD码表示,所以 在加法指令之后要有压缩BCD码加法调整指令DAA。 【4】题目要求完成5个字节十进制数相加,所以应 采用循环程序结构。 【5】 程序结束时应使用DOS系统功能调用返回系统 提示符。即程序代码段的最后两条指令应是: MOV AH,4CH INT 21H

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

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

实验一两个多位十进制数相加实验一实验目的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、堆栈段分析用于存放计算过程中的过程量。

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

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

学生实验报告(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.心得体会初学《微机原理》时,感觉摸不着头绪概念及原理性的问题不知道该如何下手。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上机作业二
一.实验目的
1.熟练掌握汇编语言程序设计的方法及上机步骤。

2.掌握算术运算指令的应用。

3.掌握子程序的设计方法。

4.掌握DOS功能的调用方法。

二.试验仪器
586微机一台
三.实验内容
编写程序求两个十进制数之和,并将和以十进制数的形式送屏幕显示。

编程要求与提示:
[1] 从键盘输入两个十进制数(如12678532与21736543),以二进制数形式存放在ADD1和ADD2为首址的存贮器单元,输入一个十进制数采用子程序形式。

[2] 和以二进制数的形式存入SUM以下单元。

[3] 将和送到屏幕显示采用子程序形式。

[4] 实验步骤如下:
a. 用全屏幕编辑软件建立源程序。

b.用masm.exe汇编程序对源程序进行汇编,形成目标程序。

c. 用link.exe连接程序对目标程序进行连接形成可执行文件。

d. 用DEBUG对连接通过的可执行程序进行调试。

四.源程序
STACK SEGMENT STACK 'STACK'
DW 100H DUP(?)
TOP LABEL WORD
STACK ENDS
DA TA SEGMENT
FAKE DW 0
KEYBUFFER DB 100
DB ?
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: $' DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA,ES:DA TA,SS:STACK START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
CALL INPUT1
CALL TRANS10TO16
MOV ADD1,AX
MOV A1,DX
CALL DISPCR
CALL INPUT1
CALL TRANS10TO16
MOV ADD2,AX
MOV A2,DX
CALL DISPCR
MOV SUM,AX
MOV S1,DX
ADD AX,ADD1
ADC DX,A1
MOV SUM,AX
MOV S1,DX
CALL far ptr ADISP
MOV AH,4CH
MOV AL,0
INT 21H
INPUT1 PROC NEAR
LEA DX,STRING1
MOV AH,09H
INT 21H
MOV AH,0AH
LEA DX,KEYBUFFER
INT 21H
LEA SI,KEYBUFFER+1
ret
INPUT1 endp
TRANS10TO16 PROC NEAR PUSH CX
PUSH SI; PUSH BX ???
XOR AX,AX
XOR DX,DX
XOR CX,CX
MOV CL,[SI]
INC SI
MOV AL,[SI]
INC SI
SUB AL,30H
DEC CX
JCXZ TRANSF2
MOV BX,10
TRANSF1: CALL MULAXI PUSH DX
JO TRANSF_ERR
MOV DL,[SI]
INC SI
SUB DL,30H
ADD AL,DL
ADC AH,0
JC TRANSF_ERR
POP DX
LOOP TRANSF1
MOV BX,0
TRANSF2: JMP TRANSF_OK TRANSF_ERR: MOV BX,-1 TRANSF_OK: POP SI
POP CX
ret
TRANS10TO16 endp
MULAXI PROC NEAR
PUSH CX
PUSH AX
MUL BX
MOV CX,AX
POP AX ;
XOR DX,DX
MUL BX
PUSH AX
MOV AX,CX
ADD AL,DL
ADC AH,DH
MOV DX,AX
POP AX
POP CX
ret
MULAXI endp
DISPCR PROC NEAR PUSH AX
PUSH DX
MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,2
MOV DL,0DH
INT 21H
POP DX
POP AX
ret
DISPCR endp
ADISP PROC FAR PUSH AX
PUSH CX
PUSH DX
PUSH BX
LEA SI,BUF+7
MOV BX,10000
DIV BX
PUSH AX
MOV AX,DX
XOR DX,DX
MOV BX,10
L1: DIV BX
MOV [SI],DL
XOR DL,DL
ADD BYTE PTR [SI],30H
DEC SI
LOOP L1
CMP SI,OFFSET BUF
JC L2
POP AX
MOV CX,4
JMP L1
L2:
LEA DX,BUF
MOV AH,09H
INT 21H
POP BX
POP DX
POP CX
POP AX
retf
ADISP endp
CODE ENDS
END START
五、实验体会
实验中遇到的问题以及解决方法:在这几次的编程实验中,我遇到了许多问题。

首先,在最开始的时候,无论怎么输入都显示:‘masm’不是内部或外部命令,也不是可运行的程序或批处理文件。

后来发现把自己编写的asm文件放到E盘masm文件夹里就行了,之后的每一步实验按照要求一步一步做,就都能出来结果。

还有就是不懂得如何输出自己所得到的结果,于是先抄写课本上所给的程序,当出现自己想要的结果之后,再与同学讨论输出结果的语句,充分理解其内涵。

心得体会:通过几次的上机实验课,我懂得了如何使用txt文档编写asm文件。

然后对其进行编译和连接。

当完成上述过程后,可以使用DEBUG功能来对程序进行调试,这样,就可以清楚地看到每一步运行时各个寄存器的状态。

同时,通过自己编译程序,我能够更好地理解课本中的许多程序,也能够自己编写一些简单的程序。

总而言之,通过这几次的上机实验课,我学会了通过用计算机编译程序来处理自己在理论课学习上遇到的各种问题。

希望在以后的实验中能够积累的越来越多,对此体会也越来越深。

相关文档
最新文档