岗位职责 实施方案 自查报告 整改措施 先进事迹材料 应急预案 工作计划 调研报告 调查报告 工作汇报 其他范文
首页 > 其他范文 > 其他范文

合集实验4-9

作者:yasi时间:2021-01-11 下载本文

实验报告 学院(系)名称:计算机科学与工程学院 姓名 学号 专业 信息安全 班级 1 班 实验 项目 实验 4:[bx]和 loop 的使用 实验 5:编写、调试具有多个段的程序 实验 6:实践课程中的程序 实验 7:寻址方式在结构数据访问中的应用 实验 8:分析一个奇怪的程序 实验 9:根据材料编程 课程名称 汇编语言 课程 代码 0662633 实验时间 2018 年 05 月 18 日 2018 年 05 月 22 日 2018 年 05 月 29 日 2018 年 06 月 05 日 2018 年 06 月 08 日 2018 年 06 月 12 日 实验 地点 #7-212 考 核标 准 实验准备(实验目的/工具熟悉情况)10 分 实验过程(实验方案可行性及步骤完整性)40 分 实验报告(实验内容丰富度与格式清晰度)30 分 实验结果(结论正确性以及分析合理性)20 分 成绩 教师签字:

考核内容 评价实验目的是否明确,实验工具是否清晰了解以及熟悉情况 ○可行,完整 ○可行,不完整 ○不可行,不完整 ○丰富,清晰 ○较丰富,较清晰 ○丰富,不清晰 ○不丰富,不清晰 ○结论正确,分析合理 ○结论正确,分析不充分 ○结论不正确,分析不合理

1.实验目的 实验 4:

1)熟练掌握编写汇编语言原程序的基本方法和基本框架。

2)掌握[bx]访问内存的方法和 loop 循环指令。

3)熟练使用 DEBUG 调试程序跟踪循环指令的执行。

实验 5:

1)熟练掌握编写汇编语言源程序的基本方法和基本框架。

2)掌握编写具有多个段的程序。

实验 6:

1)熟练掌握使用多种不同的寻址方式。

2)掌握二重循环问题的处理。

实验 7:

1)掌握寻址方式在结构化数据访问中的应用。

2)熟练使用汇编语言的知识和编程的技巧 实验 8、9:

1)熟练掌握各种转移指令。

2)深入理解转移指令的原理。

2.实验工具 1)PC 计算机 2)Dos 系列操作系统和 Debug 调试工具以及 Masm 编译器 3.实验方案 实验 4:参见教材 121 页实验 4 内容 实验 5:参见教材 133 页实验 5 内容 实验 6:参见教材 160 页实验 6 内容 实验 7:参见教材 172 页实验 7 内容 实验 8:参见教材 187 页实验 8 内容 实验 9:参见教材 187 页实验 9 内容

4.实验步骤:

实验 4 4 :

(1)(2)查看内存 0:200~0:23F 的内容 编写程序 编译 连接

在 debug 运行程序,查看修改内存 0:200~0:23F 内容的结果(3)查看内存 0:200~0:216 内容 查看”mov ax,4c00h”之前的指令 将程序编译,连接,在 debug 上执行程序并查看修改后的 0:200~0:216 内容 复制的是 0B3B:0~0B3B:17 的内容,有 23 个字节,通过在 debug 上查看指令可算得要复制的字节数 实验 5 5 :

(1).将下面的程序编译链接,用 Debug 加载、跟踪,然后回答问题:

assume cs:code,ds:data,ss:stack data segment dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H data ends stack segment dw 0,0,0,0,0,0,0,0 stack ends code segment start: mov ax, stack mov ss,ax mov sp,16 mov ax, data mov ds,ax push ds:[0] push ds:[2] pop ds:[2] pop ds:[0] mov ax,4c00h int 21h code ends end start

① CPU 执行程序,程序返回前,data 段中的数据为多少?(不变)② CPU 执行程序,程序返回前,cs=__144ch_、ss=__144bh___、ds=__144ah___.③ 该程序加载后,code 段的段地址为 X,则 data 段的段地址为___X-1_____,stack 段的段地址为____X-2____。

(2).将下面的程序编译连接,用 Debug 加载、跟踪,然后回答问题:

assume cs:code,ds:data,ss:stack data segment dw 0123H,0456H data ends stack segment dw 0,0 stack ends code segment start: mov ax, stack mov ss,ax mov sp,16 mov ax,data mov ds,ax push ds:[0] push ds:[2] pop ds:[2] pop ds:[0] mov ax,4c00h int 21h code ends end start

① CPU 执行程序,程序返回前,data 段中的数据为多少?(不变)② CPU 执行程序,程序返回前,cs=___144ch_、ss=__144bh__、ds=_144ah___.③ 该程序加载后,code 段的段地址为 X,则 data 段的段地址为__X-2___,stack 段的段地址为___X-1_____。

④ 对于如下定义的段:

name segment ……… name ends

如果段中的数据占 N 个字节,则程序加载后,该段实际占有的空间为__16N_。

(3).将下面的程序编译连接,用 Debug 加载、跟踪,然后回答问题:

assume cs:code,ds:data,ss:stack code segment start: mov ax, stack mov ss,ax mov sp,16 mov ax, data mov ds,ax push ds:[0] push ds:[2] pop ds:[2] pop ds:[0] mov ax,4c00h int 21h code ends data segment dw 0123H,0456H data ends stack segment dw 0,0 stack ends end start

① CPU 执行程序,程序返回前,data 段中的数据为多少?(不变)② CPU 执行程序,程序返回前,cs=___144ch__、ss=__144bh__、ds=__144ah__.③ 设程序加载后,code 段的段地址为 X,则 data 段的段地址为_X-2_______,stack 段的段地址为___X-1_____。

(4)如果使用 end 替换 end start,程序(3)仍然可以执行。因为如果不指名入口,程序则从加载进内存的第一个单元起开始执行,但因为程序中有部分是作为数据使用的,如果不指明入口,CPU 会把这些数值数据当成汇编指令执行,因此有必要通过 start 来指明入口。

(5).程序如下,编写 code 段中的代码,将 a 段和 b 段中的数据依次相加,将结果存到 c 段中。

assume cs:code a segment db 1,2,3,4,5,6,7,8 a ends b segment db 1,2,3,4,5,6,7,8 b ends c segment db 0,0,0,0,0,0,0,0 c ends code segment start: mov ax,a mov ds,ax mov si,0 mov di,20h mov cx,8 s: mov al,ds:[si] add al,ds:[si + 10h] mov ds:[di],al inc si inc di loop s mov ax,4c00h int 21h code ends end start

(6)编写 code 段中的代码,用 push 指令将 a 段中的前 8 个字型数据,逆序存储到 b 段中。

assume cs:code a segment dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh a ends b segment dw 0,0,0,0,0,0,0,0 b ends code segment start: mov ax,b mov ss,ax mov sp,10h mov ax,a mov ds,ax mov di,0 mov cx,8 s: push ds:[di] add di,2 loop s mov ax,4c00h int 21h code ends end start

实验 6 6 :

7.3 以字符形式给出的数据(7.1)

7.4 大小写转换的问题

7.5[bx+idata]问题 7.1

7.7 问题 7.2 用 si 和 di 实现将字符串”welcome to masm!”复制到它后面的数据区

7.7 用更少的代码,实现问题 7.2 中的程序

7.9[bx+si+idata]和[bx+di+idata]问题 7.5

(2 2)编程:完成问题 9 7.9 中的程序 assume cs:codesg,ds:datasg,ss:stacksg stacksg segment dw 0,0,0,0,0,0,0,0 stacksg ends datasg segment db "1.display " db "2.brows " db "3.replace "

db "4.modify " datasg ends codesg segment start: mov ax,datasg mov ds,ax mov si,0 mov cx,5 s0: push cx mov bx,0 mov cx,4 s1: mov al,[bx][si].3 and al,11011111B mov [bx][si].3,al add bx,10h loop s1 inc si pop cx loop s0 mov ax,4c00h int 21h codesg ends end start

实验 7 7 :

实现代码如下:

assume cs:codesg data segment db "1975","1976","1977","1978","1979","1980","1981","1982","1983" db "1984","1985","1986","1987","1988","1989","1990","1991","1992" db "1993","1994","1995" dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,15257,17800 data ends table segment db 21 dup("year summ ne ?? ")table ends codesg segment start: mov ax,data mov ds,ax mov ax,table mov es,ax mov cx,21 mov bx,0 mov si,0 mov di,0 s0: mov al,[bx] mov es:[di],al mov al,[bx+1] mov es:[di+1],al mov al,[bx+2] mov es:[di+2],al mov al,[bx+3] mov es:[di+3],al

mov ax,54h[bx] mov dx,56h[bx] mov es:5h[di],ax mov es:7h[di],dx mov ax,0A8h[si] mov es:0Ah[di],ax mov ax,54h[bx] mov dx,56h[bx] push cx mov cx,0A8h[si] div cx pop cx mov es:0Ch[di],ax add si,2 add di,16 add bx,4 loop s0 mov ax,4c00h int 21h codesg ends end start data 段中的数据:

程序执行前 table 段中的数据:

运行后 table 段中的数据:

实验 8 8 :

assume cs:codesg codesg segment mov ax,4c00h int 21h start: mov ax,0 s: nop nop mov di,offset s mov si,offset s2 mov ax,cs:[si] mov cs:[di],ax s0: jmp short s

s1: mov ax,0 int 21h mov ax,0 s2: jmp short s1 nop codesg ends end start

实验 9 9 :

assume cs:code,ds:data,ss:stack data segment db "welcome to masm!" db 02h,24h,71h data ends stack segment dw 8 dup(0)stack ends code segment start: mov ax,data mov es,ax

mov ax,0B800h mov ds,ax mov bx,0 mov si,10h mov cx,3 s0: mov ah,es:[si] push cx push si mov cx,16 mov si,0 mov di,0 s1: mov al,es:[di];字符放在 al 里;mov ds:[bx+si],al;低字节放字符 mov ds:[bx+si],ax;mov ds:[bx+si+1],ah;高位字节存放颜色 add si,2 add di,1 loop s1 pop si pop cx add si,1h add bx,0a0h add dx,1h loop s0 all: jmp short all mov ax,4c00h int 21h code ends end start

5.实验结论与分析:

实验 4 4 :

掌握了[bx]访问内存的方法和 loop 循环指令。

实验 5 5 :

将程序中的数据、代码、栈放入不同的段,可以使编写的程序更加有逻辑性,他人容易看懂,也更好的 debug 进行调试,跟踪程序的执行过程。

实验 6 6 :

熟练掌握使用多种不同的寻址方式。

掌握二重循环问题的处理。

实验 7 7 :

掌握寻址方式在结构化数据访问中的应用。

实验 8 8 :

程序能执行正确返回,因为 start 后的 7、8 行将 s2 处的代码写入了 s 处的两个空字节单元,而内容为 EBF0,意思是从将当前 IP 的值赋成(IP)-F0(八位位移补码形式),赋值后 IP 指向 4c00h,然后程序结束。

实验 9 9 :

熟练掌握各种转移指令。

深入理解转移指令的原理。

合集实验9

密度实验合集

合集实验指导书

精选实验工作计划合集八篇

关于实验工作计划合集6篇

《关于实验工作计划合集6篇.docx》
关于实验工作计划合集6篇
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
相关文章
猜你喜欢