(八)《汇编语言(王爽)》 | 检测点 6.1

2024-01-05 18:08

本文主要是介绍(八)《汇编语言(王爽)》 | 检测点 6.1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1. 预备知识
  • 2. 检测点 6.1


1. 预备知识

  • 在存放数据,以前的做法是将数据送入特定内存单元中,而更好和更安全的做法是我们指定需要存放的数据或需要的内存空间大小,让系统来为我们分配
  • dw 指令用于定义用户数据或开辟内存空间:
;使用dw定义8个字型数据,系统自动为其分配空间,此时数据存放空间的段地址由CS给出、偏移地址为0
dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H	
;使用dw申请一段栈空间,申请空间的段地址存放在寄存器 CS 中,栈为空时SP指向最大空间的下一个地址
dw 0,0,0,0,0,0,0,0
  • 在编译和连接时,编译器根据 end 指令得到有关程序入口的描述信息,在执行时直接从程序入口处开始执行:
start:	xxx	;程序入口xxx
end start	;使用end指令指明程序入口

2. 检测点 6.1

(1)下面的程序实现依次用内存 0:0~0:15 单元中的内容改写程序中的数据。

assume cs:codesg
codesg segmentdw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
start:	mov ax,0mov ds,axmov bx,0mov cx,8s:	mov ax,[bx]________	;mov cs:[bx],axadd bx,2loop smov ax,4c00hint 21h
codesg ends
end start	
  • 程序申请空间的段地址存放在段寄存器 CS 中,偏移地址为零,即起始地址为 CS:0、每次偏移地址移动两个字节大小。
  • 题目要求使用 0:0~0:15 单元的内容改写程序中的数据,即使用 DS:0~ 的数据改写 CS:0~ 的内容。所以,缺失部分程序完成移动数据的功能,而 0:0~0:15 的数据已存放在寄存器 AX 中,所以缺失部分程序为 mov cs:[bx],ax。

1. 程序入口处查看 原内存单元 0:0~0:15 的内容和存放数据的内存单元

请添加图片描述

2. 执行完程序后,存放数据的内存单元

请添加图片描述

(2)下面的程序实现依次用内存 0:0~0:15 单元中的内容改写程序中的数据,数据的传送用栈进行。

assume cs:codesg
codesg segmentdw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987Hdw 0,0,0,0,0
start:	mov ax,__	;mov ax,csmov ss,axmov sp,__	;mov sp,36,即将 0:10~0:1A 部分当作栈区使用mov ax,0mov ds,axmov bx,0mov cx,8s:	push [bx]________	;pop cs:[bx]add bx,2loop smov ax,4c00hint 21h
codesg ends
end start	
  • 程序使用 dw 申请一段大小为 10 字节的段空间,段地址存放在 CS 中,所以汇编指令前两句为 SS 赋值,即使用 CS 为 SS 赋值。
  • 程序第 3 句确定栈顶寄存器 SP 的值,数据区的最后一个数据的存放位置是 CS:E~CS:F,为避免栈区覆盖数据区,这里将 SP 设置为 10H + A(栈区大小) = 1A 或 26。
  • 循环体中第一句 push [bx] 即默认将 DS:[BX] 入栈,即题目要求的内存空间。
  • 第一个 dw 申请空间的首地址为 CS:0,所以循环体中空缺部分完成功能是使用栈中的值为 CS:0 赋值,即 pop cs:[bx]。

1. 程序入口处查看 原内存单元 0:0~0:15 的内容和存放数据的内存单元

请添加图片描述

2. 执行完程序后,存放数据的内存单元

请添加图片描述


这篇关于(八)《汇编语言(王爽)》 | 检测点 6.1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/573707

相关文章

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询数据

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询; 一、首先启动相关服务: 二、新建一个film索引: 三、建立映射: 1、通过Head插件: POST http://192.168.1.111:9200/film/_mapping/dongzuo/ {"properties": {"title": {"type":

ElasticSearch 6.1.1运用代码添加索引及其添加,修改,删除文档

1、新建一个MAVEN项目:ElasticSearchTest 2、修改pom.xml文件内容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.or

汇编语言知识基础介绍

汇编语言是一种低级编程语言,直接与计算机硬件的指令集架构(ISA)对应。它在操作系统、设备驱动程序和性能关键的应用程序中起着重要作用。以下是汇编语言的基础介绍: 1. 基本概念 指令集架构(ISA):汇编语言与特定的处理器架构(如 x86、ARM)对应,每种架构有其特定的指令集。汇编指令:汇编语言的语法是处理器指令的符号表示,通常包括操作码(opcode)和操作数。操作码指定操作的类型,操作数

6.1排序——插入排序与希尔排序

本篇博客来梳理两种常见排序算法:插入排序与希尔排序 常见的排序算法如图 写排序算法的原则:先写单趟,再写整体 一、直接插入排序 1.算法思想 先假定第一个数据有序,把第二个数据插入;再假设前两个数据有序,把第三个数据插入…以此类推,直到整个序列有序 2.具体操作(以排成升序为例) (1)单趟:针对单个数据 假设[0,end]有序,处理end+1处数据(用tmp存起来,原因:挪数据的时

汇编语言输出“Hello World!“

1.软件 Nasmide64.exe(李忠老师编写) Fixvhdw64.exe(李忠老师编写) VirtualBox虚拟机(免费 开源) 2.过程 01.Fixvhdw64.exe输入以下代码: mov ax,0xb800mov ds,axmov byte [0x00],'H'mov byte [0x02],'e'mov byte [0x04],'l'mov byte [0

6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)

目录 一.堆(Heap)的基本介绍 二.堆的常用操作(以小根堆为例) 三.实现代码 3.1 堆结构定义 3.2 向下调整算法* 3.3 初始化堆* 3.4 销毁堆 3.4 向上调整算法*  3.5 插入数据 3.6 删除数据 3.7 返回堆顶数据 四.下篇内容 1.堆排序 2.TopK问题 一.堆(Heap)的基本介绍         了解堆之前我们要简

ARM——结构体系(处理器工作模式,CPSR,立即数,汇编语言函数调用)

1、处理器工作模式          ARM有7个基本工作模式:User:非特权模式,大部分任务执行在这种模式FIQ:当一个高优先级(fast)中断产生时将会进入这种模式IRQ:当一个低优先级(normal)中断产生时将会进入这种模式Supervisor:当复位或软中断指令执行时将会进入这种模式Abort:当存取异常时将会进入这种模式Undef:当执行未定义指令时会进入这种模式Sy

ARM下汇编语言编程

一、ARM汇编语言程序格式 ARM汇编语言是以段(section)为单位来组织源文件的。段是相对独立的、具有特定名称的、不可分割的指令或者数据序列。 段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要用到的数据。一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。 二、ARM汇编语言中常用的伪操作 例如: area reset,cod