资源描述
-/
《微机原理与应用实验指导书》
XX大学机电工程学院
刘XX
实验一 调试程序——DEBUG
实验目的 初步掌握汇编语言,可以调试简单的程序
实验内容 用汇编语言编写一个简单的加法运算程序。
编程提要
1.进入DEBUG状态,开机进入DOS状态。
C>DEBUG↙
屏幕显示:
-
“-”为已进入DEBUG状态,在该提示符下可键入DEBUG命令。下划线部分为用户键入的字符或命令
2.键入程序并汇编
用DEBUG的A命令送入程序:
-A 100↙
MOV AL,33
MOV DL,35
ADD DL,AL
SUB DL,30
MOV AH,2
INT 21
3。执行程序
-G↙
4.反汇编
可以用反汇编U命令将键入的程序调出,并且可以得到每条汇编指令的机器码。
-u起始地址 终止地址
5.退出DEBUG返回DOS状态
-Q
6.显示内存命令D
-D 0100↙
-D 起始地址 终止地址↙
7.修改存储单元命令E
-E 地址↙
8.检查和修改寄存器内容命令R
格式:a. R
c. R[寄存器名]
功能:a.显示CPU内部所有寄存器的内容和全部标志位的状态。
b.显示和修改一个指定寄存器的内容和标志位的状态。
9.追踪与显示命令T
格式:a. T[=地址]或 T[地址]
b. T=[地址][条数]
10.命名命令N
格式:N文件名
11.读盘命令L
12.写盘命令W
实验报告(写出上机结果及现象)
实验二 汇编与宏汇编程序
实验目的 通过实验了解汇编就是把用汇编语言编写的源程序翻译(汇编)成机器语言的目标程序。汇编程序可以使用小汇编程序(ASM)也可以用宏汇编程序(MASM),由于宏汇编程序不但可以代替ASM,而且可以汇编具有宏定义的汇编程序,因此我们在汇编程序时使用宏汇编程序(MASM)。
实验内容
执行宏汇编程序
编程提要
1.汇编过程
在DOS状态下,键入MASM则调入宏汇编程序,屏幕显示与操作如下:
masm↙
Microsoft (R) Macro AssembLe Version 5.00
Copyright (C) Microsoft Corp 1981-1985,1987.All rights reserved.
Source filename [.ASM]: ex2↙
Object filename [ex2.OBJ]: ex2↙
Source listing [NUL.LST]: ex2↙
Cross- reference [NUL.CRF]: ex2↙
50678+410090 Bytes symbol space free
0 Warning Errors
0 Severe Errors
2.在DOS状态下,键入LINK(或LINK EX2)则系统调入LINK程序,屏幕显示操作如下:
C>LINK↙
IBM Personal Computer Linker
Version 2.00(C) Copyright IBM Corp 1981,1982,1983
Object Modules [.OBJ]: EX2↙
Run File [EX2.EXE]:EX2↙
List File[NUL.MAP]:EX2↙
Libraries[.LIB]: ↙
3.执行程序
当用连接程序LINK将目标程序(.OBJ)连接定位后,可产生可执行文件(.EXE),可以在DOS状态下执行该程序。
C>EX2↙
How are you !
也可以键入EX2.EXE↙
C>EX2.EXE↙
How are you !
实验报告(写出上机结果及现象)
实验三 初级程序的编写与调试实验
实验目的
1.熟练掌握DEBUG的常用命令,学会用DEBUG调试程序
2.深入了解数据在存储器中的存储方法,及堆栈中数据的压入与弹出
3.掌握各种寻址方法及简单指令的执行过程
实验内容
1.设堆栈指针Sp=2000H,Ax=3000H,Bx=5000H请编一程序将Ax的内容和Bx的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用Debug调试程序进行汇编与调试。
2.设DS=当前段指地址,BS=0300H,SI=0002H,请用DEBUG的命令将存储器依稀偏移地址300H~304H连续单元顺序装入OAH、OBH、OCH、OEH。在DEBUG状态下送入下面程序,并用单元步执行的方法,分析每条指令源地址的形成过程?当数据传送完毕时,Ax中的内容是什么?
程序清单如下:
MOV Ax.Bx
MOV Ax,0304H
MOV Ax,[0304H]
MOV Ax,[Bx]
MOV Ax,0001[Bx]
MOV Ax,[Bx][Si]
MOV Ax,0001[Bx][Si]
HLT
3.设Ax=0002H,编一个程序段将Ax的内容乘10,要求用移位的方法完成。
编程提要
实验内容1
将两个寄存器的内容进行交换时,必顺有一个中间寄存器才能进行内容的交换,如果用堆栈做为中间存储单元,必顺遵循先进后出的原则。
实验内容2
1 其中数据寄存器中的段地址为进入Debug状态后系统自动分配的段地址。
2 Si和Bx的初值 可在Debug状态下,用R命令装入,也可以在程序中用指令来完成。
3 用T命令程序执行执行,可进行单步跟踪执行,每执行一条指令就可以看到各寄存器的状态。也可用R命令直接调出寄存器,来栓验各寄存器内容是否确。
4 在执行程序前,可用E命令将偏移地址300H~304H送入OAH,OBH,OCH,ODH。
实验内容3
用移位的方法完成某些乘法运算,是较为常见的方法,操作数左作一位为操作数乘2运算。
实验报告(写出上机结果及现象)
实验四 计算学生平均成绩的实验
实验目的 熟悉汇编语言程序的使用,掌握十 进制数的运算和设计显示程序运行结果的格式。
实验内容 编写程序,计算20个分数的平均值,并以十进制表示将结果显示在屏幕上,显示格式的要求如下:
第一行显20个分数;
第二行显示AVERAGE SCORE=平均分数。
编程提要 (1)自己编写算法,将求得的平均分数的十进制值,转换成十进制表示。其算法是平均分数二进制的低4位>9则加6。对于高4位,将其值乘以16再与4位十进制调整的结果相加,即得到最终结果。乘法可以用多次加法实现。
(2) 显示字符串信息用DOS功能调用INT21H,功能号为09H。
(3) 显示平均数结果时,用DOS功能调用INT21H,功能号为02H。每位数必顺将其转换成相应的ASC码。
参考程序流程框图
CL=0?
Y
N
AL+16H
显示20个分数的数据
求20个分数的数据
DAA
CL-1 CL
求得平均分的二进制值
平均分数的低4位十进
制调整,结果送AL
显示平均分数结果
返回DOS
平均分数高4位=>CL
附:参考程序
;******************************AVGSCORE.ASM******************************
DATA SEGMENT
MES1 DB 92,85,74,81,70,68,65,78,54,43
DB 94,100,83,88,79,83,79,69,62,60
MES2 DW 92,85,74,81,70,68,65,78,54,43
DW 94,100,83,88,79,83,79,69,62,60
;---------------------------------------------------------------------------
MES3 DB ‘AVERAGE SCORE=’,’$’
DATA ENDS
; ---------------------------------------------------------------------------
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
;---------------------------------------------------------------------------
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MES1
MOV AH,09H
INT 21H ;显示提示信息
;---------------------------------------------------------------------------
MOV BX,OFFSET MES2
MOV CL,20
MOV AX,0000
NEXT: ADD AX,WORD PTR[BX] ;将各分数累加求和
ADD BX,02
LOOP NEXT
MOV CL,20
DIV CL ;求得平均分数和二进制值
MOV DL,AL
;---------------------------------------------------------------------------
AND AL,0F0H ;平均分数的十进制调整
MOV CL,04
ROR AL,CL
MOV CL,AL ;平均分数高四位进进制值送入CL
MOV AL,DL
AND AL.0FH
CMP AL,09
JBE HAD
ADD AL,06 ; 平均分数的低4位十进调整
HAD: MOV BL,16H ; 平均分数高位十进制调整
NT: ADD AL,BL
DAA
MOV BH,AL ;平均分数十进制值送入BH
LOOP NT
;---------------------------------------------------------------------------
MOV DX,OFFSET MES3
MOV AH,09H
INT 21H ; 屏幕显示平均分数提示符
MOV AL,BH
AND AL,0F0H
COM CH,04
ROR AL,CH
ADD AL,30H
MOV DL,AL
MOV AH,02
INT 21H ; 显示平均分数高位
;---------------------------------------------------------------------------
MOV AL,BH
AND AL,OFH
ADD AL,30H
MOV DL,AL
MOV AH,02
INT 21H ; 显示平均分数的低4位
;---------------------------------------------------------------------------
MOV AX.4C00H
INT 21H ; 返回DOS
CODE ENDS
END START
实验报告(写出上机结果及现象)
实验五 分类统计学生成绩实验
实验目的 熟悉数据分类的一种方法,并掌握屏幕上显示数据格式的方法。
实验内容 编写程序,将20个百分制的分数按<60,60~69,70~79,80~89,90~99和100共六档进行分类,统计出每档的个数及总数。
编程提要(1)分类后的结果需要转换成ASCⅡ码并在屏幕上显示。可以将ASCⅡ码的转换程序写成子程序,供调用。
(2)显示字符串和程序可以采用DOS功能调用INT21H,功能号为09H。
参考程序流程框图
FIVE
90~99的数据个数+1
80~89的数据个数+1
70~79的数据个数+1
设置显示信息字符串
<60的数据个数+1
分类数据个数送CL
SIX
60~69的数据个数+1
分类数据的指针送Sl
取分类数据
FEVEN
数据<60
Y
FIVE FIVE
EIGHT
N
数据<70
Y SIX NINE
N
TEN
数据<80
Y FEVEN
100的数据个数+1
N
数据<90
Y
EIGHT EIGHT
N
数据<100
Y
NINE NINE
N
数据=100
Y TEN
N
SI+1、CL -1分类总数+1
CL=0?
N
Y
显示字符串、显示分类结果
返回DOS
附:参考程序
;******************************SORT.ASM*******************************
DATA SEGMENT
MES0 DB ‘92,85,74,81,70,68,65,78,54,43’,0AH,0DH
DB ’94,100,83,88,79,83,79,69,62,60’,0AH,0DH,’$’
MES1 DB ‘SCORE[<60] :’,’$’
MES2 DB ‘SCORE[<60-69] :’,’$’
MES3 DB ‘SCORE[<70-79] :’,’$’
MES4 DB ‘SCORE[<80-89] :’,’$’
MES5 DB ‘SCORE[<90-99] :’,’$’
MES6 DB ‘SCORE[=100] :’,’$’
MES7 DB ‘TOTAL NUMBER :’,’$’
RESULT DB 92,85,74,81,70,68,65,78,54,43
DB 94,100,83,88,79,83,79,69,62,60
;---------------------------------------------------------------------------
TOTAL DB 00
S5 DB 00
S6 DB 00
S7 DB 00
S8 DB 00
S9 DB 00
S10 DB 00
DATA ENDS
;---------------------------------------------------------------------------
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
;---------------------------------------------------------------------------
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET RESULT ;送分类数据的指针
MOV AX,0020
COMP: MOV AL,[SI] ;取数据
CMP AL,60
JL FIVE ;<60转FIVE入口处理
CMP AL,70
JL SIX ;<70转SIX入口处理
CMP AL,80
JL ESVEN ;<80转ESVEN入口处理
CMP AL,90
JL EIGHT ;<90转EIGHT入口处理
CMP AL,100
JL NINE ;<100转NINE入口处理
CMP AL,100
JE TEN ;=100转TEN入口处理
JMP NEXT
FIVE: MOV AL,[S5]
ADD AL,01 ;S5存入<60的个数
DAA
MOV [S5],AL
JMP NEXT
SIX: MOV AL,[S6]
ADD AL,01 ;S6存入60-69的个数
DAA
MOV [S6],AL
JMP NEXT
SEVEN: MOV AL,[S7]
ADD AL,01 ;S7存入70-79的个数
DAA
MOV [S7],AL
JMP NEXT
EIGHT: MOV AL,[S8]
ADD AL,01 ;S8存入80-89的个数
DAA
MOV [S8],AL
JMP NEXT
NINE: MOV AL,[S9]
ADD AL,01 ;S9存入90-99的个数
DAA
MOV [S9],AL
JMP NEXT
TEN: MOV AL,[S10]
ADD AL,01 ;S10存入=100的个数
DAA
MOV [S10],AL
NEXT: MOV AL,[T0TAL]
ADD AL,01
DAA
MOV [TOTAL],AL ;TOTAL保存分类数据的个数
INC SI
LOOP COMP
;---------------------------------------------------------------------------
MOV DX,OFFSET MES0 ;显示分类的结果
MOV AH,09H
INT 21
MOV DX,OFFSET MES1
MOV AH,O9H
INT 21H
MOV AL,[S5]
CALL DISP
MOV DX,OFFSET MES2
MOV AH,O9H
INT 21H
MOV AL,[S6]
CALL DISP
MOV DX,OFFSET MES3
MOV AH,O9H
INT 21H
MOV AL,[S7]
CALL DISP
MOV DX,OFFSET MES4
MOV AH,O9H
INT 21H
MOV AL,[S8]
CALL DISP
MOV DX,OFFSET MES5
MOV AH,O9H
INT 21H
MOV AL,[S9]
CALL DISP
MOV DX,OFFSET MES6
MOV AH,O9H
INT 21H
MOV AL,[S10]
CALL DISP
MOV DX,OFFSET MES7
MOV AH,O9H
INT 21H
MOV AL,[TOTAL]
CALL DISP
MOV AX,4C00H
INT 21H
;---------------------------------------------------------------------------
DISP PROC NEAR ;显示分类的结果子程序。
PUSH CX ; 用于将数据转换成ASCII码,
MOV BL,AL ; 并在屏幕上显示
AND AL,0F0H
MOV CL,04
ROR AL,CL
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
MOV AL,BL
AND AL,OFH
ADD AL,30H
AMV DL,AL
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,O2
INT 21H
MOV DL,0AH
MOV AH,02
INT 21H
POP CX
RET
DISP ENDP
CODE ENDS
END START
实验报告(写出上机结果及现象)
实验六 求从TABLE开始的20个无符号字节的和,结果放到SUM字单元之中
实验目的 熟练使用汇编语言。
实验内容 从TABLE开始的10个无符号字节的和,结果放到SUM字单元之中。
编程提要 源程序学生自己编写。
参考程序:
DATA SEGMENT
TABLE DB 12H,23H,34H,45H,56H
DB 67H,78H,89H,9AH,0FDH
SUM DW?
DATA ENDS
;
STACK SEGMENT
DB 50 DUP(?)
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
LEA SI,TABLE
MOV CX,10
XOR AX,AX
NEXT: ADD AL,[SI]
ADC AH,0
INC SI
LOOP NEXT
MOV SUM,AX
HLT
CODE ENDS
END START
实验报告(写出上机结果及现象)
实验七 对于三个8位无符号数80H,39H和28H,编写 S=80H*39H-28H的程序
实验目的 用汇编语言编写简单的程序。
实验内容 对于三个8位无符号数80H,39H和28H,编写 S=80H*39H-28H的程序。
编程提要 源程序学生自己编写。
参考程序:
DATA SEGMENT
NUM DB 80H,39H,28H
RESULT DW?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,NUM
LEA DI,RESULT
MOV AL,[SI]
MOV BL,[SI+1]
MUL BL
MOV BH,[SI+2]
MOV BH,0
SUB AX,BX
MOV [DI],AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
实验报告(写出上机结果及现象)
实验八 内存自TABLE开始的连续10个单元中有放在0-9的平方值,
查表求DATA中任意数X(0<=X<=9)的平方值,并将结果放到RESULT中
实验目的 能够熟练使用汇编语言,对内存数据求值。
实验内容 内存自TABLE开始的连续10个单元中有放在0-9的平方值,查表求DATA中任意数X(0<=X<=9)的平方值,并将结果放到RESULT中。
编程提要 源程序学生自己编写。
参考程序:
DSEG SEGMENT
TABLE DB 0,1,4,,9,16,25,36,49,,64,81
DATA DB ?
RESULT DB?
DSEG ENDS
SSEG SEGMENT STACK ‘STACK’
DB 100 DUP (?)
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
BEGIN: MOV AX,DSEG
MOV DS,AX
MOV AX,SSEG
MOV SS,AX
LEA BX,TABLE
MOV AH,0
MOV AL,DATA
ADD BX,AX
MOV AL,[BX]
MOV RESULT,AL
MOV AH,4CH
INT 21H
CSEG ENDS
END BEGIN
实验报告(写出上机结果及现象)
实验九 编写程序,数据以字节变量BUFFER为首地址的50个单元清零
实验目的 能够熟练使用汇编语言进行编程。
实验内容 编写程序,数据以字节变量BUFFER为首地址的50个单元清零。
编程提要 源程序学生自己编写。
参考程序:
DATA SEGMENT
BUFFER DB 50 DUP(?)
COUNT DB 50
DATA ENDS
STACK SEGMENT
DW 32 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV CL,COUNT
LEA BX,BUFFER
AGAIN: MOV [BX],0
INC BX
CMP BX,COUNT
JB AGAIN
MOV AH,4CH
INT 21H
CODE ENDS
END START0
实验报告(写出上机结果及现象)
实验十 编程:把用ASCII码形式表示的数转换为二进制码。
ASCII码存放在以TABLE为首的地址的内存单元中转换结果放在SUM单元中
实验目的 使用汇编编程进行内码转换。
实验内容 把用ASCII码存放在以TABLE为首的地址的内有单元中转换结果放在SUM。
编程提要 源程序学生自己编写。
参考程序:
DATA SEGMENT
TABLE DB ‘2’,’6’,’A’,’1’
SUM DB 2 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN: MOV AX,DATA
MOV DS,AX
MOV CL,4
MOV CH,CL
LEA SI,TABLE
CLD
XOR AX,AX
XOR DX,DX
NEXT1: LODS TABLE
AND AL,7FH
CMP AL,‘0’
JL ERROR
CMP AL,‘9’
JG NEXT2
SUB AL,30H
JMP SHORT NEXT3
NEXT2: CMP AL,‘A‘
JL ERROR
CMP AL,‘F‘
JG ERROR
SUB AL,37H
NEXT3: OR DL,AL
ROR DX,CL
DEC CH
JNZ NEXT1
MOV WORD PTR SUM,DX
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
实验报告(写出上机结果及现象)
实验十一 编程:把存放在BUFF中的16位二进制数转换为ASCII码表示的等值数字字符
展开阅读全文
相关搜索