環境
- 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 暫存器。