测控微机原理与接口实验指导罗小燕Word文件下载.docx
《测控微机原理与接口实验指导罗小燕Word文件下载.docx》由会员分享,可在线阅读,更多相关《测控微机原理与接口实验指导罗小燕Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
如果程序有错误,则在编译过程中有错误提示(错误行和错误原因),改正后再保存,重新编译,直到编译成功为止。
第三步:
点击“运行”,在下拉菜单中选择“DEBUG调试”,在调试状态下,依次输入单步指令T,观察各寄存器和标志寄存器的内容的变化。
2.学习使用Debug的各种命令
DEBUG是一种专门为分析和调试汇编语言程序而设计的一种调试工具。
它能使程序设计者接触到机器内部,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容、装入或显示、修改任何文件、完成磁盘读写等多种功能。
经常用到的DEBUG指令有:
(1)单步执行命令T(也叫跟踪命令)
格式:
T[N]];
(N小于等于6)
从CD:
IP开始执行程序,每执行1或(N)条停下来。
执行后都将显示各寄存器的内容、标志位的状态、本条指令的CS:
IP地址,本条指令的机器码和下一条要执行的指令。
如在EX11.EXE程序中,第一条指令为ASART开始的MOVAX,DATA,执行了T后,显示:
还可以连续执行几条,如T6,结果如下:
(超过6,将显示不下)
(2)显示、修改寄存器命令R
R[寄存器名]
若缺省寄存器名,则显示当前所有寄存器内容、状态标志及将要执行的下一条指令的地址、及其指令代码及汇编语句形式等。
如R
若给出寄存器名称,则显示该寄存器的内容并可进行修改。
如:
RAX
(3)显示内存单元内容命令D
D[段地址:
偏移地址]
DES:
0,将显示ES:
0000~0070共128个单元的内容。
屏幕左边为每行的首地址(段:
偏移量)。
中间为从指定地址开始的128个内存单元的内容,用十六进制的格式输出,右边为内存单元中的数据对应的相应可显示的ASCII码字符。
没有对应的ASCII码就用.来代替。
(4)修改存储单元命令E
格式1:
E[地址]
可以逐个修改制定地址单元的当前内容,如:
E1000:
0F
在下图中,先用D查看1000:
0~F单元的内容,再用E修改从1000:
0开始的10个单元的内容,最后用D查看变化。
格式2:
E[地址][字符串]
格式3:
E[地址][机器码]
还可以用E命令将机器码写入内存,如从内存1000:
0单元写入一段机器码,然后用D命令查看刚才写入的内容。
机器码对应的汇编指令
B80100movax,0001
B90200movcx,0002
01c8addax,cx
(5)反汇编命令U
U[起始地址]
如用U1000:
0可将1000:
0开始的内存单元的内容翻译为汇编指令,并显示出来。
(6)汇编命令A
格式:
A[起始地址]可以按住ctrl+c键退出汇编命令
在当前地址开始键入汇编语言语句,并能把它们汇编成机器代码,相继存放在从指定地址开始的存储区中。
即用汇编指令的格式在指定内存中写入机器指令。
(7)填入命令F
F地址范围内容
F1234:
091,2,3,4,5,6,7,8,9将1234:
0开始9个单元的内容填入指定内容,可以用D命令观察结果。
(8)退出命令Q
Q退出DEBUG,回到DOS状态,但无存盘功能。
4.完成以下实验任务
(1)分别使用E命令和A命令两种方式将下面的程序段写入内存1000:
0中,逐条执行,观察每条指令执行后CPU中相关寄存器的变化。
提示:
注意CS:
IP的指向。
机器码汇编指令
B8204emovax,4e20
051614addax,1416
Bb0020movbx,2000
01d8addax,bx
(2)用D命令查看DS:
0010-002f和F000:
0010-002F两内存块内容,用F命令将字符“A”分别填入这两个内存块,比较填入前后结果,了解可读写内存RAM和只读内存ROM的区别。
三.实验报告要求
1.总结T、R、D、E、U、A等命令的含义。
2.写出合适的DEBUG命令,完成任务
(1),
(2),观察产生的现象,说明可读写内存RAM和只读内存ROM的区别。
3.写出实验小结,内容包括实验心得(收获)、不足之处或今后应注意的问题等。
实验2寻址方式与基本指令
1.掌握指令中源操作数的寻址方式的判断。
2.掌握状态标志寄存器各标志位在DEBUG中的显示形式。
3.掌握80x86指令的正确用法。
1.学习状态标志寄存器各标志位在DEBUG中的显示形式
顺序
标志位名字
置位=1
复位=0
1
OF溢出(有/无)
OV
NV
2
DF方向(减/增)
DN
UP
3
IF中断(允许/屏蔽)
EI
DI
4
SF符号(负/正)
NG
PL
5
ZF零(是/否)
ZR
NZ
6
AF辅助进位((有/无)
AC
NA
7
PF奇偶(偶/奇)
PE
PO
8
CF进位(有/无)
CY
NC
2.将下列源程序汇编为EX11.EXE文件,使用DEBUG的T命令执行,并回答以下问题。
(1)代码段第一条可执行指令MOVAX,DATA对应的机器代码为H,它是一个字节指令。
(2)执行完MOVDS,AX指令后,数据段寄存器DS的内容为H,源程序在数据段中定义的数据82H、68H和88H被装入的存储单元的物理地址分别为
H、和H。
(3)程序中第一条ADDAL,[BX]指令是一个字节指令,该操作数所在存储单元的逻辑地址(DS):
(BX)为,其物理地址为H;
执行完该指令后(AL)=H,CF=,OF=,ZF=,SF=,AF=,PF=。
(4)执行完第二条ADDAL,[BX]指令后(AL)=H,CF=,OF=,ZF=,SF=,AF=,PF=。
(5)指令MOVSUM,AL执行完后,注意观察(DS):
0003H单元中值的变化,该单元的值变为H。
3.将下列源程序汇编为EX12.EXE文件,使用DEBUG的T命令执行,并回答以下问题。
STACKSEGMENT
STLDW100HDUP(?
)
STACKENDS
ASSUMECS:
CODE,SS:
STACK
START:
MOVAX,STACK
MOVSS,AX
MOVSP,LENGTHSTL
MOVAX,0101101100001010B
MOVBX,0100110010100011B
PUSHAX
PUSHBX
ADDAX,BX
POPAX
POPBX
ANDAX,BX
MOVAH,4CH
ENDSTART
(1)代码段的前三条指令MOVAX,STACK、MOVSS,AX和MOVSP,LENGTHSTL的功能为堆栈初始化,试问执行完这三条指令后,堆栈的栈底所在单元的逻辑地址(SS):
(SP)为;
执行PUSHAX指令后堆栈指针寄存器(SP)=H,此时,(SS):
(SP+1)和(SS):
(SP)单元的值为H;
执行完PUSHBX后
(SP)=H,此时,(SS):
执行完POPAX后(SP)=H;
执行完POPBX后(SP)=H;
此时(AX)=H,(BX)=H。
(2)执行ADDAX,BX指令后(AX)=H,CF=,OF=______,ZF=______,SF=______,AF=______,PF=______;
(3)执行ANDAX,BX指令后(AX)=H,CF=,OF=,ZF=,SF=,AF=,PF=。
四.实验报告要求
1.简要说明DEBUG的单步执行命令T的作用。
2.写出实验内容中任务2和任务3中所有问题的正确答案。
3.写出实验小结,内容包括实验心得(收获)、不足之处或今后应注意的问题等。
实验3汇编语言的调试与运行
1.掌握80x86指令的正确用法。
2.掌握堆栈指令的寻址方式及执行结果。
1.学习书第110页例4.4,将程序补充完整,使用DEBUG命令调试之。
例4.4:
内存数据段存放了5个带符号数,首地址为TAB1,要求将各数取绝对值后存入以TAB2为首址的内存区。
程序片段如下:
LEASI,TAB1;
(SI)←源地址指针
LEADI,TAB2;
(DI)←目标地址指针
MOVCX,5;
(CX)←循环次数
CHECK:
MOVAL,[SI];
取一个带符号数到AL
ORAL,AL;
AL内容不变,但使之影响标志
JNSNEXT;
若(SF)=0,则转NEXT
NEGAL;
否则求补
NEXT:
MOV[DI],AL;
传送到目标地址
INCSI;
源地址加1
INCDI;
目标地址加1
DECCX;
循环次数减1
JNZCHECK;
如不等于零,则转CHECK
补充数据段和部分代码段。
使用DEBUG的D命令观察程序的准确性。
2.将下列指令汇编成为程序EX14.EXE,上机运行,观察指令执行后寄存器的内容。
MOVSP,2000H
MOVAX,3000H
MOVBX,5000H
PUSHAX
PUSHBX
POPAX
执行后(SP)=H,(AX)=H,(BX)=H
3.读懂下列程序,在横线上分别填入
(1)LOOPAGAIN
(2)LOOPEAGAIN
(3)LOOPNEAGAIN
指出程序执行后,AX,BX,CX,DX的内容。
CODESEGMENT
ASSUMECS:
CODE
MOVAX,1
MOVBX,2
MOVDX,3
MOVCX,4
AGAIN:
INCAX
ADDBX,AX
SHRDX,1
MOVAH,4CH
INT21H
CODEENDS
ENDSSTART
三.实验报告要求
1.写出实验内容1,2,3中所有问题的正确答案。
2.写出实验小结,内容包括实验心得(收获)、不足之处或今后应注意的问题等。
实验4DOS系统功能调用
1.掌握DOS系统功能调用中关于字符及字符串的输入输出方法。
2.掌握汇编语言程序设计的方法。
3.进一步掌握调试工具DEBUG的使用方法。
1.INT21H的DOS功能调用中关于基本字符、字符串输入和输出功能的主要有4种。
(1)显示字符(02H号功能)
MOVDL,<
欲显示的字符的ASCII>
MOVAH,02H
功能:
将置入DL寄存器中的字符(ASCII码)送屏幕显示。
(2)显示字符串(09H号功能)
MOVAX,SEG<
欲显示的字符串的首地址>
MOVDS,AX
LEADX,<
欲显示字符串的地址>
MOVAH,09H
功能:
将指定内存缓冲区中的字符串在屏幕上显示出来,缓冲区的字符串应以“$”为结束标志。
2.学习书上第135页例4.15,将程序补充完整,并运行,观查结果。
例4.15:
在包含10个字符的字符串中寻找第一个回车符CR(其ASCII码为0DH),找到后将其地址保留在(ES:
DI)中,并在屏幕上显示字符'
Y'
。
如果字符串中没有回车符,则在屏幕上显示字符'
N'
该字符串的首地址为STRING。
LEADI,STRING;
(DI)←字符串首址
MOVAL,0DH;
(AL)←回车符
MOVCX,10;
(CX)←字符串长度
CLD;
清状态标志位DF
REPNESCASB;
如未找到,重复扫描
JZMATCH;
如找到,则转MATCH
MOVDL,'
;
字符串中无回车,则(DL)←'
JMPDSPY;
转到DSPY
MATCH:
DECDI;
(DI)←(DI)−1
MOVDL,'
;
(DL)←'
DSPY:
MOVAH,02H
INT21H;
显示字符
补充附加数据段和部分代码段。
3.学习书上第111页例4.5,将程序补充完整,并将大数显示出来。
例4.5在数据段从MYDATA开始的存储单元中分别存放了两个8位无符号数,试比较它们的大小,并将大者传送到MAX单元。
LEABX,MYDATA;
MYDATA偏移地址送BX
MOVAL,[BX];
第一个无符号数送AL
INCBX;
BX指向第二个无符号数
CMPAL,[BX];
两个数比较
JNCDONE;
如CF=0,则转DONE
MOVAL,[BX];
否则,第二个无符号数送AL
DONE:
MOVMAX,AL;
较大的无符号数送MAX单元
将一位BCD数转换为ASCII码后才能被显示。
4.完成书后练习,214页第11题,运行,观查结果。
练习4.11:
试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NOMATCH”。
三.实验报告要求
1.完成实验内容2,3,4,写出完整程序和结论。
2.写出实验小结,内容包括实验心得(收获)、不足之处或今后应注意的问题等。