当前位置:城玮文档网 >述职报告 > 组成实验报告

组成实验报告

时间:2022-07-19 15:45:03 来源:网友投稿

 上海理工大学光电信息与计算机工程学院 《计算机组成》实验报告

 专

 业 计算机科学与技术

 姓名

 陈晓阳

 学

 号 号 15 12 480225

 年

 级 级 5 2015 级

 指导教师 邬春学

 成

 绩: :

 教师签字: :

 目录

 实验一 汇编实验一 ......................................................................................... 错误! 未定义书签。

 实验二 汇编实验二误错ﻩ 错误! 未定义书签。

 实验三 汇编实验三误错ﻩ 错误! 未定义书签。

 实验一

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

 2.2VmsaM7swodniWtfosorciMﻩ三、实验内容 编程计算表达式 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 执行 l1,此时bx=10,ax=30,执行 l1

  mov MAX,bx;如果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〈ax 则执行 L2 否则将 bx值存入MAX

 mov MAX,bx

  L4:cmp ax,dx

 JG L5

  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

  文明;"$olleH' bd gnirtsﻩ key db 125,248,16,8,26;密钥

  ’$:new gnim

 " bd 1gsmﻩ

 ’$:new im

 ' bd 2gsmﻩ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:$’

  "$:new im

 " bd 2gsmﻩ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)

相关热词搜索: 实验 报告