北京工业大学微机原理实验报告2Word文档格式.docx
《北京工业大学微机原理实验报告2Word文档格式.docx》由会员分享,可在线阅读,更多相关《北京工业大学微机原理实验报告2Word文档格式.docx(14页珍藏版)》请在冰点文库上搜索。
写出程序的功能,画出程序流程图。
(1)程序修改前:
STACKSG:
SEGMENTPARASTACK‘STACK’;
不能有冒号
DB256DUP(?
)
STACKSGENDS
DATASG:
SEGMENTPARA‘DATA’;
BLOCKDW0,-5,8,256,-128,96,100,3,45,6,512
DW23,56,420,75,0,-1024,-67,39,-2000
COUNTEQU20
MAXDW?
DATASGENDS
CODESG:
SEGMENT;
ASSUMESS:
STACKSG,CS:
CODESG
ASSUMEDS:
DATASG
ORG100H
BEGINMOVDS,DATASG;
BEGIN:
应改为MOVAX,DATASG
MOVDS,AX
LEASI,BLOCK
MOVCX,COUNT
DECCX
MOVAX,[SI]
CHKMAXADDSI,2;
应加冒号CHKMAX:
CMP[SI],AX
JLENEXT
DECCX;
删除
NEXT:
LOOPCHKMAX
MOVMAX,AX
MOVAH,4CH
INT21H
CODESGENDS
ENDBEGIN
(2)程序修改后:
STACKSGSEGMENTPARASTACK‘STACK’
DATASGSEGMENTPARA‘DATA’
CODESGSEGMENT
BEGINMOVAX,DATASG
MOVDS,AX
CHKMAX:
ADDSI,2
CMP[SI],AX
JLENEXT
MOVAX,[SI]
(3)程序注释:
STACKSGSEGMENTPARASTACK'
STACK'
DB256DUP(?
)
STACKSGENDS;
定义堆栈段
DATASGSEGMENTPARA'
DATA'
;
数据段定义
DW23,56,420,75,0,-1024,-67,39,-2000;
定义变量BLOCK包含20个字
COUNTEQU20;
COUNT=20
定义字变量MAX并不赋值
CODESGSEGMENT;
代码段定义
CODESG;
说明STACKSG是堆栈段
DATASG;
CODESG是代码段,DATASG是数据段
MOVAX,DATASG
MOVDS,AX;
DS指向DATASG
LEASI,BLOCK;
取BLOCK的有效地址给SI
MOVCX,COUNT;
CX=20
CX=CX-1
MOVAX,[SI];
将DS:
[SI]里的值送到AX
CHKMAX:
ADDSI,2;
SI=SI+2
CMP[SI],AX;
比较DS:
[SI]与AX值的大小
JLENEXT;
如果DS:
[SI]的值小于AX里的值,则跳转到NEXT
[SI]的值送到AX
LOOPCHKMAX;
循环CHKMAX
MOVMAX,AX;
将AX的值送到变量MAX
MOVAH,4CH;
结束
(4)程序的流程图:
Y
N
Y
(5)程序的功能:
找出20个数中的最大值并保存。
四、实验步骤
1、建立汇编语言源程序,对建立的汇编语言源程序进行编译、链接。
2、运行DEBUG调试程序,装入被调试程序,用U命令查看调入的程序,记录代码段基值和数据段基值,用R命令查看并记录下当前寄存器内容。
代码段段基值:
164F数据段段基值:
162C
AX=0000BX=0000CX=0536DX=0000SP=0100BP=0000
SI=0000DI=0000DS=162CES=162CSS=163CCS=164FIP=0100
3、用D命令查看并记录下内存中数据存放格式。
(注:
在教室没有做完,回来用自己电脑做的,所以段基值不一样)
4、用T命令单步运行程序,观察各条指令执行结果,以及对寄存器、标志位、内存单元的影响,若找出程序中的错误,用Q命令退出DEBUG环境,修改汇编语言源程序,重复上述步骤,直至整个程序无误。
5、若将LEASI,BLOCK语句改为LEASI,BLOCK+2*COUNT-2,并将ADDSI,2改为SUBSI,2,重新运行程序,观察运行结果:
1)建立汇编语言源程序,对建立的汇编语言源程序进行编译、链接。
2)运行DEBUG调试程序,装入被调试程序,用U命令查看调入的程序,记录代码段基值和数据段基值,用R命令查看并记录下当前寄存器内容。
3)用D命令查看并记录下内存中数据存放格式
4)用T命令单步运行程序,观察各条指令执行结果,以及对寄存器、标志位、内存单元的影响。
和之前的结果一样。
6、若重新给出一组数据,可用E命令输入新数据后运行程序,观察并记录运行结果。
7、若要求找出数据区中最小数,程序将如何修改,试上机调试。
(将JLENEXT改为JGENEXT)
DATASEGMENTPARA'
BLOCKDW0,-5,8,256,-128,96,100,3,45,6,512
COUNTEQU20
MAXDW?
DATAENDS
STACKSEGMENTPARASTACK'
STACKENDS
CODESEGMENT
STACK,CS:
CODE
DATA
MOVBX,DATA
MOVDS,BX
LEASI,BLOCK
MOVCX,COUNT
MOVAX,[SI]
CHKMAX:
ADDSI,2
CMP[SI],AX
JGENEXT
MOVMAX,AX
MOVAH,4CH
CODEENDS
实验结果如下:
五、实验习题与思考
1.在装入被调试程序后,如何知道分配给该用户程序的数据段在内存中的位置?
答:
在DEBUG环境中用R命令进行检验。
2.数据区以什么形式存放用符号数的?
以补码形式存放有符号数。
3.修改前、后程序在执行时有何区别(提示:
观察数据指针的变化)
修改前SI递增(顺序比较),修改后SI递减(倒叙比较)。
4.程序执行完毕,结果存放在何处?
内存MAX中。
5.总结一下CS,IP,SS,DS,ES被设置的区别?
CS,DS,SS,ES都用ASSUME伪指令来设置,IP通过ORG伪指令来设置。
6.观察伪指令PARA和ORG的作用。
PARA用来说明本段的段的起始地址能被16整除,即DS:
0000下一行是DS:
0010。
ORG用来指定当前位置的偏移地址。