组成实验报告.docx
《组成实验报告.docx》由会员分享,可在线阅读,更多相关《组成实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
组成实验报告
上海理工大学光电信息与计算机工程学院
《计算机组成》实验报告
专 业计算机科学与技术
姓名 陈晓阳
学 号
年 级2015级
指导教师邬春学
成绩:
教师签字:
实验一汇编实验一4
实验二汇编实验二7
实验三汇编实验三12
实验一汇编实验一
一、实验目的
1)掌握汇编的基本语法
二、实验环境
MicrosoftWindows7MasmV2.2
三、实验内容
编程计算表达式x=axb+c-d/(e+f)
其中x、a、b、c、d、e、f均为双字节整数。
地址分别为X、A1、B1、C1、D1、E1、F1
四、实验代码及截图
1)
datasegment
;inputdatasegmentcodehere
A1DB2
B1DB1
C1DB3
D1DB4
E1DB1
F1DB4
X1DB
dataends
stacksegment
;inputstacksegmentcodehere
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
;inputcodesegmentcodehere
movAL,A1
MULBL
ADDAL,C1
SUBAL,D1
MOVBL,E1
ADDBL,F1
DIVBL
MOVX1,AL
movah,4ch
int21h
codeends
endstart
1)
实验二汇编实验二
一、实验目的
学习间接寻址、数组和转移指令的用法
二、实验环境
MicrosoftWindows7MasmV2.2
三、实验内容
1)一个由3个元素组成的整数数组,已经存放在主存的连续存储单元中,数组的起始地址为AS。
设AS{10h,20h,30h}。
编程实现:
将数组AS中的元素向右循环移动一个位置,例如移位后变成{30h,10h,20h}。
编程实现:
将AS中最大元素和最小元素分别存于Max和Min中。
2)将字符串source中的内容复制到target中,并显示输出。
四、实验代码及截图
1)
datasegment
ASDW10H,20H,30H;inputdatasegmentcodehere
MAXDW0
MINDW0;数据初始
dataends
stacksegment
;inputstacksegmentcodehere
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax;将data给ds
movcx,0;cx赋初始值0
movsi,offsetas;将data偏移地址存到si
movax,[si];data内容给ax
addsi,2;si加2
Li:
movbx,[si]
mov[si],ax
movax,bx
addsi,2
addcx,1
cmpcx,2
JNZLi
subsi,6
mov[si],ax;将30移位到第一位
movax,[si]
movMIN,ax
movMAX,ax;初始化MIN,MAX
addsi,2
movbx,[si]
cmpbx,ax
JLL1;bxmovMAX,bx;如果bx>=ax,把bx值存入MAX
addsi,2;si后移一个数据
movdx,[si]
cmpbx,dx
JGL4
movMAX,dx;如果bx>dx则执行L4,否则将dx存入MAX
L1:
addsi,2
movbx,[si]
cmpbx,ax
JLL2;bxmovMAX,bx
L4:
cmpax,dx
JGL5
L5:
movMIN,dx;将dx存入MIN
L2:
movbx,[si]
subsi,2
movax,[si]
cmpbx,ax
JGL3;bx大于ax则跳转L3,否则将bx存入MIN
movMIN,bx
L3:
movMIN,ax;此时ax为10,将其存入MIN
movah,4ch
int21h
codeends
endstart
2)
datasegment
sourcedb'Helloworld$'
dataends
data1segment
targetdb30dup()
data1ends
stacksegment
;inputstacksegmentcodehere
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax;data存入ds
movax,data1
moves,ax;data1存入es
leasi,source;source地址存到si
leadi,target;target地址存到di
movcx,2
std;DF=1
repmovsb;将si中字符串复制到di中
leadx,target
movah,9
int21h;输出复制得到的字符串
movah,4ch
int21h
codeends
endstart
1)
2)
实验三汇编实验三
一、实验目的
1)学习逻辑运算指令和移位指令的用法
二、实验环境
MicrosoftWindows7MasmV2.2
三、实验内容
1)将一个指定字符串进行异或加密,每个单字符的密钥(0-255)保存在数组Key中。
程序运行过程:
显示明文,显示所产生的密文,显示解密后的明文。
例如key={125,248,16,8,26}
2)将一个指定字符串进行循环移位加密。
每个单字符的密钥(-7~7)保存在数组Key中。
程序运行过程:
显示明文,显示所产生的密文,显示解密后的明文.例如key={-2,2,1,0,-1},其中负数表示循环左移,正数表示循环右移,0不变,数字表示移动的位数
四、实验代码及截图
1)datasegment
stringdb'Hello$';明文
keydb125,248,16,8,26;密钥
msg1db'mingwen:
$'
msg2db'miwen:
$'
dataends
stacksegment
;inputstacksegmentcodehere
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
leadx,msg1
movah,09h
int21h
leadx,string
movah,09h
int21h;输出加密前明文
movcx,5
loop1:
movbx,cx
moval,string[bx-1]
xoral,key[bx-1]
movstring[bx-1],al
looploop1;明文加密
leadx,msg2
movah,09h
int21h
leadx,string
movah,09h
int21h;输出加密后的密文
movcx,5
loop2:
movbx,cx
moval,string[bx-1]
xoral,key[bx-1]
movstring[bx-1],al
looploop2;解密密文
leadx,msg1
movah,09h
int21h
leadx,string
movah,09h
int21h;输出解密的明文
movah,4ch
int21h
codeends
endstart
2)datasegment
stringdb'Hello$';待加密明文
keydb-2,2,1,0,-1;密钥
msg1db'mingwen:
$'
msg2db'miwen:
$'
dataends
stacksegment
;inputstacksegmentcodehere
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
leadx,msg1
movah,09h
int21h
leadx,string
movah,09h
int21h;输出加密前的明文
movcx,5
moval,0
loop1:
movbx,cx
pushcx;对cx压栈
movcl,key[bx-1]
cmpcl,al
jlt1;若密钥小于0则跳转到tl
rolstring[bx-1],cl;密钥不小于0则左循环移位
jmps1;跳至sl
t1:
negcl;若密钥小于0,则取补,变为正数进行操作
rorstring[bx-1],cl;右循环移位
s1:
popcx;弹栈
looploop1
leadx,msg2
movah,09h
int21h
leadx,string
movah,09h
int21h;输出加密后的密文
movcx,5
moval,0
loop2:
movbx,cx
pushcx;压栈
movcl,key[bx-1]
cmpcl,al;比较密钥与0的大小
jgt2;若密钥大于0则执行t2
negcl;密钥不大于0则对cl取补
rolstring[bx-1],cl;对密文左循环移位
jmps2
t2:
rorstring[bx-1],cl;密钥大于0,对密文右循环移位
s2:
popcx;弹栈
looploop2
leadx,msg1
movah,09h
int21h
leadx,string
movah,09h
int21h;输出解密后的明文
movah,4ch
int21h
codeends
endstart
1)
2)