Đây là một điều kỳ quặc, nhưng tôi đã thu thập thông tin với trình tạo GNU ngày hôm nay (tôi muốn ít nhất có thể đọc cú pháp), và cố gắng lấy ví dụ nhỏ này của tôi để làm việc. Cụ thể là tôi chỉ muốn đi từ 0 đến 100, in ra tất cả các số trong thời gian. Vì vậy, một vài phút sau, tôi nghĩ ra điều này:Tăng từ 0 lên 100 trong ngôn ngữ lắp ráp
# count.s: print the numbers from 0 to 100.
.text
string: .asciz "%d\n"
.globl _main
_main:
movl $0, %eax # The starting point/current value.
movl $100, %ebx # The ending point.
_loop:
# Display the current value.
pushl %eax
pushl $string
call _printf
addl $8, %esp
# Check against the ending value.
cmpl %eax, %ebx
je _end
# Increment the current value.
incl %eax
jmp _loop
_end:
Tất cả những gì tôi nhận được từ lần này là 3 lần lặp đi lặp lại. Như tôi đã nói, chỉ là một ví dụ ít giả tạo, vì vậy đừng lo lắng quá nhiều về nó, nó không phải là một vấn đề sống hay chết.
(Định dạng có chút sai lầm, nhưng không có gì lớn).
'xorl% eax,% eax' là hoàn toàn tương đương với 'movl $ 0,% eax', và mất 3 byte ít hơn. Chỉ cần nói. :) –