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

2024-06-04 11:44

本文主要是介绍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

这篇关于8086 汇编笔记(七):数据处理的两个基本问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029985

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

解决Java中基于GeoTools的Shapefile读取乱码的问题

《解决Java中基于GeoTools的Shapefile读取乱码的问题》本文主要讨论了在使用Java编程语言进行地理信息数据解析时遇到的Shapefile属性信息乱码问题,以及根据不同的编码设置进行属... 目录前言1、Shapefile属性字段编码的情况:一、Shp文件常见的字符集编码1、System编码