《汇编语言》- 读书笔记 - 实验5 编写、调试具有多个段的程序

news/2024/10/30 13:34:57/

《汇编语言》- 读书笔记 - 实验5 编写、调试具有多个段的程序

  • 题目1
  • 题目2
  • 题目3
  • 题目4
  • 题目5
  • 题目6
  • 总结

题目1

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

assume cs:code, ds:data, ss:stack
data segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h	;16字节
data endsstack segmentdw 1,2,3,4,5,6,7,8									;16字节
stack endscode segmentstart:	mov ax, stack	; 获取栈段mov ss, ax		; 设置栈段mov sp, 16		; 设置栈顶 ss:spmov ax, datamov ds, ax		; ds 指向 data 段push ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax, 4c00h		int 21h
code ends
end start
  1. CPU 执行程序,程序返回前,data 段中的数据为多少?
    答:数据没变。先入后出,保持了顺序。
  2. CPU 执行程序,程序返回前,cs= 076E 、ss= 076D 、ds= 076C
  3. 设程序加载后,code 段的段地址为 X,则 data 段的段地址为= X-2 ,stack 段的段地址为 X-1

在这里插入图片描述 在这里插入图片描述

题目2

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

assume cs:code, ds:data, ss:stack
data segmentdw 0123h,0456h
data endsstack segmentdw 1,2
stack endscode segmentstart:	mov ax, stack	; 获取栈段mov ss, ax		; 设置栈段mov sp, 16		; 设置栈顶 ss:spmov ax, datamov ds, ax		; ds 指向 data 段push ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax, 4c00h		int 21h
code ends
end start
  1. CPU 执行程序,程序返回前,data 段中的数据为多少?
    答:数据没变。先入后出,保持了顺序。
  2. CPU 执行程序,程序返回前,cs= 076E 、ss= 076D 、ds= 076C
  3. 设程序加载后,code 段的段地址为 X,则 data 段的段地址为= X-2 ,stack 段的段地址为 X-1

在这里插入图片描述

  1. 对于如下定义的段:如果段中的数据占N 个字节,则程序加载后,该段实际占有的空间为 n % 16 ? n + (16 - n % 16) : n 字节。
    到网上看到别人的公式 ( N/16+1) * 16,但当正好是16的倍数时,这个公式显示与观察到的效果不符。
name segment
...
name ends

观察程序加载后CX=0042题目1中相同,可知虽然只声明了4个字节,但是系统还是按16字节分配了内存。
可以看到数据段栈段都是16字节代码段076C:0020开始。
看下通过观察推测的结果:

[...Array(9527).keys()].map(n => `${n} = ${n % 16 ? n + (16 - n % 16) : n}`)

在这里插入图片描述

题目3

将下面的程序编译、连接,用 Debug 加载、跟踪,然后回答问题
在这里插入图片描述

  1. CPU 执行程序,程序返回前,data 段中的数据为多少?
    答:数据没变。先入后出,保持了顺序。
  2. CPU 执行程序,程序返回前,cs= 076C 、ss= 0770 、ds= 076F
  3. 设程序加载后,code 段的段地址为 X,则 data 段的段地址为= X+3 ,stack 段的段地址为 X+4

题目4

如果将(1)、(2)、(3)题中的最后一条伪指令“end start”改为“end”(也就是说不指明程序的入口),则哪个程序仍然可以正确执行?请说明原因。
答: 题目3的代码可以正常执行,因为代码段正好在程序开头。CS:IP指向第一行指令。

题目5

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

assume cs:codea segmentdb 1, 2, 3, 4, 5, 6, 7, 8	;16字节
a endsb segmentdb 1, 2, 3, 4, 5, 6, 7, 8	;16字节
b endsd segmentdb 0, 0, 0, 0, 0, 0, 0, 0	;16字节
d endscode segment
start:	mov ax, amov ds, axmov bx, 0				; i = 0mov cx, 8				; len = 8s:	mov al, ds:[bx]add al, ds:[bx+16]		; 寄存器不够用,用偏移量来定位mov ds:[bx+16+16], al	; 寄存器不够用,用偏移量来定位		inc bx					; i++loop s					; i < len 循环mov ax, 4c00h		int 21h
code ends
end start

在这里插入图片描述

  1. c segment 编译不过,我就换成了d
  2. 程序加载后可以看到 CS:IP 指向 076F:0
  3. [bx+16+16] 这种写法在第7章中会详细介绍。

题目6

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

assume cs:codea segment												; CS-3dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh	;32字节
a endsb segment												; CS-1dw 0,0,0,0,0,0,0,0									;16字节
b endscode segment
start:	mov ax, amov ds, axmov ax, bmov ss, axmov sp, 10h; 下面实现循环处理mov bx, 0			; i = 0mov cx, 8			; len = 8s:	push [bx]			; a 中取出第一个,放到 b末尾。压栈是从底往上走的add bx, 2			; i = i+2 字类型占两字节loop s				; i < len 循环mov ax, 4c00h		int 21h
code ends
end start

在这里插入图片描述

总结

  1. 系统分配内存16字节起步。
  2. 定义段,即可声明内容空间。一回事。
  3. 知道段的定义顺序,又知道它们的大小,可以能过偏移量算出各段的位置。

http://www.ppmy.cn/news/88953.html

相关文章

并行计算技术解密:MPI和OpenMP的学习和应用指南

欢迎来到并行计算技术的奇妙世界&#xff01;本指南将带您深入了解MPI&#xff08;Message Passing Interface&#xff09;和OpenMP&#xff08;Open Multi-Processing&#xff09;两种重要的并行计算技术&#xff0c;并为您提供学习和应用的指南。无论您是一个科研工作者、开发…

分布式事务的21种武器 - 5

在分布式系统中&#xff0c;事务的处理分布在不同组件、服务中&#xff0c;因此分布式事务的ACID保障面临着一些特殊难点。本系列文章介绍了21种分布式事务设计模式&#xff0c;并分析其实现原理和优缺点&#xff0c;在面对具体分布式事务问题时&#xff0c;可以选择合适的模式…

【CloudCompare教程】008:基于点云的三维模型重建(泊松重建)

本文讲述基于点云的三维模型重建方法,PoissonRecon是“Poisson Surface Reconstruction”的缩写,它是由约翰霍普金斯大学的Misha Kazhdan47提出的三角形网格生成算法的简单接口。 文章目录 一、加载点云二、计算法向量三、泊松建模四、利用输出密度一、加载点云 加载兔子点云…

使用亚马逊云科技Amazon VPC Lattice简化服务间的连接、安全和监控

在亚马逊云科技re:Invent 2022中&#xff0c;亚马逊云科技介绍了Amazon VPC Lattice预览版&#xff0c;这是Amazon Virtual Private Cloud&#xff08;Amazon VPC&#xff09;的一项新功能&#xff0c;可通过一致的方式连接、保护和监控服务之间的通信。借助Amazon VPC Lattice…

白银实时价格应该在最适合的地方下注

小时候我们看战争片&#xff0c;总是发现主角们带兵打仗&#xff0c;战无不胜&#xff0c;偶尔有一场大的失利&#xff0c;但是总是能耐化险为夷&#xff0c;逢凶化吉&#xff0c;甚至最后成功反扑、反败为胜。后来小编一琢磨&#xff0c;发现&#xff0c;其实这些将才们打仗&a…

ESD防静电监控系统后台实时掌控现场静电防护情况

当静电积累到一定程度时&#xff0c;它可能会产生电击&#xff0c;从而对工人造成伤害。因此&#xff0c;工厂应该采取必要的预防措施&#xff0c;如提供防静电鞋和衣服&#xff0c;以保护工人免受静电伤害。 ESD防静电监控系统实现工业4.0技术要求&#xff0c;ESD物联技术稳定…

Talk预告 | ICML‘23 Oral 字节跳动 AI Lab 研究员郑在翔:人工智能如何助力蛋白质设计?

本期为TechBeat人工智能社区第500期线上Talk&#xff01; 北京时间5月25日(周四)20:00&#xff0c;字节跳动 AI Lab 研究员 — 郑在翔的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “人工智能如何助力蛋白质设计 ”&#xff0c;届时将介绍基于…

发力电商培训 淘宝天下小二助力品牌商家成长

过去一年&#xff0c;平台各种玩法层出不穷&#xff0c;使得不少商家大呼有心无力&#xff0c;感觉什么都要学&#xff0c;但又不知从哪里入手为好……为帮助更多商家在2023年找对方向&#xff0c;突破店铺运营瓶颈&#xff0c;淘宝天下基于多年行业深耕经验&#xff0c;用可复…