实 验 报 告
课程名称: 微机原理实验(软件)
实验名称: 实验1 两个多位十进制数相加
班 级
学 号
姓 名
指导教师 李北明
实验一 两个多位十进制数相加实验
一、实验目的
1、学习数据传送和算术运算指令的用法。
2、熟悉在pc机上建立、汇编、链接、调试和运行汇编语言程序的过程。
二、实验内容
1、将两个五位十进制相加。要求加数和被加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
2,改变程序手动输入2个数相加
三、实验程序
原程序
CRLF MACRO ;建立宏指令CRLF
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
ENDM
DATA SEGMENT
DATA1 DB 32H,33H,34H,35H,36H ;第一个数据(作为被加数)
DATA2 DB 31H,32H,33H,34H,34H ;第二个数据(作为加数)
DATA ENDS
STACK SEGMENT ;堆栈段
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
CALL DISPL ;显示被加数
CRLF
MOV SI,OFFSET DATA1
MOV BX,05
CALL DISPL ;显示加数
CRLF
MOV DI,OFFSET DATA2
CALL ADDA ;加法运算
MOV SI,OFFSET DATA1
MOV BX,05 ;显示结果
CALL DISPL
CRLF
MOV AX,4C00H
INT 21H
DISPL PROC NEAR ;显示子功能
DS1: MOV AH,02
MOV DL,[SI+BX-1] ;显示字符串中一字符
INT 21H
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 ;非组合BCD码的加法调整
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
手动输入相加
CRLF MACRO
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
ENDM
DATA SEGMENT
DATA1 DB 20 DUP(?)
DATA2 DB 20 DUP(?)
DATA ENDS
STACK SEGMENT
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 BX,05
MOV SI,OFFSET DATA1
CALL INPUT
CRLF
MOV BX,05
MOV SI,OFFSET DATA2
CALL INPUT
CRLF
CRLF
MOV SI,OFFSET DATA2
MOV BX,06
CALL DISPL
CRLF
MOV SI,OFFSET DATA1
MOV BX,06
CALL DISPL
CRLF
MOV DI,OFFSET DATA2
CALL ADDA
MOV SI,OFFSET DATA1
MOV BX,06
CALL DISPL
CRLF
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
ADDA PROC NEAR
MOV DX,SI
MOV BP,DI
MOV BX,06
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,06
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,06
AD3: ADD BYTE PTR[SI+BX-1],30H
ADD BYTE PTR[DI+BX-1],30H
DEC BX
JNE AD3
RET
INPUT PROC NEAR
IN1:MOV AH,01
INT 21H
MOV [SI],AL
INC SI
DEC BX
JNZ IN1
RET
INPUT ENDP
ADDA ENDP
CODE ENDS
END START
四 实验结果
图二
如图:图一为2个4位数相加,8888+9999=18887,符合事实
图二为手动输入88888与99999,结果为18887,符合事实
五、Bug与修复
在改变实验程序后,手动输入出现故障,后经检查发现语句出现遗漏,改正后,运行正常。
实 验 报 告
课程名称: 微机原理实验(软件)
实验名称: 实验2 两个数相乘实验
班 级 20120831
学 号 2012083118
姓 名
指导教师 李北明
实验二两个数相乘实验
一、实验目的
掌握乘法指令和循环指令的用法。
二、实验内容
实现十进制数的乘法。被乘数和乘数均以ASCII码形式存放在内存中,实现两位十进制数乘五位十进制数,乘数和被乘数以及结果均在屏幕上显示出来。
三、实验程序
四、实现五位数乘两位的程序如下(更改部分标注在后面):
原程序
CRLF MACRO ;回车的宏命令
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
ENDM
DATA SEGMENT
DATA1 DB 30H,30H,30H,30H,30H ;五位乘数
DATA2 DB 30H ;两位被乘数的十位
DATA3 DB 00H,00H,00H,00H,00H,00H,00H ;五位乘数与十位被乘
数乘积存放单元
DATA4 DB 30H ;两位被乘数的个位
DATA5 DB 00H,00H,00H,00H,00H,00H,00H ;五位乘数与十位被乘 数乘积存放单元
RESULT DB 7 DUP(00H) ;结果存放单元
DATA ENDS
STACK SEGMENT
STA DB 20 DUP(?)
TOP EQU $-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 DATA1+4 ;输入五位乘数并显
示
MOV CX,05
LOOPP: MOV AH,1
INT 21H
MOV [SI],AL
DEC SI
LOOP LOOPP
CRLF
MOV AH,1
INT 21H
MOV SI,OFFSET DATA2 ;键入被乘数十位
MOV [SI],AL
MOV AH,1
INT 21H
MOV SI,OFFSET DATA4 ;键入被乘数十位
MOV [SI],AL
CRLF
MOV SI,OFFSET DATA2 ;五位乘数与被乘数十位相
乘结果右移一位存放DATA3中
MOV BL,[SI]
AND BL,00001111B
MOV SI,OFFSET DATA1
MOV DI,OFFSET DATA3+1
MOV CX,05
LOOP1: MOV AL,[SI]
AND AL,00001111B
INC SI
MUL BL
AAM
ADD AL,[DI]
AAA
MOV [DI],AL
INC DI
MOV [DI],AH
LOOP LOOP1
MOV SI,OFFSET DATA4 ;五位乘数与被乘数个位相
乘结果存放在DATA5中
MOV BL,[SI]
AND BL,00001111B
MOV SI,OFFSET DATA1
MOV DI,OFFSET DATA5
MOV CX,05
LOOP2: MOV AL,[SI]
AND AL,00001111B
INC SI
MUL BL
AAM
ADD AL,[DI]
AAA
MOV [DI],AL
INC DI
MOV [DI],AH
LOOP LOOP2
MOV SI,OFFSET DATA3
MOV DI,OFFSET DATA5
CALL ADDA
MOV BX,07
CALL DISPLL
CRLF
MOV AX,4C00H
INT 21H
DISPLL PROC NEAR ;结果显示子程序
DSI: MOV AH,02
MOV DL,[SI+BX-1]
INT 21H
DEC BX
JNZ DSI
RET
DISPLL ENDP
ADDA PROC NEAR ;将DATA3和DATA5相加并
化成ASCII码
MOV DX,SI
MOV BP,DI
MOV CX,07
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,7
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
手动输入五位数乘两位数
CRLF MACRO
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
ENDM
DATA SEGMENT
DATA1 DB 5 DUP(?) ;加数
DATA2 DB 2 DUP(?) ;被加数
RESULT DB 7 DUP (00H)
RESULT1 DB 7 DUP (00H)
DATA ENDS
STACK SEGMENT
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 BX,05
MOV SI,OFFSET DATA1 ;设置指针
CALL INPUT ;调用输入函数INPUT
CRLF
MOV AH,02
MOV DL,2AH
INT 21H
MOV CX,2
LP1:MOV DL,20H
INT 21H
LOOP LP1
MOV BX,02 ;调用输入函数
MOV SI,OFFSET DATA2
CALL INPUT1
CRLF
MOV AH,02
MOV CX,7
LP3:MOV DL,2DH
INT 21H
LOOP LP3
CRLF
MOV SI,OFFSET DATA2
MOV BL,[SI]
MOV BH,[SI+1]
AND BL,00001111B
MOV SI,OFFSET DATA1
MOV DI,OFFSET RESULT
MOV CX,05
LOOP1: MOV AL,[SI]
AND AL,00001111B
INC SI
MUL BL
AAM
ADD AL,[DI]
AAA
MOV [DI],AL
INC DI
MOV [DI],AH
LOOP LOOP1
AND BH,00001111B
MOV SI,OFFSET DATA1
MOV DI,OFFSET RESULT1
INC DI
MOV CX,05
LOOP2: MOV AL,[SI]
AND AL,00001111B
INC SI
MUL BH
AAM
ADD AL,[DI]
AAA
MOV [DI],AL
INC DI
MOV [DI],AH
LOOP LOOP2
MOV SI,OFFSET RESULT
MOV DI,OFFSET RESULT1
MOV DX,SI
MOV BP,DI
MOV SI,DX
MOV DI,BP
MOV CX,07
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 CX,07
MOV SI,OFFSET RESULT
DISPL: MOV AH,02
MOV DL,[SI+6]
ADD DL,30H
INT 21H
DEC SI
LOOP DISPL
MOV AX,4C00H
INT 21H
INPUT PROC NEAR
IN1:MOV AH,01
INT 21H
MOV [SI+4],AL
DEC SI
DEC BX
JNZ IN1
RET
INPUT ENDP
INPUT1 PROC NEAR
IN2:MOV AH,01
INT 21H
MOV [SI+1],AL
DEC SI
DEC BX
JNZ IN2
RET
INPUT1 ENDP
CODE ENDS
END START
五、实验结果
实验程序运行结果如下:
如图:xc为实验讲义中例程,得到的结果为×3=135276,符合要求;52为改变后的试验程序,能实现五位数乘三位数,并将乘数、被乘数结果显示在屏幕上,图中为99999*99=9899901。结果正确,符合设计要求。
五、bug与修复
改变实验程序后,五位的乘数只有被乘数十位相乘,通过将五位乘数存放单元DATA3变为七位才得到正常结果。
实 验 报 告
课程名称: 微机原理实验(软件)
实验名称: 实验3 字符匹配程序
班 级 20120831
学 号 2012083118
姓 名
指导教师 李北明
实验三字符串匹配程序
一、实验目的
掌握汇编语言中串操作指令的用法。
二、实验内容
用串操作指令设计程序,实现在存储区(长度为100H)中寻找空格字符,退出时给出能否找到信息,当找到时,能够显示出空格字符在内存中的位置。
。
三、实验程序(修改部分)
CRLF MACRO
MOV DL ,0DH
MOV AH ,02H
INT 21H
MOV AH ,02H
MOV DL ,0AH
INT 21H
ENDM
DATAS SEGMENT
MESS1 DB 'INPUT THE SEGMENT ADDR:$'
MESS2 DB 'INPUT THE OFFSET ADDR :$'
MESS3 DB 'OK!HAS FOUND',0DH,0AH,'$'
MESS4 DB 'NO SPACE CHARACHTWE!',0DH,0AH,'$'
ERROR DB 'INPUT ERROR',0DH,0AH,'$'
str db ' ',0dh,0ah,'$'
DATAS ENDS
STACKS SEGMENT
STA DW 32 DUP (?)
TOP DW ?
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS,ES:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
MOV AH,09H
MOV DX,OFFSET MESS1
INT 21H
CALL GETNUM
MOV ES,DX
MOV AH,09H
MOV DX,OFFSET MESS2
INT 21H
CALL GETNUM
MOV DI,DX
CLD
MOV CX,0100H
MOV AL,20H
REPNZ SCASB
JNZ CCC
MOV AH,09H
MOV DX,OFFSET MESS3
INT 21H
DEC DI
MOV CH,4
LOP :MOV CL,4
ROL DI,CL
MOV DX,DI
AND DL,0FH
ADD DL,30H
CMP DL,3AH
JB NEXT
ADD DL,7
NEXT:MOV AH,02H
INT 21H
DEC CH
JNZ LOP
MOV DX,OFFSET STR
MOV AH,09H
INT 21H
JMP BBB
CCC:MOV AH,09H
MOV DX,OFFSET MESS4
INT 21H
BBB:MOV AX,4C00H
INT 21H
GETNUM PROC NEAR
PUSH CX
XOR DX,DX
GGG:MOV AH,01H
INT 21H
CMP AL,0DH
JZ PPP
CMP AL,20H
JZ PPP
SUB AL,30H
JB KKK
CMP AL,0AH
JB GETS
CMP AL,11H
JB KKK
SUB AL,07H
CMP AL,0FH
JBE GETS
CMP AL,2AH
JB KKK
CMP AL,2FH
JA KKK
SUB AL,20H
GETS:MOV CL,04
SHL DX,CL
XOR AH,AH
ADD DX,AX
JMP GGG
KKK:MOV AH,09H
MOV DX,OFFSET ERROR
INT 21H
PPP:PUSH DX
CRLF
POP DX
POP CX
RET
GETNUM ENDP
CODES ENDS
END START
四、实验结果
五、bug与修复
本次实验十分顺利的得到了结果,未遭遇bug。
实 验 报 告
课程名称: 微机原理实验(软件)
实验名称: 实验4 字符串匹配程序
班 级 20120831
学 号 2012083118
姓 名
指导教师 李北明
实验四 字符串匹配程序
一、实验目的
掌握显示提示信息的方法及接受键盘输入信息的方法。
二、实验内容
1、编写程序,实现两个字符串比较。如果相同,则显示”MATCH”,否则,显示“NO MATCH”。
2、改变程序,实现两个字符串比较。只有当两个字符串全部相同实结果显示“MATCH”。否则显示两个字符串中相同字符以及相同字符的个数。
三、实验程序
CRLF MACRO
MOV DL,0DH
MOV AH,02H
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
DATA1 DB 5 DUP (?)
MESS1 DB 'TOTALLY MATCH',0DH,0AH,'$'
MESS2 DB 'NO MATCH',0DH,0AH,'$'
MESS3 DB 'INPUT STRING1:',0DH,0AH,'$'
MESS4 DB 'INPUT STRING2:',0DH,0AH,'$'
MESS5 DB 'MIS: $'
MESS6 DB 'N: $'
MESS7 DB 'D : $'
MAXLEN1 DB 81
ACTLEN1 DB ?
STRING1 DB 81 DUP(?)
MAXLEN2 DB 81
ACTLEN2 DB ?
STRING2 DB 81 DUP(?)
DATA ENDS
STACK SEGMENT
STA DB 50 DUP (?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
MOV SP,TOP
MOV AH,09H
MOV DX,OFFSET MESS3
INT 21H
MOV AH,0AH
MOV DX,OFFSET MAXLEN1
INT 21H
CRLF
MOV AH,09H
MOV DX,OFFSET MESS4
INT 21H
MOV AH,0AH
MOV DX,OFFSET MAXLEN2
INT 21H
CRLF
CLD
MOV SI,OFFSET STRING1
MOV CL,[SI-1]
MOV CH,00H
MOV DI,OFFSET STRING2
WANQUAN: CMPSB ;比较两字符串,完全相同则跳转至GGG,否则跳转至LLL
JNZ LLL
LOOP WANQUAN
GGG: MOV AH,09H
MOV DX,OFFSET MESS1
INT 21H
JMP PPP
LLL: MOV SI,OFFSET STRING1
MOV CL,[SI-1]
MOV CH,00H
MOV BH,00H
KKK: MOV DI,OFFSET STRING2
PUSH CX
MOV BL,30H
MOV CL,[DI-1]
MOV CH,00H
MOV AL,[SI]
MOV DX,DI
LP1: SCASB ;非重复比较,一次只比较一个数
JZ FOUND
DEC CX
JNZ LP1
TEST BL,0FH
JZ DIF
JNZ SAME
LP2: INC SI
POP CX
LOOP KKK
TEST BH,4FH
JNZ PPP
MOV AH,09H
MOV DX,OFFSET MESS2
INT 21H
JMP PPP
FOUND: ADD BL,01 ;统计相同字符数子程序
ADD BH,01
DEC CX
JNZ LP1
SAME: MOV AH,09H ;字符串部分相同子程序
MOV DX,OFFSET MESS5
INT 21H
MOV AH,02H
MOV DL,[SI]
INT 21H
CRLF
MOV AH,09H
MOV DX,OFFSET MESS6
INT 21H
MOV AH,02H
INC BL
MOV DL,BL
INT 21H
CRLF
CRLF
JMP LP2
DIF: MOV AH,09H
MOV DX,OFFSET MESS7
INT 21H
MOV AH,02H
MOV DL,[SI]
INT 21H
CRLF
CRLF
JMP LP2
PPP: MOV AX,4C00H
INT 21H
CODE ENDS
END START
四 实验结果
。
五、bug与修复
实验顺利没有bug。
微机原理与接口技术实验指导书班级学号099074姓名安徽工业大学计算机学院实验一存贮器读写实验一实验内容对指定地址区间的RAM40…
实验题目8253定时计数器实验一实验目的与要求1学会8253芯片和微机接口原理和方法2掌握8253定时器计数器的工作方式和编程原理…
微机原理实验报告实验一两个多位十进制数相加的实验一实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立汇编链接调试和运行汇编…
微机原理及接口技术实验报告20xx20xx学年第一学期班级姓名学号指导教师实验一Emu8086软件的使用一实验目的1熟悉汇编语言开…
大连理工大学本科实验报告课程名称计算机原理课程设计学院系电气工程学院专业电气工程及其自动化班级学号学生姓名20xx年12月30日大…
实验一Debug命令及汇编指令和寻址的应用一、实验目的:1、掌握DEBUG的基本命令及其功能,学会用DEBUG调试程序;2、掌握8…
微机原理与接口技术实验指导书班级学号099074姓名安徽工业大学计算机学院实验一存贮器读写实验一实验内容对指定地址区间的RAM40…
微机原理与应用课程实验报告实验分工报告人同组人实验时间20xx1210课程设计一题目要求1在数据段首址为0100H开始的内存区1按…
微机原理硬件实验IO地址译码amp简单并行接口班级姓名学号一实验目的实验一掌握IO地址译码电路的工作原理实验二掌握简单并行接口的工…
微机原理实验报告单赟吉11211105通信11091目录一IO地址译码与交通灯控制实验3二可编程定时器计数器82538三中断实验纯…
不知不觉,微机原理与接口技术实验课程已经结束了。回想起来受益匪浅,主要是加深了对计算机的一些硬件情况和运行原理的理解和汇编语言的编…