8086 汇编笔记(七):数据处理的两个基本问题

一、bx、si、di 和 bp

在使用过程中有几处需要注意的地方:

(1)在 8086CPU 中,只有这4个寄存器可以用在“[....]”中来进行内存单元的寻址。其他寄存器是不可以的,例如“mov bx, [ax]”就是错误的用法。

(2)在[...]中,这四个寄存器可以单个出现,或只能以4种组合出现:bx和si、bx和di、bp和si、bp和di。为了方便记忆可以将si和di看做一组,将bx和bp看做一组。组间可以自由组合,组内不能组合。

以下指令都是正确的: 

mov ax,[bx]
mov ax,[si]
mov ax,[di]
mov ax,[bp]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp+si]
mov ax,[bp+di]
mov ax,[bx+si+idata]
mov ax,[bx+di+idata]
mov ax,[bp+si+idata]
mov ax,[bp+di+idata]

(3)只要在[...]中使用寄存器bp,而指令中没有显性的给出段地址,则段地址就默认在ss中。 

mov ax,[bp]                ;含义:(ax)=((ss)*16+(bp))
mov ax,[bp+idata]          ;含义:(ax)=((ss)*16+ (bp)+idata)
mov ax,[bp+si]            ;含义:(ax)=((ss)*16+(bp)+(si))
mov ax,[bp+si+idata]      ;含义:(ax)=((ss)*16+(bp)+(si)+idata)

二、汇编语言中数据位置的表达 

(1)立即数

对于直接包含在机器指令中的数据(执行前在CPU的指令缓冲器中),汇编语言中称为立即数(idata),在汇编指令中直接给出。 例如:

mov ax, 1
or bx, 00100000B

(2)寄存器

指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名。例如:

mov ax, bx
push bx

(3)段地址(SA)和偏移地址(EA)

指令要处理的数据在内存中,在汇编语言中可以用[X]的格式给出EA,SA在某个段寄存器中。

存放段地址的寄存器可以是默认的,也可以显性给出。例如:

;段寄存器默认存储在DS中
 mov ax, [0]
 mov ax, [bx]
 mov ax, [di]
 ...

 ;段寄存器默认存储在SS中
 mov ax, [bp]
 mov ax, [bp+si]
 mov ax, [bp+di]
 ...

 ;段寄存器显性给出
 mov ax, ds:[bp]
 mov ax, es:[3]
 mov ax, ss:[bx+si]
 mov ax, cs:[bx+si+8]

三、寻址方式

四、指令要处理的数据有多长

8086CPU的指令,可以处理两种尺寸的数据,byte和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。对于这个问题,汇编语言中用以下方法处理。

(1)通过寄存器名指定要处理的数据的尺寸。如果寄存器名是字型寄存器(如ax、bx等),则说明指令进行的是字操作。如果寄存器名是字节型寄存器(如al、ah、bl等),则说明指令进行的是字节操作。

(2)在没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte。这种情形适用于没有寄存器参与的内存单元访问指令中。例如:

;下面的指令,用word ptr指明了指令中访问的内存单元是一个字单元
mov word ptr ds:[0], 1
inc word ptr [bx]

;下面的指令,用byte ptr指明了指令访问的内存单元是一个字节单元
mov byte ptr ds:[0], 1
inc byte ptr [bx]

五、div 指令

div是除法指令。在使用的过程中应注意以下问题:

(1)除数:有8位和16位两种,在一个reg(寄存器)或内存单元中。

(2)被除数:默认放在 AXDX 和 AX 中,如果除数为8位,被除数则为16位,默认在AX中存放;如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。

(3)结果:如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。

当除数是8位时,被除数默认是一个16位数,存储在AX寄存器中。执行div指令后:

  • 商存储在AL寄存器中。
  • 余数存储在AH寄存器中。

例如:

mov ax, 1234h   ; 将1234h放入AX作为被除数
mov bl, 10h     ; 将10h放入BL作为除数
div bl          ; 执行除法,AL得到商,AH得到余数

当除数是16位时,被除数是一个32位数,由DX寄存器存放高16位,AX寄存器存放低16位。执行div指令后:

  • 商存储在AX寄存器中。
  • 余数存储在DX寄存器中。

例如:

mov dx, 00FFh   ; 高16位放入DX
mov ax, 1234h   ; 低16位放入AX,构成32位被除数
mov bx, 100h    ; 16位除数放入BX
div bx          ; 执行除法,AX得到商,DX得到余数

六、伪指令 dd

dd用来定义dword(双字)型数据 

七、dup

dup(duplication的缩写)用来重复开辟内存空间。

dup指令要和db、dw、dd等数据定义伪指令配合使用,使用格式如下:

db 重复次数 dup (重复的字节型数据) dw 重复次数 dup (重复的字型数据) dd 重复次数 dup (重复的双字型数据)

例如,如下代码表示定义了9个字节:

db 3 dup (0,1,2)    ;它们是0、1、2、0、1、2、0、1、2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/680298.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#中字节数组(byte[])末尾继续添加字节的示例

方法一:使用List 使用List可以很容易地在末尾添加字节,然后如果需要,可以将其转换回byte[]。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Lin…

【机器学习基础】Python编程02:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面: 简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。 丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些…

展厅装修设计对于企业的关重要性

1、定位和主题 定位和主题与企业的品牌形象、产品和服务特点相一致,以展示企业形象和产品特点。 2、空间布局 在空间布局方面,采用分区展示、独立展示、开放式展示等方式,以便客户和观众浏览和参观。同时,合理利用,避免…

Android Lottie 体积优化实践:从 6.4 MB 降到 530 KB

一、说明 产品提出需求:用户有 8 个等级,每个等级对应一个奖牌动画。 按照常用的实现方式: 设计提供 8 个 lottie 动画(8 个 json 文件)。研发将 json 文件打包进入 APK 中。根据不同等级播放指定的动画。 每一个 …

Spring AI 第二讲 之 Chat Model API 第六节Google VertexAI API

VertexAI API 可提供高质量的定制机器学习模型,只需花费最少的机器学习专业知识和精力。 Spring AI 通过以下客户端提供与 VertexAI API 的集成: VertexAI Gemini Chat Vertex AI Gemini API 允许开发人员使用 Gemini 模型构建生成式人工智能应用程序。…

SpringMVC接收数据

SpringMVC接收数据 SpringMVC处理请求流程 SpringMVC涉及组件理解: DispatcherServlet : SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它的处理和分发![ CEO ]HandlerMappi…

创新实训2024.06.03日志:完善Baseline Test框架、加入对Qwen-14B的测试

1. Baseline Test框架重构与完善 在之前的一篇博客中(创新实训2024.05.29日志:评测数据集与baseline测试-CSDN博客),我介绍了我们对于大模型进行基线测试的一些基本想法和实现,包括一些基线测试的初步结果。 后来的一…

SpringCloud-面试篇(二十三)

(1)SpringCloud常见组件有那些 有无数微服务需要相互调用:可以用远程调用组件OpenFeign组件,也可以用Dobble 这么多微服务相互调用怎么管理:就用到注册中心组件Nacos,Eureka 所有的服务去找注册中心做注…

Ollama本地运行 Codestral-22B-v0.1

Ollama本地运行 Codestral-22B-v0.1 0. 引言1. 运行 codestral:22b-v0.1-q8_02. 简单测试下它的代码能力 0. 引言 Mixtral 5月30日发布了 Codestral-22B-v0.1。 Codestrall-22B-v0.1 在 80 多种编程语言的多样化数据集上进行训练,包括最流行的语言,例如…

vue实现pdf下载——html2canvas

html2canvas 官方文档https://html2canvas.hertzen.com/getting-started html2canvas 的原理是通过遍历DOM树,将每一个HTML元素转化为Canvas对象,并叠加到一起形成一张完整的图片或者PDF文件。 1. 安装插件 npm install html2canvas jspdf --save 2.使用(页面已经…

月入30000的软件测试人员,简历是什么样子的?

我们都知道,简历是一个人进入职场的敲门砖。从某种层面来说,简历也像一个人的具象身份证,或者专业资格证。所以,一份简历的好坏,不仅关乎个人的“脸面”,更关乎你是不是一个有“含金量”的技术人员。 所以…

企业应用架构模式--详解51种企业应用架构模式

导读:企业应用包括哪些?它们又分别有哪些架构模式? 世界著名软件开发大师Martin Fowler给你答案 目录 01什么是企业应用02 企业应用的种类03企业架构模式 01什么是企业应用 我的职业生涯专注于企业应用,因此,这里所谈…

DevExpress WPF中文教程:Grid - 如何向项目添加GridControl并绑定到数据

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

pyqt QAxWidget 读写Excel文件

QaxWidget相比openpyxl 的方式区别是提供了图形界面,excel的输入修改不用再编写代码.activeX技术是个过时的技术,发挥下余热. # -*- coding: utf-8 -*- from PyQt5.QAxContainer import QAxWidget from PyQt5.QtWidgets import …

JL-03-Y1 清易易站

产品概述 清易易站是清易电子新研发的一体式气象站,坚持科学化和人文化相结合的设计理念,应用新检测原理研发的传感器观测各类气象参数,采用社会上时尚的工艺理念设计气象站的整体结构,实现了快速观测、无线传输、数据准确、精度较…

案例 10kV能源站配电室电气设备集中监控系统

1 项目概况 青山节能科技10kV能源站项目是一个现代化的配电室,包括变压器、高压柜、低压柜等多台设备,为了提高运行效率和安全性,配电室电气设备集中监控系统接入了轨道巡检机器人、“SF6 & O2”双气体探测器、漏水探测器、无源无线电缆…

智慧校园建设经验分享

近年来,智慧校园建设在教育领域引起了广泛的关注和讨论。作为现代化教育的一部分,智慧校园为学生、教师和学校管理者提供了更加便捷、高效的教育环境。下面,我们将分享一些成功的智慧校园建设经验,希望对大家有所启发。 首先&…

【最新鸿蒙应用开发】——一篇搞懂什么是UIAbility

UIAbility组件 UIAbility组件是一种包含UI的应用组件,UIAbility组件是系统调度的基本单元(最小单元),为应用提供绘制界面的窗口,主要用于和用户交互。一个应用可以包含一个或多个UIAbility组件。 UIAbility的设计理念…

LeetCode-103. 二叉树的锯齿形层序遍历【树 广度优先搜索 二叉树】

LeetCode-103. 二叉树的锯齿形层序遍历【树 广度优先搜索 二叉树】 题目描述:解题思路一:层序遍历,唯一区别就是ans.append(level[::-1] if len(ans) % 2 else level)背诵版:解题思路三:0 题目描述: 给你二…

【Redis数据库百万字详解】命令操作

文章目录 一、连接命令二、键命令 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 🌸愿您在此停留的每一刻,都沐浴在轻松愉悦的氛围…