[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…

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

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

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

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

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

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

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

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

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

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

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

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

市场复盘总结 20240319

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

Unity发布webgl设置占满浏览器运行

Unity发布webgl设置占满浏览器运行 Unity发布webgl的时候index.html的模板文件 模板文件路径,根据自己的需求修改。 C:\Program Files\Unity\Hub\Editor\2021.1.18f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\WebGLTemplates\Default再桌面新建一个t…

Transformer的前世今生 day04(ELMO

ELMO 前情回顾 NNLM模型:主要任务是在预测下一个词,副产品是词向量Word2Vec模型:主要任务是生成词向量 CBOW:训练目标是根据上下文预测目标词Skip-gram:训练目标是根据目标词预测上下文词 ELMO模型的流程 针对Wor…

想提升职场形象?收下这3种工作中常用的邮件问候语吧!

发给老板、同事或跨部门同事的第一行邮件就会为你的整封邮件定下基调。开场白揭示了你写电子邮件时的许多情绪状态:它们可能传达出自信,增强团队成员之间的信任度。或者起到反作用:语气上的不足可能会影响士气并造成混乱。 因此,…

MySQL的概述与安装

一、数据库的基本概念: 1.1 数据: 1) 描述事物的符号记录称为数据(Data)。数字、文字、图形、图像、声音、档案记录等 都是数据。 2)数据是以“记录”的形式按照统一的格式进行存储的,而不是…

openEuler 欧拉系统nginx正向代理 http https —— 筑梦之路

正向代理 Nginx正向代理,通过服务器代理客户端去重定向请求访问到目标服务器的一种代理服务。对于目标服务器来说浏览器/客户端是隐藏的。Nginx 正向代理默认只支持http 协议,不支持 https 协议,需借助"ngx_http_proxy_connect_module&q…

Linux docker7--私有镜像仓库registry和UI搭建及使用

一、对于开源的镜像,如redis,nginx等,可以通过官方仓库Docker Hub,或者国内的阿里云等共有仓库下载获取到镜像。但是企业内对于自己的研发产品不可能往公共仓库去发布镜像的,一般都会搭建私有的镜像仓库,保…

string类型的使用以及编码方式

Redis 中所有的键的类型都是字符串类型,⼀个字符串的最⼤值不能超过 512 MB。 由于 Redis 内部存储字符串完全是按照⼆进制流的形式保存的,所以 Redis 是不处理字符集编码问题的,客⼾端传⼊的命令中使⽤的是什么字符集编码,就存储…

Marin说PCB之电源完整性之直流压降仿真CST--03

本期内容主要讲解的是关于在CST软件上电源直流压降仿真VRM的一些相关参数设置,小编我在之前文章中有说到过如何利用CST仿真电源信号的直流压降,不过有一些问题我这边再去补充一些。 首先就是VRM芯片的设置了,小编我还是按照之前那样设置&…

智能合约 之 ERC-20介绍

什么是ERC20 ERC20全称为Ethereum Request for Comment 20,是一种智能合约标准,用于以太坊网络上的代币发行 姊妹篇 - 如何部署ERC20 ERC20的应用场景 代币化资产,例如:USDT 是一种以美元为背书的ERC20代币,每个USDT代…

如何解决MySQL死锁(看懂MySQL锁日志)

有时候系统在生产运行着,会突然爆出 [40001][1213] Deadlock found when trying to get lock; try restarting transaction 这个时候每个人都会很紧张,因为死锁会影响DB性能,严重时甚至拖垮整个系统。在实际的环境中,很多服务会共…