0165-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 寄存器。

附录

posted @   jiangbo4444  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2020-07-12 【JavaScript】函数—可重用的代码块
2020-07-12 【JavaScript】循环语句
点击右上角即可分享
微信分享提示