首页 > 其他分享 >0165-loop 循环

0165-loop 循环

时间:2024-07-12 10:09:22浏览次数:16  
标签:0000 al 0165 add 循环 BYTE bx PTR loop

环境

  • Time 2022-11-09
  • WSL-Ubuntu 22.04
  • QEMU 6.2.0
  • NASM 2.15.05

前言

说明

参考:《x86汇编语言:从实模式到保护模式》李忠

目标

使用 loop 循环,实现 1 到 100 的加法计算。

汇编代码

;计算 1 到 100 相加的结果
mov ax,0
mov cx,100

loop_label:
    add ax,cx
    loop loop_label

jmp $

times 510 - $ + $$ db 0
db 0x55
db 0xAA

loop 指令

loop 指令执行时,通过对 CX 寄存器减一,然后判断是否大于 0,大于则跳转到标号处,不大于则向下执行。

执行完的结果

AX: 13BA BX: 0000 CX: 0000 DX: 0080
SI: 0000 DI: 0000 SP: 6F00 BP: 0000
CS: 0000 DS: 0000 ES: 0000 SS: 0000

IP: 7C0A EIP:00007C0A
CS:IP: 0000:7C0A (0x07C0A)
SS:SP: 0000:6F00 (0x06F00)
SS:BP: 0000:0000 (0x00000)
OF <0>  DF <0>  IF <1>  TF <0>  SF <0>  ZF <0>  AF <0>  PF <0>  CF <0>
ID <0>  VIP <0> VIF <0> AC <0>  VM <0>  RF <0>  NT <0>  IOPL <0>
---------------------------[ CODE ]----
=> 0x7c0a:      jmp    0x7c0a
   0x7c0c:      add    BYTE PTR [bx+si],al
   0x7c0e:      add    BYTE PTR [bx+si],al
   0x7c10:      add    BYTE PTR [bx+si],al
   0x7c12:      add    BYTE PTR [bx+si],al
   0x7c14:      add    BYTE PTR [bx+si],al
   0x7c16:      add    BYTE PTR [bx+si],al
   0x7c18:      add    BYTE PTR [bx+si],al
   0x7c1a:      add    BYTE PTR [bx+si],al
   0x7c1c:      add    BYTE PTR [bx+si],al

其中 AX 寄存器中的内容,13BA 就是最终的结果。

总结

使用 loop 指令,计算了 1 到 100 相加的结果,结果保存在 AX 寄存器。

附录

标签:0000,al,0165,add,循环,BYTE,bx,PTR,loop
From: https://www.cnblogs.com/jiangbo4444/p/18297665

相关文章

  • 前端必会原理--事件循环
    事件循环浏览器的进程模型何为进程?程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。何为线程?有了进程后,就可以运行程序的代码了。运行代码的「人」称之为「线程」。一个进......
  • python的选择循环结构
    Python中的选择循环结构是编程中非常基本且强大的部分,它们允许程序根据条件执行不同的代码块。Python中主要有两种选择结构(条件语句)和一种循环结构。选择结构(条件语句)if语句if语句执行是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,剩余部分会被忽略。这里......
  • Spring依赖注入、循环依赖——三级缓存
    依赖注入背景:实例化对象后,需要设置字段,即依赖注入,两种:set方法注入和构造方法注入。 流程:先寻找整个类的注入点,就是打了@autowired的字段或方法,然后根据类型、名称去找 常用依赖注入注解辨析:@Inject:来自JSR330规范。按类型注入。@Resource:是JavaEE的一部分。先按名......
  • PTA 7-2 数组循环左移--C++
    本题思路:本题可以用数组或者指针来解决问题,本题我们如果我们用数组来解决问题的话,数组循环左移,就相当后面的数组右移过来,如i位置的就相当于i+m的位置的数组,大概这样的思路,就没有问题了#include<iostream>usingnamespacestd;intmain(){intn,m;cin>>n>>m;......
  • C语言中,scanf和printf函数,分支和循环
    目录1.printf函数1.占位符2.输出格式a.输出宽度b.总是显⽰正负号c.限制小数位数d.输出部分字符串2.scanf函数1.基本用法2.返回值3.占位符4.赋值忽略符3.if语句elseelseif4.关系操作符5.条件操作符(三目操作符)6.逻辑操作符a.逻辑取反操作符!b.逻辑与运算符&......
  • CS50P: 2. Loops
    control+C终止循环while循环#meow3timesi=0whilei<3:print("meow")i+=1 #python中没有i++for循环foriin[0,1,2]:print("meow")i初始为1,依次取2、3in可以让i按序取遍list中的元素,其中元素可以是int,dict,str,etc.for_in......
  • python基础(06while循环+for循环)
    一、循环循环的概念循环语句是一种在程序中多次执行相同代码块的语句。循环的分类在python中,循环分为while和for两种,while循环是一种在满足条件的情况下重复执行代码块的循环,最终实现的效果和for循环相同。总结while循环和for循环本质上没有区别,都是为了实现循环效果w......
  • 用kali学Python第7章用户输入和while循环的代码截图和分析
    第7章   用户输入和while循环用户输入演示代码7-1name=input("Pleaseenteryourname:")print(f"\nHello,(name)!”)运行结果Pleaseenteryourname:iTuringHello,iTuring!字符串转换其他类型•int(string):将字符串转换为整数值。•float(string):将字符串......
  • 二分查找的循环条件及指针终止位置问题
    二分查找的循环条件及指针终止位置问题常见的二分搜索法的循环迭代方法分为:左闭右开和左闭右闭两种方式左闭右开:由于右边界开放,例如[1,1)是矛盾的,因此循环条件为while(l<r)。闭合指后续迭代仍需要进行对其元素进行比较。因此每次迭代结束,左指针l移动到中点的下一位l=mi......
  • 【TCN-BiGRU-Attention回归预测】基于被囊群优化算法TSA优化时间卷积双向门控循环单元
        ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......