PHAn II.2. Nhóm lệnh số học (là nhóm lệnh có ảnh hưởng đến cờ).
Các lệnh số hack boa gem bốn phép tính số học cơ bản là cộng, trừ , nhân, chia và đảo dấu toán hạng.
ADD/SUB Dạng tổng quát của các lệnh cộng (add) và trừ (subtract) là:
ADD đích, nguồn
SUB đích, nguồn
Mô tả: ADD: Đích Đích + Nguồn¬
SUB : Đích Đích -Nguồn¬
trong đó các toán hạng đích, nguồn có thể tìm được theo các địa chỉ khác nhau, nhưng phải chứa dữ liệu có cùng độ dài và không được phép đồng thời là hai ô nhớ và cũng không được là thanh ghi đoạn.
Bảng 4-4 tóm tắt các loại khác nhau của các toán hạng đích và nguồn dùng trong các lệnh cộng và trừ:
Bảng 4-4. các dạng toán hạng trong lệnh ADD/SUB:
Đích (nơi đến) Nguồn (gốc)
Thanh ghi Thanh ghi
Thanh ghi Bộ nhớ
Bộ nhớ Thanh ghi
Bộ nhớ Tức thời (hằng số)
Thanh ghi Tức thời(hằng số)
Ví dụ 1:
ADD AX, BX ; AX+BX¬AX
ADD AL, 74H ; AX+ 74H¬AX
SUB CL, AL CL - AL¬; CL
SUB AX, 0405H AX - 0405H.¬; AX
Ví dụ 2: Viết đoạn chương trình ngôn ngữ assembly để cộng 5H với 3H, dùng các thanh ghi AL, BL.
MOV AL, 05H 05H¬; AL
MOV BL, 03H 03H¬; BL
ADD AL, BL 05H+03H =08H¬; AL
MOV 100H, AL ; Di chuyển kết quả từ AL vào vị trí nhớ DS:100H.
MUL/DIV Dạng tổng quát của lệnh nhân (multiply, MUL) và chia (divide, DIV) là:
MUL số nhân nguồn
DIV số chia nguồn
trong đó số nhân nguồn (toán hạng gốc) có thể tìm được theo các chế độ địa chỉ khác nhau. Khi dùng lệnh nhân, số được nhân phải được chuyển vào thanh ghi AX hoặc AL. Còn số nhân thì có thể chuyển vào thanh ghi khác bất kỳ hoặc một địa chỉ nhớ.
Ví dụ 2:
MUL BX ; số nhân nằm trong thanh ghi BX
MUL MEM1 ; số nhân nằm trong địa chỉ nhớ mang nhãn MEM1
Khi hai byte nhân với nhau thì kết quả được gửi lưu vào thanh ghi AX.
Ví dụ 3. Viết đoạn chương trình nhân 5H với 3H, dùng thanh ghi CL.
MOV AL, 05H 05H (số được nhân)¬; AL
MOV CL, 03H 03H (số nhân)¬; CL
MUL CL 0FH (kết quả)¬; AL
MOV MEM1, AL ; chuyển kết quả (0FH)
; từ AL vào vị trí nhớ có nhãn MEM1.
Khi nhân hai lời (16 bit) với nhau thì số được nhân phải chuyển vào thanh ghi AX, còn số nhân có thể trong mởột thanh ghi khác bất kỳ hoặc trong vị trí nhớ 16 bite. kết quả sẽ là con số 32 bit (hoặc hai lời) và được chứa trong các thanh ghi DX và AX. Lời có trọng số lớn sẽ ở trong thanh ghi DX và lời có trọng số nh sỏẽ ở trong thanh ghi AX.
Ví dụ 4. Viết đoạn chương trình để nhân 3A62H với 2B14H.
MOV AX, 3A62H ;3A62H= AX
MOV CX, 2B14H ;2B14H= CX
MUL CX tích = 289C ;63A8H=DXAX
Các lệnh chia, về cơ bản, cũng giống như các lệnh nhân. Trong phép chia cỡ byte, số chia là một byte có th ểở trong một thanh ghi hoặc một vị trí nhớ. Số bị chia phải là một số không dấu 16 bit chứa trong thanh ghi AX. Kết quả thương số sẽ ở trong thanh ghi AL, còn số dư thì ở trong thanh ghi AH. Đối với phépchia cỡ lời thì số chia 16 bit có thể đặt trong thanh ghi hoặc một vị trí nhớ. Còn số bị chia phải là một số không dấu 32 bit được đặt trong các thanh ghi DX và AX. Thanh ghi DX sẽ giữ lời có trọng số cao, thanh ghi AX sẽ giữ lời có trọng số thấp. Kết quả thương đặt trong thanh ghi AX, còn số dư đặt trong thanh ghi DX.
Ví dụ 5: Viết đoạn chương trình để chia 6H cho 3H, dùng thanh ghi CL. MOV AX, 0006H 6H¬; AX
MOV CL, 03H ;3H= CL
DIV CL 00H (số dư), 02H (thương số)= AHAL
Chú ý: 6H được đưa vào thành 0006H để lấp đầy toàn bộ thanh ghi AX. Như vậy các byte trọng số cao của AX sẽ bị xoá để tránh bị lỗi.
Ví dụ 6: Viết đoạn chương trình để chia 1A034H cho 1002H, dùng thanh ghi BX
MOV AX, 0A034H 0A034H¬; AX
MOV DX, 0001H 0001H¬; DX
MOV BX, 1002H 1002H¬; BX
DIV BX 00H (số dư)1AH (thương số)¬; DXAX
INC/DEC Đây là lệnh tăng (increment) và giảm (decrement). Lệnh tăng sẽ cộng thêm một đơn vị vào toán hạng, còn lệnh giảm sẽ trừ một đơn vị vào toán hạng. Các lệnh này rất cần đối với thao tác đếm. Dạng tổng quát của các lệnh INC và DEC là:
INC đích Đích +1¬Mô tả: Đích
DEC đích Đích -1¬Mô tả: Đích
Toán hạng đích có thể là một thanh ghi hoặc một vị trí nhớ bất kỳ, có thể là 1 lời 16 bit hoặc 1 byte; có th tìm đểược theo các chế độ địa chỉ khác nhau.
Chú ý:
- Trong lệnh tăng, nếu Đích = FFH (hoặc FFFFH) thì Đích + 1 = 00H (hoặc 0000H) mà không ảnh hưởng đến c nhờ. Lệnh này cho kết quả tương đương như lệnh ADD Đích, 1 nhưng chạy nhanh hơn.
- Trong lệnh giảm, nếu đích là 00H (hoặc 0000H) thì Đích -1 = FFH (hoặc FFFFH) mà không ảnh hưởng đến c nhờ CF. Lệnh này cho kết quả tương đương với lệnh SUB Đích, 1 nhưng chạy nhanh hơn.
NEG- Negative a Operand (lấy bù 2 của một toán hạng hay đảo dấu toán hạng).
Viết lệnh: NEG Đích
Ví dụ:
NEG AH 0 - (AH)¬; AH
NEG BYTE PTR[BX] ; lấy bù 2 của ô nhớ do BX chỉ ra trong DS
Các lệnh số hack boa gem bốn phép tính số học cơ bản là cộng, trừ , nhân, chia và đảo dấu toán hạng.
ADD/SUB Dạng tổng quát của các lệnh cộng (add) và trừ (subtract) là:
ADD đích, nguồn
SUB đích, nguồn
Mô tả: ADD: Đích Đích + Nguồn¬
SUB : Đích Đích -Nguồn¬
trong đó các toán hạng đích, nguồn có thể tìm được theo các địa chỉ khác nhau, nhưng phải chứa dữ liệu có cùng độ dài và không được phép đồng thời là hai ô nhớ và cũng không được là thanh ghi đoạn.
Bảng 4-4 tóm tắt các loại khác nhau của các toán hạng đích và nguồn dùng trong các lệnh cộng và trừ:
Bảng 4-4. các dạng toán hạng trong lệnh ADD/SUB:
Đích (nơi đến) Nguồn (gốc)
Thanh ghi Thanh ghi
Thanh ghi Bộ nhớ
Bộ nhớ Thanh ghi
Bộ nhớ Tức thời (hằng số)
Thanh ghi Tức thời(hằng số)
Ví dụ 1:
ADD AX, BX ; AX+BX¬AX
ADD AL, 74H ; AX+ 74H¬AX
SUB CL, AL CL - AL¬; CL
SUB AX, 0405H AX - 0405H.¬; AX
Ví dụ 2: Viết đoạn chương trình ngôn ngữ assembly để cộng 5H với 3H, dùng các thanh ghi AL, BL.
MOV AL, 05H 05H¬; AL
MOV BL, 03H 03H¬; BL
ADD AL, BL 05H+03H =08H¬; AL
MOV 100H, AL ; Di chuyển kết quả từ AL vào vị trí nhớ DS:100H.
MUL/DIV Dạng tổng quát của lệnh nhân (multiply, MUL) và chia (divide, DIV) là:
MUL số nhân nguồn
DIV số chia nguồn
trong đó số nhân nguồn (toán hạng gốc) có thể tìm được theo các chế độ địa chỉ khác nhau. Khi dùng lệnh nhân, số được nhân phải được chuyển vào thanh ghi AX hoặc AL. Còn số nhân thì có thể chuyển vào thanh ghi khác bất kỳ hoặc một địa chỉ nhớ.
Ví dụ 2:
MUL BX ; số nhân nằm trong thanh ghi BX
MUL MEM1 ; số nhân nằm trong địa chỉ nhớ mang nhãn MEM1
Khi hai byte nhân với nhau thì kết quả được gửi lưu vào thanh ghi AX.
Ví dụ 3. Viết đoạn chương trình nhân 5H với 3H, dùng thanh ghi CL.
MOV AL, 05H 05H (số được nhân)¬; AL
MOV CL, 03H 03H (số nhân)¬; CL
MUL CL 0FH (kết quả)¬; AL
MOV MEM1, AL ; chuyển kết quả (0FH)
; từ AL vào vị trí nhớ có nhãn MEM1.
Khi nhân hai lời (16 bit) với nhau thì số được nhân phải chuyển vào thanh ghi AX, còn số nhân có thể trong mởột thanh ghi khác bất kỳ hoặc trong vị trí nhớ 16 bite. kết quả sẽ là con số 32 bit (hoặc hai lời) và được chứa trong các thanh ghi DX và AX. Lời có trọng số lớn sẽ ở trong thanh ghi DX và lời có trọng số nh sỏẽ ở trong thanh ghi AX.
Ví dụ 4. Viết đoạn chương trình để nhân 3A62H với 2B14H.
MOV AX, 3A62H ;3A62H= AX
MOV CX, 2B14H ;2B14H= CX
MUL CX tích = 289C ;63A8H=DXAX
Các lệnh chia, về cơ bản, cũng giống như các lệnh nhân. Trong phép chia cỡ byte, số chia là một byte có th ểở trong một thanh ghi hoặc một vị trí nhớ. Số bị chia phải là một số không dấu 16 bit chứa trong thanh ghi AX. Kết quả thương số sẽ ở trong thanh ghi AL, còn số dư thì ở trong thanh ghi AH. Đối với phépchia cỡ lời thì số chia 16 bit có thể đặt trong thanh ghi hoặc một vị trí nhớ. Còn số bị chia phải là một số không dấu 32 bit được đặt trong các thanh ghi DX và AX. Thanh ghi DX sẽ giữ lời có trọng số cao, thanh ghi AX sẽ giữ lời có trọng số thấp. Kết quả thương đặt trong thanh ghi AX, còn số dư đặt trong thanh ghi DX.
Ví dụ 5: Viết đoạn chương trình để chia 6H cho 3H, dùng thanh ghi CL. MOV AX, 0006H 6H¬; AX
MOV CL, 03H ;3H= CL
DIV CL 00H (số dư), 02H (thương số)= AHAL
Chú ý: 6H được đưa vào thành 0006H để lấp đầy toàn bộ thanh ghi AX. Như vậy các byte trọng số cao của AX sẽ bị xoá để tránh bị lỗi.
Ví dụ 6: Viết đoạn chương trình để chia 1A034H cho 1002H, dùng thanh ghi BX
MOV AX, 0A034H 0A034H¬; AX
MOV DX, 0001H 0001H¬; DX
MOV BX, 1002H 1002H¬; BX
DIV BX 00H (số dư)1AH (thương số)¬; DXAX
INC/DEC Đây là lệnh tăng (increment) và giảm (decrement). Lệnh tăng sẽ cộng thêm một đơn vị vào toán hạng, còn lệnh giảm sẽ trừ một đơn vị vào toán hạng. Các lệnh này rất cần đối với thao tác đếm. Dạng tổng quát của các lệnh INC và DEC là:
INC đích Đích +1¬Mô tả: Đích
DEC đích Đích -1¬Mô tả: Đích
Toán hạng đích có thể là một thanh ghi hoặc một vị trí nhớ bất kỳ, có thể là 1 lời 16 bit hoặc 1 byte; có th tìm đểược theo các chế độ địa chỉ khác nhau.
Chú ý:
- Trong lệnh tăng, nếu Đích = FFH (hoặc FFFFH) thì Đích + 1 = 00H (hoặc 0000H) mà không ảnh hưởng đến c nhờ. Lệnh này cho kết quả tương đương như lệnh ADD Đích, 1 nhưng chạy nhanh hơn.
- Trong lệnh giảm, nếu đích là 00H (hoặc 0000H) thì Đích -1 = FFH (hoặc FFFFH) mà không ảnh hưởng đến c nhờ CF. Lệnh này cho kết quả tương đương với lệnh SUB Đích, 1 nhưng chạy nhanh hơn.
NEG- Negative a Operand (lấy bù 2 của một toán hạng hay đảo dấu toán hạng).
Viết lệnh: NEG Đích
Ví dụ:
NEG AH 0 - (AH)¬; AH
NEG BYTE PTR[BX] ; lấy bù 2 của ô nhớ do BX chỉ ra trong DS
Không có nhận xét nào:
Đăng nhận xét