Tôi khá bối rối về cách thức hoạt động nhân và chia làm việc trong lắp ráp x86. Ví dụ: mã bên dưới dường như không quá khó vì giao dịch với 8 bit.x86 lắp ráp nhân và chia toán hạng lệnh, 16 bit và cao hơn
8-Bit Nhân:
; User Input:
; [num1], 20
; [num2] , 15
mov ax, [num1] ; moves the 8 bits into AL
mov bx, [num2] ; moves the 8 bits into BL
mul bl ; product stored in AX
print ax
Nhưng điều gì sẽ xảy ra khi bạn muốn nhân hai số 16-bit? Làm thế nào sẽ nhân hai số 16 bit theo cùng một cách như nó đã được thực hiện với các số 8 bit?
Tôi nhầm lẫn với những gì đăng ký các giá trị sẽ được lưu trữ. Chúng sẽ được lưu trữ trong AL và AH hoặc nó sẽ chỉ lưu trữ số 16 bit trong AX. Để hiển thị ý tôi:
; User Input:
; [num1], 20
; [num2], 15
mov eax, [num1] ; Does this store the 16-bit number in AL and AH or just in AX
mov ebx, [num2] ; Does this store the 16-bit number in BL and BH or just in BX
mul ??? ; this register relies on where the 16-bit numbers are stored
print eax
Ai đó có thể giải thích một chút về cách nhân và chia làm việc? (Đặc biệt là với những con số 16-bit và 32-bit? Liệu tôi có cần phải xoay bit nếu các giá trị được lưu trữ trong AL thấp hơn và AH?
Hoặc có thể một cách đơn giản mov num1
và num2
vào ax
và bx
tương ứng và sau đó nhân chúng để có được những sản phẩm trong eax
bạn đã thử đọc [documenta tion] (http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)? –