首页 > 编程语言 >8086 汇编笔记(五):包含多个段的程序

8086 汇编笔记(五):包含多个段的程序

时间:2024-06-01 21:30:08浏览次数:24  
标签:汇编 8086 mov 笔记 add dw CS ax bx

一、在代码段中使用数据

“dw”的含义是定义字型数据

dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
code segment

    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

    mov bx,0
    mov ax,0
    mov cx,8

s:  add ax cs:[bx]
    add bx,2
    loop s

    mov ax,4c00h
    int 21h

code ends

end

程序中的指令就要对这8个数据进行累加,可这8个数据在哪里呢?

由于它们在代码段中,程序在运行的时候 CS 中存放代码段的段地址,所以可以从CS 中得到它们的段地址。

它们的偏移地址是多少呢?

因为用 dw 定义的数据处于代码段的最开始,所以偏移地址为 0,这 8个数据就在代码段的偏移 0、2、4、6、8、A、C、E 处。程序运行时,它们的地址就是 CS:0、CS:2、CS:4、CS:6、CS:8、CS:A、CS:C、CS:E。

我们可以在源程序中指明程序的入口所在,具体做法如下

code seqment

    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

start:  mov bx,0
        mov ax,0
        mov cx,8

s:      add ax,cs:[bx]
        add bx,2
        loop s

        mov ax,4c00h
        int 21h

code ends

end start

我们用 end 指令指明了程序的入口在标号 start 处 

二、在代码段中使用栈

codesg segment

    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

start:  mov ax,cs
        mov ss,ax
        mov sp,30h

        mov bx,0
        mov cx,8
    s:  push cs:[bx]
        add bx,2
        loop s

        mov bx,0
        mov cx,8
    s0: pop cs:[bx]
        add bx,2
        loop s0

    mov ax,4c00h
    int 21h

codesg ends
end start

三、将数据、代码、栈放入不同的段

data segment

  dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

data ends

stack segment

  dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

stack ends

code segment

start:  mov ax,stack
        mov ss,ax
        mov sp,20h

        mov ax,data        ;指令“mov ax,data”的含义就是将名称为“data”的段的段地址送入 ax
        mov ds,ax

        mov bx,0

        mov cx,8
    s:  push [bx]
        add bx,2
        loop s

        mov bx,0

        mov cx,8
   s0:  pop [bx]
        add bx,2
        loop s0

      mov ax,4c00h
      int 21h

code ends

end start

我们从程序中可明显地看出,定义一个段的方法和前面所讲的定义代码段的方法没有区别,只是对于不同的段,要有不同的段名

标签:汇编,8086,mov,笔记,add,dw,CS,ax,bx
From: https://blog.csdn.net/2302_82189125/article/details/139329280

相关文章

  • Redis笔记——对象之 SET
    是什么?        Redis的Set是一个无序的、不重复的集合字符串集合。        如果底层数据编码为INTSET,其实是有序的,不过不推荐依赖这个,整体还是看作无序来使用为好。场景        无序集合场景。如关注了那些公众号,Set提供了查交集、并集的功能......
  • 动手学深度学习4.6 暂退法-笔记&练习(PyTorch)
    以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。本节课程地址:丢弃法_哔哩哔哩_bilibili本节教材地址:4.6.暂退法(Dropout)—动手学深度学习2.0.0documentation(d2l.ai)本节开源代码:...>d2l-zh>pytorch>chapter......
  • CLLM4Rec论文阅读笔记
    CollaborativeLargeLanguageModelforRecommenderSystems论文阅读笔记Abstract提出存在的问题:​ 自然语言和推荐任务之间的语义差距仍然没有得到很好的解决,导致了多个问题,如用户/项目描述符的虚假相关、对用户/项目数据进行的语言建模无效、通过自动回归的低效推荐。解决......
  • 今日指数day01学习笔记
    1、项目概述    该项目是基于股票实时交易的数据分析产品,为用户和机构提供个性化的股票数据分析和展示服务    核心功能:数据分析和展示为主,功能涵盖了A股大盘实时指数展示、涨幅榜、个股涨跌、个股秒级行情、实时日K线行情等2、股票相关名词    股......
  • Redis笔记——底层数据结构之压缩列表
    是什么?        本质上就是紧凑的列表。        压缩列表在Redis中有两种编码方式,分别是ZIPLIST与LISTTPACK。LISTPACK从Redis5.0引入,直至Redis7.0完全替换了ZIPLIST,可以看作是ZIPLIST的进阶版。有什么作用?        在List文章中,提......
  • STM32学习笔记(二)流水灯
    STM32学习笔记(二)流水灯一、原理部分1.1LED原理1.2GPIO原理二、工程部分三、加入宏定义这次我们来实现LED流水灯成为点灯大师。使用的核心板的MCU型号为STM32F103ZET6,使用标准库函数来实现。一、原理部分1.1LED原理其中PWR是系统电源指示灯,为蓝色。LED0......
  • 《C++primer》读书笔记---第九章:顺序容器
    9.1顺序容器概述下表列出了标准库的顺序容器,所有容器都提供了快速顺序访问元素的能力:多种容器中,通常使用vector是最好的选择,除非你有很好的理由选则其他容器。以下是一些选择容器的基本原则:除非你有很好的理由选择其他容器,否则选择vector如果你的程序有很多小的元素,且空......
  • 【Python爬虫--scrapy+selenium框架】超详细的Python爬虫scrapy+selenium框架学习笔记
    六,selenium想要下载PDF或者md格式的笔记请点击以下链接获取python爬虫学习笔记点击我获取Scrapy+selenium详细学习笔记点我获取Python超详细的学习笔记共21万字点我获取1,下载配置##安装:pipinstallselenium##它与其他库不同的地方是他要启动你电脑上的浏览器......
  • 【Python--openCV图像处理】Python学习-OpenCV图像处理基础超详细的学习笔记(黑马程序
    一,openCV基础说明:笔记是跟着B站黑马程序员的openCV课程时做的课程资料可以在黑马程序员评论区获取1,图像基本操作1-1图像基础操作1-1-1安装相关库pipinstallopencv-pythonpipinstallopencv-contrib-python##尽量保持两个库安装的版本,比如我都是4.9.0.80ope......
  • CSS(4)(学习笔记)
    一、定位1.1为什么需要定位有些效果,标准流或浮动都无法快速实现,此时需要定位来实现。(浮动不会压住文字和图片,浮动指挥影响后面的盒子不会影响前面的盒子)比如:所以:1.浮动可以让多个块级盒子一行没有缝隙排列显示,经常用于横向排列盒子。2.定位则是可以让盒子自由的在某个盒......