汇编语言 实验五

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=076C,SS=076B,DS=076A 。

③设程序加载后,CODE段的段地址为X,则DATA段的段地址为 X-2 ,STACK段的段地址为 X-1 。

(1)对比程序执行后data段的数据和执行前的数据,发现数据不变。因为先执行出栈操作两次,再执行入栈操作两次,两次的顺序相反,正好将先出栈的数据后进栈,后出栈的数据先进栈。所以data中的数据没有发生变化。

(2)通过执行后的结果可知cs=076C,ss=076B,ds=076A

(3)通过第二小问的结构可推断出 DATA段的段地址为 X-2 ,STACK段的段地址为 X-1 。

2.对要求的程序进行编译,连接,用debug加载,跟踪,然后回答问题。

(1)在程序返回前,我们用d命令查找data数据 发现其中的值并没有发生改变

(2)在程序返回前我们可以发现,cs=076C ,ss=076B,ds=076A

(3)该程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1

(4)对于如下定义的段:

name segment

...

name ends

如果段中的数据占N个字节,那么程序加载之后,该段的实际占有的空间为(N/16+1)*16。因为我们在分配空间时使用16个字节为单位的,所以不足16的时候仍然是分配16个字节来使用。

3. 对要求的程序进行编译,连接,用debug加载,跟踪,然后回答问题。

(1)对比程序执行后data段的数据和执行前的数据,发现数据不变。因为先执行出栈操作两次,再执行入栈操作两次,两次的顺序相反,正好将先出栈的数据后进栈,后出栈的数据先进栈。所以data中的数据没有发生变化。

(2)通过执行后的结果可知cs=076A,ss=076E,ds=076D

(3)通过第二小问的结构可推断出 DATA段的段地址为 X+3 ,STACK段的段地址为 X+4 。

4.如果将(1)、(2)、(3)题中的最后一条伪指令“end start”改为“end”(也就是说,不指明程序的入口),则哪个程序仍然可以正确执行?请说明原因。

答:第三条程序仍然可以正确执行,如果不指明入口位置,则程序从所分配的空间开始执行,前2个是数据段,只有从第3条开始是指令代码。1,2题是将数据段写在前面,但是3题是将数据段写在后面,将指令代码写在前面。所以,第三条程序仍然可以正确执行。

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

执行所有的代码后查看c段的值。

6.程序如下,编写code段中代码,用PUSH指令将A段中的前8个字型数据,逆序存储到B段中。

得到结果。

总结:这次实验做的不顺利,尤其是第5,6个实验。此次实验让我更加了解了段地址以及各种语言的运用,收获很大。

原文地址:https://www.cnblogs.com/mingyuliunian/p/10046825.html

时间: 2024-10-08 09:01:43

汇编语言 实验五的相关文章

汇编语言实验五

实验任务一 1.利用debug加载.跟踪程序 (1)先利用r命令来查看各个寄存器的值 (2)从cx中可知道程序的长度,用cx中的值减去20h(数据段和栈段已分配的空间)得到代码段的长度,用u命令精确反汇编 (3)先执行到000D之前,看看ds是否已成功指向数据段 (4)从上图可以看到ds已指向数据段,然后我们接着执行到程序返回前,即到001D之前,再查看一次数据段的内容 (5)从上图可以看到,数据段没有发生变化 2.书上的问题解答: (1)程序返回前,data段中的数据为 23 01 56 04

MySQL数据库实验五:数据更新

实验五   数据更新 一.实验目的 掌握数据更新操作的用法. 二.实验环境 三.实验示例 1.?往基本表SC中插入元组. ①    INSERT INTO S(S#,SNAME,AGE,SEX) VALUES('S36','GU',20,'M'): ②   INSERT INTO SC(S#,C#) VALUES('S5','C8'): ③        INSERT INTO SC VALUES('S4','C4',85), ('S3','C6',90), ('S7','C2',70): ④

《信息安全系统设计基础》实验五

<信息安全系统设计基础>实验五 简单嵌入式WEB 服务器实验 班级:1452 姓名:20415208蔡野 20145235李涛 20145230熊佳伟 实验日期:2016.12.1 时间:10:10-12:30 实验序号:5 实验目的: 掌握在 ARM 开发板实现一个简单 WEB 服务器的过程 . 学习在 ARM 开发板上的 SOCKET 网络编程 . 学习 Linux 下的 signal()函数的使用 . 实验内容 阅读并理解源代码 进入/arm2410cl/exp/basic/07_htt

CCNP实验五:修改OSPF各类型路由的管理距离

一:基本配置 r1(config)#router ospf 1 r1(config-router)#net 1.1.0.0 0.0.255.255 area 1 r1(config-router)#net 12.1.1.1 0.0.0.0 area 0 r1(config-router)#redistribute connected subnets r2(config)#router ospf 1 r2(config-router)#net 12.1.1.2 0.0.0.0 area 0 r2(

20145331实验五 Java网络编程及安全

实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统 4.结队伙伴:20145333赵嘉鑫 博客地址:http://home.cnblogs.com/u/5301z/ 5.分工:自己负责服务端,伙伴负责客户端 实验要求 1.基于Java Socket实现安全传输 2.基于TCP实现客户端和服务器,结对编程一人负责客户端,一人负责服务器 3.使用Git进行版本控制 4.选择对称算法进行数据加解密. 5.选择非对称算法对对称加密密

20145301实验五 Java网络编程及安全

北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.05.06 18:30-21:30 实验名称:实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务器的公钥加密,计算明文的Hash函数值,一起传送给客户端 4.客户端用RSA公钥密码中服务器的私钥解密DES的,秘钥,用秘钥对密文进行解密,得出明文.计算

20145321 实验五实验报告

20145321 实验五实验报告 实验五 Java网络编程 1.客户端步骤: 建立网络连接 交换数据:加密使用AES或者DES/AES或者DES加密密钥key并发送 关闭网络连接 2.服务器端步骤: 监听端口 获得连接 交换数据:使用服务器的公钥加密/公钥算法使用RSA或DH/检验发送信息的完整性使用MD5或者SHA3 关闭连接 实验内容 使用Java语言进行网络编程,对明文进行加密 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.掌握密码技术的使用: 实验步骤 查询IP地址:打

实验五Java网络编程及安全——20135337朱荟潼

实验五 Java网络编程及安全 结对伙伴:20135317韩玉琪(负责服务器方)http://www.cnblogs.com/hyq20135317/p/4567241.html 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全 实验步骤 1.信息安全传送: 发送方A——————>接收方B A加密时,用B的公钥 B解密时,用B的私钥 发送方A对信息(明文)采用DES密钥加密,使用RSA加密前面的DES密钥信息,最终将混合信息进行传递.同时用hash函数将明文进行

数据结构实验报告-实验五 查找

实验五   查找   l  实验目的 1. 查找的基本概念 掌握在数组上进行各种查找的方法和算法. 深刻理解各种方法的特点,并能灵活运用. 加深对查找的理解,逐步培养解决实际问题的能力. l  实验内容 1.查找的基本概念 (一)基础题 1.编写各种查找方法的基本操作函数: (1)search1(int *k,int n,int key)无序线性表的顺序查找: (2)search2(int *k,int n,int key)有序线性表的顺序查找: (3)bin_search(int *k,int