汇编语言指导私人注释版Word格式.docx
- 文档编号:21292653
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:28
- 大小:28.38KB
汇编语言指导私人注释版Word格式.docx
《汇编语言指导私人注释版Word格式.docx》由会员分享,可在线阅读,更多相关《汇编语言指导私人注释版Word格式.docx(28页珍藏版)》请在冰豆网上搜索。
并注意标志位有无变化。
2、加减法指令:
MOVAH,34
MOVAL,22
ADDAL,AH
SUBAL,78
MOVCX,1284
MOVDX,5678
ADDCX,DX
SUBCX,AX
SUBCX,CX
2)用U命令检查键入的程序及对应的机器码。
3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。
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内容。
实验报告要求:
1、16进制数加减法手算结果及实验结果
2、8086常用指令练习部分的逐条运行记录,思考结果及自编程序运行记录(列出自编程序)。
附:
DEBUG使用:
1、打DEBUG进入DEBUG,显示提示苻'
2、退出DEBUG命令:
Q
3、显示内存命令:
D起始地址结束地址
4、修改内存命令:
E起始地址,连续修改打空格键。
打回车键退出E命令。
5、检查寄存器命令:
R
标志位显示10
CFCYNC
ZFZRNZ
SFNGPL
AFACNA
OFOVNV
PFPEPO
DFDNUP
IFEIDI
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起始地址结束地址目的地址
实验二内存操作数及寻址方法
1、8086系统中数据在内存中的存放方式和内存操作数的几种寻址方式。
2、8086指令:
INC+1,DEC-1,LOOP,INT3中断,INT20H输出,寄存器SI,DI。
3、8086汇编语言伪操作:
BYTEPTR,WORDPTR。
实验内容和步骤:
一、内存操作数及各种寻址方式使用:
内容:
MOVAX,1234
MOV[1000],AX
MOVBX,1002
MOVBYTEPTR[BX],20
MOVDL,39立即寻址
INCBX1002+1=1003
MOV[BX],DL
DECDL39-1=38
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
INCBX
J:
LOOPLOP
INT3
1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。
2)用命令NAA将此程序命名为文件AA(文件名可任取)。
3)用R命令将BX:
CX改为程序长度值(即最后一条指令后面的地址减去开
始地址)
4)用命令W100将此程序存到AA命名的磁盘文件中。
5)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,
若不一样,检查程序是否有错。
6)用命令Q退出DEBUG.
1、各项实验结果记录。
实验三汇编语言程序上机过程
1、掌握常用工具软件MASM和LINK的使用。
2、伪指令:
SEGMENT段定义开始,ENDS定义结束,ASSUME连接到一起,END程序入口所对应的结束标记与start对应,OFFSET取标号的偏移地址,DUP重复操作,保留空间。
3、利用的1号功能实现键盘输入的方法。
获取键盘ACS代码存到AL
4、了解.EXE可以分段、不超过1M的文件和.COM只有一个段或代码、最大64K256*256-1文件的区别及用INT21H4C号功能返回系统的方法。
datasegment//定义数据段
messagedb'
Thisisasampleprogramofkeyboardanddisply'
db0dh,0ah,'
Pleasestrikethekey!
'
0d回车h,0a换行h,'
$'
//定义显示的话
dataends//结束数据段定义
stacksegmentparastack堆栈段类型'
stack连接后类型'
完整//定义堆栈断
db50dup(?
)//堆栈段保留50的空间
stackends
codesegment代码段连接起来
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movdx,offsetmessage找到message的地址显示话
movah,9显示一个字符串
int21h
again:
movah,1接受键盘输入代码放入al中
cmpal,1bh与1b(ESC键)比较
je等于exit相等掉抓不相等
cmpal,61h不等和a比较,小于
jc小于nd
cmpal,7ah大于z相比
ja大于nd,
andal,11011111b小写转换成大写
nd:
movdl,al
movah,2输出1个字符在dl中
jmpagain
exit:
movah,4ch
codeends
endstart
实验步骤:
1、用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。
2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
3、用TYPE命令显示1产生的.LST文件。
4、用LINK将.OBJ文件连接成可执行的.EXE文件。
5、在DOS状态下运行LINK产生的。
EXE文件。
即在屏幕上显示标题并提示你按键。
每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。
按ESC键可返回DOS。
若未出现预期结果,用DEBUG检查程序。
实验报告:
1、汇编,连接及调试时产生的错误,其原因及解决办法。
2、思考:
1)若在源程序中把INT21H的'
H'
省去,会产生什么现象?
2)把INT21H4CH号功能改为INT20H,行不行?
实验四数据串传送和查表程序
1、堆栈。
堆栈指示器SP和堆栈操作指令PUSH。
POP。
2、段寄存器和物理地址计算。
段地址+便宜地址
3、查表法和查表指令XLAT。
4、数据串传送程序和数据串传送指令MOVS。
STOS及重复前辍REP。
5、循环指令ROL。
逻辑与指令AND和清方向位指令CLD。
6、伪操作指令DB。
实验内容及步骤:
一、利用查表方法把DX的内容(16进制数)转换成ASCII码:
1、用A命令键入下列程序:
MOVBX,1000基质
MOVDI,2000地址
MOVCX,4循环次数
PUSHCX//
MOVCL,4循环次数
ROLDX,CL//一4为
POPCX//恢复
MOVAL,DL//
ANDAL,OF//提取最高4位
XLAT//
CLD//
STOSB//吧al内送送给di
LOOPLOP//
INT20//
2、用A命令在1000H处键入下列ASCII码并用D命令检查之:
A1000
DB‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘A’,‘B’,‘C’,‘D’,‘E’,‘F’
D1000
Rdx
7f8e
G100118
D2000
看堆栈t=1001
Tttt
D?
37463811
用D命令检查时注意左边的ASCII码值和右边的字符。
3、用R命令给DX送一个四位的16进制数(例737F838E45)。
4、用T命令逐条运行这程序到LOOP指令处,观察并记录每次运行结果,特别是SP和堆栈内容(用D命令检查)
Ffee-ffec
5、用G命令将此程序运行到结束,并用D命令检查2000H处所转换的结果。
可注意屏幕右边的ASCII字符与DX是否一致。
二、数据串搬家程序:
MOVSI,100E基质
MOVDI,1010
MOVCX,0F
MOVSI1500
MOVDI1002
LOP1:
MOVAL,[SI]
MOV[DI],AL
DECSI+1
DECDI
LOOPLOP
INT20
D1002
2、用A命令DB伪指令在1000H键入下列字符串:
Db‘IBM_PCCOMPUTER'
D1500
G
D100
a103
Movdi1002
G=100111
IBIBIBIBIBIBIBIBIBI
1000I
1500I
1002I
1002I
B1001
B
1003B
1001B
M1002I
M
1004I
1002M
1004M
-1003
1005
1003-
1005-
P1004
1004P
1006P
C1005
1005C
1007C
3、用G命令运行此程序,并用D命令检查目的地址处的字符与源串是否一致。
4、若此程序中的目的地址改为1002H,再运行此程序,看能不能把1000H开始的
字符串搬到1002H开始的地方去?
修改程序以做到这一点。
三、段寄存器概念及字符串传送指令练习:
MOVSI,0
MOVDI,0
MOVAX,1000
MOVDS,AX
MOVAX,1500
MOVES,AX
CLD
REPMOVSB
2、用A命令DB伪指令在0000+0000=10000处键入字符串'
IBM_PCCOMPUTER'
并用D0F00:
1000
D100:
1234
命检查之
3、用D命令检查0F000+1000=10000处内容,看是否一样。
为什么?
4、用G命令运行此程序,检查目的地址1500:
0000处内容。
并记下DS与ES值。
5、修改此程序,使ES与DS为同一值,以减少一条指令,而源物理地址和目的物理地址(是多少?
)仍和原来一样。
1、各项实验记录和思考题。
2、要求你修改的程序的清单(修改后)和调试记录。
实验五屏幕字符显示程序
JMP,绝对跳转,,ROR,循环右移,,XOR,异或,,HLT,暂停,。
2、利用DOS功能调用INT21H的2号,显示字符,和9号,显示一个字符串,功能进行屏幕显示的方法。
3、直接向视频RAM(VRAM)送ASCII码进行屏幕显示的方法。
4、IBM-PC机的ASCII码表及控制字符。
5、命令(.COM)文件及使用方法。
6、利用^Break退出程序的方法及局限性。
一、利用INT21H9H号功能调用显示字符串。
1、用A命令在100H处键入下列程序:
MOVAH,9
MOVDX,110
INT21,显示
JMP$,死循环延时$为本指令的地址
MovAH,1
INT21
INT20,退出
2、用A命令在110H处键入下列字符串的ASCII码:
DB'
Thisisasample!
3、用N,name命令和W命令将此程序(包括数据区)存入文件名为AA。
COM的磁盘文件中。
(存入前BX:
CX必须置为文件长度值)。
4、用Q命令退出DEBUG。
5、在DOS命令下打AA,运行此程序,即在屏幕上显示'
字符串,若不出现,用DEBUG检查程序有无错误。
二、利用INT21H2号功能显示字符:
XORDL,DL,按位异或,清零
=MOVDL,0=SUBDL,DL
MOVCX,100,256
MOVAH,2
INT21吧DL里德00开始显示
INCDL家1
PUSHCX保护cx=100
MOVCX,8延时参数改成1000看效果!
DELY:
PUSHCX延时程序
MOVCX,0
LOOPJlop-cx
POPCX
LOOPDELY
LOOPLOP
2、用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。
仔细观察每个字符,和IBM-PCASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?
3、按CTRL+BREAK退出此程序,若一次不行可多做几次。
三、直接向VRAM送ASCII码显示字符
MOVAX,B800
XORAL,AL
XORBX,BX
MOVCX,100要显示100次
MOV[BX],AL送数
INCBX去掉文字颜色
INCAL
PUSHCX
MOVCX,8改成1000延时程序
PUSHCX
LOOPJ
2、用N命令和W命令将此程序存入BB.COM文件中。
(一定要先存入!
)
3、用G命令运行此程序,仔细观察每一个ASCII码显示结果,并和字符表及上一道程序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT21H2号功能调用有何不同?
四。
自编一个程序,要求显示AX的内容,即能显示AX=xxxx。
调试时AX的内容可用R命令赋值,也可用MOV指令赋值。
1、各项实验记录及观察体会。
2、利用INT21H显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同?
3、自编程序草稿及调试结果。
实验六条件转移指令
JZ,JNZ,JC,JNC,CMP,SHR。
2、程序:
用字符搜索法确定字符串长度。
3、程序:
16进制数化为ASCII码的一般方法。
一、用字符搜索法确定字符串长度:
1、用A命令在100H开始的内存处键入下列程序:
JMPSTART
Thisistheprogramtomeasure'
thelengthofastring!
START:
MOVBX,102
MOVAL,24
XORCL,CL
CMPAL,[BX]
JZEXIT
INCCL
JMPLOP
EXIT:
INT3
2、用G命令运行此程序,并检查CL的统计长度是否与你自己统计的实际长度是否一样?
二、16进制数化ASCII码的一般方法(显示内存内容)
MOVSI,0
MOVBL,10
MOVDL,[SI]
MOVCL,4
SHRDL,CL
CMPDL,0A
JCJ1
ADDDL,7
J1:
ADDDL,30
MOVDL,[SI]
ANDDL,0F
CMPDL,0A
JCJ2
J2:
MOVDL,20
INCSI
DECBL
JNZLOP
2、用N,W命令将此程序用CC.COM文件名存入磁盘。
3、用Q命令退出DEBUG。
4、在DOS命令状态下直接运行CC.COM命令文件,应在屏幕上显示出内存从0000H开始的16个字节的内容,若有错误,用DEBUG检查之。
5、自编程序:
修改上面程序,使除以16进制数形式显示内存内容外,还能在其右边显示该16进制码所对应的ASCII字符,07-0D的控制字符用'
.'
代替。
三、综合程序(选做):
测量一字符串长度,并用16进制数显示之
Thisisaprogramtomeasurethelengthofastring。
DB0D,0A
thelengthofthestringis:
$'
MOVAH,9
MOVDX,102
MOVBX,101
MOVAL,'
MOVDH,FF
INCBX
INCDH
CMPAL,[BX]
MOVCH,2
MOVCL,4
ROLDH,CL
MOVDL,DHANDDL,0F
ADDDL,30CMPDL,3A
JCJADDDL,7
MOVAH,2
DECCH
JNZLOP1
键入此程序,存入?
?
.COM文件中并在DOS命令状态下直接运行之,若未出现预期结果,用DEBUG检查有否错误?
1、自编程序草稿及调试后的正确程序。
2、实验体会。
实验七分枝程序
1、掌握利用间接转移指令JMPBX实现多岔分枝的方法。
2、宏替换指令MACRO及ENDM。
3、符号扩展指令CBW。
实验程序:
Disp名字macro定义msg宏替换函数
leadx,msg取宏的偏移地址
movah,9寄存器AH数值设为98位
int21h调用指令
movah,4ch调用4c给ah4CH16位
int21h21号中断
endm宏定义指令结束
stacksegmentstack伪指令定义一个堆栈段stack
db256dup(0)预留定义256字节清零
stackends栈堆段定义结束
datasegment定义数据段
parmdb16dup(?
)定义16个字节空间给parm
brtabledwoffsetbra,offsetbrb,offsetbrc声明变量读取地址存dw
dwoffsetbrd,offsetbre,offsetbrf
msgadb'
IlikemyIBM-PC!
将后面存到msga
msgbdb'
Howareyou!
同上
msgcdb'
NibaoCollege$'
msgddb'
Thisisasample$'
msgedb'
Wellcomeusemycoputer!
$'
同上
msgfdb'
Theassemderlanguageof8086$'
errmsdb'
Error!
!
invalidparameter!
dataends定义数据段结束
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 指导 私人 注释
![提示](https://static.bdocx.com/images/bang_tan.gif)