资源描述
微机原理实验报告
班 级:级电子科学与技术卓工班
姓 名: 黄中一
学 号: 36460273
序 号:
评阅分数:
实验一
一、实验目
1、学会如何建立汇编源文献ASM
2、学会调用MASM宏汇编程序对源文献进行汇编,获得目的程序 OBJ及LST列表文献
3、学会调用LINK连接程序汇编后目的文献OBJ连接成可执行文献 EXE
4、学会使用DEBUG调试程序把可执行文献装入内存并调试运营,用D命令显示目的程序,用U命令对可执行文献反汇编,用G命令运营调试。
二、实验设备
装有MASM 软件IBM PC机
三、实验内容
1、汇编程序对源程序进行编译,生成扩展名为OBJ目的文献;连接程序是将目的程序和库文献进行连接、定位,生成扩展名为EXE可执行文献;调试程序是对目的文献进行调试,验证它对的性。
2、DEBUG程序各种命令用法
功能
命令格式
使用阐明
显示内存单元内容
D地址
从指定地址开始显示40H个字节或80H个字节
修改内存单元内容
E地址
先显示地址和单元内容等待输入修改内容
检查和修改寄
存器内容
R
显示所有寄存器和标志位及下条指令单元十六进制数码和反汇编格式
反汇编
U地址
从指定地址开始反汇编16个或32个字节
汇编
A地址
从指定地址直接输入语句并从指定指定汇编装入内存
跟踪
T=地址
从指定地址开始逐条跟踪指令
运营
G=地址
无断点,执行正在调试指令
退出
Q
退出DEBUG返回DOS
3、实验过程
①、在edit环境,写字板,记事本等中输入源程序。或双击屏幕上“将来汇编”快捷方式进入编辑环境输入源程序。
②、保存,输入文献名如A1.asm,并将其与MASM三个可执行文献放在同一目录下。
③、在DOS环境下(可用windows下命令提示符进入),用MASM生成目的文献A1.OBJ
进入DOS环境,将当前目录设立为存储MASM途径.如图所示:
如果MASM 软件放在C:\TOOLS\WJYL 则先要进入到该子目录下,进入该子目录办法为,cd c:\ 退到c盘根目录下,cd tools
cd WJYL
则如上所述进入该目录下,然后
输入MASM ,可见屏幕上有四个提问,按如下格式回答:
Source filename [.ASM]:a1↙
Object filename [A1.OBJ]:↙
Source listing [NUL.LST]:a1↙
Cross-reference [NUL.CRF]:a1 ↙
④、键入DIR/W可见目的文献A1.OBJ和列表文献A1.LST。
⑤、在DOS环境下,用连接文献LINK连接程序生成可执行文献A1.EXE输入LINK,可见屏幕有四个提问,按如下格式回答:
Object Modules [.OBJ]:A1↙
RUN File [A1.EXE]:↙
List File [NUL.MAP]:↙
Libraries [.LIB]:A1↙
用DIR命令,查看生成各文献
⑥、用TYPE A1.LST↙ 命令观看列表文献
⑦、在DOS环境下,用DEBUG跟踪程序来安装运营A1.EXE 程序
1) 输入DEBUG A1.EXE↙可见有提示符“—”
2)输入-R ↙可见CPU内所有寄存器内容和标志位状态如下:
AX=0000 BX=0000 CX=0100 DX=0000 SP=0028 BP=0000 SI=0000 DI=0000 DS=1112 ES=1112 SS=1126 CS=1129 IP=0000 NV UP DI PL NZ NA PO NC
1129:0000 B82211 MOV AX,1122
3)输入-U,可看到11行指令,再用U命令可看到余下各指令。
4)输入运营命令-G=00 28 可见程序执行到 INT 21H 句便停下来,屏幕展示此刻各寄存器内容如下:
AX=4C00 BX=0007 CX=0001 DX=0000 SP=0028 BP=0000 SI=0000 DI=0000 DS=1122 ES=1112 SS=1126 CS=1129 IP=0028 NV UP DI PL ZR AC PE CY
1129:0028 CD21 INT 21
5)输入-R IP 可修改指令指针
6)输入-T↙可看到执行第一条指令成果
输入-T=0 3↙ 可看到3条指令执行过程
7)输入-Q ↙退出DEBUG,回到DOS状态。
注:如果masm过程中浮现错误,可参看错误提示,在相应行和列去寻找错误。可直接在dos 环境下键入edit进入编辑环境。
附:标志寄存器相应含义
NV OF=0
OV OF=1
UP DF=0
DN DF=1
DI IF=0
EI IF=1
PL SF=0
NG SF=1
NZ ZF=0
ZR ZF=1
NA AF=0
AC AF=1
P0 PF=0
PE PF=1
NC CF=0
CY CF=1
实验例程1:
DATA SEGMENT
ARRAY1 DB 2,5,0,3,-4,5,0,0AH,0FH
ARRAY2 DB 3,5,4,-2,0,8,3,-0AH,20H
COUNT DB $-ARRAY2
LEN DB ?
SUM DB 20H DUP(0)
DATA ENDS
STACK1 SEGMENT PARA STACK 'STACK'
DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START:MOV AX,DATA
MOV DS,AX
MOV BX,-1
MOV CX,0
MOV CL,COUNT
NOZERO:INC BX
MOV AL,ARRAY1[BX]
ADD AL,ARRAY2[BX]
MOV SUM [BX],AL
LOOPNE NOZERO
JE ENDO
INC BL
ENDO: MOV LEN,BL
MOV AH,4CH
INT 21H
CODE ENDS
END START
实验例程2:显示字符串
;SAMPLE PROGRAM DISPLAY MESSAGE ;注释行
STACK SEGMENT PARA STACK ‘STACK’ ;定义堆栈段
DB 1024 DUP (0) ;在存储器某个区域建立一种堆栈区
STACK ENDS
DATA SEGMENT ;定义数据段
MESSAGE DB ‘THIS IS A SAMPLE PROGRAM. $’ ;在存储器中存储供显示数据
DATA ENDS ;数据段结束
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,DS:DATA,SS:STACK ;告诉汇编程序段范畴
START: PROC FAR ;将程序定义为远过程
PUSH DS
MOV AX,0 ;可用XOR AX,AX
PUSH AX ;原则序,以便返回DOS操作系统
MOV AX,DATA
MOV DS,AX ;初始化DS
LEA DX,MESSAGE ;MESSAGE 地址偏移量给BX
MOV AH,9
INT 21H ;调用 DOS 9号中断功能显示字符串。
RET ;返回DOS 操作系统
START ENDP ;过程结束
CODE ENDS ;代码段结束
END START ;整个程序汇编结束
例3 人机交互:
DATA SEGMENT
BUF DB 100 ;缓冲区长度
DB ? ;预留用来存储实际长度
DB 100 DUP(?) ;接受来自键盘输入下信息
MESG DB ‘WHAT IS YOUR NAME ?$’
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV DX OFFSET MESG
MOV AH,09H ;屏幕显示提示信息
INT 21H
MOV DX OFFSET BUF
MOV AH,0AH ;接受键盘输入
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
实验二 数码转码编程及程序调试
一.实验目
1.掌握不同进程数及编码互相转换程序设计办法,加深对数码转换理解;
2. 进一步熟悉键盘用法;
3. 进一步熟悉调试程序办法。
二. 实验设备
装有汇编软件IBMPC 机一台
三.实验内容及环节
计算机输入设备输入信息普通ASCii码或BCD码表达数据或字符,CPU解决信息普通均用二进制数进行计算或其他解决,解决成果输出外设有必要一外设规定变为ASCII码,BCD码或七段显示码等。因而,在应用软件中各累数制转换和代码转换是必不可少。
计算机于外设间数码转换关系如图2-1所示,数码相应关系如表2-1所示。
一.将ASCII码表达十进制数转换为二进制数
1.程序流程
十进制数可表达为:
代表十进制1,2,3,···9,0;
由式(2)可归纳十进制数转换为二进制数办法:从十进制最高位Dn开始作乘10加次位操作,将成果再乘10再加下一种次位,如此重复,则可求出二进制数成果来。程序流程图如图2-2。这里咱们规定:被转换ASCII码十进制数存储在3500h~3504h单位中。而转换成果在3510~3511单位中。
2.实验环节
(1) 输入程序并检查无误。
(2) 在3500~3504h单元存入十进制12ASCII码,即e3500,并输入。
(3) g=,运营程序,并用CTR+C来中断程序返回监控态。
(4) 用d3510查当作果,应为3510 0C 00
(5) 重复试几组数,考查程序对的性。
流程图如下:
代码如下:
地址(H) 助记符 注释
MOV SI,3500 ;源地址
MOV DI,3510 ;成果地址
MOV BX,000A ;乘数 10
MOV CX,0004 ;计数
200C MOV AH,00 ;AH 清零
200E MOV AL,[SI] ;取被转换数
SUB AL,30 ;ASCII码变十进制数
IMUL BX ;高位(AX)*(BX)送AX
ADD AL,[SI+01] ;取下一位
1017 SUB AL,30 ;ASCII码减30变十进制数
INC SI ;源地址指针+1
201A LOOP ;CX-1,若CX不等于零则继续
201C MOV [DI],AX ;若CX不等于零则存成果
201E INT 3
运营成果截图:
二.将十进制数ASCII码转换为BCD码
1.程序流程
将从键盘输入五位十进制数ASCII码已存在3500起始内存单元中。把它转换成BCD码后,再按位分别存入350A起始内存单元内。若输入不是十进制ASCII码,则显示FF.
2.实验环节
(1) 输入程序并检查无误。
(2) 在3500H——3504H单元中存入五位十进制数ASCII码,即
E3500↙,并输入31,32,33,34,35。
(3) G=↙,运营以上程序。
(4) D350A↙,显示成果为:
0000:350A 01 02 03 04 05 CC…
(5) 重复试几组数,考查程序对的性。
流程图如下:
代码如下:
地址(H) 助记符 注释
MOV CX,0005;循环计数器赋初值
MOV DI,3500;ASCII码首址
MOV BL,FF; 错误标志送BL
MOV AL,[DI];送ASCII码至AL
200A CMP AL,3A; 比较AL与3AH
200C JNB ; 不低于3A则转
200E SUB AL,30; 低于3A则取ASCII码低四位
JB ; 低于30则转
MOV BL,AL; 否则AL内容送BL,取代FF
MOV AL,BL; 成果或错误标志送AL
MOV [DI+0A],AL
INC DI
201A LOOP
201C INT 3
运营成果截图:
三. 将十六位二进制数转换为ASCII码表达十进制数
1. 程序及其流程
十六位二进制数值域为0——65535,最大可转换为五位十进制数。
算法:五位十进制数可表达为:(Di:表达十进制数0——9。)
因而,将十六位二进制数转换为五位ASCII码表达表达十进制数,就是求D1——D4,并将它化为ASCII码。程序流程图如图1-3所示,设源数据存于3500——3501H单元中,成果数存于3510——3514H单元中。
2.实验环节
(1) 输入程序并检查无误。
(2) 在3500——3501H单元中存储0C00,运营程序并检查成果,应看到3510——3514H单元中数依次为。
(3) 重复试几组数,并运营程序、观测成果。
流程图如下:
代码如下:
地址(H) 助记符 注释
MOV DX,[3500];取二进制数
MOV SI,3515; 目的首址在3510
DEC SI
MOV AX,DX
200A MOV DX,0000
200D MOV CX,000A
DIV CX; ; 除10
XCHG AX,DX
ADD AL,30
MOV [SI],AL
CMP DX,0000
201B JNE
201D CMP SI,3510 ;填余下高位为0
2021 JZ 202A;
2023 DEC SI
2024 MOV AL,30
2026 MOV [SI],AL
2028 JMP 201D
202A INT 3
运营成果截图:
四.十六进制数转换为ASCII码
1.程序及其流程
通过CPU解决后十六进制数存储在起始地址为3500H内存单元中,把它们转换成ASCII码之后,再分别存入起始地址为350AH内存单元中。
从表2-1中可知,十六进制数加30H即可得到0H——9HASCII码,而要得到AH——FHASCII码,则需再加7H。程序流程图及参照程序如图1-4所示。
2.实验环节
(1) 输入程序并检查无误。
(2) 在3500——3501H单元中存入四位十六进制数203B,即
E3500↙,并输入3B,20。
(3) G=↙,运营以上程序
(4) D350A↙,显示成果为:
0000:350A 42 33 30 32 CC…
输入数据与成果ASCII码相应顺序相反。
(5) 重复试几组数。考查程序对的性。
流程图如下:
代码如下:
地址(H) 助记符 注释
MOV CX,0004
MOV DI,3500
MOV DX,[DI]
MOV AX,DX
200A AND AX,000F ;取低四位值
200D CMP AL,0A; ;判与否“0”-“9”
200F JB ; 是“0”-“9”转
ADD AL,07; 是“A”-“F”,加7
ADD AL,30; 转换为ASCII码
MOV [DI+0A],AL
INC DI
PUSH CX ;保护循环计数器内容
201A MOV CL,04; 移位次数送CL
201C SHR DX,CL
201E POP CX
201F LOOP
2021 INT 3
运营成果截图:
五.BCD码转换为二进制数
1.程序及其流程
设四个二位十进制数BCD码存储在起始地址为3500H,
单元中,转换出二进制数码存入起始地址为3510H内存
单元中,程序流程图及参照程序如图1-5所示。
2.实验环节
(1) 输入程序并检查无误。
(2) 在3500——3507单元中存入四个十进制数(12,34,56,78)BCD码,即E3500↙ 输入01,02,03,04,05,06,07,08。
(3) G=↙,运营以上程序。
(4) D3510↙,显示成果为3510 0C 00 22 00 38 00 4E 00
(5) 重复试几组数,考查程序对的性。
流程图如下:
代码如下:
地址(H) 助记符 注释
MOV CX,0004
MOV DI,3500
MOV AL,[DI]
ADD AL,AL ;乘2
200A MOV BL,AL
200C ADD AL,AL ;乘2
200E ADD AL,AL ;乘2
ADD AL,BL ;乘10
INC DI
MOV AH,00
ADD AL,[DI]; BCD码十位与个位加
MOV [DI+0F],AX;存成果 图1-5
201A INC DI
201B LOOP
201D INT 3
运营成果截图:
实验三 分支和循环程序设计实验
一、分支程序设计实验
1.实验目
1.掌握分支程序构造。
2掌握分支程序设计、调试办法。
2.实验设备
微机一台
3.内容
设计一数据块间搬移程序
设计思想:
程序规定把内存中一数据区(称为源数据块)传送到另一存贮区(称为目数据块)。源数据块和目数据块在存贮中也许有三种状况。
对于两个数据块分离状况,数据传送从数据块首址开始,或者从数据块末址开始均可,但对于有某些重叠状况,则要加以分析,否则重叠某些会因“搬移”而遭破坏。
可以得出如下结论:当源数据块首址〉目块首址时,从数据块首址开始传送数据。当源数据块首址〈目块首址时,从数据块末地址开始传送数据。
流程图如下:
代码如下:
DATA SEGMENT
M DB 01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H,13H,14H,15H,16H,24 DUP(?)
N = M+10
Z = N+17
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET Z
SECOND:MOV AX,OFFSET M
MOV DX,OFFSET N
ADD AX,15
CMP AX,BX
JC FIRST
MOV CX,0016
ADD DX,15
MOV SI,AX
MOV DI,DX
BEGIN2:MOV BL,[SI]
MOV [DI],BL
DEC SI
DEC DI
LOOP BEGIN2
JMP COMPLETE
FIRST:MOV CX,0016
SUB AX,15
MOV SI,AX
MOV DI,BX
BEGIN1:MOV DL,[SI]
MOV [DI],DL
INC SI
INC DI
LOOP BEGIN1
MOV BX,0000
JMP SECOND
COMPLETE:MOV AH,4CH
INT 21H
CODE ENDS
END START
运营成果截图:
在源数据块中存入6个数,分别使SI不不大于、等于、不大于DI均发现数据对的传送。程序对的。
二、循环程序设计实验
1.实验目
(1)加深对循环构造理解。
(2)掌握循环构造程序设计办法。
(3)纯熟掌握调试循环程序办法。
2.实验设备
TDS-MD微机一台
3.内容
(1)编制程序使S=1+2*3+3*4+4*5+……N(N+1),直到N(N+1)项不不大于200为止。
流程图如下:
N
Y
开始
1→DX,2→BL
BL→AL
BL+1
AL*BL→AX
DX+AX→DX
结束
AX>200
代码如下:
STACK1 SEGMENT STACK
DW 64 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,0001H
MOV BL,02H
A1: MOV AL,BL
INC BL
MUL BL
ADD DX,AX
CMP AX,00C8H
JNA A1
A2: INT 03H
CODE ENDS
END START
运营成果截图:
运营成果为45FH,与实际相符,程序对的。
(2)求某个数据区内负数个数
设数据区第一单元存储区内数据个数,从第二单元开始存储数据,在区内最后一种单元存储成果。
为记录数据区内负数个数,需要逐个判断区内每一种数据,然后将所有数据中凡是符号位为1数据个数累加起来,即得区内所包括负数个数。
流程图如下:
代码如下:
STACK1 SEGMENT STACK
DW 64 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DI,3000H
MOV CL,[DI]
XOR CH,CH
MOV BL,CH
INC DI
A1: MOV AL,[DI]
TEST AL,80H
JE A2
INC BL
A2: INC DI
LOOP A1
MOV [DI],BL
A3: JMP A3
CODE ENDS
END START
运营成果截图:
输入数据个数为6
输入12、88、82、90、22、33得成果03
成果与实际相符,程序对的。
实验四 子程序设计
一. 实验目
1、学习子程序定义和调用办法。
2、掌握子程序、子程序嵌套构造。
3、掌握子程序程序设计、编制及调试办法。
二. 实验内容
程序采用菜单式选取,可接受顾客输入命令(1~5),各命令如下:
按1键完毕字符串小写字母变大写字母
顾客输入一由英文大小写字母或数字0~9构成字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其他字符不变,并在屏幕上显示。顾客按任一键,重做,按ESC键,返回主菜单。
按2键完毕找最大值(二选一)
1、接受顾客输入可显示字符串(以回车结束),程序将其中ASCII码值最大字符显示出来。
2、接受顾客输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大数显示出来。顾客按任一键,重做,按ESC键,返回主菜单。
按3键完毕排序(二选一)
1、接受顾客输入可显示字符串,以回车结束。程序按ASCII码值大小由大到小排序并输出显示。
2、接受顾客输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。程序将其中最大数显示出来。顾客按任一键,重做,按ESC键,返回主菜单。
按4键显示时间
一方面提示顾客对时,即顾客输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最佳定点显示。顾客按任一键,重新对时,按ESC键,返回主菜单。
按5键,结束程序运营,返回系统提示符。
流程图如下:
主程序流程
子程序一流程
子程序二流程
子程序三流程
子程序四流程
代码如下:
DATA SEGMENT
ORG 9999H
MENU DB 0DH,0AH,'Programed by Xue Chengdai Class four Grade 11',0DH,0AH, ;菜单
DB 'Please input 1~5 to choose service',0DH,0AH,
DB '1: Input an string.Then convert the small letter to big letter.' ,0DH,0AH,
DB '2: Find the character whose ASCII code is biggest',0DH,0AH,
DB '3: Sort the character by ASCII code by decreasing order.' ,0DH,0AH,
DB '4: Display the ticking time',0DH,0AH,
DB '5: End the program$'
MEG0 DB ' Please choose function$' ;提示信息MEG0~MEG8
MEG1 DB 'You have choose the function 1.',0DH,0AH,'Please input the character string you want to convert:$'
MEG2 DB 'You have choose the function 2.',0DH,0AH,'Please input the character string:$'
MEG3 DB 'You have choose the function 3.',0DH,0AH,'Please input the character string you want to sort$'
MEG4 DB 'You have choose the function 4.',0DH,0AH,'Please input the time you want to set in format like:xx:xx:xx$'
MEG5 DB 'The program is end$'
MEG6 DB 'Sorry.you have chosen a undefined function .Please input a correct function number$'
MEG7 DB 'Fail to set time$'
MEG8 DB 'Press any key to do again or press the ESC key to return to the main menu$ '
FLAG DB -1 ;冒泡排序中使用标志
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
start:
MAIN PROC NEAR ;主程序
MOV AX,DATA
MOV DS,AX
CIN:LEA DX,MENU ;输出提示信息
MOV AH,09H
INT 21H
CALL ENT ;输出回车换行
LEA DX,MEG0
MOV AH,09H
INT 21H
CALL ENT
MOV AH,01H
INT 21H
CMP AL,30H ;判断功能号
JLE EOR
CMP AL,31H
JE F1
CMP AL,32H
JE F2
CMP AL,33H
JE F3
CMP AL,34H
JE F4
CMP AL,35H
JE F5
EOR:CALL ENT
LEA DX,MEG6 ;输出出错信息
MOV AH,09H
INT 21H
JMP CIN
F1: CALL ENT ;功能1
LEA DX,MEG1
MOV AH,09H
INT 21H
CALL ENT
CALL FUN1 ;调用子程序1
MOV AH,01H
INT 21H
CMP AL,1BH
JNE F1
JMP CIN
F2: CALL ENT ;功能2
LEA DX,MEG2
MOV AH,09H
INT 21H
CALL ENT
CALL FUN2 ;调用子程序2
MOV AH,01H
INT 21H
CMP AL,1BH
JNE F2
JMP CIN
F3: CALL ENT ;功能3
LEA DX,MEG3
MOV AH,09H
INT 21H
CALL ENT
CALL FUN3 ;调用子程序3
MOV AH,01H
INT 21H
CMP AL,1BH
JNE F3
JMP CIN
F4: CALL ENT ;功能4
LEA DX,MEG4
MOV AH,09H
INT 21H
CALL ENT
CALL FUN4 ;调用子程序4
MOV AH,01H
INT 21H
CMP AL,1BH
JNE F4
JMP CIN
F5: MOV AH,4CH ;功能5,终结程序
INT 21H
FUN1 PROC NEAR
展开阅读全文