Phụ lục B
LỆNH DIV VÀ MOD:
Có các lệnh DIV từ chip x86, nhưng lệnh MOD thì không có trong chip x86.
Chip x86 : Lệnh DIV thực hiện cả hai công việc là: Div và MOD, kết qủa x2 lưu vào các thanh ghi khác nhau. Việc tách và đơn giản đối với 8 bit trong bộ mô phỏng khi sử dụng Mod và Div thì không thể thực hiện được .
8 MOD 3 bằng 2. Ví dụ:
DIV AL,5 ; chiaAL cho 5; kết qủa lưu vào AL
DIV AL,BL ; chia AL cho BL, kết qủa lưu vào AL
MOD AL,5 ; Mod AL cho 5, kết qủa: phần dư đưa vào AL MOD AL,BL ; Mod AL cho BL, phần dư chuyển vào AL Mã máy :
B3 00 05 ; chia AL cho 5, kết quả lưu vào AL
A5 00 01 ; chia AL cho BC, kết quả lưu vào AL
B6 00 05 ; Mod AL cho 5, kết quả lưu vào AL ( phần dư ) A6 00 01 ; Mod AL cho BL, kết quả : phần dư đưa vào AL
LỆNH END: không thiết lập các cờ trong CPU
END : dừng chương trình đang thực hiện. Mã máy của END và HALT là 00. bộ mô phỏng thực hiện được việc này do việc sử dụng đến hoạt động ngừng dao động trong CPU. Trình biên dịch sẽ không thực hiện việc biên dịch sau khi gặp lệnh END .
Trong 1 chương trình chỉ sử dụng 1 lệnh END duy nhất.
LỆNH HALT:không thiết lập các cờ trong CPU
HALT : dừng chương trình đang thực hiện, mã máy lệnh HALT là 00. Bộ mô phỏng thực hiện được điều này khi CPU ngừng hoạt động. Có thể sử dụng vào lệnh HALT trong 1 chương trình.
LỆNH IN VÀ OUT: xuất - nhập
Giao tiếp với thiết bị ngoại vi , không thiết lập các cờ trong CPU Lệnh xuất - nhập được sử dụng bởi các port
Ví dụ :
MOV AL,55 ; chuyển gia trị 0101 0101 vào AL IN 01 ; gởi gía trị trên ra port 1
IN 03 ; được đọc từ port 3 chuyển qua AL IN 00 ; 00 là bàn phím
Mã máy tương ứng :
DO 00 55 ; chuyển 0101 0101 vào AL
F1 01 ; gởi 0101 0101 đến port 1 ( điều khiển đèn giao thông) FO 03 ; được đọc từ port 3 vào AL
FO 00 ; 00 nhập từ bàn phím
Lệnh INT và IRET: Sử dụng với các ngắt Lệnh INT và IRET không thiết lập cờ tràn. Ví dụ:
INT 02 ;gọi lệnh ngắt
;bắt đầu bằng địa chỉ đã được lưu trữ
;tại địa chỉ 02, các địa chỉ 00 đến OF có thể sử ;dụng như vector ngắt IRET ;quay trở lại vị trí ngắt
CC 02 ; gọi việc ngắt.
CD ; quay trở lại việc ngắt.
CPU đẩy gía trị IP + 2 bởi con trỏ lệnh vào ngăn xếp. Sau đó CPU sẽ quay trở lại địa chỉ này. Lệnh con trỏ được đặt vào địa chỉ này đến khi gặp lệnh IRET. CPU sẽ chuyển dữ liệu ra khỏi ngăn xếp nhờ lệnh từ địa chỉ này đến khi gặp lệnh IRET. CPU sẽ chuyển dữ liệu ra khỏi ngăn xếp nhờ lệnh IP và chuyển đến địa chỉ nơi mà nó đang thực hiện.
Lệnh JMP
Ðặt một giá trị mới vào IP, không thiết lập các cờ trong CPU. Ví dụ : JMP FOO ; nhảy đến địa chỉ nhãn FOO. Mã máy tương ứng
CO 12 ; nhảy 12 vị trí . CO FE ; quay lại 12 vị trí .
Lệnh JMP thực hiện được nhờ việc cộng thêm 1 số vào lệnh IP. Số này có thể nằm trong khoảng - 128 đến 127, việc này xác định độ dài nhất có thể.
Lệnh JMP : nhảy không điều kiện, JMP không sử dụng trong CPU.
Lệnh JNO: Jmp Not Overflow JNO không thiết lập cờ CPU. Ví dụ:
JNO FOO ; nhảy đến địa chỉ có nhản FOO Mã máy tương ứng
C6 12 ; nhảy 12 khoảng cách C6 FE ; quay lại 2 khoảng cách
JNO làm việc bằng cách cộng 1 số vào CPU nhờ con trỏ lệnh IP , số này có thể đi từ -128. - . +127. Ðây là khoảng cách lớn nhất mà lệnh nhảy có thể thực hiện
JNO sẽ thực hiện nếu cờ " O" trong CPU không đặt vào.
Lệnh JNS: Jump Not Sign JNS không thiết lập cờ CPU.
Ví dụ : JNS FOO ; nhảy về địa chỉ có nhãn FOO Mã máy tương ứng
C4 12 ; nhảy 12 khoảng cách C4 FE ; quay lại 2 khoảng cách
JNS làm việc bằng cách cộng thêm 1 số vào CPU nhờ con trỏ lệnh, số này có thể chuyển đổi từ -128 đến -127 , đây là khoảng cách lớn nhất có thể nhảy .
Lệnh JNZ: Jump Not Zero JNZ không thiết lập cờ CPU. Ví dụ :
JNZ FOO ; nhảy về nhãn FOO Mã máy tương ứng
C2 12 ; nhảy 12 khoảng cách C2 FE ; quay lại 2 khoảng cách
JNZ làm việc dựa trên nguyên tắc tăng thêm 1 vào CPU nhờ con trỏ lệnh IP. Con số này thay đổi từ -128 đến +127, đây là khoảng cách lớn nhất có thể của lệnh nhảy.
JNZ sẽ thực hiện việc nhảy nếu cờ"Z" trong CPU không đặt vào
Nhảy khi gặp sự tràn. JO không thiết lập cờ CPU. Ví dụ:
JO FOO ; nhảy đến địa chỉ nhãn FOO. Mã máy tương ứng :
C5 12 ; nhảy 12 khoảng cách C5 FE ; quay lại hai khoảng cách.
JO làm việc dự trên nguyên tắc tăng thêm một vào CPU nhờ con trỏ lệnh IP. Con số này thay đổi từ -128 đến +127 , đây là khoảng cách có thể nhảy lớn nhất.
JO sẽ thực hiện việc nhảy nếu trong CPU có đặt cờ "O".
Lệnh JS: Jump Sign JS không thiết lập cờ CPU.
Ví dụ :
JS FOO ; nhảy đến địa chỉ nhãn FOO Mã máy tương ứng
C3 12 ; nhảy 12 khoảng cách
C3 FE ; quay về lại hai khoảng cách.
JS làm việc dựa trên nguyên tắc tăng thêm một vào CPU nhờ IP. Con số này thay đổi từ -128 đến +127, đây là khoảng cách lớn nhất có thể nhảy.
Lệnh JZ( Jump Zero ) JZ không thiết lập cờ CPU.
Ví dụ :
JZ FOO ; nhảy về địa chỉ nhãn FOO Mã máy tương ứng
C1 12 ; nhảy 12 khoảng cách C1 FE ; quay lại hai khoảng cách
JZ làm việc dựa trên nguyên tắc tăng thêm một vào CPU, nhờ con trỏ lệnh. Con số này thay đổi từ -128 đến +127, đây là khoảng cách lớn nhất mà lệnh nhảy có thể thực hiện. Lệnh JZ sẽ thực hiện việc nhảy nếu cờ Z" được đặt vào CPU.
Lệnh MOV
Chuyển dữ liệu từ nơi này đến nơi khác. Ví dụ :
MOV AL, 12 ; chuyển 12 hex vào AL
MOV BL, [2F] ; chuyển nội dung trong ô nhớ [2F] vào BL MOV [33], CL ; chuyển dữ liệu từ thanh ghi CL vào ô nhớ [33]
MOV AL, [DL]; chuyển nội dung trong thanh ghi DL vào một ;vùng nhớ, từ vùng nhớ đó chuyển vào AL.
MOV [BL], CL ; chuyển nội dung trong thanh ghi BL vào ô nhớ ;có địa chỉ trong thanh ghi CL.
Mã máy tương ứng
DU 00 12 ; chuyển 12 hex vào AL
D1 01 2F ; chuyển nội dung ô nhớ 2F vào BL D2 33 02; chuyển dữ liệu từ CL đến ô nhớ [33]
D4 02 03; chuyển dữ liệu từ BL đến ô nhớ, sau đó chuyển ; ô nhớ đến CL.