ccsu汇编语言与接口技术指导书Word格式文档下载.docx
《ccsu汇编语言与接口技术指导书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《ccsu汇编语言与接口技术指导书Word格式文档下载.docx(36页珍藏版)》请在冰点文库上搜索。
A'
将'
的ASCII码填入内存。
3、用命令D10010F观察内存中的十六进制码及屏幕右边的ASCII字符。
4、用命令F11011F41重复上二项实验,观察结果并比较。
5、用命令E100303132……3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的十六进制数是什么字符的ASCII码?
6、用H命令检查下列各组十六进制数加减结果并和你的手算结果比较:
(1)34H,22H
(2)56H,78H(3)A5,79H(4)1284H,5678H(5)A758H,347FH
7、用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
8、用R命令将AX,BX内容改写为1050H及23A8H。
四、8088常用指令练习
1、传送指令
1)用A命令在内存100H处键入下列内容:
-A0100↙
****:
0100MOVAX,1234↙
0103MOVBX,5678↙
0106XCHGAX,BX↙
0108MOVAH,35↙
010AMOVAL,48↙
010DMOVDX,75AB↙
010FXCHGAX,DX↙
0111↙
-
注:
****为段寄存器CS的值,是由计算机随机产生的;
↙为回车操作。
2)用U命令检查键入的程序并记录,特别注意左边的机器码。
-U0100↙
3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
-T=0100↙
-T↙
┇
2、加减法指令:
1)用A命令在内存100H处键入下列内容:
MOVAH,34
MOVAL,22
ADDAL,AH
SUBAL,78
MOVCX,1284
MOVDX,5678
ADDCX,DX
SUBCX,AX
SUBCX,CX
2)用U命令检查键入的程序及对应的机器码。
3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。
思考:
这次运行还是键入T,行不行?
怎么办?
用R命令检查一下IP的内容。
注意T命令与IP的关系。
3、带进位加减法:
1)用A命令在内存200H处键入下列内容,并用U命令检查:
MOVAH,12
MOVAL,84
MOVCH,56
MOVCL,78
ADDAL,CL
ADCAH,CH
MOVDH,A7
MOVDL,58
SUBDL,7F
SBBDH,34
2)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。
3)上面这段程序若改用16位操作指令达到同样结果,怎么改?
试修改并运行之。
4、BCD码加减法
1)内容:
MOVAL,58
ADDAL,25
DAA
2)要求:
用A命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。
实验报告要求
1、十六进制数加减法手算结果及实验结果
2、8088常用指令练习部分的逐条运行记录,思考结果及自编程序运行记录(列出自编程序)。
附:
动态调试器DEBUG使用
1、键入DEBUG进入DEBUG,显示提示符'
-'
2、退出DEBUG命令:
Q
3、显示内存命令:
D起始地址结束地址
4、修改内存命令:
E起始地址,连续修改键入空格键,键入回车键退出E命令。
5、检查寄存器命令:
R
6、修改寄存器命令:
R寄存器名
7、小汇编命令:
A起始地址,不输入指令键入回车键退出A命令。
8、反汇编命令:
U起始地址结束地址
9、文件命名命令:
N盘号:
文件名
10、读文件命令:
L内存地址
11、写文件命令:
W内存地址
10、读扇区命令:
L内存地址盘号(0--A:
1--B:
)扇区号扇区数
11、写扇区命令:
W内存地址盘号扇区号扇区数
12、运行命令:
G=起始地址结束(断点)地址
13、单步命令:
T=起始地址运行指令数,进入子程序内部。
14、单步命令:
P=起始地址运行指令数,不进入子程序内部。
15、内存搬家命令:
M起始地址结束地址目的地址
16、十六进制数加法:
H数值数值
表1标志寄存器显示内容一览表
标志位显示
1
CF
CY
NC
ZF
ZR
NZ
SF
NG
PL
AF
AC
NA
OF
OV
NV
PF
PE
PO
DF
DN
UP
IF
EI
DI
实验二内存操作数及寻址方法
1、DEBUG命令:
G,N,W,L及Q。
2、8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。
3、8088指令:
INC,DEC,LOOP,INT3,INT20H,寄存器SI,DI。
4、8088汇编语言伪操作:
BYTEPTR,WORDPTR。
5、求累加和程序和多字节加减法程序。
实验内容和步骤
一、内存操作数及各种寻址方式使用
程序内容:
MOVAX,1234
MOV[1000],AX
MOVBX,1002
MOVBYTEPTR[BX],20
MOVDL,39
INCBX
MOV[BX],DL
DECDL
MOVSI,3
MOV[BX+SI],DL
MOV[BX+SI+1],DL
MOVWORDPTR[BX+SI+2],2846
操作步骤
1)用A命令键入上述程序,并用T命令逐条运行。
2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。
注意D命令显示结果中右边的ASCII字符及双字节数存放法。
有关指令中BYTEPTR及WORDPTR伪操作不加行不行?
试一试。
二、求累加和程序:
程序内容:
MOVBX,1000
MOVCX,10
SUBAX,AX
LOP:
ADDAL,[BX]
ADCAH,0
J:
LOOPLOP
INT3
操作步骤:
1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。
2)用命令NAA将此程序命名为文件AA(文件名可任取)。
3)用R命令将BX:
CX改为程序长度值(即最后一条指令后面的地址减去开始地址)。
4)用命令W100将此程序存到AA命名的磁盘文件中。
5)用命令Q退出DEBUG。
6)用命令DEBUGAA再次调入DEBUG和文件AA,可用U命令检查调入程序。
若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。
7)用E命令在内存地址1000H处键入16个数字
8)用命令G=100J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值。
9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错。
10)重复GJ与T,再检查AX是否正确。
11)用G命令使程序运行到结束,检查AX值是否正确。
三、多字节加法程序。
MOVDI,1000
MOVCX,8
MOVSI,2000
CLC
MOVAL,[SI]
ADC[DI],AL
INCSI
INCDI
LOOPLOP
INT20
1)用命令键入此程序。
2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。
3)用G命令运行此程序,并用D命令检查其结果(存放在哪里?
),是否正确?
4)将INT20H指令改为INT3,有何区别?
若这条指令不加,行不行?
四、自编程序
用16位减法指令编一个32位(4字节)数减法程序,两个源数及结果存放地址同上题。
调试并做记录。
1、各项实验结果记录。
2、自编程序原稿及调试后修正稿,写出原稿错在那里。
实验三汇编语言程序上机过程
1、掌握常用工具软件EDIT,MASM和LINK的使用。
2、伪指令:
SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。
3、了解.EXE文件和.COM文件的区别及用INT21H4C号功能返回系统的方法。
实验内容
1、编写源程序,向内存地址0:
200-0:
23f依次传送0-63(3FH)
2、补全下面的程序,实现将“movax,4c00h”之前的指令复制到内存0:
200h。
上机调试,并跟踪运行结果。
assumecs:
code
codesegment
movax,()
movds,ax
movax,0020h
moves,ax
movbx,0
movcx,()
s:
moval,[bx]
moves:
[bx],al
incbx
loops
movax,4c00h
int21h
codeends
end
实验步骤
1、用用文字编辑工具(常用EDIT或记事本)将源程序输入,其扩展名为.ASM。
2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
3、用LINK将.OBJ文件连接成可执行的.EXE文件。
5、在DOS状态下运行LINK产生的.EXE文件,并用DEBUG调试程序。
实验报告
1、汇编,连接及调试时产生的错误,其原因及解决办法。
实验四分支程序
1、掌握利用间接转移指令JMPBX实现多岔分支的方法。
2、宏替换指令MACRO及ENDM。
3、符号扩展指令CBW。
DISPMACROMSG
LEADX,MSG
MOVAH,9
INT21H
MOVAH,4CH
ENDM
STACKSEGMENTSTACK
DB256DUP(0)
STACKENDS
DATASEGMENT
PARMDB16DUP(?
)
BRTABLEDWOFFSETBRA,OFFSETBRB,OFFSETBRC
DWOFFSETBRD,OFFSETBRE,OFFSETBRF
MSGADB'
ILIKEMYIBM-PC!
$'
MSGBDB'
HOWAREYOU!
MSGCDB'
NIBAOCOLLEGE$'
MSGDDB'
THISISASAMPLE$'
MSGEDB'
WELLCOMEUSEMYCOPUTER!
MSGFDB'
THEASSEMBLERLANGUAGEOF8088$'
ERRMSDB'
ERROR!
!
INVALIDPARAMETER!
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVES,AX
MOVSI,80H
LEADI,PARM
MOVCX,16
CLD
REPMOVSB
MOVDS,AX
CMPPARM,2
JCERR
MOVAL,PARM+2
SUBAL,30H
CMPAL,6
JNCERR
LEABX,BRTABLE
CBW
ADDAX,AX
ADDBX,AX
JMP[BX]
ERR:
DISPERRMS
BRA:
DISPMSGA
BRB:
DISPMSGB
BRC:
DISPMSGC
BRD:
DISPMSGD
BRE:
DISPMSGE
BRF:
DISPMSGF
CODEENDS
ENDSTART
1、输入并汇编此程序。
要求生成一个.LST文件。
用TYPE命令检查.LST文件,观察宏替换命令产生的指令集。
2、将OBJ文件连接成EXE文件(假设为AA.EXE)。
3、用命令DEBUGAA.EXEXXX(XXX为任意字符串)将AA.EXE带参数调入DEBUG用D命令观察DS:
0080处的命令行,记录80H处的内容和字符个数的关系。
4、退出DEBUG。
直接带参数运行此程序:
AAn(n=0--5)
依次观察并记录n从0到5时的运行结果。
实验五子程序
1、掌握利用堆栈传递参数的子程序调用方法。
2、掌握子程序递归调用方法。
3、过程调用伪指令:
PROC,ENDP,NEAR和FAR。
4、8088指令:
CALL,RET,RETn。
5、利用RET指令退出EXE文件的方法。
实验内容及步骤
一、利用堆栈传递参数的子程序调用(求累加和)
ARY1DB1,2,3,4,5,6,7,8,9,10
COUNT1EQU$-ARY1
SUM1DW?
ARY2DB10,11,12,13,14,15,16,17,18
COUNT2EQU$-ARY2
SUM2DW?
MAINSEGMENT
MAIN,DS:
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVAX,COUNT1
LEAAX,ARY1
CALLFARPTRSUM
MOVAX,COUNT2
LEAAX,ARY2
RET
STARTENDP
MAINENDS
PROCESEGMENT
PROCE
SUMPROCFAR
MOVBP,SP
MOVCX,[BP+6]
MOVBX,[BP+4]
ADN:
LOOPADN
MOV[BX],AX
RET4
SUMENDP
PROCEENDS
1、输入,汇编并将此程序连接成EXE文件。
2、用DEBUG的断点命令和T命令运行此程序,观察并记录每次过程调用及进出栈指令前后(带'
;
'
的语句)的SP和堆栈内容。
3、记录最后结果:
SUM1,SUM2的段及偏移地址和它们的内容。
二、子程序递归调用(求阶乘)
DB100HDUP(?
RESULDW?
MAINPROCFAR
PUSHDS
MOVAX,5
CALLFACT
MOVRESUL,AX
FACTPROC
ANDAL,AL
JNEIIA
MOVAL,1
IIA:
PUSHAX
DECAL
X2:
POPCX
MULCL
FACTENDP
MAINENDP
1、将程序输入,汇编并连接成EXE文件。
2、用DEBUG的断点和T命令检查并记录每层递归嵌套过程的堆栈和AL内容。
3、修改源程序,将阶乘数5改为本程序的最大允许值(是多少?
),重新汇编连接之。
用DEBUG运行并记录RESUL单元内容。
4、若要在DOS命令下直接运行并显示阶乘结果(十六进制形式),试修改程序并调试运行。
(机动)
1、实验记录。
2、自编程序。
3、体会和意见。
实验六8/16位存储器扩展实验
(1)学习静态存储器操作原理。
(2)学习8/16位存储器接口电路设计。
(3)掌握不同总线宽度访问存储器的编程方法。
实验设备
PC微机一台、TD-PITC实验系统一套。
在系统总线上分别进行16位存储器扩展和8位存储器扩展连接。
编写程序,将PC机内存中的一段数据传送至扩展的存储器中。
并进行规则和不规则字读写操作以及不同的总线字节访问宽度指令操作,调试程序并分析总线时序的区别。
实验原理
1.SRAM62256介绍
存储器是用来存储信息的部件,是计算机的重要组成部分,静态RAM是由MOS管组成的触发器电路,每个触发器可以存放1位信息。
只要不掉电,所储存的信息就不会丢失。
因此,静态RAM工作稳定,不要外加刷新电路,使用方便。
但一般SRAM的每一个触发器是由6个晶体管组成,SRAM芯片的集成度不会太高,目前较常用的有6116(2K×
8bits),6264(8K×
8bits)和62256(32K×
8bits)。
62256SRAM有32768个存储单元,每个单元为8位字长。
62256的引脚如图6-1所示。
图6-162256引脚图
2.16位存储器操作
系统总线为准32位数据总线,具有16位外部数据线,即D0、D1、…、D15,地址总线为BHE#(#表示该信号低电平有效)、BLE#、A1、A2、…、A20。
存储器分为奇体和偶体,分别由字节允许线BHE#和BLE#选通。
存储器中,从偶地址开始存放的字称为规则字,从奇地址开始存放的字称为非规则字。
处理器访问规则字只需要一个时钟周期,BHE#和BLE#同时有效,从而同时选通存储器奇体和偶体。
处理器访问非规则字却需要两个时钟周期,第一个时钟周期BHE#有效,访问奇字节;
第二个时钟周期BLE#有效,访问偶字节。
处理器访问字节只需要一个时钟周期,视其存放单元为奇或偶,而BHE#或BLE#有效,从而选通奇体或偶体。
写规则字和非规则字的简单时序图如图6-2所示。
图6-2写规则字(左)和非规则字(右)简单时序图
3.8位存储器操作
在16位数据总线上可以进行8位存储器的操作,允许CPU用字节指令进行访问。
这样的操作相当于16位总线上高位字节不访问。
奇体存储器的数据线不用连接,字节使能始终是BLE#有效,2字节空间只访问最低的1个字节。
实验说明及步骤
实验系统的存储器空间共有2MB,偏移为000000H~1FFFFFH。
起始地址由PC机系统分配(如D9000000H~D91FFFFFH),可以通过运行CHECK程序查看到。
分配的存储器寻址空间远超出1MB,在实地址模式下无法操作,需要在CPU的保护模式下操作。
所以实验程序要按照保护模式程序结构编写,在保护模式调试集成软件Tddebug上运行。
程序流程如图6-3所示(a图表示16位存储器操作,b图表示8位存储器操作)。
实验接线如图6-4所示。
实验步骤如下。
(1)确认从PC机引出的两根扁平电缆已经连接在实验平台上。
(2)启动纯DOS环境,进入Tddebug软件所在的安装目录。
执行CHECK程序,查看存储器空间始地址并记录。
(3)运行Tddebug集成操作软件。
操作Alt+E进入程序编辑环境。
利用查出的地址编写16位及8位存储器操作的程序,然后编译链接。
(4)参考图6-4所示连接实验线路,8位操作时不用连接XD8~XD15。
(5)操作Alt+P进入保护模式调试环境,根据程序中的设计用D命令分别查看源数据区和实验单元存储器中的数据
图6-3存储器扩展实验参考程序流程图
图6-416位存储器扩展实验参考接线图
(6)按F9运行程序或按F7单步执行到结束,再用D命令查看存储器单元中的数据,观察数据写入是否正确。
(7)将程序改为非规则字写入操作,再调试程序,观察存储器中数据的变化,分析写入字的排列规则以及总线操作时序的原理。
程序附录:
;
*******************************************************************************************
8位存储器扩展实验(8位宽度访问)
.386P
***************根据CHECK配置信息修改下列符号值*******************
MY0_HEQU0E1H;
片选MY0起始地址的最高位字节
MY0_MEQU00H;
片选MY0起始地址的次高位字节
MY0_LEQU0000H;
片选MY0起始地址的低两位字节
*****