iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >汇编语言功能实现数据复制实例详解
  • 774
分享到

汇编语言功能实现数据复制实例详解

2024-04-02 19:04:59 774人浏览 安东尼
摘要

目录问题1:将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中问题2:将“mov ax,4c00h“之前的指令复制到内存0:200处问题3:将程序中定义的

问题1:将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中

分析

1、0:200~0:20b单元如何表示

0020:0~0020:b可以等同于以上单元,而且单元的偏移地址是从0开始,和需要复制的单元相同

2、单元中的数据能直接进行复制转移吗

不可以,需要用寄存器进行中转


assume cs:code
code segment
;做法一
;-----------------------------
	mov bx,0		;因为数据来源和去处的偏移地址相同,用bx同意代替
	mov cx,12
 
 
s:	mov ax,offffh	;因为需要重复利用ax,所以需要循环设置
	mov ds,ax
	mov dl,ds:[bx]	;将数据复制到dx的低8位中
 
	mov ax,0020h
	mov ds,ax
	mov ds:[bx],dl	;将数据复制到指定的内存单元中
 
	inc bx			;向下一个单元移动
	loop s
 
;-----------------------------
 
;做法二,上一个做法需要重复设置ds,这里可改进
;-----------------------------
	mov ax,0ffffh
	mov ds,ax 
	mov ax 0020h
	mov es,ax 
	mov bx,0
	mov cx,12
 s:	mov dl,ds:[bx]
	mov es:[bx],dl
	inc bx
	loop s
 
;-----------------------------
 
	mov ax,4c00h
	int 21h
 code ends
end

问题2:将“mov ax,4c00h“之前的指令复制到内存0:200处

分析:

1、如何知道代码的起始地址

利用cs指向的就是代码的开始地址

2、如何知道代码的长度

可以使用(offset 标号)之间相减得出代码的长度


assume cs:code
code segment
start:	        mov ax,cs
	 	mov ds,ax
		mov ax,0020h
		mov es,ax	;设置复制数据的来源和去处
 
		mov bx,0
		mov cx,offset last-offset start	  ;设置代码的长度
 
s:		mov al,ds:[bx]
		mov es:[bx],al	;实现数据的转移
		inc bx
last:           loop s
 
		mov ax,4c00h
		int 21h
code ends
end

问题3:将程序中定义的数据逆序存放

分析: 如何实现逆序 利用栈的特性实现


assume cs:code
code segment
	dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
	dw 16 dup(0)	;栈空间的使用
 
start: 	mov ax,cs
		mov ss,ax
		mov sp,30h	;栈空间是从后往前添加,栈顶指向30h
 
		mov bx,0
		mov cx,8
 
s:		push cs:[bx]
		add bx,2
		loop s		;将数据段中的0~15单元中的数据压入栈中
 
		mov bx,0
		mov cx,8
 
s0:		pop cs:[bx]
		add bx,2
		loop s0		;依次出栈8个字型数据
 
		mov ax,4c00h
		int 21h
 
code ends
end start

改进版:以上程序中的内容没有分段存储,可改进


assume cs:code,ds:data,ss:stack
date segment
	dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
date ends
stack segment
	dw 16 dup(0)	;栈空间的使用
stack ends 
code segment
start:	mov ax,stack
		mov ss,ax
		mov sp,20h	;栈开始的地址已经不包括data段的内容,则为20h 
		mov ax,data
		mov ds,ax
 		mov bx,0
		mov cx,8 
s:		push ds:[bx]
		add bx,2
		loop s
 		mov bx,0
		mov cx,8 
s0:		pop ds:[bx]
		add bx,2
		loop s0
 		mov ax,4c00h
		int 21h
code ends 
end start

问题4:将字符串”welcome to masm”复制到它后面的数据区中

分析

1、要复制到数据在哪里

数据的起始地址在data:0

2、要复制到哪里去

复制的数据长度是16个字节,后面的数据区的偏移地址就是16

3、一共复制了几次

因为使用的是16位寄存器,一次可以传输两个字节,所以只需要执行8次


assume cs:code,ds:data
 data segment
	db 'welcome to masm!'
	db 16 dup(0)
data ends 
;----------------------------------
;做法一
code segment
start:	mov ax,data
		mov ds,ax
		mov si,0	;设置数据来源的起始位置
		mov di,16	;设置数据去处的起始位置
 
		mov cx,8	;用寄存器进行复制,只需要8次
s:		mov ax,ds:[si]
		mov ds:[di],ax
		add si,2
		add di,2
		loop s 
		mov ax,4c00h
		int 21h
code ends
;----------------------------------
;做法二:只利用一个寄存器就可以实现 
code segment
start:	mov ax,data
		mov ds,ax
		mov si,0
 
		mov cx,8
s: 		mov ax,ds:[si]
		mov ds:[si+16],ax
		add si,2
		loop s
 		mov ax,4c00h
		int 21h
code ends
 end start

以上就是汇编语言功能实现数据复制实例详解的详细内容,更多关于汇编语言实现数据复制的资料请关注编程网其它相关文章!

--结束END--

本文标题: 汇编语言功能实现数据复制实例详解

本文链接: https://www.lsjlt.com/news/156448.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 汇编语言功能实现数据复制实例详解
    目录问题1:将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中问题2:将“mov ax,4c00h“之前的指令复制到内存0:200处问题3:将程序中定义的...
    99+
    2024-04-02
  • 汇编语言功能实现数据复制实例分析
    这篇文章主要讲解了“汇编语言功能实现数据复制实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“汇编语言功能实现数据复制实例分析”吧!问题1:将内存ffff:0~ffff:b单元中的数据复...
    99+
    2023-06-25
  • 汇编语言显示功能实现教程详解
    目录问题11 如何确定字符要显示的位置确定3行字符在每一行的起始位置确定3行字符在屏幕中的哪一行2 如何确定字符要显示的颜色属性 问题2:分析:问题1 在屏幕中间...
    99+
    2024-04-02
  • 汇编语言功能字符串大小写转换实现实例详解
    目录问题1:将data段中的第一个字符串转换成大写,第二个字符串转换成小写问题2:将data段中每个单词的头一个字母改成大写字母问题3:将data段中每个单词改为大写字母问题4:将d...
    99+
    2024-04-02
  • 汇编语言系列之汇编实现各种码制的转换(思路详解)
    目录1.十六进制转换为二进制数设计1.1设计要求:1.2设计思路:1.3程序清单:1.4程序运行结果及分析:2.十六进制转换为十进制数设计2.1设计要求:2.2设计思路:2.3程序清...
    99+
    2024-04-02
  • 汇编语言显示功能实现方法是什么
    本篇内容主要讲解“汇编语言显示功能实现方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“汇编语言显示功能实现方法是什么”吧!问题1在屏幕中间分别显示绿底,绿底红色,白底蓝色的字符串“Wel...
    99+
    2023-06-25
  • 汇编语言功能用循环累加实现乘法
    目录问题1:编程计算2的2次方,结果存在ax中分析:用2+2实现问题2:编程实现2的12次方分析:用loop实现问题3:编程实现123*236,结果存在ax中分析:用236相加123...
    99+
    2024-04-02
  • C语言实现推箱子功能汇总
    本文实例为大家分享了C语言实现推箱子功能的具体代码,供大家参考,具体内容如下 前言: 先说说我写推箱子小游戏的过程。 第一版:没有图形化界面,不能选关。只有推箱子的最基础功能。 第二...
    99+
    2024-04-02
  • 汇编语言的函数式编程实例分析
    这篇文章主要介绍了汇编语言的函数式编程实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇汇编语言的函数式编程实例分析文章都会有所收获,下面我们一起来看看吧。一切都是为了消除副作用要了解函数式编程,我们需要首...
    99+
    2023-06-27
  • C语言复杂链表的复制实例详解
    目录一、题目描述示例1:示例2:示例3:示例4:二、思路分析三、整体代码总结一、题目描述 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一...
    99+
    2024-04-02
  • 汇编语言系列之汇编实现简单数学运算
    目录1.计算S=1+2×3+3×4+4×5+···+N(N+1)1.1设计要求:1.2设计思路:1.3程序清单:1.4程序运行结果及分析:2.计算N!2.1设计要求:2.2设计思路:...
    99+
    2024-04-02
  • go语言编程实现递归函数示例详解
    目录前言函数中的 return递归的问题总结前言 本篇文章主要是记录一下在 GScript 中实现递归调用时所遇到的坑,类似的问题在中文互联网上我几乎没有找到相关的内容,所以还是很有...
    99+
    2024-04-02
  • 汇编语言怎么实现各种码制的转换
    本篇内容主要讲解“汇编语言怎么实现各种码制的转换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“汇编语言怎么实现各种码制的转换”吧!1.十六进制转换为二进制数设计1.1设计要求:设计转换程序,将键...
    99+
    2023-06-21
  • vue实现复制文字复制图片实例详解
    目录正文方法复制文本复制图片正文 复制文字和图片是我们经常会使用到的需求,我们这篇文章主要介绍使用navigator.clipboard.write()来实现复制文字和图片。不过这...
    99+
    2023-02-23
    vue复制文字图片 vue 复制
  • 汇编语言怎么实现简单数学运算
    这篇文章主要介绍“汇编语言怎么实现简单数学运算”,在日常操作中,相信很多人在汇编语言怎么实现简单数学运算问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”汇编语言怎么实现简单数学运算”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-21
  • Couchbase跨数据中心复制功能怎么实现
    Couchbase跨数据中心复制功能是通过Couchbase Server的XDCR(跨数据中心复制)功能来实现的。XDCR功能允许...
    99+
    2024-04-02
  • C语言光标旋转与倒计时功能实现示例详解
    目录1、光标旋转2、倒计时1、光标旋转 首先问大家一个问题,大家觉得回车与换行是一个相同的概念吗? 很多人往往把它们两个当作是一个相同的概念,为什么会这么说呢?回想一下'\n',大家...
    99+
    2024-04-02
  • 汇编语言功能字符串大小写转换实现方法是什么
    本篇内容介绍了“汇编语言功能字符串大小写转换实现方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题1:将data段中的第一个字符串...
    99+
    2023-06-25
  • C语言实现单链表的基本功能详解
    1.首先简单了解一下链表的概念: 要注意的是链表是一个结构体实现的一种线性表,它只能从前往后,不可以从后往前(因为next只保存下一个节点的地址).在实现单链表的操作时,需要用指针...
    99+
    2024-04-02
  • 详解C语言实现推箱子的基本功能
    目录1.前言2.游戏效果展示3.项目分析4.地图实现4.1存储地图4.2打印地图5.控制角色移动5.1找到控制的角色5.2实现移动6.判断胜利总结1.前言 首先推箱子是c语言的一个经...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作