汇编实验指导Word文档下载推荐.docx
- 文档编号:17219700
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:60
- 大小:277.89KB
汇编实验指导Word文档下载推荐.docx
《汇编实验指导Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汇编实验指导Word文档下载推荐.docx(60页珍藏版)》请在冰豆网上搜索。
举例:
Ø
命令:
A含义:
从默认地址输入汇编指令;
A1000:
20含义:
从地址为1000H:
20H的单元输入汇编指令;
ACS:
1000含义:
从CS段的1000H单元输入汇编指令;
(2)反汇编命令U
格式1:
U[起始地址]
格式2:
U[起始地址][结束地址|字节数]
格式1从指定起始地址处开始将32个字节的目标代码(非32条指令)转换成汇编指令形式,如果省略起始地址,则从当前CS:
IP指向地址开始反汇编、或接着上次U命令继续反汇编。
格式2将指定范围的内存单元中的目标代码转换成汇编指令。
注意,这里的反汇编是以指令为单位进行显示。
界面说明:
界面左边:
以逻辑地址形式显示每条汇编指令所在存储单元的首单元地址;
界面中间:
每条汇编指令对应的机器指令代码;
界面右边:
处理了符号之后的汇编指令;
U含义:
查看默认地址的汇编指令,默认条数;
U0含义:
从0地址查看汇编指令,默认CS段;
U050含义:
查看地址0到50H的汇编指令,默认CS段;
地址范围要确认该范围中所有指令都是完整的。
UDS:
0含义:
将DS:
0地址中的内容当作指令,查看默认条数;
(3)显示、修改寄存器命令R
R[寄存器名]
如果给出寄存器名,则显示该寄存器的内容并可进行修改。
如果不指定寄存器名,则显示所有寄存器的内容及当前值(不能修改)。
R命令只能显示、修改16位寄存器,对于标志寄存器只能通过执行指令的方式修改。
界面中间两行:
显示各寄存器内容;
先显示13个寄存器的值;
后面的8个符号分别表示OF、DF、IF、SF、ZF、AF、PF、CF标志位的状态,符号含义如下表:
标志位
OF
DF
IF
SF
ZF
AF
PF
CF
置位符号
(1)
OV
DN
EI
NG
ZR
AC
PE
CY
复位符号(0)
NV
UP
DI
PL
NZ
NA
PO
NC
界面最后一行:
显示下一条将要执行的指令;
若指令中有存储单元寻址方式的操作数,则指令后显示该操作数的地址和数值;
R含义:
查看所有寄存器内容;
Rax含义:
查看寄存器AX中的内容,并可修改;
(4)显示存储单元命令D
D[起始地址]
D[起始地址][结束地址|L字节数]
格式1从起始地址开始按十六进制显示128个单元的内容,每行16个单元,共8行。
格式2显示指定范围内存储单元的内容,其他显示方式与格式1一样。
如果省略起始地址或地址范围,则从当前的地址开始按格式1显示。
以逻辑地址形式显示指定的或默认的存储单元地址;
存储单元中的实际存放内容,每一行显示16个单元,每个单元存放一个字节数据;
存储单元中值的对应的ASCII码字符;
若存储单元中存放的是不可显示的ASCII码值,则显示“.”;
例如:
-D200;
表示从DS:
0200H开始显示128个单元内容
-D100120;
表示显示DS:
0100-DS:
0120单元的内容
说明:
在DEBUG中,地址表示方式有如下形式:
段寄存器名:
相对地址,如:
DS:
100
段基值:
偏移地址(相对地址),如:
23A0:
1500
D含义:
默认查看;
D1000:
0含义:
从指定单元查看数据,默认长度;
DDS:
从指定单元查看DS段中的数据,默认长度;
D05含义:
查看DS段中0~5单元中的6个数据;
D10L5含义:
查看DS段中从10H开始的连续5个单元内容;
(5)修改存储单元命令E
E[起始地址][内容表]
E[地址]
格式1按内容表的内容修改从起始地址开始的多个存储单元内容,即用内容表指定的内容来代替存储单元当前内容。
—EDS:
0100'
VAR'
1234
0100为起始单元的连续五个字节单元内容依次被修改为
'
V'
、'
A'
R'
、12H、34H。
格式2是逐个修改指定地址单元的当前内容。
如:
0010
156F:
001041.5F
其中156F:
0010单元原来的值是41H,5FH为输入的修改值。
若只修改一个单元的内容,这时按回车键即可;
若还想继续修改下一个单元内容,此时应按空格键,就显示下一个单元的内容,需修改就键入新的内容,不修改再按空格跳过,如此重复直到修改完毕,按回车键返回DEBUG“-”提示符。
如果在修改过程中,将空格键换成按“-”键,则表示可以修改前一个单元的内容。
E100
含义:
查看DS段中100H单元起始的存储单元内容,并可随时修改;
EES:
1013120
将ES段中地址为10H~12H的3个单元中的值修改为1、31H、20H;
E10‘ABCD’
将DS段中地址10H~13H的连续4个单元内容修改为41H~44H;
(6)运行命令G
G[=起始地址][断点地址]
CPU从指定起始地址开始执行,在断点地址处停止,即断点地址中的指令不执行。
若省略起始地址,则从当前CS:
IP指示地址开始执行一条指令。
注意,断点地址必须是某一条指令的起始地址,否则查看到的程序有可能会出错。
G含义:
从当前位置连续执行程序,到结束;
G=0含义:
从0地址连续执行程序,到结束;
G14含义:
从当前位置执行程序到14H,中断;
G=320含义:
从地址3执行程序到地址20H,中断;
(7)跟踪命令T
T[=起始地址][指令条数]
从指定地址开始执行指定条数的指令,若省略指令条数,则默认执行一条指令,若省略起始地址,则从当前CS:
IP指示地址开始执行。
T含义:
从当前位置单步执行1条指令;
T3含义:
从当前位置单步执行3条指令;
T=0含义:
从0地址单步执行1条指令;
T=42含义:
从4地址单步执行2条指令;
(8)退出命令Q
Q
退出DEBUG,返回到操作系统。
三、PC机汇编语言程序设计实验步骤
⑴编辑源程序文件
使用EDIT文本编辑器编辑源文件,键入
EDIT<
源文件名.ASM>
或EDIT
但使用后者时应注意将文件保存为.ASM文件。
⑵汇编连接源程序文件
ML<
如果源程序没有错误,则自动生成.OBJ文件和.EXE可执行文件。
若源程序有语法错误时,会出现错误信息提示,需回到编辑状态下修改源程序后重新汇编。
⑶运行程序
经过汇编、连接后生成的.EXE文件,可直接运行,只要键入相应的文件名即可。
⑷调试程序:
使用DEBUG调试前面生成的可执行的.EXE文件。
各种DEBUG命令如前所述。
四、实验报告书写要求
⑴使用专用的实验报告纸,每个实验一份,字迹工整,内容清晰,注意填写必要的信息(如:
姓名、学号、班级、辅导教师、同实验者);
⑵填写实验题目、实验目的等;
实验步骤中要求列出当次实验的过程及各种数据输入输出的情况;
汇编语言程序设计部分还要写出完整的源程序,以及上机调试过程中遇到的问题和解决方法。
预备实验一DEBUG命令练习
实验目的
1、熟悉汇编语言程序的编写、汇编、运行的一般过程;
2、掌握常用的DEBUG命令,并可应用于汇编语言程序调试过程中。
实验内容
1、使用给定程序练习汇编语言程序的编辑、汇编、执行、调试的过程;
2、在DEBUG状态下,练习常用的DEBUG命令调试给定程序。
实验学时
本实验内容共用4学时,分两次实验完成。
实验步骤
1、汇编语言程序的编辑、汇编、执行练习
(1)建立汇编语言程序源文件
使用DOS或Windows下的任何文本编辑器来建立汇编语言程序源文件,建议使用记事本,文件后缀名应保存为“.asm”(请注意不要隐藏已知后缀名)。
将如下程序代码保存为“test.asm”的源文件。
程序功能:
在屏幕上显示CHAR变量所定义的字符。
程序代码:
DATASEGMENT
CHARDB‘F’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDL,CHAR
MOVAH,2
INT21H
MOVAX,4C00H
CODEENDS
ENDSTART
(2)汇编源程序,生成可执行文件
在保证工作目录下存在ml.exe文件和link.exe文件时,可直接对汇编语言源程序进行汇编连接,使用的命令如下(以test.asm文件名为例):
mltest.asm
若源程序无语法和逻辑错误,即可汇编连接成功,同时生成目标文件test.obj和可执行文件test.exe。
当源程序中存在语法错误时,汇编连接不会进行。
若工作目录下存在ml.err文件,则会显示包含错误存在行的提示信息,程序员可以依次来判断错误所在。
图1test.asm文件的汇编过程
注意:
该命令中源文件的后缀名一定不可省去,否则会提示无法找到源文件。
本程序中常出现的错误:
①第2行出错:
源程序第2行中的“CHARDB‘F’”单引号改为英文状态,如图2中的第一行错误“invalidcharacterinfile”;
该错误会导致第三行的错误“undefinedsymbol”,即CHAR定义语句写错,导致程序中使用CHAR变量时无法找到。
②第11行出错:
源程序第11行中的“MOVAX,4C00H”,将数字“00”写成了字母“oo”;
该错误会导致如图2中的第二行错误“nondigitinnumber”,即该使用数值中没有找到数字。
③找不到源文件:
源文件不在当前操作的目录下;
或者文件名用错了。
图2错误信息
(3)执行程序,查看结果
在DOS命令行下,运行生成的可执行文件,命令为:
test.exe
该命令中,文件的后缀名可省去。
若程序有输入输出内容,则会在DOS命令行下看到结果。
若程序没有输入输出内容,则只能进入DEBUG状态下查看程序的运行结果。
2、DEBUG命令练习
将上面生成的可执行文件test.exe文件调入DEBUG进行调试,使用的命令是:
debugtest.exe
注意,这里调入的是可执行文件,后缀名必须加。
进入DEBUG下,命令提示符是“-”,可以使用各种DEBUG命令调试。
这里建议使用以下命令查看,注意以下命令是进入DEBUG后连续执行的结果,单独使用可能无法得到预期效果。
(1)反汇编命令U
当调入程序文件后,直接使用无参数的U命令可从第一条指令开始查看当前的程序代码。
屏幕显示的内容是:
默认从第一行代码开始显示,共反汇编32个单元的指令(指令条数依据指令长度而不同,以整条指令为单位)。
请注意查看DEBUG状态下的指令与源文件中的指令有何不同。
(2)寄存器查看命令R
直接使用无参的R命令可查看当前各寄存器状态,由于程序还未执行,可以看到寄存器的状态为初始的随机值。
请注意当前CS:
IP寄存器的内容与上一步U命令看到的指令地址是一致的,但DS、ES等段寄存器则为初始的随机值。
(3)查看存储单元命令D
直接使用无参数的D命令,显示存储单元内容。
应注意区分的是:
当前查看到的是从DS:
0地址开始的连续128个单位的数据,并不是当前程序的数据段数据。
(4)单步执行命令T
从程序开始单步执行程序的前两条指令,使用的命令格式为:
T2
执行完前两条指令即返回,显示当前的寄存器状态,请注意查看当前的CS、IP寄存器状态与执行指令前的差别,请试着解释这两个寄存器的含义。
INT指令不可单步执行,需使用G命令连续执行。
(5)查看存储单元命令D
使用带参数的D命令,显示从有效地址为0的存储单元开始的连续128个单元中的数据。
在此查看存储单元地址、单元内容、以及对应的字符显示。
命令为:
D0
请注意该D命令显示的内容与上一个D命令显示的单元地址是否相同,为什么?
(6)反汇编命令U
直接使用反汇编命令U,会接着上次T命令执行的位置05处开始反汇编显示指令。
(7)断点/连续执行命令G
使用断点执行的功能,从当前位置执行到显示指令结束,命令为:
G0D
程序执行,可在屏幕上看到“F”字符的显示。
注意,该命令中的“0D”是断点地址,即指令“MOVAX,4C00H”的保存位置,该命令会将该位置之前的所有指令执行完毕。
断点地址必须是U命令可见的地址。
(8)修改存储单元内容命令E
使用E命令将CHAR变量中的字符修改为“M”,命令为:
E0‘M’
或者使用命令
E0
在提示下输入M的ASCII码4DH。
(9)查看存储单元内容命令D
使用D命令查看所修改的内容,命令为:
D0L1
(10)连续执行命令G
从第一条指令开始重新执行程序,使用G命令:
G=010
指定程序执行的区间,在屏幕上可以看到“M”字符的显示。
(11)汇编命令A
在DEBUG下修改汇编语言程序,使用A命令:
A5
在给定的单元中输入指令“MOVDL,39”,两次回车,返回到DEBUG提示符下。
(12)连续执行命令G
重新执行程序,使用G命令:
G=0
指定程序执行的区间,在屏幕上可以看到“9”字符的显示,同时显示“Programterminatednormally”的提示信息,表示程序执行结束。
(13)退出命令Q
执行Q命令,即可从DEBUG状态下退出,返回DOS系统。
思考问题
1.DEBUG状态下如何观察源程序?
和文本编辑方式下的源程序有哪些区别?
2.试解释以上第2步中各DEBUG命令的含义。
3.若要将程序中的第三条汇编指令换成“MOVDL,61H”,则更换该指令的DEBUG命令应为什么?
更换后程序的执行结果是什么?
实验报告要求
本次实验不写实验报告。
练习
尝试按上面的方法调试该程序。
从键盘上输入一个字符串,保存于数据段中,分别显示该字符串的长度和字符串中第二个字符。
INMESSDB'
PLEASEINPUTASTRING(LENGTH<
9):
$'
LENMESSDB10,13,'
THELENGTHOFTHESTRINGIS:
CHARMESSDB10,13,'
THESECONDCHAROFTHESTRINGIS:
INSTRINGDB10,?
10DUP(?
)
LEADX,INMESS;
①显示提示信息
MOVAH,09H
LEADX,INSTRING;
②输入字符串,保存于INSTRING
MOVAH,0AH
LEADX,LENMESS;
③显示提示信息
LEABX,INSTRING;
④获取输入字符串的长度值,并显示
INCBX
MOVDL,[BX]
ADDDL,30H
MOVAH,02H
LEADX,CHARMESS;
⑤显示提示信息
MOVDL,[BX+2];
⑥显示字符串中的第二个字符
MOVAX,4C00H;
⑦程序返回
ENDSTART
调试内容:
(1)将生成的可执行文件调入DEBUG,观察各寄存器的内容;
(2)断点执行到指令①的位置,观察各寄存器的变化情况、数据段中定义的各字符串INMESS、LENMESS、CHARMESS、INSTRING的位置;
(3)断点执行到指令②的位置,观察程序执行的结果;
(4)断点执行到指令③的位置,从键盘输入字符串,返回后观察输入字符串的保存位置;
(5)断点执行到指令④的位置,观察程序执行的结果;
(6)分别单步执行指令④开始的4条指令,试观察每条指令执行的结果;
(7)断点执行到指令⑤的位置,观察程序执行的结果;
(8)断点执行到指令⑥的位置,观察程序执行的结果;
(9)断点执行到指令⑦的位置,观察程序执行的结果;
预备实验二预备知识练习
1、熟悉各种操作数的寻址方式,并能在DEBUG环境中查看各操作数;
2、熟悉8086指令系统中的各类指令的用法和功能,为以后的程序编写打下基础。
本实验内容共用6学时,分三次实验完成。
1、寻址方式练习
(1)在DEBUG命令行下,按以下步骤完成操作。
(A)使用e命令修改存储地址以150、200为首的6个单元的内容:
-e150
****:
0150**.00**.01
-e200
0200**.10**.20**.30**.40
带下划线的部分是需要输入的内容。
(B)使用查看命令d,查看上步所修改的存储单元的内容(注意对应的段地址):
-d150L2
-d200L4
(C)使用汇编命令a,输入以下指令序列:
-a100
0100movax,cs
0102movds,ax
0104movbx,100
0107movax,[150]
010Aaddbx,ax
010Cmoval,[bx]
010Eaddal,[bx+1]
0111movsi,2
0114addal,[bx+si]
0116movah,0
0118movch,0
011Amovcl,[bx+si+1]
011Daddax,cx
(D)使用反汇编命令u,查看上步输入的汇编语言程序(注意对应的段地址):
-u100
(E)使用单步执行命令t执行该指令序列,查看每一步执行的结果,并记录。
(2)使用适当的DEBUG命令,按以下步骤完成操作。
(A)修改以下寄存器的值:
(DS)=1000H,(ES)=2000H,(SI)=1FEH
(B)将从存储单元1000H:
01FEH开始的连续四个单元内容修改为:
11H、22H、33H、44H;
将从存储单元2000H:
12H、34H、56H、78H;
(C)输入汇编指令:
MOVAX,DS
MOVBX,[SI+2]
MOVCX,[BX]
ES:
MOVDX,[SI]
(D)指出以上各指令中源操作数的寻址方式,逻辑地址,并使用相关的DEBUG查看源操作数的值;
(3)在Debug命令行下,完成以下操作。
(A)将字数据2345H存放到地址为1200H:
100H单元中;
(B)使用适当的DEBUG命令,采用三种不同的逻辑地址形式查看这个字数据;
(C)选择不同的寻址方式,使用MOV指令将这个字数据送入AX寄存器中;
要求至少采用3种不同的寻址方式。
2、操作符与表达式练习
(1)已知数据段定义如下,请验证以下各指令的正误,并指出错误原因,或给出指令执行结果。
WordVardw2dup(?
ByteVardb?
验证指令:
①MOVbyteptrES:
WordVar[BX],100
②MOVAX,o
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 指导