Tôi đang học lắp ráp cho x86 bằng cách sử dụng giả lập DosBox. Tôi đang cố gắng thực hiện phép nhân. Tôi không hiểu cách nó hoạt động. Khi tôi viết mã sau:Có thể nhân ngay lập tức với mul trong x86 Assembly không?
mov al, 3
mul 2
Tôi gặp lỗi. Mặc dù, trong tài liệu tham khảo Tôi đang sử dụng, nó nói trong nhân, nó giả định AX luôn là người giữ vị trí, do đó, nếu tôi viết:
mul, 2
Nó sẽ nhân al
giá trị bằng 2. Nhưng nó không làm việc với tôi .
Khi tôi thử như sau:
mov al, 3
mul al,2
int 3
tôi nhận được kết quả 9 trong rìu. Xem ảnh này để làm rõ:
Một câu hỏi khác: Tôi có thể nhân trực tiếp sử dụng vị trí bộ nhớ không? Ví dụ:
mov si,100
mul [si],5
Nhận xét trong đoạn mã thứ hai của bạn sai. Sau 'imul axe, 2' sản phẩm nằm trong AX (không phải trong DX: AX). –
Cũng lưu ý rằng 'imul'-tức là lệnh 3 toán hạng. Vì vậy, bạn có thể sử dụng nó không phá hủy, như 'imul cx, si, 1234'.Hầu hết các assembly cho phép bạn viết 'imul cx, 1234' thành viết tắt của' imul cx, cx, 1234', tương tự như viết 'vaddps ymm0, ymm1' thay vì' vaddps ymm0, ymm0, ymm1': ie khi dst = src1. –