微机实验报告最新.docx
《微机实验报告最新.docx》由会员分享,可在线阅读,更多相关《微机实验报告最新.docx(17页珍藏版)》请在冰豆网上搜索。
微机实验报告最新
实验一:
DEBUG的启动及其基本命令的使用
一.实验目的:
掌握DEBUG的基本命令及其功能
二.实验操作步骤:
6.设堆栈指针SP=2000H,AX=3000H,BX=5000H;请仿照例程的格式编一程序段将AX和BX的内容进行交换。
请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。
1)调用字处理程序建立源程序文件,源程序如下:
DATASEGMENT
DATA1DW3000H,5000H
XXDW2000H
DATAENDS
PROGNAMSEGMENT
ASSUMECS:
PROGNAM,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSP,XX
MOVBP,SP
MOVSI,0
MOVAX,DATA1[SI]
MOVBX,DATA1[SI+2]
PUSHAX
PUSHBX
POPAX
POPBX
MOVAH,4CH
INT21H
PROGNAMENDS
ENDSTART
2).在DOS环境下,用汇编程序MASM对源文件汇编产生目标文件OBJ,命令格式如下:
F:
\masm5>masmone1.asm
经过汇编后源程序为:
0WarningErrors
0SevereErrors。
即为汇编通过
3).用连接程序link产生执行文件exe
F:
\masm5>linkone1.obj
4).用DEBUG调试程序
调用格式如下:
F:
\masm5>debugone1.exe
此时,DEBUG已将执行程序装入内存,可直接用g命令运行程序。
-g
Match.
对程序进行反汇编:
-u
0B9B:
0000B89A0BMOVAX,0B9A
0B9B:
00038ED8MOVDS,AX
0B9B:
00058B260400MOVSP,[0004]
0B9B:
00098BECMOVBP,SP
0B9B:
000BBE0000MOVSI,0000
0B9B:
000E8B840000MOVAX,[SI+0000]
0B9B:
00128B9C0200MOVBX,[SI+0002]
0B9B:
001650PUSHAX
0B9B:
001753PUSHBX
0B9B:
001858POPAX
0B9B:
00195BPOPBX
0B9B:
001AB44CMOVAH,4C
0B9B:
001CCD21INT21
0B9B:
001EF6EBIMULBL
反汇编后,与源程序的要求相符合
堆栈指令运行前AX,BX的内容
-g16
AX=3000BX=5000CX=002EDX=0000SP=2000BP=2000SI=0000DI=0000
DS=0B9AES=0B8ASS=0B9ACS=0B9BIP=0016NVUPEIPLNZNAPONC
0B9B:
001650PUSHAX
堆栈指令执行后ZX,BX的值如下所示:
-g1A
AX=5000BX=3000CX=002EDX=0000SP=2000BP=2000SI=0000DI=0000
DS=0B9AES=0B8ASS=0B9ACS=0B9BIP=001ANVUPEIPLNZNAPONC
0B9B:
001AB44CMOVAH,4C
由以上可知:
AX与BX的内容得到了交换
5)汇编以及调试中所遇到的问题:
1.MOv语句比较容易出现错误
対源程序进行汇编时无法通过,编程序时应该多注意语法错误。
2.使用debug进行调试时,忘记让程序只运行到断点之前,导致查找出来的AX与BX的内容分并没有进行交换,还是保持原来的值不变,修正后在堆栈指令前先查出AX与BX的值,堆栈后在次查询Ax与BX的值,对比之后AX确实与BX的内容交换了。
实验二内存操作数及寻址方法
一.实验目的:
1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
2、掌握数据在内存中的存放方式和内存操作数的几种寻址方式。
3、掌握简单指令的执行过程。
二.实验内容:
1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;请编一程序段将AX和BX的内容进行交换。
请用堆栈作为两寄存器交换内容的中间存储单元,用字处理程序编辑程序,用masm.exe和link.exe对源程序进行汇编程和连接,用DEBUG调试程序。
程序步骤与实验一的第六个题目一致
2、用masm和link对以下程序进行汇编和连接,调试程序在DEBUG调试程序状态下进行。
用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。
DATASEGMENT
ORG0300H
ADB12H,23H,34H,45H,56H,67H,78H,89H,9AH
DATAENDS
PROGNAMSEGMENT
ASSUMECS:
PROGNAM,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,BX
MOVAX,0300H
MOVAX,[0300H]
MOVAX,[BX]
MOVSI,2
MOVAX,0001[BX]
MOVAX,[BX][SI]
MOVAX,0001[BX][SI]
MOVAH,4CH
INT21H
PROGNAMENDS
ENDSTART
1.在DOS环境下,用汇编程序MASM对源文件汇编产生目标文件OBJ,命令格式如下:
F:
\masm5>masmone1.asm
经过汇编后源程序为:
0WarningErrors
0SevereErrors。
即为汇编通过
2.用连接程序link产生执行文件exe
F:
\masm5>linkone1.obj
3.用debug调试程序:
F:
\masm5>debugone1.exe
-g
Match.
4.对程序进行反汇编:
-u
180E:
0000B8DD17MOVAX,17DD
180E:
00038ED8MOVDS,AX
180E:
00058BC3MOVAX,BX
180E:
0007B80003MOVAX,0300
180E:
000AB80003MOVAX,0300
180E:
000D8B07MOVAX,[BX]
180E:
000FBE0200MOVSI,0002
180E:
00128B4701MOVAX,[BX+01]
180E:
00158B00MOVAX,[BX+SI]
180E:
00178B4001MOVAX,[BX+SI+01]
180E:
001AB44CMOVAH,4C
180E:
001CCD21INT21
180E:
001EC406FF76LESAX,[76FF]
由第五行:
180E:
000AB80003MOVAX,0300
并没有执行源程序中的:
MOVAX,[0300H]指令,所以执行后AX的结果为0000;
应该对程序进行修改
修改后的原程序如下:
DATASEGMENT
ORG0300H
ADB12H,23H,34H,45H,56H,67H,78H,89H,9AH
DATAENDS
PROGNAMSEGMENT
ASSUMECS:
PROGNAM,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,0300H
MOVBX,DX
MOVAX,[BX]
MOVSI,2
MOVAX,0001[BX]
MOVAX,[BX][SI]
MOVAX,0001[BX][SI]
MOVAH,4CH
INT21H
PROGNAMENDS
ENDSTART
-u
180E:
0000B8DD17MOVAX,17DD
180E:
00038ED8MOVDS,AX
180E:
0005BA0003MOVDX,0300
180E:
00088BDAMOVBX,DX
180E:
000A8B07MOVAX,[BX]
180E:
000CBE0200MOVSI,0002
180E:
000F8B4701MOVAX,[BX+01]
180E:
00128B00MOVAX,[BX+SI]
180E:
00148B4001MOVAX,[BX+SI+01]
180E:
0017B44CMOVAH,4C
180E:
0019CD21INT21
180E:
001B057183ADDAX,8371
180E:
001EC406FF76LESAX,[76FF]
使用单步执行方法分析每条指令源地址的形成过程:
将数据段的首地址存入寄存器AX中
-t
AX=17DDBX=0000CX=032BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=17CDES=17CDSS=17DDCS=180EIP=0003NVUPEIPLNZNAPONC
180E:
00038ED8MOVDS,AX
把AX的值作为DS的首地址
-t
AX=17DDBX=0000CX=032BDX=0000SP=0000BP=0000SI=0000DI=0000
DS=17DDES=17CDSS=17DDCS=180EIP=0005NVUPEIPLNZNAPONC
180E:
0005BA0003MOVDX,0300
-t
AX=17DDBX=0000CX=032BDX=0300SP=0000BP=0000SI=0000DI=0000
DS=17DDES=17CDSS=17DDCS=180EIP=0008NVUPEIPLNZNAPONC
180E:
00088BDAMOVBX,DX
-t
AX=17DDBX=0300CX=032BDX=0300SP=0000BP=0000SI=0000DI=0000
DS=17DDES=17CDSS=17DDCS=180EIP=000ANVUPEIPLNZNAPONC
180E:
000A8B07MOVAX,[BX]DS:
0300=2312
将偏移量BX存到寄存器AX中
-t
AX=2312BX=0300CX=032BDX=0300SP=0000BP=0000SI=0000DI=0000
DS=17DDES=17CDSS=17DDCS=180EIP=000CNVUPEIPLNZNAPONC
180E:
000CBE0200MOVSI,0002
将0002赋值给SI
-t
AX=2312BX=0300CX=032BDX=0300SP=0000BP=0000SI=0002DI=0000
DS=17DDES=17CDSS=17DDCS=180EIP=000FNVUPEIPLNZNAPONC
180E:
000F8B4701MOVAX,[BX+01]DS:
0301=3423
-t
AX=3423BX=0300CX=032BDX=0300SP=00