组成实验报告

更新时间:2024-01-30 00:22:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

上海理工大学光电信息与计算机工程学院

《计算机组成》实验报告

专 业计算机科学与技术 姓名 陈晓阳 学 号1512480225 年 级2015级 指导教师邬春学 成 绩: 教师签字:

目录

实验一 汇编实验一 ......................................................................................................................... 5 实验二 汇编实验二 ......................................................................................................................... 9 实验三 汇编实验三 ....................................................................................................................... 15

实验一 汇编实验一

一、实验目的

1)掌握汇编的基本语法 二、实验环境

MicrosoftWindows7MasmV2.2

三、实验内容

编程计算表达式 x=a x b + c - d/(e+f) 其中x、a、b、c、d、e、f均为双字节整数。 地址分别为X、A1、B1、C1、D1、E1、F1

四、实验代码及截图 1)

data segment

;input data segment code here A1 DB 2 B1 DB 1 C1 DB 3 D1 DB 4 E1 DB 1 F1 DB 4 X1 DB ? data ends

stack segment

;input stack segment code here stack ends

code segment

assume cs:code,ds:data,ss:stack

start:

mov ax,data mov ds,ax

;input code segment code here mov AL,A1 MUL BL ADD AL,C1 SUB AL,D1 MOV BL,E1 ADD BL,F1 DIV BL MOV X1,AL mov ah,4ch int 21h code ends end start 1)

实验二 汇编实验二

一、实验目的

学习间接寻址、数组和转移指令的用法 二、实验环境

MicrosoftWindows7MasmV2.2 三、实验内容

1)一个由3个元素组成的整数数组,已经存放在主存的连续存储单元中,数组的起始地址为AS。设AS{10h,20h,30h}。编程实现:将数组AS中的元素向右循环移动一个位置,例如移位后变成{30h,10h,20h}。编程实现:将AS中最大

元素和最小元素分别存于Max和Min中。

2)将字符串source中的内容复制到target中,并显示输出。 四、实验代码及截图 1)

data segment

AS DW 10H,20H,30H ;input data segment code here MAX DW 0

MIN DW 0;数据初始 data ends

stack segment

;input stack segment code here stack ends

code segment

assume cs:code,ds:data,ss:stack start: mov ax,data

mov ds,ax;将data给ds mov cx,0;cx赋初始值0

mov si,offset as;将data偏移地址存到si

mov ax,[si];data内容给ax add si,2;si加2 Li:mov bx,[si] mov [si],ax mov ax,bx add si,2 add cx,1

cmp cx,2 JNZ Li sub si,6

mov [si],ax;将30移位到第一位

mov ax,[si] mov MIN,ax

mov MAX,ax;初始化MIN,MAX add si,2 mov bx,[si] cmp bx,ax

JL L1;bx=ax,把bx值存入MAX add si,2;si后移一个数据 mov dx,[si] cmp bx,dx JG L4

mov MAX,dx;如果bx>dx则执行L4,否则将dx存入MAX L1:add si,2 mov bx,[si] cmp bx,ax

JL L2;bx

L5:mov MIN,dx ;将dx存入MIN L2:mov bx,[si] sub si,2 mov ax,[si] cmp bx,ax

JG L3;bx大于ax则跳转L3,否则将bx存入MIN

mov MIN,bx

L3:mov MIN,ax;此时ax为10,将其存入MIN mov ah,4ch int 21h code ends end start 2)

data segment

source db 'Hello world$' data ends

data1 segment target db 30 dup(?) data1 ends

stack segment

;input stack segment code here stack ends

code segment

assume cs:code,ds:data,ss:stack start: mov ax,data

mov ds,ax;data存入ds mov ax,data1

mov es,ax;data1存入es

lea si,source;source地址存到si lea di,target;target地址存到di mov cx,2 std;DF=1

rep movsb;将si中字符串复制到di中

lea dx,target mov ah,9

int 21h;输出复制得到的字符串

mov ah,4ch int 21h

code ends end start

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)data segment

string db 'Hello$';明文 key db 125,248,16,8,26;密钥 msg1 db ' ming wen:$' msg2 db ' mi wen:$' data ends

stack segment

;input stack segment code here stack ends

code segment

assume cs:code,ds:data,ss:stack start:

mov ax,data mov ds,ax lea dx,msg1 mov ah,09h int 21h lea dx,string mov ah,09h

int 21h;输出加密前明文 mov cx,5 loop1:mov bx,cx mov al,string[bx-1] xor al,key[bx-1] mov string[bx-1],al loop loop1;明文加密 lea dx,msg2 mov ah,09h int 21h lea dx,string mov ah,09h

int 21h;输出加密后的密文 mov cx,5 loop2:mov bx,cx mov al,string[bx-1] xor al,key[bx-1] mov string[bx-1],al loop loop2;解密密文 lea dx,msg1 mov ah,09h int 21h lea dx,string mov ah,09h

int 21h;输出解密的明文 mov ah,4ch int 21h code ends end start

2)data segment

string db 'Hello$';待加密明文 key db -2,2,1,0,-1;密钥 msg1 db ' ming wen:$' msg2 db ' mi wen:$' data ends

stack segment

;input stack segment code here stack ends

code segment

assume cs:code,ds:data,ss:stack start:

mov ax,data mov ds,ax lea dx,msg1 mov ah,09h int 21h lea dx,string mov ah,09h

int 21h;输出加密前的明文 mov cx,5 mov al,0 loop1:mov bx,cx push cx;对cx压栈

mov cl,key[bx-1] cmp cl,al

jl t1;若密钥小于0则跳转到tl

rol string[bx-1],cl;密钥不小于0则左循环移位 jmp s1;跳至sl

t1:neg cl;若密钥小于0,则取补,变为正数进行操作 ror string[bx-1],cl;右循环移位 s1:pop cx;弹栈 loop loop1 lea dx,msg2 mov ah,09h int 21h lea dx,string mov ah,09h

int 21h;输出加密后的密文 mov cx,5 mov al,0 loop2:mov bx,cx push cx;压栈 mov cl,key[bx-1]

cmp cl,al;比较密钥与0的大小 jg t2;若密钥大于0则执行t2 neg cl;密钥不大于0则对cl取补 rol string[bx-1],cl;对密文左循环移位 jmp s2

t2:ror string[bx-1],cl;密钥大于0,对密文右循环移位 s2:pop cx;弹栈 loop loop2 lea dx,msg1 mov ah,09h int 21h

lea dx,string mov ah,09h

int 21h;输出解密后的明文 mov ah,4ch int 21h code ends end start 1)

2)

本文来源:https://www.bwwdw.com/article/a64w.html

Top