文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

汇编语言功能实现数据复制实例分析

2023-06-25 12:57

关注

这篇文章主要讲解了“汇编语言功能实现数据复制实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“汇编语言功能实现数据复制实例分析”吧!

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

分析

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

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

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

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

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

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

分析:

如何知道代码的起始地址

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

如何知道代码的长度

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

assume cs:codecode segmentstart:        mov ax,cs mov ds,axmov ax,0020hmov es,ax;设置复制数据的来源和去处 mov bx,0mov cx,offset last-offset start  ;设置代码的长度 s:mov al,ds:[bx]mov es:[bx],al;实现数据的转移inc bxlast:           loop s mov ax,4c00hint 21hcode endsend

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

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

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

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

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

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

分析

要复制到数据在哪里

数据的起始地址在data:0

要复制到哪里去

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

一共复制了几次

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

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

感谢各位的阅读,以上就是“汇编语言功能实现数据复制实例分析”的内容了,经过本文的学习后,相信大家对汇编语言功能实现数据复制实例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯