汇编重复计算之使用循环与不循环使用区别

news2024/11/27 1:38:33

  没有使用循环的汇编代码,计算ffff:0-ffff:b的累加之和

assume cs:code 表示code段与CS寄存关联

code segment  表示段开始  ,code ends表示段结束,end表示汇编程序结束

  mov ax,0ffffh     表示将ffffh送入ax寄存器
  mov ds,ax         表示将ax寄存器值送入ds寄存器
   mov dx,0          表示将0送入dx寄存器

     每次累加一个单元了数据

     mov al,ds:[0]   表示ds:0内存单元字节送入al寄存器
     mov ah,0        表示al寄存器重置为0
     mov dx,ax      表示ax寄存器内容送入dx寄存器 

assume cs:code
code segment
     mov ax,0ffffh
     mov ds,ax
     mov dx,0

     mov al,ds:[0]
     mov ah,0
     mov dx,ax

     mov al,ds:[1]
     mov ah,0
     mov dx,ax

     mov al,ds:[2]
     mov ah,0
     mov dx,ax

     mov al,ds:[3]
     mov ah,0
     mov dx,ax

     mov al,ds:[4]
     mov ah,0
     mov dx,ax

     mov al,ds:[5]
     mov ah,0
     mov dx,ax

     mov al,ds:[6]
     mov ah,0
     mov dx,ax

     mov al,ds:[7]
     mov ah,0
     mov dx,ax

     mov al,ds:[8]
     mov ah,0
     mov dx,ax

     mov al,ds:[9]
     mov ah,0
     mov dx,ax

     mov al,ds:[0ah]
     mov ah,0
     mov dx,ax

     mov al,ds:[0bh]
     mov ah,0
     mov dx,ax

     mov ax,4c00h
     int 21h
    

code ends
end

下面是使用循环的汇编代码:

明显,使用Loop循环后的代码要比没使用Loop的代码要简短

mov cx,12  表示循环12次

循环代码块 

  s:   mov al,ds:[bx]   //每次循环后指向下一个内存单元
       mov ah,0
       mov dx,ax   //数据累加
       inc bx    表示每次循环后 bx值自增1  
       loop s

assume cs:code
code segment
       mov ax,0ffffh
       mov ds,ax
       mov dx,0

       mov bx,0

       mov cx,12

  s:   mov al,ds:[bx]
       mov ah,0
       mov dx,ax
       inc bx 
       loop s

     mov ax,4c00h
     int 21h
    

code ends
end

执行结果:

加载内存中并查看汇编代码 

执行到指定行

 

 

12个内存单元相加的结果

 

ffff:0~ffff:b在内存单元中的值 

 

0x0014 + 0x0083 + 0x007f + 0x0000 + 0x0074 + 0x000e + 0x0053 + 0x0050 + 0x0052 + 0x00ff + 0x0076 =  0x046A

 

编译并链接使用loop循环代码并跟踪

编辑ASM源码文件

 编译链接

 汇编调试

 计算结果 

退出 程序执行 

 

 

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

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

相关文章

第二十四章 开发Productions - ObjectScript Productions - 定义业务服务

文章目录 第二十四章 开发Productions - ObjectScript Productions - 定义业务服务介绍关键原则定义业务服务类实施 OnProcessInput() 方法 第二十四章 开发Productions - ObjectScript Productions - 定义业务服务 本页介绍如何定义业务服务类。 提示: IRIS 提供…

高完整性系统 (2):Requirement 与 Design 阶段的风险控制——Hazards, HAZOP, Fault Tree

文章目录 安全性工程流程Hazards反事实推理(CounterFactual Reasoning)案例1案例2案例3 HAZOP: HAZARDS AND OPERABILITY STUDY案例1HAZOP 工作流程HAZOP 总结 Fault Tree AnalysisFault Tree 定义案例Node Symbolsanalysis outcomes 这节课主要介绍了高…

【Linux集锦01】CentOS的安装

Centos的安装 1.创建新的虚拟机2. 自定义3.下一步4.创建虚拟空白光盘5.安装Linux系统和Centos 7 发行版6.命名虚拟机名称和选择磁盘位置7.处理器配置 主要看自己的电脑的情况8.设置虚拟机内存9.网络设置 nat10.选择IO控制器类型11.选择磁盘类型12.创建新虚拟磁盘13.设置磁盘容量…

【MyBatis】2、MyBatis 的动态 SQL 和增删改操作

目录 一、添加(1) 基本插入(2) 设置新插入记录的主键&#xff08;id&#xff09;★ 二、更新三、删除四、动态 SQL(1) if 标签(2) where 标签(3) foreach 标签 五、起别名六、sql 标签七、在 MyBatis 中集成 druid 连接池 一、添加 (1) 基本插入 <mapper namespace"s…

qtcanpool 知 99:常见问题

文章目录 前言问题构建 fancydemo 报链接库错误 后语 前言 qtcanpool 是根据 qtcreator 整理出的一套通用的工程管理模板&#xff0c;同时集成一些常见的库和插件。就像 qtcanpool 名字一样&#xff0c;它是一个 qt 池&#xff0c;用户可以从中汲取所需。 对于初次使用 qtcan…

iPad触屏笔哪个牌子好用?平替电容笔推荐

电容笔可以说是人手必备的数码产品&#xff0c;市面上的电容笔品牌数不胜数&#xff0c;很多人都快赶不上它的步伐了&#xff0c;新品的大批量上升&#xff0c;说明市场上的电容笔的需求量日益扩大&#xff0c;越来越多人在学习上、办公上等使用&#xff0c;作为资深的电容笔发…

Kafka重平衡rebalance是什么

重平衡 背景&#xff1a; 假如你是一家公司的老板&#xff0c;手下有三名员工张三、李四、王五&#xff0c;现在你有三项工作A、B、C&#xff0c;正好安排给三人。 过了一个月后&#xff0c;员工王五离开了公司。这个时候只剩下两名员工&#xff0c;你只能把原先王五安排的…

每日学术速递6.3

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Reconstructing the Minds Eye: fMRI-to-Image with Contrastive Learning and Diffusion Priors 标题&#xff1a;重建心灵之眼&#xff1a;fMRI-to-Image with Contrastive lear…

反向ajax实现

在过去的几年中&#xff0c;web开发已经发生了很大的变化。现如今&#xff0c;我们期望的是能够通过web快速、动态地访问应用。在这一新的文章系列中&#xff0c;我们学习如何使用反 向Ajax&#xff08;Reverse Ajax&#xff09;技术来开发事件驱动的web应用&#xff0c;以此来…

【Android开发基础】更新\修改Adapter适配器数据(例:聊天功能等)

文章目录 一、引言二、解决方案1、需求一2、需求二&#xff08;1&#xff09;普通方法&#xff08;2&#xff09;观察者模式&#xff08;推荐&#xff09; 一、引言 描述&#xff1a;如何在主线程&#xff08;Activity/Fragment&#xff09;UI中修改子线程&#xff08;Adapter…

小白可以看懂的「GraphQL」,GraphQL到底是啥样

GraphQL是一种用于API的查询语言&#xff0c;可以在服务端定义GraphQL Schema&#xff0c;客户端可以向服务端发送GraphQL请求&#xff0c;服务端执行GraphQL查询&#xff0c;并将结果作为JSON返回给客户端。 下面是一个使用golang实现GraphQL的示例&#xff0c;首先需要安装g…

Ajax请求与浏览器缓存

在现代Web应用程序中&#xff0c;前端代码充斥着大量的Ajax请求&#xff0c;如果对于Ajax请求可以使用浏览器缓存&#xff0c;那么可以显著地减少网络请求&#xff0c;提高程序响应速度。 1. Ajax Request 使用jQuery框架可以很方便的进行Ajax请求&#xff0c;示例代码如下&a…

RISC-V 学习篇之特权架构下的中断异常处理

RISC-V 学习篇之特权架构下的中断异常处理 控制流和Trap特权架构简单的嵌入式系统的机器模式机器模式下的异常处理mtvec&#xff08;Machine Trap-Vector Base-Address&#xff09;mepc&#xff08;Machine Exception Program Counter)mcause&#xff08;Machine Cause&#xf…

Erlang/OTP 26 正式发布

导读Erlang 是一种通用的并发函数式程序设计语言。Erlang 也可以指 Erlang/OTP 的通称&#xff0c;开源电信平台 (OTP) 是 Erlang 的常用执行环境及一系列标准组件。 Erlang/OTP 26.0 已正式发布。这是一个重要版本更新&#xff0c;包含许多新特性、改进和不兼容的变化。 主要…

C++11右值

C11右值 类型与值类别左值纯右值将亡值内置类型类类型 左值引用和右值引用内置类型右值引用&#xff1a;具有右值引用自身为左值。右值引用与函数重载函数返回值 自定义类型右值引用构造函数的隐式转换右值引用与函数重载类类型作为函数的返回值 右值引用与函数模板泛化版本&am…

Java005——idea编写和运行第一个Java程序HelloWorld

1、首相需要了解什么是IDE&#xff08;集成开发环境&#xff09;&#xff1f; 2、了解Java有哪些主流的开发工具&#xff1f; 一、创建一个文件夹用来存放Java项目 二、创建一个空项目 点击idea首页新建项目按钮 创建一个空项目 这样空项目就创建好了 三、在空项目中新建一…

leetcode 数据库题 584,585,586,595,596,601,602,607,608,610

leetcode 数据库题 第三弹 584. 寻找用户推荐人585. 2016年的投资586. 订单最多的客户595. 大的国家596. 超过5名学生的课601. 体育馆的人流量602. 好友申请 II &#xff1a;谁有最多的好友607. 销售员608. 树节点610. 判断三角形小结 584. 寻找用户推荐人 https://leetcode.cn…

<数据结构>NO7.二叉树(附Oj练习题)

&#x1f447;二叉树的完整代码在&#x1f447; syseptember的gitee仓库&#xff1a;二叉树https://gitee.com/syseptember/data-structure/tree/1513789167062c75dc172366199ce7a6b0577cc7/BinaryTree2/BinaryTree2 目录 树的概念及结构 0x01.树的概念 0x02.树的相关概念 …

快速定位接口问题,JMeter方法论,跨线程组接口关联测试!

目录 【前言】 【步骤】 1. 准备工作 2. 创建线程组 3. 创建HTTP请求 4. 添加正则表达式提取器 5. 添加HTTP请求关联控制器 6. 设置断言和验证器 7. 运行测试 【代码】 【结论】 【前言】 在进行接口测试时&#xff0c;接口之间的关联经常是我们需要重点测试的点之…

如何手写网络协议栈

哈喽&#xff0c;我是子牙&#xff0c;一个很卷的硬核男人。喜欢研究底层&#xff0c;聚焦做那些大家想学没地方学的课程&#xff1a;手写操作系统、手写虚拟机、手写编程语言…目前做了两门课&#xff1a;手写OS、手写JVM 今天想跟大家聊一个黑科技&#xff1a;手写网络协议栈…