Đề cương bài giảng Hợp ngữ
Chương 4 : CÁC LỆNH LOGIC , DỊCH VÀ QUAY
Trong chương này chúng ta sẽ xem xét các lệnh mà chúng có thể dùng để
thay đổi từng bit trên một byte hoặc một từ số liệu . Khả năng quản lý đến từng bit
thường là không có trong các ngôn ngữ cấp cao ( trừ C ) và đây là lý do giải thích tại
sao hợp ngữ vẫn đóng vai trò quan trọng trong khi lập trình .
4.1 Các lệnh logic
Chúng ta có thể dùng các lệnh logic để thay đổi từng bit trên byte hoặc trên
một từ số liệu .
Khi một phép toán logic được áp dụng cho toán hạng 8 hoặc 16 bit thì có thể
áp dụng phép toán logic đó trên từng bit để thu được kết qủa cuối cùng .
Bước 2 : Đọc và xử lý một dòng văn bản Bước này thực hiện hầu hết các công việc của chương trình : đọc các ký tự từ bàn phím , tìm ra ký tự đầu và ký tự cuối , nhắc nhở người dùng nếu ký tự gõ vào không phải là ký tự hoa . Có thể biễu diễn bước này bởi thuật toán sau : Read a character WHILE character is not a carrige return DO IF character is a capital (*) THEN IF character precedes first capital Then first capital= character End_if IF character follows last character Then last character = character End_if END_IF Read a character END_WHILE Trong đó dòng (*) có nghĩa là điều kiện để ký tự là hoa là điều kiện AND IF ( ‘A’<= character ) AND ( character <= ‘Z’) Bước 2 có thể mã hoá như sau : MOV AH,1 ; đọc ký tự INT 21H ; ký tự trên AL WHILE : ;trong khi ký tự gõ vào không phải là CR thì thực hiện CMP AL,0DH ; CR? JE END_WHILE ;yes, thoát ; nếu ký tự là hoa CMP AL,’A’ ; char >=‘A’? JNGE END_IF ;không phải ký tự hoa thì nhảy đến END_IF CMP AL,’Z’ ; char <= ‘Z’? JNLE END_IF ; không phải ký tự hoa thì nhảy đến END_IF ; thì Chương 3 : Các lệnh lặp và rẽ nhánh 41 ; nếu ký tự nằm trước biến FIRST ( giá trị ban đầu là‘[‘ : ký tự sau Z ) CMP AL,FISRT ; char < FIRST ? JNL CHECK_LAST; >= ; thì ký tự viết hoa đầu tiên = ký tự MOV FIRST,AL ; FIRST=character ;end_if CHECK_LAST: ; nếu ký tự là sau biến LAST ( giá trị ban đầu là ‘@’: ký tự trước A) CMP AL,LAST ; char > LAST ? JNG END_IF ; <= ;thì ký tự cuối cùng = ký tự MOV LAST, AL ;LAST = character ;end_if END_IF : ; đọc một ký tự INT 21H ; ký tự trên AL JMP WHILE_ ; lặp END_WHILE: Các biến FIRST và LAST được định nghĩa như sau trong đoạn số liệu : FIRST DB ‘[ $‘ ; ‘[‘ là ký tự sau Z LAST DB ‘@ $ ’ ; ‘@’ là ký tự trước A Bước 3 : In kết qủa Thuật toán IF no capital were typed THEN display ‘No capital’ ELSE display first capital and last capital END_IF Bước 3 sẽ phải in ra các thông báo : · NOCAP_MSG nếu không phải chữ in · CAP1_MSG chữ in đầu tiên · CAP2_MSG chữ in cuối cùng Chúng được định nghĩa như sau trong đoạn số liệu . NOCAP_MSG DB 0DH,0AH,‘No capitals $’ CAP1_MSG DB 0DH,0AH, ‘First capital= ’ FIRST DB ‘[ $ ’ CAP2_MSG DB 0DH,0AH,‘Last capital=’ Chương 3 : Các lệnh lặp và rẽ nhánh 42 LAST DB ‘@ $’ Bước 3 có thể mã hoá như sau : ;in kết quả MOV AH,9 ; hàm xuất ký tự ; IF không có chữ hoa nào được nhập thì FIRST =‘[’ CMP FIRST,’[’ ; FIRST=‘[’ ? JNE CAPS ; không , in kết qủa ;THEN LEA DX,NOCAP_MSG INT 21H CAPS: LEA DX,CAP1_MSG INT 21H LEA DX,CAP2_MSG INT 21H ; end_if Chương trình có thể viết như sau : TITLE PGM3-1 : FIRST AND LAST CAPITALS .MODEL SMALL .STACK 100h .DATA PROMPT DB ‘Type a line of text’, 0DH, AH, ‘$’ NOCAP_MSG DB 0DH,0AH, ‘No capitals $’ CAP1_MSG DB 0DH,0AH, ‘First capital=’ FIRST DB ‘[ $’ CAP2_MSG DB ‘Last capital = ’ LAST DB ‘@ $’ .CODE MAIN PROC ; khởi tạo DS MOV AX,@DATA MOV DS,AX ; in dấu nhắc MOV AH,9 ; hàm xuất chuỗi LEA DX,PROMPT ;lấy địa chỉ chuỗi vào DX INT 21H ; xuất chuỗi Chương 3 : Các lệnh lặp và rẽ nhánh 43 ;đọc và xử lý 1 dòng văn bản MOV AH,1 ; đọc ký tự INT 21H ; ký tự trên AL WHILE : ;trong khi ký tự gõ vào không phải là CR thì thực hiện CMP AL,0DH ; CR? JE END_WHILE ;yes, thoát ; nếu ký tự là hoa CMP AL,’A’ ; char >=‘A’? JNGE END_IF ;không phải ký tự hoa thì nhảy đến END_IF CMP AL,’Z’ ; char <= ‘Z’? JNLE END_IF ; không phải ký tự hoa thì nhảy đến END_IF ; thì ; nếu ký tự nằm trước biến FIRST CMP AL,FISRT ; char < FIRST ? JNL CHECK_LAST; >= ; thì ký tự viết hoa đầu tiên = ký tự MOV FIRST,AL ; FIRST=character ;end_if CHECK_LAST: ; nếu ký tự là sau biến LAST CMP AL,LAST ; char > LAST ? JNG END_IF ; <= ;thì ký tự cuối cùng = ký tự MOV LAST, AL ;LAST = character ;end_if END_IF : ; đọc một ký tự INT 21H ; ký tự trên AL JMP WHILE_ ; lặp END_WHILE: ;in kết quả MOV AH,9 ; hàm xuất ký tự ; IF không có chữ hoa nào được nhập thì FIRST =‘[‘ CMP FIRST,’[‘ ; FIRST=‘[‘ ? JNE CAPS ; không , in kết qủa ;Then LEA DX,NOCAP_MSG INT 21H CAPS: LEA DX,CAP1_MSG Chương 3 : Các lệnh lặp và rẽ nhánh 44 INT 21H LEA DX,CAP2_MSG INT 21H ; end_if ; dos exit MOV AH,4CH INT 21h MAIN ENDP END MAIN Chương 4 : Các lệnh dịch và quay 45 Chương 4 : CÁC LỆNH LOGIC , DỊCH VÀ QUAY Trong chương này chúng ta sẽ xem xét các lệnh mà chúng có thể dùng để thay đổi từng bit trên một byte hoặc một từ số liệu . Khả năng quản lý đến từng bit thường là không có trong các ngôn ngữ cấp cao ( trừ C ) và đây là lý do giải thích tại sao hợp ngữ vẫn đóng vai trò quan trọng trong khi lập trình . 4.1 Các lệnh logic Chúng ta có thể dùng các lệnh logic để thay đổi từng bit trên byte hoặc trên một từ số liệu . Khi một phép toán logic được áp dụng cho toán hạng 8 hoặc 16 bit thì có thể áp dụng phép toán logic đó trên từng bit để thu được kết qủa cuối cùng . Ví dụ : Thực hiện các phép toán sau : 1. 10101010 AND 1111 0000 2. 10101010 OR 1111 0000 3. 10101010 XOR 1111 0000 4. NOT 10101010 Giải : 1. 10101010 AND 1111 0000 = 1010 0000 2. 10101010 OR 1111 0000 = 1111 1010 3. 1010 1010 XOR 1111 0000 0101 1010 4. NOT 10101010 = 01010101 Chương 4 : Các lệnh dịch và quay 46 4.1.1 Lệnh AND,OR và XOR Lệnh AND,OR và XOR thực hiện các chức năng đúng như tên gọi của nó . Cú pháp của chúng là : AND destination , source OR destination , source XOR destination , source Kết qủa của lệnh được lưu trữ trong toán hạng đích do đó chúng phải là thanh ghi hoặc vị trí nhớ . Toán hạng nguồn là có thể là hằng số , thanh ghi hoặc vị trí nhớ . Dĩ nhiên hai toán hạng đều là vị trí nhớ là không được phép . Aûnh hưởng đến các cờ : Các cờ SF,ZF và PF phản ánh kết qủa AF không xác định CF=OF=0 Để thay đổi từng bit theo ý muốn chúng ta xây dựng toán hạng nguồn theo kiểu mặt nạ ( mask) . Để xây dựng mặt nạ chúng ta sử dụng các tính chất sau đây của các phép toán AND ,OR và XOR : b AND 1 = b b OR 0 = b b XOR 0 = b b AND 0 = 0 b OR 1 = 1 b XOR 1 = not b · Lệnh AND có thể dùng để xóa ( clear) toán hạng đích nếu mặt nạ bằng 0 · Lệnh OR có thể dùng để đặt ( set) 1 cho toán hạng đích nếu mặt nạ bằng 1 · Lệnh XOR có thể dùng để lấy đảo toán hạng đích nếu mặt nạ bằng 1 . Lệnh XOR cũng có thể dùng để xóa nội dung một thanh ghi ( XOR với chính nó ) Ví dụ : Xoá bit dấu của AL trong khi các bit khác không thay đổi Giải : Dùng lệnh AND với mặt nạ 0111111=7Fh AND AL,7Fh ; xóa bit dấu ( dấu + ) của AL Ví dụ : Set 1 cho các bit MSB và LSB của AL , các bit khác không thay đổi . Giải : Dùng lệnh OR với mặt nạ 10000001 =81h OR AL,81h ; set 1 cho LSB và MSB của AL Ví dụ : Thay đổi bit dấu của DX Giải : Dùng lệnh XOR với mặt nạ 1000000000000000=8000h XOR DX,8000h Các lệnh logic là đặc biệt có ích khi thực hiện các nhiệm vụ sau : Đổi một số dưới dạng ASCII thành một số Giả sử rằng chúng ta đọc một ký tự từ bàn phím bằng hàm 1 ngắt 21h . Khi đó AL chứa mã ASCII của ký tự . Điều này cũng đúng nếu ký tự đó là một số ( digital character) . Ví dụ nếu chúng ta gỏ số 5 thì AL = 35h ( ASCII code for 5) Chương 4 : Các lệnh dịch và quay 47 Để chứa 5 trên AL chúng ta dùng lệnh : SUB AL,30h Có một cách khác để làm việc này là dùng lệnh AND để xóa nửa byte cao (high nibble = 4 bit cao ) của AL : AND AL,0Fh Vì các số từ 0-9 có mã ASCII từ 30h-39h , nên cách này dùng để đổi mọi số ASCII ra thập phân . Chương trình hợp ngữ đổi một số thập phân thành mã ASCII của chúng được xem như bài tập . Đổi chữ thường thành chữ hoa Mã ASCII của các ký tự thường từ a-z là 61h-7Ah và mã ASCII của các ký tự hoa từ A-Z là 41h -5Ah . Giả sử DL chưá ký tự thường , để đổi nó thành chữ hoa ta dùng lệnh : SUB DL,20h Nếu chúng ta so sánh mã nhị phân tương ứng của ký tự thường và ký tự hoa thì thấy rằng chỉ cần xóa bit thứ 5 thì sẽ đổi ký tự thường sang ký tự hoa . Character Code Character Code a(61h) 01100001 A (41h) 01000001 b (62h) 01100010 B ( 42h) 01000010 . . z ( 7Ah) 01111010 Z ( 5Ah) 01011010 Có thể xóa bit thứ 5 của DL bằng cách dùng lệnh AND với mặt nạ 11011111= DF h AND DL,0DFh ; đổi ký tự thường trong DL sang ký tự hoa Xóa một thanh ghi Chúng ta có thể dùng lệnh sau để xóa thanh ghi AX : MOV AX,0 hoặc SUB AX,AX XOR AX,AX Lệnh thứ nhất cần 3 bytes trong khi đó 2 lệnh sau chỉ cần 2 bytes . Nhưng lệnh MOV phải được dùng để xoá 1 vị trí nhớ . Kiểm tra một thanh ghi có bằng 0 ? Chương 4 : Các lệnh dịch và quay 48 Thay cho lệnh CMP AX,0 Người ta dùng lệnh OR CX,CX để kiểm tra xem CX có bằng 0 hay không vì nó làm thay đổi cờ ZF ( ZF=0 nếu CX=0 ) 4.1.2 Lệnh NOT Lệnh NOT dùng để lấy bù 1 ( đảo) toán hạng đích . Cú pháp là : NOT destination Không có cờ nào bị ảnh hưởng bởi lệnh NOT Ví dụ : Lấy bù 1 AX NOT AX 4.1.3 Lệnh TEST Lệnh TEST thực hiện phép AND giữa toán hạng đích và toán hạng nguồn nhưng không làm thay đổi toán hạng đích . Mục đích của lệnh TEST là để set các cờ trạng thái . Cú pháp của lệnh test là : TEST destination,source Các cờ bị ảnh hưởng của lệnh TEST : SF,ZF và PF phản ánh kết qủa AF không xác định CF=OF=0 Lệnh TEST có thể dùng để khám 1 bit trên toán hạng . Mặt nạ phải chứa bit 1 tại vị trí cần khám , các bit khác thì bằng 0 . Kết quả của lệnh : TEST destination,mask sẽ là 1 tại bit cần test nếu như toán hạng đích chứa 1 tại bit test . Nếu toán hạng đích chứa 0 tại bit test thì kết quả sẽ bằng 0 và do đó ZF=1 . Ví dụ : Nhảy tới nhãn BELOW nếu AL là một số chẳn Giải : Số chẳn có bit thứ 0 bằng 0 , lệnh TEST AL,1 ; AL chẳn ? JZ BELOW ; đúng , nhảy đến BELOW 4.2 Lệnh SHIFT Chương 4 : Các lệnh dịch và quay 49 Lệnh dịch và quay sẽ dịch các bit trên trên toán hạng đích một hoặc nhiều vị trí sang trái hoặc sang phải . Khác nhau của lệnh dịch và lệnh quay là ở chỗ : các bit bị dịch ra ( trong lệnh dịch ) sẽ bị mất .Trong khi đó đối với lệnh quay , các bit bị dịch ra từ một đầu của toán hạng sẽ được đưa trở lại đầu kia của nó . Có 2 khả năng viết đối với lệnh dịch và quay : OPCODE destination,1 OPCODE destination,CL trong cách viết thứ hai thanh ghi CL chưá N là số lần dịch hay quay . Toán hạng đích có thể là một thanh ghi 8 hoặc 16 bit , hoặc một vị trí nhớ . Các lệnh dịch và quay thường dùng để nhân và chia các sôù nhị phân . Chúng cũng được dùng cho các hoạt động nhập xuất nhị phân và hex . 4.2.1 Lệnh dịch trái ( left shift ) Lệnh SHL dịch toán hạng đích sang trái .Cú pháp của lệnh như sau : SHL destination ,1 ; dịch trái dest 1 bit SHL destination , CL ; dịch trái N bit ( CL chứa N) Cứ mỗi lần dịch trái , một số 0 được thêm vào LSB . CF 7 6 5 4 3 2 1 0 0 1 byte Các cờ bị ảnh hưởng : SF,PF,ZF phản ảnh kết qủa AF không xác định CF= bit cuối cùng được dịch ra OF= 1 nếu kết qủa thay đổi dấu vào lần dịch cuối cùng Ví dụ : Giả sử DH =8Ah và CL=3 . Hỏi giá trị của DH và CF sau khi lệnh SHL DH,CL được thực hiện ? Kết qủa DH=01010000=50h , CF=0 Nhân bằng lệnh SHL Chúng ta hãy xét số 235decimal . Nếu dịch trái 235 một bit và thêm 0 vào bên phải chúng ta sẽ có 2350 . Noí cách khác , khi dịch trái 1 bit chúng ta đã nhân 10. Đối với số nhị phân, dịch trái 1 bit có nghĩa là nhân nó với 2.Ví dụ AL=00000101=5d SHL AL,1 ; AL=00001010=10d SHL AL,CL ; nếu CL=2 thì AL=20d sau khi thực hiện lệnh Lệnh dịch trái số học ( SAL =Shift Arithmetic Left) Chương 4 : Các lệnh dịch và quay 50 Lệnh SHL có thể dùng để nhân một toán hạng với hệ số 2 . Tuy nhiên trong trường hợp người ta muốn nhấn mạnh đến tính chất số học của phép toán thì lệnh SAL sẽ được dùng thay cho SHL . Cả 2 lệnh đều tạo ra cùng một mã máy . Một số âm cũng có thể được nhân 2 bằng cách dịch trái . Ví dụ : Nếu AX=FFFFh= -1 thì sau khi dịch trái 3 lần AX=FFF8h = -8 Tràn Khi chúng ta dùng lệnh dịch trái để nhân thì có thể xảy ra sự tràn . Đối với lệnh dịch trái 1 lần , CF và OF phản ánh chính xác sự tràn dấu và tràn không dấu . Tuy nhiên các cờ sẽ không phản ánh chính xác kết qủa nếu dịch trái nhiều lần bởi vì dịch nhiều lần thực chất là một chuỗi các dịch 1 lần liên tiếp và vì vậy các cờ CF và OF chỉ phản ánh kết quả của lần dịch cuối cùng . Ví dụ : BL=80h , CL=2 thì lệnh SHL BL,CL sẽ làm cho CF=OF=0 mặc dù trên thực tế đã xảy ra cả tràn dấu và tràn không dấu . Ví dụ : viết đoạn mã nhân AX với 8 . Giả sử rằng không có tràn . MOV CL,3 ; CL=3 SHL AX,CL ; AX*8 4.2.2 Lệnh dịch phải ( Right Shift ) Lệnh SHR dịch phải toán hạng đích 1 hoặc N lần . SHR destination,1 SHR destination,CL Cứ mỗi lần dịch phải , một số 0 được thêm vào MSB Các cờ bị ảnh hưởng giống như lệnh SHL 0 7 6 5 4 3 2 1 0 CF 1 byte Ví dụ : giả sử DH = 8Ah , CL=2 Lệnh SHR DH,CL ; dịch phải DH 2 lần sẽ cho kết quả như sau : Kết qủa trên DH=22h , CF=1 Cũng như lệnh SAL , lệnh SAR ( dịch phải số học ) hoạt động giống như SHR , chỉ có 1 điều khác là MSB vẫn giữ giá trị nguyên thủy ( bit dấu giữ nguyên) sau khi dịch . Chia bằng lệnh dịch phải Chương 4 : Các lệnh dịch và quay 51 Lệnh dịch phải sẽ chia 2 giá trị của toán hạng đích . Điều này đúng đối với số chẳn . Đối với số lẻ , lệnh dịch phải sẽ chia 2 và làm tròn xuống số nguyên gần nó nhất . Ví dụ , nếu BL = 00000101=5 thì khi dịch phải BL=00000010 =2 . Chia có dấu và không dấu Để thực hiện phép chia bằng lệnh dịch phải , chúng ta phải phân biệt giữa số có dấu và sốù không dấu . Nếu diễn dịch là không dấu thì dùng lệnh SHR , còn nếu diễn dịch có dấu thì dùng SAR ( bit dấu giữ nguyên ) . Ví dụ : dùng lệnh dịch phải để chia số không dấu 65143 cho 4 . Thương số đặt trên AX . MOV AX,65134 MOV CL,2 SHR AX,CL Ví dụ : Nếu AL = -15 , cho biết AL sau khi lệnh SAR AL,1 được thực hiện Giải : AL= -15 = 11110001b Sau khi thực hiện SAR AL ta có AL = 11111000b = -8 4.3 Lệnh quay ( Rotate) Quay trái ( rotate left ) = ROL sẽ quay các bit sang trái , LSB sẽ được thay bằng MSB . Còn CF=MSB CF 7 6 5 4 3 2 1 0 Cú pháp của ROL như sau : ROL destination,1 ROL destination,CL Quay phải ( rotate right ) = ROR sẽ quay các bit sang phải , MSB sẽ được thay bằng LSB . Còn CF=LSB 7 6 5 4 3 2 1 0 CF Cú pháp của lệnh quay phải là Chương 4 : Các lệnh dịch và quay 52 ROR destination,1 ROR destination,CL Trong các lệnh quay phải và quay trái CF chứa bit bị quay ra ngoài . Ví dụ sau đây cho thấy cách để khám các bit trên một byte hoặc 1 từ mà không làm thay đổi nội dung của nó . Ví dụ : Dùng ROL để đếm số bit 1 trên BX mà không thay đổi nội dung của nó . Kết qủa cất trên AX . Giải : XOR AX,AX ; xoá AX MOV CX,16 ; số lần lặp = 16 ( một từ ) TOP: ROL BX,1 ; CF = bit quay ra JNC NEXT ; nếu CF =0 thì nhảy đến vòng lặp INC AX ; ngược lại (CF=1) , tăng AX NEXT: LOOP TOP Quay trái qua cờ nhớ ( rotate through carry left ) = RCL . Lệnh này giống như lệnh ROL chỉ khác là cờ nhớ nằm giữa MSB và LSB trong vòng kín của các bit CF 7 6 5 4 3 2 1 0 Cú pháp của của lệnh RCL như sau : RCL destination,1 RCL destination,CL Quay phải qua cờ nhớ ( rotate through carry right ) = RCR . Lệnh này giống như lệnh ROR chỉ khác là cờ nhớ nằm giữa MSB và LSB trong vòng kín của các bit . Chương 4 : Các lệnh dịch và quay 53 CF 7 6 5 4 3 2 1 0 Cú pháp của của lệnh RCR như sau : RCR destination,1 RCR destination,CL Ví dụ : Giả sử DH = 8Ah ,CF=1 và CL=3 . Tìm giá trị của DH,CF sau khi lệnh RCR DH,CL được thực hiện Giải : CF DH Giá trị ban đầu 1 10001010 Sau khi quay 1 lần 0 11000101 Sau khi quay 2 lần 1 01100010 Sau khi quay 3 lần 0 10110001=B1H Aûnh hưởng của lệnh quay lên các cờ SF,PF và ZF phản ảnh kết quả CF-bit cuối cùng được dịch ra OF=1 nếu kết qủa thay đổi dấu vào lần quay cuối cùng Ưùng dụng : Đảo ngược các bit trên một byte hoặc 1 từ .Ví dụ AL =10101111 thì sau khi đảo ngược AL=11110101 . Có thể lặp 8 lần công việc sau :Dùng SHL để dịch bit MSB ra CF , Sau đó dùng RCR để đưa nó vào BL . Đoạïn mã để làm việc này như sau : MOV CX,8 ;số lần lặp REVERSE : SHL AL,1 ; dịch MSB ra CF RCR BL,1 ; đưa CF ( MSB) vào BL LOOP REVERSE MOV AL,BL ; AL chứa các bit đã đảo ngược 4.4 Xuất nhập số nhị phân và số hex Chương 4 : Các lệnh dịch và quay 54 Các lệnh dịch và quay thường được sử dụng trong các hoạt động xuất nhập số nhị phân và số hex. 4.4.1 Nhập số nhị phân Giả sử cần nhập một số nhị phân từ bàn phím , kết thúc là phím CR . Số nhị phân là một chuỗi các bit 0 và 1 . Mỗi một ký tự gõ vào phải được biến đổi thành một bit giá trị ( 0 hoặc 1) rồi tích luỹ chúng trong 1 thanh ghi . Thuật toán sau đây sẽ đọc một số nhị phân từ bàn phím và cất nó trên thanh ghi BX . Clear BX input a character ( ‘0’ or ‘1’) WHILE character CR DO convert character to binary value left shift BX insert value into LSB of BX input a character END_WHILE Đoạn mã thực hiện thuật toán trên như sau : XOR BX,BX ; Xoá BX MOV AH,1 ; hàm đọc 1 ký tự INT 21h ; ký tự trên AL WHILE_: CMP AL,0DH ; ký tự là CR? JE END_WHILE ; đúng , kết thúc AND AL,0Fh ; convert to binary value SHL BX,1 ; dịch trái BX 1 bit OR BL,AL ; đặt giá trị vào BX INT 21h ; đọc ký tự tiếp theo JMP WHILE_ ; lặp END_WHILE: 4.4.2 Xuất số nhị phân Giả sử cần xuất số nhị phân trên BX ( 16 bit) . Thuật toán có thể viết như sau FOR 16 times DO rotate left BX ( put MSB into CF) IF CF=1 Chương 4 : Các lệnh dịch và quay 55 then output ‘1’ else output ‘0’ END_IF END_FOR Đoạn mã để xuất số nhị phân có thể xem như bài tập . 4.4.3 Nhập số HEX Nhập số hex bao gồm các số từ 0 đến 9 và các ký tự A đến F . Kết qủa chứa trong BX . Để ch o đơn giản chu
File đính kèm:
- giao trinh hop ngu.pdf