[BX]和loop指令

文章目录

  • [BX]和loop指令
    • 1 [bx]
    • 2 Loop指令
    • 3 在Debug中跟踪用loop指令实现的循环程序
    • 4 Debug和汇编编译器Masm对指令的不同处理
    • 5 loop和[bx]的联合应用
    • 6 段前缀
    • 7 一段安全的空间
    • 8 段前缀的使用

[BX]和loop指令

1 [bx]

我们用[bx]表示一个内存单元,它的段地址默认在ds中,它的偏移地址在bx中,比如下面的指令:

mov ax,[bx]
mov al,[bx]

2 Loop指令

loop指令用于循环操作

指令的格式是:loop 标号

CPU 执行loop指令的时候,要进行两步操作:

① (cx)=(cx)-1;

② 判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。

用loop指令计算212

assume cs:codecode segmentmov ax,2mov cx,11s:  add ax,axloop smov ax,4c00hint 21hcode endsend

3 在Debug中跟踪用loop指令实现的循环程序

计算ffff:0006单元中的数乘以3,结果存储在dx中。

代码如下:

assume cs:abcabc segmentmov ax,0ffffhmov ds,axmov bx,6mov al,[bx]mov dx,0mov cx,3s:	add dx,axloop smov ax,4c00hint 21habc endsend

在汇编源程序中,数据不能以字母开头,所以要在第四行的ffff前面加0。

请添加图片描述

可以用p命令直接完成循环。

4 Debug和汇编编译器Masm对指令的不同处理

我们在Debug中写过类似的指令:

​ mov ax,[0]

表示将ds:0处的数据送入al中。

但是在汇编元程序中,指令“mov ax,[0]”被编译器当作指令“mov ax,0”处理,即编译器无法将[0]识别成一个内存地址,而是会将其当成数字。

这个问题有两种解决方案:

  • 通过BX来代替[0],我们先mov bx, 2 再通过mov ax, [bx]来完成。

  • 在偏移地址前加上段地址,即mov al, ds:[0]。

5 loop和[bx]的联合应用

计算ffff:0~ffff:b单元中的数据的和,结果存储在dx中。

代码如下:

assume cs:abcabc segmentmov ax,0ffffhmov ds,axmov bx,0mov dx,0mov cx,12s:	mov al,[bx]add dx,axinc bxloop smov a,4coohint 21habc endsend

这时我们就不用能常量给出内存单元的地址,而是用bx作为内存单元地址的变量。

6 段前缀

这些出现在访问内存单元的指令中,用于显式地指明内存单元的段地址的“ds:”、“cs:”、“ss:”或“es:”,在汇编语言中称为段前缀。

7 一段安全的空间

在8086模式中,随意向一段内存空间写入内容是很危险的 ,因为这段空间中可能存放着重要的系统数据或代码。

在一般的PC机中,DOS方式下,DOS和其他合法的程序一般都不会使用0:200~0:2FF( 0:200h~0:2FFh)的256 个字节的空间。所以,我们使用这段空间是安全的

以后,我们需要直接向一段内存中写入内容时,就使用0:200~0:2FF这段空间。

8 段前缀的使用

将内存ffff:0~ffff:b段元中的数据拷贝到 0:200~0:20b单元中。

代码一:

assume cs:abcabc segmentmov bx,0mov cx,12s:	mov ax,0ffffhmov ds,axmov dl,[bx]mov ax,0020hmov ds,axmov [bx],dlinc bxloop smov a,4coohint 21habc endsend

因源单元ffff:X和目标单元0020:X 相距大于64KB,在不同的64KB段里,程序中,每次循环要设置两次ds。

这样做是正确的,但是效率不高。

我们可以使用两个段寄存器分别存放源单元ffff:X和目标单元0020:X的段地址,这样就可以省略循环中需要重复做12次的设置ds的程序段。

代码二:

assume cs:abcabc segmentmov ax,0ffffhmov ds,axmov ax,0020hmov es,axmov bx,0mov cx,12s:  mov al,[bx]mov es:[bx],alinc bxloop smov a,4coohint 21habc endsend

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云服务器多少钱一个月?5元1个月,这价格没谁了

2024腾讯云服务器多少钱一个月?5元1个月起,腾讯云轻量服务器4核16G12M带宽32元1个月、96元3个月,8核32G22M配置115元一个月、345元3个月,腾讯云轻量应用服务器61元一年折合5元一个月、4核8G12M配置646元15个月、2核4G5M服务器165元…

力扣1. 两数之和

思路:用一个map存放 已遍历过的元素和下标; 若当前元素是nums[i], 且该元素的另一半 target-nums[i] 在已遍历过的map里面,则返回两个元素的下标; class Solution {public int[] twoSum(int[] nums, int target) {int[] ans new…

BFS模板

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、173. 矩阵距离(acwing)二、5475 聚会 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着…

5年经验之谈 —— 总结自动化测试与性能测试的区别!

很多刚刚接触自动化测试和性能测试的同学感觉性能测试和自动化测试是没什么区别的,就像小编刚刚接触自动化测试和性能测试的时候一样,区别就是:自动化测试是一个用户在测试,而性能测试需要并发,需要设计各种场景。测试…

单目测距那些事儿(上) _ 从MobileEye谈起

单目测距那些事儿(上) | 从MobileEye谈起 全面专业的自动驾驶学习资料:链接 前言 在ADAS领域,有个功能叫自适应巡航控制(Adaptive Cruise Control, ACC)。 ACC是一种纵向距离控制,具体包括发现目标车辆、判断目标车辆所在路径、测量相对本车的距离和速…

Vulnhub靶机渗透:DC-7打靶记录

前言 自信自强,来自于不怕苦、不怕难的积淀。宝剑锋从磨砺出,梅花香自苦寒来;任何美好理想,都离不开筚路蓝缕、手胼足胝的艰苦奋斗! 靶场介绍 DC-7是一个初中级的靶场,需要具备以下前置知识:…

0009、ts的类型断言

类型断言(Type Assertion)是 TypeScript 中的一种特性,允许开发者在某些情况下手动指定变量的类型。它的主要使用场景是在开发者明确知道某个值的类型,但 TypeScript 编译器无法自动推断出来时,用来告诉编译器该值的确切类型。 在 TypeScrip…

GPT能复制人类的决策和直觉吗?

GPT-3能否复制人类的决策和直觉? 近年来,像GPT-3这样的神经网络取得了显著进步,生成的文本几乎与人类写作内容难以区分。令人惊讶的是,GPT-3在解决数学问题和编程任务方面也表现出色。这一显著进步引发了一个问题:GPT…

ES6中删除对象属性的方法

ES6中删除对象属性的方法 文章目录 ES6中删除对象属性的方法1. delete方法删除(单个)1. 删除方法12. 删除方法2 2. Reflect.deleteProperty删除(单个)3. 解构赋值删除(批量) 1. delete方法删除(单个) delete 用于删除对象的某个属性,如果没有指向这个属性的引用,那它…

计算机缺失msvcp110.dll如何修复,多种修复方法教给你

当电脑系统中msvcp110.dll文件丢失时,可能会对计算机的正常运行产生一系列显著的影响。msvcp110.dll是Microsoft Visual C Redistributable Package的一部分,这个动态链接库文件对于许多基于Windows的应用程序至关重要,尤其是一些使用C编译器…

Java小练--接收用户输入的数字,判断是否为质数;输出1-100内的所有质数

首先要先了解质数的概念: 一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数,也称为素数 (规定:1既不是质数,也不是余数) 使用两个方法来解决这个问题: 方法一:暴力迭代法 import java.util.Scan…

jenkins 连接harbor 推送镜像

x509: certificate relies on legacy Common Name field, use SANs instead docker 登录harbor https 报错

深入了解提示词工程:原理、实践与应用

一、引言 在人工智能领域,尤其是自然语言处理(NLP)任务中,大语言模型如GPT系列已经成为了重要的工具。然而,要充分发挥这些模型的潜力,我们需要掌握一种名为提示词工程(Prompt Engineering&…

什么是CPQ?CPQ报价管理软件面向制造企业快速报价解决方案

什么是CPQ? CPQ生产配置报价系统是面向生产加工企业,为企业市场部门提供快速报价的辅助系统,和配置报价系统不同的是生产报价系统成本的组成并不是标准的产品成本,其成本可能包含原材料成本、原材料损耗、制造成本、包装成本、运…

YOLOv9改进策略:卷积魔改 | AKConv(可改变核卷积),即插即用的卷积,效果秒杀DSConv | 2023年11月最新发表

💡💡💡本文改进内容: YOLOv9如何魔改卷积进一步提升检测精度?AKConv 通过不规则卷积运算完成高效特征提取的过程,为卷积采样形状带来更多探索选择。 AKConv可以作为即插即用的卷积运算来替代卷积运算来提高…

【单点知识】基于实例讲解PyTorch中的ImageFolder类

文章目录 0. 前言1. ImageFolder功能2 基本使用方法及参数解析2.1 基本调用方式2.2 构造参数说明2.3 属性2.4 方法 3. PyTorch实例说明3.1 实例数据集3.2 实例说明 0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的…

word excel ppt转pdf

1.excel转pdf package pers.wwz.study;import com.aspose.cells.PdfSaveOptions; import com.aspose.cells.Workbook;public class ExcelToPdf {public static void main(String[] args) throws Exception {// 加载Excel文件Workbook workbook new Workbook("D:\\tmp\\…

Git tag总结

文章目录 Git 标签标签(Tag)是什么创建标签轻量标签(Lightweight Tag)附注标签(Annotated Tag) 查看标签切换到标签基于标签创建新分支直接切换到标签 切换到标签的注意事项 Git 标签 标签(Ta…

市场复盘总结 20240319

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 二进三: 进级率中 17% 最常用的…