汇编语言(第三版)-- 检测点6.1

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

assume cs:codesg
codesg segment

    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h  # 定义数据
start: mov ax,0
       mov ds,ax         # 定义内存起始段
       mov bx,0          # 定义内存偏移

       mov cx,8          # 定义循环次数
    s: mov ax,[bx]       # 将ds:[bx]内存单元中的数据写入ax寄存器
       mov cs:[bx],ax    # 将ax寄存器中的数据写入cs:[bx]代码单元
       add bx,2          # 相邻两个字节单元为一个字单元,因此偏移2
       loop s

       mov ax,4c00h
       int 21h

codesg ends
end start

下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行。栈空间设置在程序内。

assume cs:codesg
codesg segment

    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h  # 定义数据
    dw 0,0,0,0,0,0,0,0,0,0   # 10个字单元用作栈空间
start: mov ax,cs         # 定义代码段
       mov ss,ax         # 定义栈段
       mov sp,36h        # 定义栈底为36h (8*2 + 10*2)
       
       mov ax,0
       mov ds,ax         # 定义内存起始段
       mov bx,0          # 定义内存偏移
       mov cx,8          # 定义循环次数
       
    s: push [bx]         # 将ds:[bx]内存单元中的数据写入栈单元ss:sp(sp=36h) -> sp=36h - 2h = 34h
       pop cs:[bx]       # 将ss:sp(sp=34h)为栈顶的字单元中的数据写入cs:[bx]中 -> sp=34h + 2h = 36h
       add bx,2          # 相邻两个字节单元为一个字单元,因此偏移2
       loop s

       mov ax,4c00h
       int 21h

codesg ends
end start    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,424评论 8 114
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,638评论 25 708
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,744评论 0 11
  • 王爽汇编全书知识点大纲 第一章 基础知识 机器语言 汇编语言的产生 汇编语言的组成 存储器 cpu对存储器的读写 ...
    2c3ba901516f阅读 2,455评论 0 1
  • 丑小鸭变成白天鹅。蜕变的路上,不过只觉在巨人肩膀上看到了一眼梦想的美丽世界。
    喵喵酱的异想国度阅读 113评论 0 0