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 寄存器。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2020-07-12 【JavaScript】函数—可重用的代码块
2020-07-12 【JavaScript】循环语句