微机实验电子稿.docx
- 文档编号:28186183
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:79
- 大小:1.51MB
微机实验电子稿.docx
《微机实验电子稿.docx》由会员分享,可在线阅读,更多相关《微机实验电子稿.docx(79页珍藏版)》请在冰豆网上搜索。
微机实验电子稿
实验一数据传送
一.实验目的:
1、熟悉8086指令系统的数据传送指令及8086寻址方式
2、利用TurboDebugger调试工具来条数汇编语言程序
二、实验内容:
1、用一下程序将一组数据压入(PUSH)堆栈区,然后通过三种不同的出栈方式出栈,看出栈后数据的变化情况,并把结果填入表内。
程序段如下:
MOVAX,0102H
MOVBX,0304H
MOVCX,0506H
MOVDX,0708H
PUSHAX
PUSHBX
PUSHCX
PUSHDX
第一种出栈方式如下:
POPDX
POPCX
POPBX
POPAX
第二种出栈方式如下:
POPAX
POPBX
POPCX
POPDX
第三种出栈方式如下:
POPCX
POPDX
POPAX
POPBX
调试过程:
第一种出栈方式
第二种出栈方式
第三种出栈方式
实验结果:
第一种出栈方式
第二种出栈方式
第三种出栈方式
AX=
0102H
0708H
0304H
BX=
0304H
0506H
0102H
CX=
0506H
0304H
0708H
DX=
0708H
0102H
0506H
2、指出下列指令的错误并加之改正,上机验证之。
(1)MOV[BX],[SI]MOV指令不允许两个操作数同时为存储器操作数
其一改法:
MOVAX,[SI]
MOV[BX],AX
上机验证:
(2)MOVAH,BX两操作数字长不相等
其一改法:
MOVAX,BX
上机验证:
(3)MOVAX,[SI][DI]在间接寻址中不允许两个间址寄存器同时为变址寄存器
其一改法:
MOVAX,[BX][SI]
上机验证:
(4)MOVBYTEPTR[BX],2000H
其一改法:
MOVWORDPTR[BX],2000H
上机验证:
(5)MOVCS,AX
其一改法:
MOVDS,AX
上机验证:
(6)MOVDS,2000H不能用立即数直接给段寄存器赋值
其一改法:
MOVAX,2000H
MOVDS,AX
上机验证:
3、设置各寄存器及存储单元的内容如下:
BX=0100H,SI=0001H
[10010H]=12H,[10011H]=34H,[10012H]=56H,[10013H]=78H
[10120H]=0ABH,[10121H]=0CDH,[10122H]=0EFH
设DS=1000H,ds=0010H
说明下列各条指令执行完后AX寄存器中的内存,并上机验证。
(1)MOVAX,1200H输出:
AX=1200H
(2)MOVAX,BX输出:
AX=0010H
(3)MOVAX,[0120H]输出:
AX=CDABH
(4)MOVAX,[BX]输出:
AX=3412H
(5)MOVAX,0110H[BX]输出:
AX=CDABH
(6)MOVAX,[BX][SI]输出:
AX=5634H
(7)MOVAX,0110H[BX][SI]输出:
AX=EFCDH
4、将DS:
1000H字节存储单元中的内容送到DS:
2020H单元中存放。
试分别用8086的直接寻址、存储器间接寻址、变址寻址、寄存器相对寻址传送寻址传送指令编写程序段,并上机验证结果。
(1)直接寻址:
MOVAX,[1000H]
MOV[2020H],AX
上机调试:
[1000H]=3412H
(2)存储器间接寻址:
MOVBX,2020H
MOVAX,[SI]
MOV[BX],AX
上机调试:
[1000H]=3412H,SI=1000H
(3)变址寻址:
MOVAX,1000H
MOVSI,AX
MOVBX,0000H
MOVAX,[BX][SI]
MOVBX,1020H
MOV[BX][SI],AX
上机调试:
[1000H]=3412H
(4)相对寻址:
MOVAX,1000H
MOVSI,AX
MOVBX,0000H
MOVAX,0000H[BX][SI]
MOVBX,1000H
MOV0020H[BX][SI],AX
上机调试:
[1000H]=3412H
5、设AX寄存器中的内容为1111H,BX寄存器中的内容为2222H,DS:
0010H单元中的内容为3333H。
将AX寄存中的内容与BX寄存器中的内容交换,然后再将BX寄存器中的内容的内容与DS:
0010H单元中的内容进行交换。
试编写程序段,并上机验证即如果。
代码:
MOVAX,1111H
MOVBX,2222H
XCHGAX,BX
MOVWORDPTR[0010H],3333H
MOVCX,[0010H]
XCHGBX,CX
上机调试:
注:
将AX寄存中的内容与BX寄存器中的内容交换
注:
将BX寄存器中的内容的内容与DS:
0010H单元中的内容进行交换
6、设DS=1000H,ES=2000H,有关存储器的内容如图所示。
要求将图只能够所示的DS段的内容传送到AX寄存器,ES段的内容传送到BX寄存器,试编写程序段。
代码:
MOVAX,1000H
MOVSI,AX
MOVAX,[1000H]
MOVCX,2000H
MOVES,CX
MOVBX,ES:
[2000H]
上机调试:
三、实验总结:
调试程序Debug就是用来调试汇编语言程序的一种工具。
Debug的主要功能有显示和修改寄存器及内存单元的内容;按指定地址启动并运行程序;设置断点使程序分段运行,以便检查程序运行过程中的中间结果或确定程序出错的位置;
TurboDebugger调试工具的使用
操作步骤如下:
①启动TD。
②使CPU窗口为当前窗口。
③输入程序段。
利用↑、↓方向键移动光条来确定输入位置,然后从光条所在的地址处开始输入,建议把光条移动到CS:
0100H处开始输入程序。
在光条处直接键入程序段指令,键入时屏幕上会弹出一个输入窗口,这个窗口就是指令的临时编辑窗口。
每输入完一条指令,按Enter键,输入的指令即可出现在光条处,同时光条自动下移一行,以便输入下一条指令。
窗口中前面曾经输入过的指令可以重复使用,只要用方向键把光标定位到所需的指令处,按回车键即可。
④执行程序段
方法一:
使用单步执行的方法执行程序段。
使IP指向程序段的开始处,方法是:
把光条移动到程序段开始的第一条指令处,按Alt+F10键,弹出CPU窗口的局部菜单,选择“NEWCS:
IP”项,按Enter键,这时CS和IP寄存器(在CPU窗口中用“▼”符号表示,“▼”符号指向的指令就是当前要执行的指令)就指向了当前光条所在的指令。
直接修改IP的内容为程序段第一条指令的偏移地址:
用F7或者F8单步执行程序段。
每按一次F7或者F8键,就执行一条指令。
按F7或者F8键直到程序段的所以指令都执行完为止,这时光条停在程序段最后一条指令。
F7或者F8键的区别是:
如果执行的指令是CALL指令,F7会单步执行进入到子程序中,而F8则会把子程序执行完,然后停在CALL指令的下一条指令处。
方法二:
用设置断点的方法执行程序段。
把光条移动到程序段最后一条指令的下一行,按F2键设置断点。
使用方法一中的方法使IP寄存器指向程序段的开始处。
按F4或者F9键运行程序段,CPU从IP指针开始执行到断点位置停止。
⑤检查各寄存器和存储单元的内容。
寄存器窗口显示在CPU窗口的右边,寄存器窗口中直接显示了各寄存器的名字及其当前内容。
在单步执行程序时可以随时观察寄存器内容的变化。
实验二算术逻辑运算及移位操作
一、实验目的:
1、熟悉算术逻辑运算指令和移位指令的功能。
2、了解标志寄存器各标志位的意义和指令执行对它的影响
3、熟悉在PC上建立、汇编、链接、调试和运行8086汇编语言程序的全过程。
二、实验内容
程序框架:
DSEGSEGMENT
NUMDB100HDUP(?
)
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
串操作的程序代码
CSEGENDS
ENDSTART
1、实验程序段及结果表格:
标志位
CF
ZF
SF
OF
PF
AF
程序段1:
MOVAX,1018H
MOVSI,230AH
ADDAX,SI
ADDAL,30H
MOVDX,3FFH
ADDAX,BX
MOVDS:
[20H],1000H
ADD[20H],AX
PUSHAX
POPBX
程序段2:
MOVAX,0A0AH
ADDAX,0FFFFH
MOVCX,0FF00H
ADCAX,CX
SUBAX,AX
INCAX
ORCX,0FFH
ANDCX,0F0FH
MOVDS:
[10H],CX
程序段3:
MOVBL,25H
MOVBYTEPTRDS:
[10H],4
MOVAL,[10H]
MULBL
程序段4:
MOVWORDPTRDS:
[10H],80H
MOVBL,4
MOVAX,[10H]
DIVBL
程序段5:
MOVAX,0
DECAX
ADDAX,3FFFH
ADDAX,AX
NOTAX
SUBAX,3
ORAX,0FBFDH
ANDAX,0AFCFH
SHLAX,1
RCLAX,1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
1
0
0
0
1
1
0
0
0
0
1
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
1
1
0
0
0
0
1
0
0
0
0
1
1
0
0
0
0
1
1
0
0
1
0
1
0
0
0
1
0
0
0
0
0
1
0
0
0
1
0
0
1
1
0
0
0
0
1
1
0
2、用BX寄存器作为地址指针,从BX所指的内存单元(0010H)开始连续存入三个无符号数(10H、04H、30H),接着计算内存单元中的这三个数之和,和放在0013H单元中,再求出这三个数之积,积放在0014单元中。
写出完成此功能的程序段并上机验证结果。
代码:
MOVBX,0010H
MOV[BX],10H
INCBX
MOV[BX],04H
INCBX
MOV[BX],30H
MOVAX,[BX]
DECBX
ADDAX,[BX]
DECBX
ADDAX,[BX]
ADDBX,03H
MOV[BX],AX
SUBBX,03H
MOVAX,[BX]
INCBX
MULBYTEPTR[BX]
INCBX
MULBYTEPTR[BX]
ADDBX,02H
MOV[BX],AX
上机验证:
注:
三个数相加
注:
三个数相乘
3、写出完成下列功能的程序段。
上机验证你写的程序段,程序运行额最后结果AX=?
(1)传送15H到AL寄存器MOVAL,15H
(2)再将AL的内容乘以2MOVCX,2HMULCX
(3)接着传送15H到BL寄存器MOVBL,15H
(4)最后把AL的内容乘以BL的内容MULBL
结果:
AX=0372H
上机调试:
4、写出完成下列功能的程序段。
上机验证你写的段程序,程序运行后的商=?
(1)、传送数据2085H到DS:
1000H单元中,数据12H到DS:
1022H单元中;
MOV[1000H],2085HMOV[1002H],12H
(2)把DS:
1000H单元中的数据传送到AX寄存器;MOVAX,[1000H]
(3)把AX中的内容算术右移两位;MOVCL,2SARAX,CL
(4)再把AX寄存器的内容除以DS:
1002H字节单元中的数;DIV[1002H]
(5)最后把商存放字节单元DS:
1003H中。
MOV[1003H],AL
结果:
商=73H
上机调试:
5、下面的程序段用来清除数据段中从偏移地址0010H开始的12个字存储单元的内容(即将0送到这些存储单元中去)。
(1)MOVSI,0010H
NEXT:
MOVWORDPTR[SI],0
ADDSI,2
CMPSI,0028H
JNENEXT
HLT
(2)假定要按高地址到低地址的顺序进行清除操作(高地址从0020H开始),则上述程序段应如何修改?
MOVSI,0020H
NEXT:
MOVWORDPTR[SI],0
SUBSI,2
CMPSI,0008H
JNENEXT
HLT
6、输入并运行表中的程序段,把结果填入表右边的空格中,并分析结果,说明本程序段的功能是什么。
程序段
字单位(1A00H)=
字单位(1A02H)=
MOVWORDPTR[1A00H],0AA55H
MOVWORDPTR[1A02H],2AD5H
SHLWORDPTR[1A02H],1
CMPWORDPTR[1A00H],8000H
CMC
RCLWORDPTR[1A02H],1
RCLWORDPTR[1A00H],1
AA55H
0000H
AA55H
2AD5H
AA55H
55AAH
AA55H
55AAH
AA55H
55AAH
AA55H
AB55H
54AAH
AB54H
三、实验总结
1、了解了逻辑运算符有一下这些
加法指令:
普通加法指令ADD表达式:
ADDOPRD1,OPRD2
带进位加指令ADC表达式:
ADCOPRD1,OPRD2
加1指令INC表达式:
INCOPRD
减法指令:
普通减法指令SUB表达式;SUBOPRD1,OPRD2
带进(借)位减指令SBB表达式:
SBBOPRD1,OPRD2
减1指令DEC表达式:
DECOPRD
取补指令NEG表达式:
NEGOPRD
比较指令CMP表达式:
CMPOPRD1,OPRD
乘法指令:
无符号数乘法指令MUL表达式:
MULOPRD
字节操作数(AX)¬(AL)*(SRC)
字操作数(DX,AX)¬(AX)*(SRC)
有符号数乘法指令IMUL表达式:
IMULOPRD
除法指令:
在除法指令中,被除数总是在隐含在寄存器AX(除数是8位)或者DX和AX(除数是16位)中,另一个操作数可以采用除立即数方式外的任一种寻址方式。
无符号数除法指令DIV表达式:
DIVOPRD
字节操作(AL)¬(AX)/(SRC)的商
(AH)¬(AX)/(SRC)的余数
字操作(AX)¬(DX,AX)/(SRC)的商
(DX)¬(DX,AX)/(SRC)的余数
有符号数除法指令IDIV表达式:
IDIVOPRD
符号扩展指令:
字节转换为字指令CBW(ConvertBytetoWord)
字节转换为字指令的格式如下:
CBW
这条指令把寄存器AL中的符号扩展到寄存器AH。
即若AL的最高有效位为0,则AH=0;若AL的最高有效位为1,则AH=0FFH。
字转换为双字指令CWD(ConvertaWordtoDoubleword)
字转换为双字指令的格式如下:
CWD
这条指令把寄存器AX中的符号扩展到寄存器DX。
即若(AX)的最高有效位为0。
则DX=0;若AX的最高有效位为1,则DX=0FFFFH。
逻辑运算指令:
1、否操作指令NOT.NOTOPRD
这条指令把操作数OPRD取反,然后送回OPRD。
2、与操作指令ANDANDOPRD1,OPRD2
这条指令对两个操作数进行按位的逻辑“与”运算,结果送到目的操作数OPRD1
3、或操作指令OROROPRD1,OPRD2
4、异或操作指令XORXOROPRD1,OPRD2
5、测试指令TESTTESTOPRD1,OPRD2
这条指令和指令AND类似,也把两个操作数进行按位“与”,但结果不送到操作数OPRD1,仅仅影响标志。
该指令执行以后,标志ZF﹑PF和SF反映运算结果,标志CF和OF被清0
一般移位指令:
SALOPRD,m;算术左移指令(同逻辑左移指令)
SHLOPRD,m;逻辑左移指令
算术左移SAL/逻辑左移SHL指令把操作数OPRD左移m位,每移动一位,右边用0补足一位,移出的最高位进入标志位CF。
SAROPRD,m,;算术右移指令
该指令使操作数右移m位,同时每移一位,左边的符号位保持不变,移出的最低位进入标志位CF。
.SHROPRD,m;逻辑右移指令
该指令使操作右移m位,同时每移一位,左边用0补足,移出的最低位进入标志位CF。
循环移位指令:
4个一般移位指令:
当移动1位时,移动次数由指令最近给出,在移2位或更多位时,移动的位数要放在CL寄存器中,即指令的原操作数是移位次数,目标操作数是被移动的对象。
这类指令的执行大多会影响6个状态标志位
算术左移指令SAL算术右移指令SAR逻辑左移指令SHL逻辑右移指令SHR
4个循环移位指令:
循环移位指令类似移位指令,但要将从一端移出的位返回到另一端形成循环。
它分成不带进位循环移位和带进位循环移位,分别具有左移或右移操作
ROL不带进位标志位CF的循环左移指令
ROR不带进位标志位CF循环右移指令
RCL带进位标志位CF循环左移指令
RCR带进位标志位CF循环右移指令
循环移位指令的操作数形式与移位指令相同,如果仅移动一次,可以用1表示;如果需要移位多次,则需用CL寄存器表示移位次数。
循环移位指令按照指令功能设置进位标志CF,不影响SF、ZF、PF、AF标志。
对OF标志的影响,循环移位指令与前面介绍的移位指令一样。
2、熟悉了在PC上建立、汇编、链接、调试和运行8086汇编语言程序的全过程。
(1)使用EDIT建立汇编程序
>edit文件名.asm(回车)
汇编程序生成目标程序
经过编辑命令建立的汇编语言源程序使用汇编程序编译成目标程序。
(2)使用MASM宏汇编进行编译
>MASM文件名
在汇编程序调入后,先显示版本号,然后出现第一行提示,
Objectfilename[源文件名.OBJ]:
;默认该文件名回车。
SourceListing[NUL.LST]:
源文件名或其他;输入文件名建立可打印文件。
CrossReference[NUL.CRF]:
源文件名或其他;回车。
WarningErrors
severeErrors
(3)链接程序生成可执行文件
由汇编后建立的目标码文件,必须经过链接后才能生成可执行的命令文件。
使用LINK完成连接
>LINK文件名;回车后调入链接程序,此时屏幕显示。
RunFile[文件名.EXE]:
;回车默认该文件名。
ListFile[NUL.MAP]:
;
Libraries[.LIB]:
;回车。
Warning:
;提示错误。
如果有错误,返回编辑程序重新修改源程序。
汇编语言动态调试工具调试汇编程序
(4)使用DEBUG进行调试
DEBUG是专为汇编语言设计的一种调试工具,可用来检查,修改存储单元和寄存器的内容装入,存储及启动运行程序,也可用DEBUG汇编简单的汇编语言程序。
>DEBUG文件名.EXE
-;"-"是DEBUG的提示符
(5)使用TD(TurboDebugger)调试汇编程序
TD设计具有Turbo系列语言的特点,其多重覆盖窗口、下拉菜单和弹出菜单的结合给用户提供了一个快速友好的交互环境,帮助系统使用十分方便。
实验三串操作
一、实验目的
1、熟悉串操作指令的功能及串操作指令的使用方法
2、学习8086汇编语言程序的基本结构
3、熟悉在PC上建立、汇编、链接、调试和运行8086汇编语言程序的全过程。
二、实验设备
IBM-PC微型计算机一台
三、实验内容
程序框架:
DSEGSEGMENT
NUMDB100HDUP(?
)
DSEGENDS
ESEGSEGMENT
ORG1000H
BUFFERDB10HDUP(?
)
ESEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG,ES:
ESEG
START:
MOVAX,DSEG
MOVDS,AX
MOVAX,ESEG
MOVES,AX
串操作的程序代码
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
1、在代码段中输入以下程序段运行之,回答后面的问题。
DSEGSEGMENT
NUMDB100HDUP(?
)
DSEGENDS
ESEGSEGMENT
ORG1000H
BUFFERDB10HDUP(?
)
ESEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG,ES:
ESEG
START:
MOVAX,DSEG
MOVDS,AX
MOVAX,ESEG
MOVES,AX
CLD
MOVDI,1000H
MOVAX,55AAH
MOVCX,10H
REPSTOSW
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
上述程序经汇编、链接产生可执行文件。
该程序执行后:
(1)从ES:
1000H开始的16个字单元的内容是什么?
答:
从ES:
1000H开始的16个字单元的内容是55AAH
(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 实验 电子