汇编实验五

一、实验目的

1. 理解和掌握将数据、代码、栈放入不同段的程序的编写和调试。

2. 理解具有多个段的汇编源程序对应的目标程序执行时,内存分配方式。

二、实验准备

1. 结合第 6 章教材和课件,复习第 6 章内容。

2. 复习第 3 章「栈」的知识。

三、实验内容

教材 133 实验 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

1、CPU执行程序,程序返回前,data段中数据为多少?

23 01 56 04 89 07 bc 0a ef 0d ed 0f ba 0c 87 09

2、CPU执行程序,程序返回前,cs=076c、ss=076b、ds=076a。

3、设程序加载后,code段的地址为X,则data段的段地址为X-2。stack段的段地址为X-1。

(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

1、CPU执行程序,程序返回前,data段中的数据为多少?

23 01 56 04

2、CPU执行程序,程序返回前,cs=076C、ss=076B、ds=076A。

3、设程序加载后,code段的地址为X,则data段的段地址为X-2、stack段的段地址为X-1。

4、对于以下定义的段:

name segment

···

name ends

如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为((n+15)/16)*16。

(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

1、CPU执行程序,程序返回前,data段中的数据为多少?

23 01 56 04

2、CPU执行程序,程序返回前,cs=076A、ss=076E、ds=076D。

3、设程序加载后,code段的 段地址为X,则data段的段地址为X+3,stack段的段地址为X+4。

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

答:(3)程序可以正常运行,因为start去掉后,则只能默认从头开始执行(IP=0的段开始),(1)(2)程序首段均为数据,所以无法正常执行,而(3)程序指令放在首段,所以可以正常执行。

(5)

源代码:

assume cs:code
a1 segment
  db 1,2,3,4,5,6,7,8
a1 ends

b1 segment
  db 1,2,3,4,5,6,7,8
b1 ends

c1 segment  
  db 0,0,0,0,0,0,0,0
c1 ends   
code segment
start:
       mov ax,a1
mov ds,ax
mov bx,0
mov cx,8
s:mov ax,[bx]
add ax,[bx+10h]
mov [bx+20h],ax
inc bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start

结果:

执行指令前:

执行指令后:

(6)

源代码:

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 8 dup(0)
b ends

code segment
start: mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,10h
mov bx,0
mov cx,8
s:push [bx]
 inc bx
inc bx
loop s
mov ax,4c00h
int 21h
    
code ends
end start

结果:

执行push后:

结果符合预期结果,过程并没有异常。

四、实验结论

通过本次实验,我了解了将数据、代码、栈放入不同段的程序的编写和调试,并且理解了具有多个段的汇编源程序对应的目标程序执行时,内存分配方式。

虽然过程有点波折,有不少疑问,但相信随着学习深入,谜题会一个个解开。

原文地址:https://www.cnblogs.com/pglgq/p/9985507.html

时间: 2024-10-25 15:38:50

汇编实验五的相关文章

汇编实验五 编写、调试具有多个段的程序

南京信息工程大学实验报告 实验名称   实验 5 编写.调试具有多个段的程序 实验日期  12.2 得分 学院   计软院 专业   计科 年级   2017级 班次    6班 姓名    江轲禹 学号    20171308227 一.实验目的 1. 理解和掌握将数据.代码.栈放入不同段的程序的编写和调试 2. 理解具有多个段的汇编源程序对应的目标程序执行时,内存分配方式 二.实验准备 1. 结合第6章教材和课件,复习第6章内容 2. 复习第3章「栈」的知识 三.实验内容 教材133实验 5

实验五:扒开系统调用的三层皮(下)

实验五:扒开系统调用的三层皮(下) 王朝宪20135114 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给MenuOS增加time和time-asm命令 1. 通过内核的方式(跟踪调试系统调用)来理解并使用系统调用. rm menu -rf //强制删除当前menu git clone http://github.com/mengning/menu.git //重新克隆新版本的m

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函数将明文进行