[Ngôn Ngữ Máy] Đề Cương Bài Giảng Hợp Ngữ (assembly language) phần 3 pot

11 446 1
[Ngôn Ngữ Máy] Đề Cương Bài Giảng Hợp Ngữ (assembly language) phần 3 pot

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Đề cương bà i giả n g Hợ p ngữ 23 nghóa có nhớ vào nhớ có nhớ nhớ vào Cờ điều khiển ( control flags) Có cở điều khiển CPU , : • Cờ hướng ( Direction Flag = DF) • Cờ bẫy ( Trap flag = TF) • Cờ ngắt ( Interrupt Flag = IF) Các cờ điều khiển dùng để điều khiển hoạt động CPU Cờ hướng (DF) dùng lệnh xử lý chuỗi CPU Mục đích DF dùng để điều khiển hướng mà chuỗi xử lý Trong lệnh xử lý chuỗi hai ghi DI SI dùng để địa nhớ chứa chuỗi Nếu DF=0 lệnh xử lý chuỗi tăng địa nhớ cho chuỗi xử lý từ trái sang phải Nếu DF=1 địa nhớ xử lý theo hướng từ phải sang trái 2.3 Các lệnh ảnh hưởng đế cờ Tại thời điểm , CPU thực lệnh , cờ phản ánh kết qủa thực lệnh Dó nhiên có số lệnh không làm thay đổi cờ thay đổi vài cờ làm cho vài cờ có trạng thái Đề cương bà i giả n g Hợ p ngữ 24 không xác định Trong phần xét ảnh hưởng lệnh ( nghiên cứu chương trước ) lên cờ Bảng sau cho thấy ảnh hưởng lệnh đến cờ : INSTRUCTION MOV/XCHG ADD/SUB INC/DEC NEG AFFECTS FLAGS NONE ALL ALL trừ CF ALL (CF=1 trừ kết qủa , OF=1 kết qủa 8000H ) Để thấy rỏ ảnh hưởng lệnh lên cờ lấy vài ví dụ Ví dụ : ADD AX,AX AX=BX=FFFFh FFFFh + FFFFh 1FFFEh Kết qủa chứa AX FFFEh = 1111 1111 1111 1110 Đề cương bà i giả n g Hợ p ngữ 25 SF=1 MSB=1 PF=0 có ( lẻ) số byte thấp kết qủa ZF=0 kết qủa khác CF=1 có nhớ từ MSB OF=0 dấu kết qủa giống dấu số hạng ban đầu Ví dụ : ADD AL,BL AL= BL= 80h 80h + 80h 100h Kết qủa AL = 00h SF=0 MSB=0 PF=1 tất bit ZF=1 kết qủa CF=1 có nhớ từ MSB OF=1 toán hạng số âm kết qủa số dương ( có nhớ từ MSB nhớ vào ) Ví dụ : SUB AX,BX AX=8000h BX= 0001h 8000h - 0001h Đề cương bà i giả n g Hợ p ngữ 26 7FFFFh = 0111 1111 1111 1111 SF=0 MSB=0 PF=1 có ( chẳn ) số byte thấp kết qủa ZF=0 kết qủa khác CF=0 mượn OF=1 trừ số âm cho số dương ( tức cộng số âm ) mà kết qủa số dương Ví dụ : INC AL AL=FFh Kết qủa AL=00h = 0000 0000 SF=0 MSB=0 PF=1 ZF=1 kết qủa CF không bị ảnh hưởng lệnh INC có nhớ từ MSB OF=0 hai số khác dấu cộng với ( có số nhớ vào MSB có số nhớ từ MSB) Ví dụ 5: MOV AX,-5 Kết BX = -5 = FFFBh Không có cờ ảnh hưởng lệnh MOV Đề cương bà i giả n g Hợ p ngữ 27 Ví dụ 6: NEG AX AX=8000h 8000h =1000 0000 0000 0000 bù =0111 1111 1111 1111 +1 1000 0000 0000 0000 = 8000h Kết qủa AX=8000h SF=1 MSB=1 PF=1 có số chẳn số byte thấp kết qủa ZF=0 kết qủa khác CF=1 lệnh NEG làm cho CF=1 trừ kết qủa OF=1 dấu kết qủa giống với dấu toán hạng nguồn 2.4 Chương trình DEBUG.EXE Debug chương trình DOS cho phép chạy thử chương trình hợp ngữ Người dùng cho chạy chương trình lệnh từ đầu đến cuối ,trong trình thấy nội dung ghi thay đổi Debug cho phép nhập vào mã hợp ngữ trực tiếp sau DEBUG chuyển thành mã máy lưu trữ nhớ DEBUG cung cấp khả xem nội dung tất ghi có CPU Đề cương bà i giả n g Hợ p ngữ 28 Sau dùng DEBUG để mô tả cách thức mà lệnh ảnh hưởng đến cờ Giả sử có chương trình hợp ngữ sau : TITLE PGM2_1: CHECK - FLAGS ; dùng DEBUG để kiểm tra cờ MODEL SMALL STACK 100H CODE MOV AX,4000H ; AX=4000H ADD AX,AX ; AX=8000H SUB AX,0FFFFH ;AX=8001H NEG AX ; AX=7FFFH INC AX ; AX=8000H MOV AH,4CH ; HAØM THOÁT VỀ DOS INT 21H ; EXIT TO DOS END MAIN ENDP END MAIN Sau dịch chương trình , giả sử file chạy CHECKFL.EXE đường dẫn C:\ASM Để chạy debug gõ lệnh sau : C:\> DEBUG C:\ASM\CHECK-FL.EXE Đề cương bà i giả n g Hợ p ngữ 29 từ lúc trở dấu nhắc làcủa debug ( dấu “_”) , người sử dụng đưa vào lệnh debug từ dấu nhắc Trước hết xem nội dung ghi lệnh R(Register) , hình có nội dung sau : -R AX=0000 BX=0000 BP=0000 SI=0000 SS=0EE5 CS=0EE6 NV UP DI PL 0EE6:0000 B80040 CX=001F DI=0000 IP=0000 NZ NA MOV DX=0000 SP=000A DS=0ED5 ES=0ED5 PO NC AX,4000 Chúng ta thấy tên ghi nội dung chúng ( dạng HEX) dòng đầu Dòng thứ trạng thái ghi theo cách biểu thị debug Bảng 2-3 cách mà Debug biểu thị trạng thái ghi cờ CPU Flag s CF PF AF ZF SF OF DF IF Set (1) Symbol Clear (0) Symbol CY (carry) PE (even parity) AC ( auxiliary carry) ZR ( zero) NG ( negative) OV ( overflow) DN ( down) EI ( enable NC ( no carry) PO ( odd parity) NA ( no auxiliary carry) NZ ( non zero) PL ( plus) NV ( no overflow) UP ( up) DI ( disable Đề cương bà i giả n g Hợ p ngữ interrupts) 30 interrupts) Bảng 2.3 : Biểu thị trạng trạng cờ DEBUG Dòng cuối cho biết giá trị hành PC (địa lệnh thực dạng địa logic ) mã máy lệnh nội dung lệnh tương ứng Khi chạy chương trình máy tính khác thấy điạ đoạn khác Chúng ta dùng lệnh T(Trace) để thi hành lệnh chương trình lệnh MOV AX,4000h -T AX=4000 BX=0000 BP=0000 SI=0000 SS=0EE5 CS=0EE6 NV UP DI PL 0EE6:0003 03C0 CX=001F DX=0000 SP=000A DI=0000 DS=0ED5 ES=0ED5 IP=0003 NZ NA PO NC ADD AX,AX Sau thực lệnh MOV AX,4000 cờ không bị thay đổi , có AX=4000h Bây thực lệnh ADD AX,AX -T AX=8000 BX=0000 CX=001F BP=0000 SI=0000 DI=0000 SS=0EE5 CS=0EE6 IP=0005 OV UP DI NG NZ NA 0EE6:0005 2DFFFF SUB DX=0000 SP=000A DS=0ED5 ES=0ED5 PE NC AX,FFFF Đề cương bà i giả n g Hợ p ngữ 31 Kết qủa phép cộng 8000h , SF=1(NG) , OF=1(OV) PF=1(PE) Bây thực lệnh SUB AX,0FFFh -T AX=8001 BX=0000 CX=001F BP=0000 SI=0000 DI=0000 SS=0EE5 CS=0EE6 IP=0008 NV UP DI NG NZ AC 0EE6:0008 F7D8 DX=0000 SP=000A DS=0ED5 ES=0ED5 PO CY NEG AX AX=8000H-FFFFH=8001H Cờ OF=0(NV) CF=1(CY) có mượn từ MSB Cờ PF=0(PO) byte thấp có số Lệnh lệnh NEG AX -T AX=7FFF BX=0000 BP=0000 SI=0000 SS=0EE5 CS=0EE6 NV UP DI PL 0EE6:000A 40 CX=001F DX=0000 SP=000A DI=0000 DS=0ED5 ES=0ED5 IP=000A NZ AC PE CY INC AX AX lấy bù 8001h 7FFFh CF=1(CY) lệnh NEG cho kết qủa khác OF=0(NV) kết khác 8000h Cuối thực lệnh INC AX Đề cương bà i giả n g Hợ p ngữ -T AX=8000 BX=0000 CX=001F BP=0000 SI=0000 DI=0000 SS=0EE5 CS=0EE6 IP=000B OV UP DI NG NZ AC 0EE6:000B B44C 32 DX=0000 SP=000A DS=0ED5 ES=0ED5 PE CY MOV AH,4CH OF=1(OV) cộng số dương mà kết số âm CF=1(CY) lệnh INC không ảnh hưởng tới cờ Để thực toàn chương trình gõ G(Go) -G Program terminated normally Để thoát kh debug gõ Q(Quit) -Q C:\> Bảng sau cho biết số lệnh debug thường dùng , tham số để ngoặc tuỳ chọn COMMAND D(start (end) (range)) D 100 D CS:100 120 D( DUMP) ACTION Liệt kê nội dung byte dạng HEX Liệt kê 80h bytes DS:100h Liệt kê bytes từ DS:100h đến DS:120 Liệt kê 80h bytes từ byte cuối Đề cương bà i giả n g Hợ p ngữ G(=start ) (addr1 addr2 addrn) G G=100 G=100 150 Q R(register) R R AX 33 hiển thị Chạy ( go) lệnh từ vị trí Start với điểm dừng addr1,addr2,addrn Thực thi lệnh từ CS:IP đến hết Thực thi lệnh từ CS:100h đến hết Thực thi lệnh CS:100h dừng CS:150h Quit debug and return to DOS Xem/ thay đổi nội dung ghi T(=start)(value) Xem nội dung tất thnah ghi cờ Xem thay đổi nội dung ghi AX Quét “value” lệnh từ vị trí start T T=100 T=100 T4 Trace lệnh CS:IP Trace lệnh CS:100h Trace lệnh CS:100h Trace lệnh CS:IP U(start)(value) Unassemble vùng địa thành lệnh asm U CS:100 110 U 200 L 20 U Unassemble từ CS:100h đến CS:110h Unassemble 20 lệnh từ CS:200h Unassemble 32 bytes từ bytes cuối hiển thị Đưa vào mã hợp ngữ cho địa A(start) ... non zero) PL ( plus) NV ( no overflow) UP ( up) DI ( disable Đề cương bà i giả n g Hợ p ngữ interrupts) 30 interrupts) Bảng 2 .3 : Biểu thị trạng trạng cờ DEBUG Dòng cuối cho biết giá trị hành... AX=4000 BX=0000 BP=0000 SI=0000 SS=0EE5 CS=0EE6 NV UP DI PL 0EE6:00 03 03C0 CX=001F DX=0000 SP=000A DI=0000 DS=0ED5 ES=0ED5 IP=00 03 NZ NA PO NC ADD AX,AX Sau thực lệnh MOV AX,4000 cờ không bị thay... DS:100h đến DS:120 Liệt kê 80h bytes từ byte cuối Đề cương bà i giả n g Hợ p ngữ G(=start ) (addr1 addr2 addrn) G G=100 G=100 150 Q R(register) R R AX 33 hiển thị Chạy ( go) lệnh từ vị trí Start với

Ngày đăng: 14/07/2014, 01:20

Tài liệu cùng người dùng

Tài liệu liên quan