汇编语言-[bx]和loop指令

devtools/2024/9/25 5:12:29/

[bx]指令:

[bx] 和 [0] 有些类似,[0] 表示内存单元,它的偏移地址是 0

比如:

mov ax,[0]

将一个内存单元的内容送入 ax ,这个内存单元的长度为 2字节(字单元)

存放一个字节,偏移地址为 0 ,地址段在 ds 中

mov a1,[0]

将一个内存单元的内容送入 a1 ,这个内存单元的长度为 1字节(字单元)

存放一个字节,偏移地址为 0 ,地址段在 ds 中,其中 a1 是字符串,只传送一个字节。


在编译器中 mov ax,[0] 指令会被编译器认为是 mov ax,0 所以引入 [bx] 的概念

mov [bx],ax 表示 (ds)*16+(bx)=ax

用法和之前的ds[address]一样


[bx] 的使用方法:


mov ax,1000Hmov bx,2000Hmov ds,ax    ; 将ds数据段寄存器赋值为2000Hmov [bx],ax    ; 将ax寄存器的值赋给内存单元21000H位置

其他方式:

mov ax,ds:[0] ; 将内存单元20000H位置的值赋给ax


loop指令:

loop 是循环指令

指令的格式是:loop 标号,

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

① (cx)=(cx)-1

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

通常我们用loop指令来实现循环功能,cx 中存放循环次数。


例如:编程计算 2^2,结果存在 ax 中

分析: 设 ax=2,可计算 ax=(ax)*2,最后 ax 中为 2^2的值,

N*2 可用 N+N 实现

程序如下:


assume cs:code
code segmentmov ax,2add ax,axmov ax,4c00h    ; 程序返回int 21h
code ends    ; 代码段结束
end

假如计算 2^12,则需要写 11 条重复的指令 add ax,ax

显然我们不希望这样来写,

这时,我们可以用 loop 来做

比如:


assume cs:code
code segment
start:mov ax,2mov cx,11      ; 设定循环次数为11s:  add ax,ax        ; 每次循环执行的操作,每次执行的时候使cx-1loop s        ; 验证cx的值是否为0,为0执行下面的程序,否则跳回s(s可以为任意字符串)执行mov ax,4c00h    ; 程序返回int 21h
code ends    ; 代码段结束
end start

http://www.ppmy.cn/devtools/21623.html

相关文章

ubuntu没有fcitx输入法图标

前言 Ubuntu20.04,卸载了ibus输入法,安装的fcitx搜狗输入法,出现无法切换到英文输入下,进行了重新启动,发现输入法图标不见了 可以尝试手动启动fcitx: 打开终端,运行以下命令: f…

springboot配置WebMvcConfigurationSupport

一、在spring里有四个mvc配置类 1、mvc配置类 WebMvcConfigurer WebMvcConfigurerAdapter WebMvcConfigurationSupport WebMvcAutoConfiguration 2、WebMvcConfigurer为接口 3、WebMvcConfigurerAdapter是WebMvcConfigurer的实现类,且大部分为空方法,…

HTML实体编码

HTML实体编码是HTML中用来替换特殊字符的一种机制&#xff0c;以确保这些特殊字符在浏览器中能够正确显示 这些特殊字符在HTML中具有特定的含义&#xff0c;比如小于号“<”用来表示HTML标签的开始&#xff0c;大于号“>”用来表示HTML标签的结束&#xff0c;而引号可能…

用NuGet安装 Oracle ODP.NET

oracle官网原文&#xff1a;Using NuGet to Install and Configure Oracle Data Provider for .NET Using NuGet to Install and Configure Oracle Data Provider for .NET In this section, you will install ODP.NET NuGet packages from nuget.org. Select View > Solut…

Bentley二次开发教程27-交互窗口-界面开发方法

界面设计概述 引言 在我们掌握了交互式工具的使用方法后&#xff0c;在使用过程中会发现&#xff1a;虽然工具中拥有多种交互的手段&#xff0c;但仅凭工具中鼠标&#xff0c;特殊按键与信息提示等交互方法&#xff0c;没有办法同时对多个信息进行展示&#xff0c;也不够直观…

JAVAEE—HTTPS和ssl证书

0[toc] 什么是HTTPS HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层. HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况而HTTPS则是新采用加密的方式进行传输 为什么需要HTTPS 为什么要使用HTTPS呢&#xff1f;这…

Android Studio开发工具学习之Git远程仓库拉取与推送

Git远程仓库操作 1.1 推送项目到远端服务器1.1.1 进入Gitee或Github、创建一个新的仓库1.1.2 将Android Studio中项目推送至Gitee 1.2 从远端服务器拉取项目1.2.1 AS工程页拉取新项目1.2.2 AS启动页拉取项目 1.1 推送项目到远端服务器 1.1.1 进入Gitee或Github、创建一个新的仓…

【UE C++】设置游戏模式

问题 我们都知道如何使用蓝图创建一个游戏模式并且在这个游戏模式蓝图中去设置“默认pawn类”、“HUD类”、“玩家控制器类”、“游戏状态类”、“玩家状态类”、“旁观者类”。那么如何使用C完成该操作呢&#xff1f; 步骤 1. 首先创建“GameMode”、“GameState”、“HUD”…