实验报告格式及作业电子版.docx
- 文档编号:27671001
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:65
- 大小:75.07KB
实验报告格式及作业电子版.docx
《实验报告格式及作业电子版.docx》由会员分享,可在线阅读,更多相关《实验报告格式及作业电子版.docx(65页珍藏版)》请在冰豆网上搜索。
实验报告格式及作业电子版
云南大学软件学院
2009-2010学年下学期
《计算机组成原理与汇编语言程序设计》
实验报告
姓名:
学号:
班级:
序号:
实验内容和成绩表
序号
实验项目
成绩
签字
1
debug调试环境
2
80x86指令使用
3
80x86伪指令使用
4
80x86汇编程序开发
5
分支、循环、子程序、宏程序设计
6
运算器实验
7
存储器实验
8
综合设计实验
要求:
1.所有实验要求提交打印的实验报告;
2.对于实验的过程和结果应进行必要的分析说明;
3.实验内容要求独立完成,发现抄袭,所有涉及者本次实验以零分计算。
本实验课程如果有3次零分,则期末总评成绩不合格;
4.所有试验内容,除程序截图以外,都要求手写;
5.》》》》
实验一debug调试环境实验分数:
1.使用例子说明debug的t、p、g命令的区别;
2.使用a命令在地址1000:
10(16进制)开输入下面的汇编指令,给出各条指令的保存地址和目标代码;
ADDAL,BL
PUSHAX
POPDX
MOVAH,02
INT21
3.对notepad.exe(记事本)程序进行分析;给出notepad.exe程序的第1到第10条汇编指令;并分析下面地址中保存的数据含义;
(1)CS:
5C
(2)CS:
80(3)CS:
81
提示:
使用N、L、U命令
4.将下面的指令输入到地址1000:
100开始的地址中,使用w命令以文件名保存输入的指令,并在计算机中直接执行程序,给出程序的输出;
movdl,41
movah,02
int21
movdl,42
int21
movdl,43
int21
int20
5.使用D命令分别显示地址1000:
10和1000:
100开始的20H个内存单元中的数据,并用C命令对上面两段内存单元中数据进行比较,给出结果;
6.输入下面的指令并执行,给出指令执行后标志寄存器中OFSFZFAFPFCF的取值并对结果进行分析;
movax,5431
movbx,456a
addax,bx
实验二80x86指令使用实验分数:
1.xlat指令使用方法:
•先建立一个字节ascii码表格;
例:
在debug建字符0~9的ascii码可以定义为:
db‘0123456789’
•表格第一个字节偏移地址存入str_table送入BX寄存器;
•需要转换代码的序号(相对于表格首地址位移量)存入AL;(表中第一个元素的序号为0)
•执行xlat指令后,表中指定序号的元素存于AL中。
(AL)为转换的代码。
实验内容:
使用xlat汇编指令编写程序段求大些字母A~Z中任意一个字符的ascii码;
DATASEGMENT
STR_TABLEDB'ABCDEFGHIJKLMNOPQESTUVWXYZ'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,1AH
MOVAH,0H
MOVBX,OFFSETSTR_TABLE
LOP:
MOVAL,AH
XLAT
INCAH
LOOPLOP
INT20H
CODEENDS
ENDSTART
对应在debug中的代码:
2.使用标志位传送指令,编程序段将标志位寄存器的低八位的值存入内存单元ds:
1000h中,然后将标志位寄存器的低八位取值设置位为10101010。
-a
13F5:
0100lahf
13F5:
0101mov[1000],ah
13F5:
0105movah,aa
13F5:
0107sahf
13F5:
0108
-g108
AX=AA00BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=13F5ES=13F5SS=13F5CS=13F5IP=0108NVUPEINGNZNAPONC
13F5:
01080000ADD[BX+SI],ALDS:
0000=CD
3.使用列子说明mov指令和lea指令的不同以及相同之处;
4.将dx、ax两个寄存器组合构成32位数据(dx中是高位)实现rol和rcr移位。
Rol方法一:
-A
1395:
0100MOVAX,4321
1395:
0103MOVDX,8765
1395:
0106SHLDX,1
1395:
0108RCLAX,1
1395:
010AADCDX,0
1395:
010D
-G10D
AX=8643BX=0000CX=0000DX=0ECASP=FFEEBP=0000SI=0000DI=0000
DS=1395ES=1395SS=1395CS=1395IP=010DNVUPEIPLNZNAPENC
1395:
010D0000ADD[BX+SI],ALDS:
0000=CD
Rcr:
-a
13F5:
0100movax,4321
13F5:
0103movdx,8765
13F5:
0106rcrdx,1
13F5:
0108rcrax,1
13F5:
010A
-g10a
AX=A190BX=0000CX=0000DX=43B2SP=FFEEBP=0000SI=0000DI=0000
DS=13F5ES=13F5SS=13F5CS=13F5IP=010AOVUPEIPLNZNAPOCY
13F5:
010A0000ADD[BX+SI],ALDS:
0000=CD
5.在debug中定义内存单元如下,统计其中0的个数;
dw90ab
-a
13F5:
0100dw90ab
13F5:
0102movcx,10
13F5:
0105moval,0
13F5:
0107shlwoptr[100],1
13F5:
010Bjnc111
13F5:
010Dloop107
13F5:
010Fint20
13F5:
0111incal
13F5:
0113jmp10d
13F5:
0115
-g10d
AX=0000BX=0000CX=0010DX=0000SP=FFEEBP=0000SI=0000DI=0002
DS=13F5ES=13F5SS=13F5CS=13F5IP=010DOVUPEIPLNZNAPECY
13F5:
010DE2F8LOOP0107
-p
AX=0009BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0002
DS=13F5ES=13F5SS=13F5CS=13F5IP=010FOVUPEIPLZRNAPECY
13F5:
010FCD20INT20
-
6.使用例子说明求操作数的补码和相反数运算的不同。
例分别求ax寄存器中数据的相反数和补码。
1求相反数:
-a
13F5:
0100movax,aaaa
13F5:
0103negax
13F5:
0105
-g105
AX=5556BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=13F5ES=13F5SS=13F5CS=13F5IP=0105NVUPEIPLNZACPECY
13F5:
01050000ADD[BX+SI],ALDS:
0000=CD
-
2求负数的补码:
-a
-a
13F5:
0100movax,aaaa
13F5:
0103subax,0
13F5:
0106js10a
13F5:
0108int20
13F5:
010Axorax,7fff
13F5:
010Dincax
13F5:
010Ejmp108
13F5:
0110
-g108
AX=D556BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=13F5ES=13F5SS=13F5CS=13F5IP=0108NVUPEINGNZNAPENC
13F5:
0108CD20INT20
-
3正数的补码:
-a
13F5:
0100movax,7aaa
13F5:
0103subax,0
13F5:
0106js10a
13F5:
0108int20
13F5:
010Axorax,7fff
13F5:
010Dincax
13F5:
010Ejmp108
13F5:
0110
-g108
AX=7AAABX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=13F5ES=13F5SS=13F5CS=13F5IP=0108NVUPEIPLNZNAPENC
13F5:
0108CD20INT20
-
7.编写程序段,查找字符串中是否含有字符"&",若有,将字符"&"用空格字符代替。
字符串定义如下:
db‘nfviru328=0ffsn@#$%^&*()_dfslk$’
extrasegment
str_tabledb'nfviru328=0ffsn@#$%^&*()_dfslk$'
extraends
codesegment
assumecs:
code,es:
extra
start:
movax,extra
moves,ax
movcx,1fh
moval,'&'
movah,20h
movdi,offsetstr_table
cld
lop1:
scasb
jzfound
lop2:
looplop1
jmpdone
found:
decdi
moves:
[di],ah
incdi
jmplop2
done:
int20h
codeends
endstart
对应在debug中的代码
经过调试后显示
8.编写程序将内存XWANG中的10个字节数据的位置颠倒过来(即将第1个字节和第10个字节的内容进行交换,第2个字节和第9个字节的内容进行交换……),xwang定义如下:
db‘abcdefg’
DATAsegment
xwangdb'abcdefghij'
DATAends
CODEsegment
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
movcx,5h
movsi,0h
movdi,9h
lop:
moval,[si]
xchgal,[di]
mov[si],al
decdi
incsi
looplop
movah,4ch
INT21H
codeends
endSTART
对应在debug中的代码
-
-
-
实验三80x86伪指令使用实验分数:
1.在内存中地址为ds:
100开始的位置定义下面3个数组A,B,C,并完成有关的操作:
数组A:
一个长度为10个元素,存储数据类型为字符其初始值为10个任意的特殊符号;
数组B:
一个长度为5个元素,存储指针(地址)类型的指针数组其初始值任意;
数组C:
一个2行5列的二维数组,存储整数类型(小于等于65536)数据其初始值为零;
操作:
(1)取数组A中的第6个元素到内存ds:
200中;
(2)取数组B中第4个指针数据到DX寄存器中;
(3)使用数组A,B的值对数组C进行初始化;
.MODELSMALL
.DATA
ADR1DB?
ORG10H
ADR2DB?
ORG20H
ADR3DB?
ORG66H
ADR4DB?
ORG88H
ADR5DB?
ORG100H
ADB'!
%#%^^u)*('
BDWADR1,ADR2,ADR3,ADR4,ADR5
CDW2*5DUP(0)
ORG200H
DDB?
.CODE
START:
MOVAX,@DATA
MOVDS,AX
MOVES,AX
movAL,A+5
MOVD,AL
MOVDX,B+6
MOVCX,20
CLD
LEASI,A
LEADI,C
REPMOVSB
MOVAH,4CH
INT21H
ENDSTART
2.使用子程序结构实现下面的程序设计:
以16进制数的形式显示DX寄存器中的值;
.MODELSMALL
.CODE
DISPDXPROC
ROLBX,CL
MOVDL,BL
ANDDL,0FH
ADDDL,30H
CMPDL,39H
JBEDONE
ADDDL,7H
DONE:
MOVAH,02H
INT21H
RET
DISPDXENDP
BEGIN:
MOVDX,0ABCDH
MOVBX,DX
MOVCH,4
MOVCL,4
AGAIN:
CALLDISPDX
DECCH
JNZAGAIN
MOVAH,4CH
INT21H
ENDBEGIN
方法二:
以INT6AH的形式调用子程序
.MODELSMALL
.CODE
DISPDXPROC
ROLBX,CL
MOVDL,BL
ANDDL,0FH
ADDDL,30H
CMPDL,39H
JBEDONE
ADDDL,7H
DONE:
MOVAH,02H
INT21H
IRET;注意要换成IRET
DISPDXENDP
BEGIN:
MOVDX,0ABCDH
MOVBX,DX
MOVCH,4
MOVCL,4
LEADX,DISPDX
MOVAX,@CODE
MOVDS,AX
MOVAL,6AH
MOVAH,25H
INT21H
AGAIN:
INT6AH
DECCH
JNZAGAIN
MOVAH,4CH
INT21H
ENDBEGIN
3.使用宏定义结构实现下面的程序设计:
以16进制数的形式显示DX寄存器中的值;
DISPDXMACRO
ROLBX,CL
MOVDL,BL
ANDDL,0FH
ADDDL,30H
CMPDL,39H
JBEDONE
ADDDL,7H
DONE:
MOVAH,02H
INT21H
ENDM
.MODELSMALL
.CODE
BEGIN:
MOVDX,0ABCDH
MOVBX,DX
MOVCH,4
MOVCL,4
AGAIN:
DISPDX
DECCH
JNZAGAIN
MOVAH,4CH
INT21H
ENDBEGIN
4.对2,3题中的程序进行分析比较,归纳总结2,3中的子程序结构和宏结构程序设计的优缺点;
实验四80x86汇编语言程序开发实验分数:
1.汇编语言程序上机过程,实验步骤:
(1)用用文字编辑工具(EDITPLUS)将源程序输入,保存文件其扩展名为.ASM。
(2)用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
(3)显示1产生的.LST文件,分析其内容;
(4)用LINK将.OBJ文件连接成可执行的.EXE文件。
(5)在DOS状态下运行LINK产生的.EXE文件。
即在屏幕上显示标题并提示你按键。
每按一键在屏幕显示二个相同的字符,但小写字母被改成大写。
按ESC键可返回DOS。
若未出现预期结果,用DEBUG检查程序。
程序:
datasegment
messagedb'Thisisasampleprogramofkeyboardanddisply'
db0dh,0ah,'Pleasestrikethekey!
',0dh,0ah,'$'
dataends
stacksegmentparastack'stack'
db50dup(?
)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movdx,offsetmessage
movah,9
int21h
again:
movah,1
int21h
cmpal,1bh
jeexit
cmpal,61h
jcnd
cmpal,7ah
jand
andal,11011111b
nd:
movdl,al
movah,2
int21h
jmpagain
exit:
movah,4ch
int21h
codeends
endstart
问题:
(1)总结开发一个汇编程序需注意的问题;
(2)伪指令:
segment,ends,assume,end,offset,duo以及标号:
start,again的作用;
(3)了解汇编过程产生的扩展名分别为的文件的功能;
2.统计学生成绩:
设有20个学生的成绩(可以自己规定分数),试编写程序分别统计低于60分,60~69,70~79,80~89,90~99分及100分的人数,并存放到S1,S2,S3,S4,S5,S6单元中。
.MODELSMALL
.DATA
RESULTDB56,69,84,82,73,88,99,63,100,80
DB20,75,85,91,98,70,93,55,77,63
COUNT=$-RESULT
S1DB0
S2DB0
S3DB0
S4DB0
S5DB0
S6DB0
.CODE
START:
MOVAX,@DATA
MOVDS,AX
MOVCX,COUNT
LEASI,RESULT
LOP:
CMPBYTEPTR[SI],60
JBNUM1
CMPBYTEPTR[SI],70
JBNUM2
CMPBYTEPTR[SI],80
JBNUM3
CMPBYTEPTR[SI],90
JBNUM4
CMPBYTEPTR[SI],100
JBNUM5
INCS6
JMPAGAIN
NUM1:
INCS1
JMPAGAIN
NUM2:
INCS2
JMPAGAIN
NUM3:
INCS3
JMPAGAIN
NUM4:
INCS4
JMPAGAIN
NUM5:
INCS5
AGAIN:
INCSI
LOOPLOP
MOVAH,4CH
INT21H
ENDSTART
方法二(交互式输入输出):
DISPLAYMACROS
LOCALOUTPUT,EXIT
CMPS,10
JBOUTPUT1
ADDS,6;16进制转10进制
MOVDL,S
MOVCL,4
SHRDL,CL
ADDDL,'0'
MOVAH,2
INT21H
OUTPUT:
MOVDL,S
ANDDL,0FH
ADDDL,'0'
MOVAH,2
INT21H
EXIT:
LEADX,STRING4
MOVAH,9
INT21H
ENDM
.MODELSMALL
.DATA
STRING1DB'PleaseInputScore:
','$';提示输入
STRING2DB0AH,'0~6060~7070~8080~9090~100100',0AH,0DH,'$'
STRING3DB'$';空格
SCOREDW20DUP(0);分配存放空间
S1DB0;定义变量
S2DB0
S3DB0
S4DB0
S5DB0
S6DB0
.CODE;代码段
START:
MOVAX,@DATA
MOVDS,AX
MOVDX,OFFSETSTRING1;显示提示输入
MOVAH,09H
INT21H;寄存器清零
XORBX,BX
XORCX,CX
XORSI,SI
XORDI,DI
INPUT:
MOVAH,1;输入一个字符
INT21H
CMPAL,0DH;是否为回车键
JZOVER;是就跳到OVER
CMPAL,20H;是否为空格
JZSAVE;是就跳到SAVE
SUBAL,30H;变为真数
MOVCL,4
SHLBX,CL;左移四位,变为BCD码
ADDBL,AL
JMPINPUT
SAVE:
MOVSCORE[SI],BX;保存到SCORE中
ADDSI,2
INCDI
XORBX,BX
JMPINPUT
OVER:
MOVSCORE[SI],BX;保存最后一个数据,并存放到SCORE中
INCDI
PUSHDI
POPCX;设置计数器
MOVBX,OFFSETSCORE
COMPARE:
MOVAX,[BX]
CMPAX,60H;与60比较
JLFIVE;小于就跳到FIVE
CMPAX,70H;与70比较
JLSIX;小于就跳到SIX
CMPAX,80H;与80比较
JLSEVEN;小于就跳到SEVEN
CMPAX,90;与90比较
JLEIGHT;小于就跳到EIGHT
CMPAX,100H;与100比较
JNENINE;不为0就是90到99
INCS6;100时【S10+1】
JMPNEWDATA;跳到NEWDATA
FIVE:
INCS1;小于60时【S5+1】
JMPNEWDATA;跳到NEWDATA
SIX:
INCS2;大于等于60小于70时【S6+1】
JMPNEWDATA;跳到NEWDATA
SEVEN:
INCS3;大于等于70小于80时【S7+1】
JMPNEWDATA;跳到NEWDATA
EIGHT:
INCS4;大于等于80小于90时【S8+1】
JMPNEWDATA;跳到NEWDATA
NINE:
INCS5;大于等于90小于100时【S9+1]
NEWDATA:
ADDBX,2;取下个数
LOOPCOMPARE;循环COMPARE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 格式 作业 电子版