(Dịch sang .EXE) 1) Mục lục: Bài tập 2: Tổ chức ch.tr Assembler 16bit đơn giản ; Assume Cs:Code_Seg, Ds:Data_Seg, Ss:Stack_Seg ; Cs trỏ tới mảng lệnh ; Ds trỏ tới mảng lệnh ; Ss trỏ tới mảng lệnh Code_Seg Segment Public Org 100H ; Chương trình bắt đầu từ địa chỉ 100 hex Extrn Write_char:Far ; Sử dụng thủ tục trong file thư viện Extrn Ket_thuc:Far Extrn Gotoxy :Far ; ; Thủ tục chính : Chuyển số thập ; phân thành từ mã Hexa trên ; màn hình ; Test_write_decimal Proc Far ; Mở thủ tục thập phân > Hexa Call Flag ; In cờ trạng thái Mov DX,1789 ; Hiển thị số 1789 thập phân Call write_decimal ; Gọi chương trình hiển thị Call Ket_thuc Ret Test_write_decimal Endp ; Write_decimal Proc Near Push AX Push CX Push DX Push SI Mov AX,DX Mov SI,10 Xor CX,CX Non_zero: Xor DX,DX Div SI Push DX Inc CX Or AX,AX Jne Non_zero Write_digit_loop: Pop DX Call write_hex_digit Loop Write_digit_loop End_decimal: Pop SI Pop DX Pop CX Pop AX Ret Write_decimal Endp ; Kết thúc thu tuc chinh ; ; Thủ tục in ra màn hình (sử dụng ; hàm dịch vụ của DOS trong PC ; để mô phỏng ch.tr cần viết ; Write_hex Proc Near Push CX Push DX Mov DH,DL Mov CX,4 Shr DL,CL Call Write_hex_digit Mov DL,DH And DL,0FH Call Write_hex_digit Pop DX Pop CX Ret Write_hex Endp ; Write_hex_digit Proc Near Push DX Cmp DL,10 Jae Hex_letter Ađ DL,0 Jmp short Write_digit Hex_letter: Add DL,A10 Write_digit: Call Write_char Pop DX Ret Write_hex_digit Eendp ; Flag Proc Near ; Cờ trạng thái Push AX Push DX Call Gotoxy Mov AX,Data_Seg Mov DS,AX MOV DX,Offset thong_bao ; Thông báo trạng thái Call Message Pop DX
Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý Đề cơng ôn tập môn vi xử lý I) Chơng trình ASSEMBLER (Dịch sang *.EXE) 1) Mục lục: Bài tập 2: Tổ chức ch.tr Assembler 16bit đơn giản ; Assume Cs:Code_Seg, Ds:Data_Seg, Ss:Stack_Seg ; Cs trỏ tới mảng lệnh ; Ds trỏ tới mảng lệnh ; Ss trỏ tới mảng lệnh Code_Seg Segment Public Org 100H ; Chơng trình địa 100 hex Extrn Write_char:Far ; Sử dụng thủ tục file th viện Extrn Ket_thuc:Far Extrn Gotoxy :Far ; -; Thủ tục : Chuyển số thập ; phân thành từ mã Hexa ; hình ; -Test_write_decimal Proc Far ; Mở thủ tục thập phân -> Hexa Call Flag ; In cờ trạng thái Mov DX,1789 ; Hiển thị số 1789 thập phân Call write_decimal ; Gọi chơng trình hiển thị Call Ket_thuc Ret Test_write_decimal Endp ; Write_decimal Proc Near Push AX Push CX Push DX Push SI Mov AX,DX Mov SI,10 Xor CX,CX Non_zero: Xor DX,DX Div SI Push DX Inc CX Or AX,AX Jne Non_zero Write_digit_loop: Pop DX Call write_hex_digit Loop Write_digit_loop End_decimal: Pop SI Pop DX Pop CX Pop AX Ret Write_decimal Endp ; Kết thúc thu tuc chinh ; ; Thủ tục in hình (sử dụng ; hàm dịch vụ DOS PC ; để mô ch.tr cần viết ; Write_hex Proc Near Push CX Push DX Mov DH,DL Mov CX,4 Shr DL,CL Call Write_hex_digit Mov DL,DH And DL,0FH Call Write_hex_digit Pop DX Pop CX Ret Write_hex Endp ; Write_hex_digit Proc Near Push DX Cmp DL,10 Jae Hex_letter Ađ DL,'0' Jmp short Write_digit Hex_letter: Add DL,'A'-10 Write_digit: Call Write_char Pop DX Ret Write_hex_digit Eendp ; Flag Proc Near ; Cờ trạng thái Push AX Push DX Call Gotoxy Mov AX,Data_Seg Mov DS,AX MOV DX,Offset thong_bao ; Thông báo trạng thái Call Message Pop DX Pop AX Ret Flag Endp ; Message Proc Near Push AX Push DX Push SI PushF Cld Mov SI,DX String_loop: Lodsb Or AL,AL ;K/tra hết dòng thông báo ? Jz End_string Mov DL,AL Call Write_char Jmp String_loop End_string: Popf Pop SI Pop DX Pop AX Ret Message Endp ; Code_Seg Ends ; Dòng mang lệnh ; Data_Seg Segment Public Public Thong_bao Thong_bao db 'HELLOW! WORLD ',0Dh,0Ah,00h db 0Dh,0Ah,00h Data_Seg Ends ; Stack_Seg Segment Public db 10 Dup('Stack'); Stack_Seg Ends ; End Test_write_decimal ; Kết thúc ch.tr HEX_BIN Bài tập 3: Chơng trình hiển thị Buffer Ram ; Assume CS:Code_Seg, DS:Data_Seg, SS:stack_Seg ; CS Trỏ tới mảng lệnh Code_seg Segment Public Extrn Ket_thuc:Far Extrn Send_crlf:Far ; ; Thủ tục : In hình ; buffer Ram theo dòng Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý ; cửa sổ : Hexa Ascii ; Hien_thi Proc Far ; Mở thủ tục hiển thị Mov AX,Data_seg Mov DS,AX Mov BX,Offset Buffer_offset Mov CX,16 ; Hiển thị 16 dòng Ram_buffer: Call Hien_thi_dong ; Hiển thị dòng 16 byte Call Send_crlf ; Xuống dòng đầu dòng Add BX,16 ; Tăng 16 bytes cho dòng tiếp Loop Ram_buffer ; Lặp lại với số lần CX Call Ket_thuc Hien_thi Endp ; Extrn Write_char:Far Hien_thi_dong Proc Near ; ; Thủ tục in dòng, ; dòng 16 byte chứa ; Ram_buffer ; Trớc tiên cửa sổ Hexa ; đến cửa sổ Ascii ; Push AX Push BX Push CX Push DX Mov CX,16 Push BX ;Offset cho cửa sổ Ascii Hex_win: Mov DL,[BX] Call Write_hex ; Gọi ch.tr in so HEX Mov DL,' ' ;dl=20h mã khoảng trắng Call Write_char Inc BX Loop Hex_win ; - Xong cửa sổ Hex_win Mov DL,' ' Call Write_char ; Dãn cách cửa sổ khoảng trắng ; Mov CX,16 Pop BX Ascii_win: Mov DL,[BX]; Call Write_char Inc BX Loop Ascii_win Pop DX Pop CX Pop BX Pop AX Ret Hien_thi_dong Endp ; Kết thúc thủ tục hiển thị dàng ; Write_nex Proc Near Push CX Mov DH,DL Mov CX,4 Shr DL,CL Call Write_hex_digit Mov DL,DH And DL,0Fh Call Write_hex_digit Pop CX Ret Write_hex Endp ; Public Write_hex_digit Extrn Write_char:Far Write_hex_digit Proc Near Push DX Cmp DL,10 Jae Hex_letter Add DL,'0' Jmp Write_digit Hex_letter: Add DL,'A'-10 Write_digit: Call Write_char Pop DX Ret Write_hex_digit Endp ; Code_seg Ends ; Dòng mang lệnh ; Data_seg Segment Public Public Buffer_offset Buffer_offset db 16 Dup(41h) db 16 DUP(42h) db 16 DUP(43h) db 16 DUP(44h) db 16 DUP(45h) db 16 DUP(46h) db 16 DUP(30h) db 16 DUP(31h) db 16 DUP(32h) db 16 DUP(33h) db 16 DUP(34h) db 16 DUP(35h) db 16 DUP(36h) db 16 DUP(37h) db 16 DUP(38h) db 16 DUP(39h) Data_seg Ends ; Stack_seg Segment Public db 10 Dup('Stack') Stack_seg Ends ; End hien_thi ; Kết thúc ch.tr Hien_thi Bài tập 4: Chơng trình cộng hai số tự nhiên kích thớc byte Assume CS:Code_seg, DS:Data_seg, SS:Stack_seg Code_seg Segment Public ; ; Mảng liệu chứa biến ; thông báo cần thiết cho ch.trinh ; Data_seg Segment Public Buffer db Dup(?) ; Đệm nhớ Digit db ? n1 dw ? ; Số hạng thứ đợc chứa n2 dw ? ; Số hạng thứ hai sum d ? ; Tổng Bien_get dw ; Biến trung gian Bien_2num dw ; Biến trung gian Promp1 db 'Nhap so thu 1: ' Promp2 db 'Nhap so thu 2: ' Promp3 db 'Tong so la : ' Fine Label Byte Data_seg Ends ; Extrn Writestring:Far ; File th viện Bt4e.lib Extrn Getstring:Far Extrn Ket_thuc:Far ; ; Thủ tục cộng so TN ; Addn Proc Far mov ax,data_seg ; DS trỏ tới mảng Data_seg Mov DS,AX Mov DX,Offset Promp1 Mov CX, Offset Promp2 - Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý Offset Promp1 Call Writetext ; In dòng ' số hạng thứ nhất:' Call Getstr ; Chuẩn bị nhận số hạng thứ Call Str2num Mov AX,[Bien_2num] Mov n1,AX Mov DX,Offset Promp2 Mov CX,Offset Promp3 Offset Promp2 Call WRITETEXT ; in dong 'so hang thu hai:' CALL GETSTR ; chuan bi nhan so hang thu hai CALL STR2NUM MOV AX,[BIEN_2NUM] MOV n2,AX CALL ADDn1n2 MOV DX,OFFSET Promp3 MOV CX,OFFSET FineOFFSET Promp3 CALL WRITETEXT CALL WRITESum CALL KET_THUC ADDn ENDP ; -;Doc mang hay File co the File BX, ;so luong byte CX Neu doc ;cong thi tro File se dat o sau ; phan vua doc ; GETSTR PROC NEAR DATA_SEG SEGMENT PUBLIC EXTRN FLAG:WORD DATA_SEG ENDS file PUSH AX PUSH BX PUSH CX PUSH DX MOV BX,00H ; the MOV CX,07H ; so byte can doc MOV DX,OFFSET BUFFER ; dat DS:DX vao dau mang BUFFER CALL GETSTRING MOV AX,[FLAG] ; co FLAG chua bo byte thuc su doc duoc SUB AX,02H MOV [BIEN_GET],AX POP DX POP CX POP BX POP AX RET GETSTR ENDP ; ;Ghi mang hay File co the File BX, ;so luong byte CX Neu ghi ;cong thi tro File se dat o sau ; phan vua ghi ; WRITECHAR PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV BX,01H ;the File MOV CX,01H ; so luong byte can ghi MOV DX,OFFSET DIGIT CALL WRITESTRING POP DX POP CX POP BX POP AX RET WRITECHAR ENDP ; -;chuyen so hang vao bien ; BIEN_2NUM ; -STR2NUM PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV CX,[BIEN_GET] MOV AX,00H MOV BX,10 ; chuan bi nhan 10 MOV SI,OFFSET BUFFER ; dat DS:SI vao dem BUFFER MOV DH,00H LOOP1: MUL BX MOV DL,[SI] SUB DL,'0' ADD AX,DX INC SI ;tro tiep toi byte sau cua dem BUFFER LOOP LOOP1 MOV [BIEN_2NUM],AX POP DX POP CX POP BX POP AX RET STR2NUM ENDP ; -;thuc hien cong ; ADDn1n2 proc near PUSH AX MOV AX, n1 ADD AX, n2 MOV SUM,AX POP AX RET ADDn1n2 ENDP ; ; in tong len man hinh ; -WRITESum PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV AX, Sum MOV BX,10 mov cx,0 GETADIGIT: ;su dung thuat toan chia lien tuc MOV DX,0 DIV BX PUSH DX ;cat vao STACK so du chinh la chu so ;co so nho nhat hien hanh Inc cx CMP AX,0000H JZ WRITE jmp GETADIGIT Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý WRITE: POP DX ;khoi phuc lai cac chu so tu STACK theo ;thu tu nguoc lai ADD DL,'0' MOV DIGIT,DL CALL WRITECHAR ; in tung so tu trai sang phai dec cx cmp cx,0 jnz write; POP DX POP CX POP BX POP AX RET WRITESum ENDP ; - code_Seg Segment public ; - WRITETEXT PROC NEAR PUSH BX MOV BX,01H CALL WRITESTRING POP BX RET WRITETEXT ENDP ; CODE_SEG ENDS STACK_SEG SEGMENT PUBLIC DB 10 DUP('STACK') STACK_SEG ENDS ; -END ADDn Bài tập 5: Vẽ khung sổ ký tự đồ hoạ ASSUME cs:CODE_SEG,ds:DATA_SEG,ss:S TACK_SEG; Thong bao cho chuong trinh dich ; cac ghi quan ly mang ; ; Phan khai bao cac hang ky hieu cho cac ky tu ; hoa bang ma ASCII de ve khung ; vertical_bar ;Thanh ngang horizontal_bar ;Thanh dung upper_left equ 0c9h ;Thanh khep goc tren ben trai upper_right equ 0bbh ;Thanh khep goc tren ben phai lower_left equ 0c8h ;Thanh khep goc duoi ben trai lower_right equ 0bch ;Thanh khep goc ben phai top_t_bar equ 0cbh ;Thanh chu T bottom_t_bar equ 0cah ;Thanh chu T nguoc top_tick equ 0d1h ;Thanh vach manh bottom_tick equ 0cfh ;Thanh vach manh phia duoi equ equ 0bah 0cdh public write_pattern extrn write_char:far ; thu tuc o ham thu vien extrn gotoXY :far ; extrn ket_thuc :far ; ;Thu tuc WRITE_PATTERN de ve khung bang cac ky tu ;do hoa cua bang ma ASCII ; write_pattern proc far data_Seg Segment public extrn Dong:byte man hinh TEXT extrn Cot :byte man hinh TEXT data_Seg ; bien dong ; bien cot ends cld ; dat co huong = (Direction=0) mov ax,data_Seg ; cho DS tro toi mang DATA_SEG mov ds,ax mov bx,02h ; mov dx,offset top_line_pattern; DX tro toi CSDL cua duong ngang ; cua khung can ve mov dong,05h ; lay toa X va Y vao bien 'dong' va 'cot' mov Cot, 00h ; (dong:5 cot:0) Call gotoXY ; goi thu tuc dat tro man hinh vao toa ; XY da xac dinh draw: mov si,dx ; chuyen OFFSET DX vao SI de su dung ; lenh LODSB pattern_loop: lodsb ; nhan byte CSDL vao AL cua bo VXL or al,al ; kiem tra da toi cuoi CSDL chua? jz end_pattern ; neu roi thi ket thuc mov dl,al ; neu chua thi chuyen AL vao DL lodsb ; nhan tiep byte tiep theo va chuyen ; vao AL mov cl,al ; chuyen vao dem CL de su dung ; lenh LOOP xor ch,ch write_n_times : ; nhan in ky tu DL voi so ; lan bang gia tri chua CL Call write_char ; goi thu tuc in ky tu DL man hinh loop write_n_times jmp pattern_loop end_pattern: dec bx jz _end mov dx,offset bottom_line_pattern; Cho DX tro toi CSDL cua ; duong ngang phia duoi mov dong,10h; mov cot, 00h; Call gotoXY; jmp draw _end: Call ket_thuc; Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý write_pattern endp code_Seg ends data_Seg Segment public ; -; Cau truc cua duong ngang phia tren ; tham so dau la ky tu hoa, tham so ; thu hai la so luong ky tu can in ; top_line_pattern label byte db ' ',7 db upper_left,1 db horizontal_bar,13 db top_t_bar,1 db horizontal_bar,13 db top_t_bar,1 db horizontal_bar,13 db top_t_bar,1 db horizontal_bar,13 db top_t_bar,1 db horizontal_bar,13 db upper_right,1 db bottom_line_pattern label byte db ' ',7 db lower_left,1 db horizontal_bar,13 db bottom_t_bar,1 db horizontal_bar,13 db bottom_t_bar,1 db horizontal_bar,13 db bottom_t_bar,1 db horizontal_bar,13 db bottom_t_bar,1 db horizontal_bar,13 db lower_right,1 db data_Seg ends ; -STACK_SEG SEGMENT PUBLIC DB 10 DUP('STACK'); STACK_SEG ENDS end write_pattern Bài tập 6: Vẽ khung cửa sổ ký tự đồ hoạ CSLD Chứa sổ Hex Ascii ; - ASSUME cs:CODE_SEG,ds:DATA_SEG,ss:S TACK_SEG; Thong bao cho chuong trinh dich ; cac ghi quan ly mang ; ; Phan khai bao cac hang ky hieu cho cac ky tu ; hoa bang ma ASCII de ve khung ; vertical_bar equ 0bah ;Thanh ngang horizontal_bar equ 0cdh ;Thanh dung upper_left equ 0c9h ;Thanh khep goc tren ben trai upper_right equ 0bbh ;Thanh khep goc tren ben phai lower_left equ 0c8h ;Thanh khep goc duoi ben trai lower_right equ 0bch ;Thanh khep goc ben phai top_t_bar equ 0cbh ;Thanh chu T bottom_t_bar equ 0cah ;Thanh chu T nguoc top_tick equ 0d1h ;Thanh vach manh bottom_tick equ 0cfh ;Thanh vach manh phia duoi code_Seg Segment public ; -Bài tập 3: Chơng trình hiển thị buffer Ram ; EXTRN KET_THUC:FAR EXTRN SEND_CRLF:FAR ; ;Thu tuc chinh : In man hinh buffer ;RAM theo tung dong tren cua so: ;HEXA va ASCII ; HIEN_THI PROC FAR ; mo thu tuc HIEN THI MOV AX,DATA_SEG MOV DS,AX CALL WRITE_TOP_PATTERN; CALL SEND_CRLF MOV BX,OFFSET BUFFER_OFFSET MOV CX,16 ; hien thi 16 dong RAM_BUFFER: CALL HIEN_THI_DONG ; hien thi tung dong 16 byte CALL SEND_CRLF ; xuong dong ve dau dong ADD BX,16 ; tang 16 bytes nua cho dong tiep LOOP RAM_BUFFER ; lap lai voi so lan CX CALL WRITE_BOTTOM_PATTERN; CALL KET_THUC HIEN_THI ENDP ; EXTRN WRITE_CHAR:FAR HIEN_THI_DONG PROC NEAR ; ; thu tuc in tung dong, moi dong I ; 16 byte chua RAM_BUFFER : I ; truoc tien o cua so HEXA roi den I ; cua so ASCII I ; PUSH AX PUSH BX PUSH CX PUSH DX MOV DL,' ' ; MOV CX,7 write_n_times : ; nhan in ky tu DL voi so ; lan bang gia tri chua CL Call write_char ; goi thu tuc in ky tu DL man hinh loop write_n_times MOV DL,VERTICAL_BAR CALL WRITE_CHAR MOV CX,16 PUSH BX ; offset cho cua so ASCII HEX_WIN: Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý MOV DL,[BX]; CALL WRITE_HEX goi ch.tr in so HEX MOV DL,' ' dl=20hexa la ma khoang trang ; ; CALL WRITE_CHAR INC BX LOOP HEX_WIN ; -; xong cua so HEX_WIN MOV DL,VERTICAL_BAR CALL WRITE_CHAR ; MOV CX,16 POP BX ASCII_WIN: MOV DL,[BX]; CALL WRITE_CHAR INC BX LOOP ASCII_WIN MOV DL,VERTICAL_BAR CALL WRITE_CHAR POP DX POP CX POP BX POP AX RET HIEN_THI_DONG ENDP ; ket thuc thu tuchien thi dong ; WRITE_HEX PROC NEAR PUSH CX MOV DH,DL MOV CX,4 SHR DL,CL CALL WRITE_HEX_DIGIT MOV DL,DH AND DL,0FH CALL WRITE_HEX_DIGIT POP CX RET WRITE_HEX ENDP ; PUBLIC WRITE_HEX_DIGIT EXTRN WRITE_CHAR:FAR WRITE_HEX_DIGIT NEAR PROC PUSH DX CMP DL,10 JAE HEX_LETTER ADD DL,'0' JMP WRITE_DIGIT HEX_LETTER: ADD DL,'A'-10 WRITE_DIGIT: CALL WRITE_CHAR POP DX RET WRITE_HEX_DIGIT ENDP ; public write_top_pattern extrn write_char:far ; thu tuc o ham thu vien extrn gotoXY :far ; extrn ket_thuc :far ; ;Thu tuc WRITE_PATTERN de ve khung bang cac ky tu ;do hoa cua bang ma ASCII ; write_top_pattern proc near data_Seg Segment public extrn Dong:byte man hinh TEXT extrn Cot :byte man hinh TEXT ; bien dong ; bien cot data_Seg ends ; -PUSH AX PUSH BX PUSH CX PUSH DX cld ; dat co huong = (Direction=0) mov dx,offset top_line_pattern; DX tro toi CSDL cua duong ngang ; cua khung can ve mov dong,05 ; lay toa X va Y vao bien 'dong' va 'cot' mov Cot, 00h ; (dong:5 cot:0) Call gotoXY ; goi thu tuc dat tro man hinh vao toa ; XY da xac dinh mov si,dx ; chuyen OFFSET DX vao SI de su dung ; lenh LODSB pattern_top_loop: lodsb ; nhan byte CSDL vao AL cua bo VXL or al,al ; kiem tra da toi cuoi CSDL chua? jz end_top_pattern ; neu roi thi ket thuc mov dl,al ; neu chua thi chuyen AL vao DL lodsb ; nhan tiep byte tiep theo va chuyen ; vao AL mov cl,al ; chuyen vao dem CL de su dung ; lenh LOOP xor ch,ch write_n_times1 : ; nhan in ky tu DL voi so ; lan bang gia tri chua CL Call write_char ; goi thu tuc in ky tu DL man hinh loop write_n_times1 jmp pattern_top_loop end_top_pattern: POP DX POP CX POP BX POP AX ret write_top_pattern endp ; public write_bottom_pattern write_bottom_pattern proc near data_Seg Segment public extrn Dong:byte dong man hinh TEXT extrn Cot :byte man hinh TEXT ; bien ; bien cot Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý data_Seg ends ; -PUSH AX PUSH BX PUSH CX PUSH DX cld ; dat co huong = (Direction=0) mov dx,offset bottom_line_pattern; DX tro toi CSDL cua duong ngang ; cua khung can ve mov dong,22 ; lay toa X va Y vao bien 'dong' va 'cot' mov Cot, 00h ; (dong:5 cot:0) Call gotoXY ; goi thu tuc dat tro man hinh vao toa ; XY da xac dinh mov si,dx ; chuyen OFFSET DX vao SI de su dung ; lenh LODSB pattern_bottom_loop: lodsb ; nhan byte CSDL vao AL cua bo VXL or al,al ; kiem tra da toi cuoi CSDL chua? jz end_bottom_pattern ; neu roi thi ket thuc mov dl,al ; neu chua thi chuyen AL vao DL lodsb ; nhan tiep byte tiep theo va chuyen ; vao AL mov cl,al ; chuyen vao dem CL de su dung ; lenh LOOP xor ch,ch write_n_times2 : ; nhan in ky tu DL voi so ; lan bang gia tri chua CL Call write_char ; goi thu tuc in ky tu DL man hinh loop write_n_times2 jmp pattern_bottom_loop end_bottom_pattern: POP DX POP CX POP BX POP AX ret write_bottom_pattern endp code_Seg ends data_Seg Segment public ; -; Cau truc cua duong ngang phia tren ; tham so dau la ky tu hoa, tham so ; thu hai la so luong ky tu can in ; top_line_pattern label byte db ' ',7 db upper_left,1 db horizontal_bar,11 db top_t_bar,1 db horizontal_bar,11 db top_t_bar,1 db horizontal_bar,11 db top_t_bar,1 db horizontal_bar,12 db top_t_bar,1 db horizontal_bar,16 db upper_right,1 db bottom_line_pattern label byte db ' ',7 db lower_left,1 db horizontal_bar,11 db bottom_t_bar,1 db horizontal_bar,11 db bottom_t_bar,1 db horizontal_bar,11 db bottom_t_bar,1 db horizontal_bar,12 db bottom_t_bar,1 db horizontal_bar,16 db lower_right,1 db ; -PUBLIC BUFFER_OFFSET BUFFER_OFFSET DB 16 DUP(41H) DB 16 DUP(42H) DB 16 DUP(43H) DB 16 DUP(44H) DB 16 DUP(45H) DB 16 DUP(46H) DB 16 DUP(30H) DB 16 DUP(31H) DB 16 DUP(32H) DB 16 DUP(33H) DB 16 DUP(34H) DB 16 DUP(35H) DB 16 DUP(36H) DB 16 DUP(37H) DB 16 DUP(38H) DB 16 DUP(39H) ; -data_Seg ends ; -STACK_SEG SEGMENT PUBLIC DB 10 DUP('STACK'); STACK_SEG ENDS ; END HIEN_THI ; ket thuc ch.tr chinh HIEN_THI Bài tập 7: Vẽ hình chữ nhật chế độ đồ hoạ hình 640x480 pixel ; ASSUME CS:CODE_SEG,DS:DATA_SEG,SS :STACK_SEG CODE_SEG SEGMENT PUBLIC EXTRN MODE_GRAPHIC: FAR ; Cac thu tuc o FILE thu vien EXTRN KET_THUC : FAR EXTRN WRITE_DOT : FAR ; ;Thu tuc BOX dung de: - ve canh day phia tren tu trai sang phai ; - ve hai canh ben tu tren xuong duoi ; - ve canh day phia duoi tu trai sang phai ; BOX PROC FAR CALL MODE_GRAPHIC ; khoi dong che do hoa (GRAPHIC) MOV AX,DATA_SEG DS tro toi mang du lieu MOV DS,AX ; cho Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý MOV CX,[BOTCOL] ; CX chua so pixel canh day phia tren SUB CX,[TOPCOL] MOV SI,[TOPROW] ; SI chua toa dong phia tren (ROW) MOV DI,[TOPCOL] ; DI chua toa cot phia tren (COL) TOPLOOP: ; vong lap ve canh day phia tren CALL WRITE_DOT ; goi chuong trinh in pixel INC DI ; sang cot ke ben phai de ve tiep CALL DELAY ; giu cham de quan sat LOOP TOPLOOP MOV CX,[BOTROW] SUB CX,[TOPROW] chua so pixel canh ben MOV SI,[TOPROW] ; CX SIDELOOP: ;vong lap ve hai canh ben MOV DI,[TOPCOL] CALL WRITE_DOT MOV DI,[BOTCOL] CALL WRITE_DOT INC SI CALL DELAY LOOP SIDELOOP MOV CX,[BOTCOL] SUB CX,[TOPCOL] ; CX chua so pixel canh day phia duoi MOV SI,[BOTROW] MOV DI,[TOPCOL] BOTLOOP: ; vong lap ve canh day phia duoi CALL WRITE_DOT INC DI CALL DELAY LOOP BOTLOOP CALL KET_THUC BOX ENDP ; ; Thu tuc dung de giu cham qua trinh in ; pixel man hinh de de theo roi Bien bo nho ; DELA an dinh thoi gian giu cham can thiet ; - DELAY PROC near tuc giu cham PUSH AX PUSH BX ;mo thu MOV AX,DELA ; gia tri giu cham DELA -> AX LOOP1: MOV BX,0FFFH ; BX chua gia tri giu cham cho vong ; lap LOOP2 LOOP2: DEC BX ; giam BX di don vi JNZ LOOP2 ; nhay ve LOOP2 neu chua rong (BX0) DEC AX ; giam AX di don vi JNZ LOOP1 ; nhay ve LOOP1 neu chua rong (BX0) POP BX POP AX RET DELAY ENDP ; CODE_SEG ENDS ; dong mang lenh ; DATA_SEG SEGMENT PUBLIC TOPROW DW 50 ; bien bo nho WORD cho toa dong phia tren TOPCOL DW 100 ; bien bo nho WORD cho toa cot phia tren BOTROW DW 400 ; bien bo nho WORD cho toa dong phia duoi BOTCOL DW 600 ; bien bo nho WORD cho toa cot phia duoi DELA DW 20 ; bien bo nho WORD cho giu cham PUBLIC COLOR COLOR DB 15 ; bien bo nho BYTE cho mau pixel DATA_SEG ENDS ; STACK_SEG SEGMENT PUBLIC DB 100 DUP('STACK') STACK_SEG ENDS ; -END BOX ; ket thuc ch.tr chinh BOX.ASM II) Chơng trình ASSEMBLER (Dịch sang *.COM) Bài tập 1: Tổ chức chơng trình Assembler đơn giản ; CGROUP GROUP CODE_SEG,DATA_SEG ASSUME CS:CGROUP,DS:CGROUP ; CS tro toi manh lenh CODE_SEG SEGMENT PUBLIC ORG 100H ; bat dau tu dia chi 100 hex EXTRN KET_THUC:NEAR EXTRN INRA :NEAR ; -;Thu tuc chinh : chuyen byte ma HEX ;thanh tu ma nhi phan tren man hinh ; -HEX_NHI PROC NEAR ; mo thu tuc HEXA >bieu dien NHI PHAN MOV BL,8AH ; hien thi so 8A hexa CALL HIEN_THI ; goi ch.tr hien thi CALL KET_THUC HEX_NHI ENDP HIEN_THI PROC NEAR MOV CX,08H DOI_MA: MOV DL,0H RCL BL,1H ADC DL,30H CALL INRA ; goi thu tuc in man hinh tung bit tu file thu vien LOOP DOI_MA HIEN_THI ENDP ; ket thuc thu tuc chinh ; CODE_SEG ENDS ; dong mang lenh ; &&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&& DATA_SEG SEGMENT PUBLIC DATA_SEG ENDS Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý ; &&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&& END HEX_NHI ; ket thuc ch.tr chinh HEX_BIN Bài tập 2: Tổ chức chơng trình Assembler đơn giản ; CGROUP GROUP CODE_SEG,DATA_SEG ASSUME CS:CGROUP,DS:CGROUP ; CS tro toi manh lenh ; DS tro toi manh lenh ; SS tro toi manh lenh CODE_SEG SEGMENT PUBLIC ORG 100H ; bat dau tu dia chi 100 hex EXTRN WRITE_CHAR:NEAR ; su dung thu tuc file thu vien EXTRN KET_THUC :NEAR EXTRN GOTOXY :NEAR ; -;Thu tuc chinh : chuyen so thap phan ;thanh tu ma HEXA tren man hinh ; -TEST_WRITE_DECIMAL PROC NEAR ; mo thu tuc thap phan -> HEXA CALL FLAG ; in co trang thai MOV DX,1789 ; hien thi so 1789 THAP PHAN CALL WRITE_decimal ; goi ch.tr hien thi CALL KET_THUC TEST_WRITE_DECIMAL ENDP ; WRITE_DECIMAL PROC NEAR PUSH AX PUSH CX PUSH DX PUSH SI MOV AX,DX MOV SI,10 XOR CX,CX NON_ZERO: XOR DX,DX DIV SI PUSH DX INC CX OR AX,AX JNE NON_ZERO WRITE_DIGIT_LOOP: POP DX CALL WRITE_HEX_DIGIT LOOP WRITE_DIGIT_LOOP END_DECIMAL: POP SI POP DX POP CX POP AX RET WRITE_DECIMAL ENDP ; ket thuc thu tuc chinh ; ;Thu tuc in man hinh (su dung ham dich vu ; cua DOS PC de mo phong ch.tr can viet ; WRITE_HEX PROC NEAR PUSH CX PUSH DX MOV DH,DL MOV CX,4 SHR DL,CL CALL WRITE_HEX_DIGIT MOV DL,DH AND DL,0FH CALL WRITE_HEX_DIGIT POP DX POP CX RET WRITE_HEX ENDP ; WRITE_HEX_DIGIT PROC NEAR PUSH DX CMP DL,10 JAE HEX_LETTER ADD DL,'0' JMP SHORT WRITE_DIGIT HEX_LETTER: ADD DL,'A'-10 WRITE_DIGIT: CALL WRITE_CHAR POP DX RET WRITE_HEX_DIGIT ENDP ; FLAG PROC NEAR; co trang thai PUSH DX CALL GOTOXY LEA DX,THONG_BAO ; thong bao trang thai CALL MESSAGE POP DX RET FLAG ENDP ; MESSAGE PROC NEAR PUSH AX PUSH DX PUSH SI PUSHF CLD mov SI,DX STRING_LOOP: LODSB OR AL,AL ; k/tra het dong thong bao? JZ END_STRING MOV DL,AL CALL WRITE_CHAR JMP STRING_LOOP END_STRING: POPF POP SI POP DX POP AX RET MESSAGE ENDP ; -CODE_SEG ENDS ; dong mang lenh ; -DATA_SEG SEGMENT PUBLIC PUBLIC THONG_BAO THONG_BAO DB 'HELLOW! WORLD ',0DH,0AH,00H DB 0DH,0AH,00H DATA_SEG ENDS ; &&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&& END TEST_WRITE_DECIMAL ; ket thuc ch.tr chinh HEX_BIN Bài tập 3: Chơng trình hiển thị Buffer Ram Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý ; Cgroup Group Code_seg, Data_seg Assume CS:Cgroup, DS:Cgroup ; CS trỏ tới mảng lệnh Code_seg Segment Public Org 100h ; Bắt đầu từ địa 100 hex Extrn Ket_thuc:Near Extrn Send_crlf:Near ; -; Thủ tục : In hình ; buffer Ram theo dòng ; cửa sổ Hexa Ascii ; -Hien_thi Proc Near ; Mở thủ tục hiển thị Xor DX,DX ; Bắt đầu từ offset DX=0000 h Mov CX,16 ; Hiển thị 16 dàng Ram_buffer: Call Hien_thi_dong ; Hiển thị dòng 16 byte Call Send_crlf ; Xuống dòng đầu dòng Add DX,16 ; Tăng 16 bytes cho dòng tiếp Loop Ram_buffer ; Lặp lại với số lần CX Call Ket_thuc Hien_thi Endp ; Extrn Write_char:Near Hien_thi_dong Proc Near ; ; Thủ tục in dòng, ; dòng 16 byte chứa ; Ram_buffer trớc tiên cửa sổ ; Hexa đến cửa sổ Ascii ; Chú ý: Nếu muốn hiển thị cửa ; sổ Ascii trớc đến Hexa ; thi thay theo thứ tự: ; Ascii_win: ; Mov DL, ; Hex_win: ; Pop DX ; Push BX Push CX Push DX Mov BX,DX ; Chuyển offset cho BX Mov CX,16 ; In 16 cột Ascii Push BX ; Offset cho cửa sổ Ascii Hex_win: Mov DL,Buffer_offset[BX] Call Write_hex ; Gọi ch.tr in số hex Mov DL,' ' ; dl = 20h mã khoảng trắng Call Write_char Inc BX Loop Hex_win ; - Xong cửa sổ Hex_win Mov DL,' ' Call Write_char ; Dãn cách cửa sổ khoảng trắng ; Mov CX,16 ; In 16 cột bên cửa sổ Hex Pop BX Ascii_win: MOV DL,Buffer_offset[BX] Call Write_char Inc BX Loop Ascii_win Pop DX Pop CX Pop BX Ret Hien_thi_dong Endp ; Kết thúc thủ tục hiển thị dòng ; Write_hex Proc Near Push CX Push DX Mov DH,DL ; Chuyển bit thấp lên bít cao để làm ? Mov CX,4 Shr DL,CL ; Shift right Call Write_hex_digit Mov DL,DH ; Trả giá trị cho dl And DL,0Fh Call Write_hex_digit Pop DX Pop CX Ret Write_hex Endp ; Extrn Write_char:Near Write_hex_digit Proc Near Push DX Cmp DL,10;compare dl with 10 Jae Hex_letter ;if equal then jump to Hex_letter Add DL,'0' ;dl cộng với mã Asii 10 Jmp Short Write_digit Hex_letter: Add DL,'A'-10 Write_digit: Call Write_char Pop DX Ret Write_hex_digit Endp ; Code_seg Ends ; Dong mang lệnh ; Data_seg Segment Public Public Buffer_offset Buffer_offset db 16 Dup(1Ah) db 16 Dup(1Bh) db 16 Dup(1Ch) db 16 Dup(1Dh) db 16 Dup(1Eh) db 16 Dup(1Fh) db 16 Dup(20h) db 16 Dup(21h) db 16 Dup(22h) db 16 Dup(23h) db 16 Dup(24h) db 16 Dup(25h) db 16 Dup(26h) db 16 Dup(27h) db 16 Dup(28h) db 16 Dup(29h) Data_seg Ends ; End Hien_thi ; Kết thúc ch.tr Hien_thi Bài tập 4: Cộng hai số tự nhiên kích thớc byte ; CGROUP GROUP CODE_SEG,DATA_SEG ASSUME CS:CGROUP,DS:CGROUP CODE_SEG SEGMENT PUBLIC org 100h ; DATA_SEG SEGMENT PUBLIC BUFFER DB DUP(?) DIGIT DB ? n1 DW ? n2 DW ? sum DW ? BIEN_GET DW Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý BIEN_2NUM DW Promp1 DB 'Nhap so thu 1: ' Promp2 DB 'Nhap so thu 2: ' Promp3 DB 'Tong so la: ' Fine LABEL BYTE DATA_SEG ENDS ; EXTRN WRITESTRING:NEAR EXTRN GETSTRING:NEAR EXTRN KET_THUC:NEAR ; ADDn PROC NEAR LEA DX, Promp1 MOV CX, Promp2- Promp1 CALL WRITETEXT CALL GETSTR CALL STR2NUM MOV AX,[BIEN_2NUM] MOV n1,AX LEA DX, Promp2 MOV CX,Promp3-Promp2 CALL WRITETEXT CALL GETSTR CALL STR2NUM MOV AX,[BIEN_2NUM] MOV n2,AX CALL ADDn1n2 LEA DX,Promp3 MOV CX,Fine-Promp3 CALL WRITETEXT CALL WRITESum CALL KET_THUC ADDn ENDP ; GETSTR PROC NEAR DATA_SEG SEGMENT PUBLIC EXTRN FLAG:WORD DATA_SEG ENDS PUSH AX PUSH BX PUSH CX PUSH DX MOV BX,00H MOV CX,07H LEA DX,BUFFER CALL GETSTRING MOV AX,[FLAG] SUB AX,02H MOV [BIEN_GET],AX POP DX POP CX POP BX POP AX RET GETSTR ENDP ; -WRITECHAR PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV BX,01H MOV CX,01H LEA DX,DIGIT CALL WRITESTRING POP DX POP CX POP BX POP AX RET WRITECHAR ENDP ; -STR2NUM PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV CX,[BIEN_GET] MOV AX,00H MOV BX,10 LEA SI,BUFFER MOV DH,00H LOOP1: MUL BX MOV DL,[SI] SUB DL,'0' ADD AX,DX INC SI LOOP LOOP1 MOV [BIEN_2NUM],AX POP DX POP CX POP BX POP AX RET STR2NUM ENDP ; -ADDn1n2 proc near PUSH AX MOV AX,n1 ADD AX,n2 MOV SUM,AX POP AX RET ADDn1n2 ENDP ; -WRITESum PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV AX,Sum MOV BX,10 mov cx,0 GETADIGIT: MOV DX,0 DIV BX PUSH DX inc cx CMP AX,0000H JZ WRITE jmp GETADIGIT WRITE: POP DX ADD DL,'0' MOV DIGIT,DL CALL WRITECHAR dec cx cmp cx,0 jnz write; POP DX POP CX POP BX POP AX RET WRITESum ENDP ; WRITETEXT PROC NEAR PUSH BX MOV BX,01H CALL WRITESTRING POP BX RET WRITETEXT ENDP ; CODE_SEG ENDS END ADDn III) Phụ lục III số điều hệ vi xử lý 16bit Intel 1) Cách bố trí ghi cờ hệ vi xử lý 16bit Intel N15 PL O D N7 S 11 N8 NT IO I T N0 Z A P C Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý Chú thích: + C: Cờ nhớ (Carry) + P: Cờ chẵn lẻ (Parity) + A: Cờ nhớ phụ + Z: Cờ rỗng (Zero) + S: Cờ dấu (Sign) + T: Cờ bẫy (Trap) + I: Cờ ngắt (Interrupt) + D: Cờ hớng (Derection) + O: Cờ tràn (Oterflow) + IO: + PL: Previlege Level + NT: Nested Task IV) Phụ lục III tóm tắt lệnh, kiến thức vi xử lý (micro proccessor) bit Intel 1) XCHG dest,source Chức năng: Hoán chuyển nội dung hai toán hạng nguồn đích Ta hoán chuyển ghi ghi ghi nhớ Địa sở A15 - A0 Giới hạn L15 - L0 b) Bộ mô tả mã lệnh Chú thích: + P: Present + DPL-Desriptor + 11: Mảng lệnh + C: Conforming = DuocQuyen = DPLofboMoTaChuaCTcon = 1DuocQuyen = DPLofboMoTaGoi + R: Readable = 0ChiThucHien = 1VuaThucHienVuaDoc + A:Accerr Cho hệ VXL từ 80386 P DPL 1 C R A A23-A16 A15 - A0 L15 - L0 c) Phơng thức tính đại Vật lý từ địa ảo Bộ chọn TI DPL OFFSET 0-Toàn cục 1-Cục RAM RAM Ngăn nhớ 2) V) Cơ chế quản lý địa 80x86 chế ngắt 1) chế quản lý không gian nhớ :vxl16/32 bit - mảng nhớ - đ/c sở hình vẽ Kích thớc mảng Đ/c cở sở Đợc quyền thâm nhập Đ/c thực : Bộ chọn mảng +offset Các bít cao đ/c đ/c ảo :bộ chọn mảng IT RPL Bộ mô tả mảng Địa sở A23 - A0 Kích thớc mảng d) Các ghi quản lý địa ảo Byte - Byte - Byte - Byte CS DS ES SS Byte đặc tả Phần kín (63-48) Đ/c sở A23 A0 Kích thớc Mảng L15-0 Phần hở (47-15) Hệ vi xử lý 16 bit Intel Đặc quyền yêu cầu = CucBo Phân biệt vùng nhớ = ToanCuc Kết hợp: 14bit + 16bit offset = 30bit -> 230 = 1GB a) Bộ mô tả mảng dl Cho hệ VXL từ 386 trở lên P D PL ED W Phần kín dùng để bảng mô tả mảng (tự động) A Đ/c sở A23-A16 12 [...]... RET WRITETEXT ENDP ; CODE_SEG ENDS END ADDn III) Phụ lục III một số điều về hệ vi xử lý 16bit Intel 1) Cách bố trí các thanh ghi cờ trong hệ vi xử lý 16bit Intel N15 PL O D N7 S 11 N8 NT IO I T N0 Z A P C Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý Chú thích: + C: Cờ nhớ (Carry) + P: Cờ chẵn lẻ (Parity) + A: Cờ nhớ phụ + Z: Cờ rỗng...Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý BIEN_2NUM DW 0 Promp1 DB 'Nhap so thu 1: ' Promp2 DB 'Nhap so thu 2: ' Promp3 DB 'Tong so la: ' Fine LABEL BYTE DATA_SEG ENDS ; EXTRN WRITESTRING:NEAR... Cờ nhớ phụ + Z: Cờ rỗng (Zero) + S: Cờ dấu (Sign) + T: Cờ bẫy (Trap) + I: Cờ ngắt (Interrupt) + D: Cờ hớng (Derection) + O: Cờ tràn (Oterflow) + IO: + PL: Previlege Level + NT: Nested Task IV) Phụ lục III tóm tắt các lệnh, kiến thức về bộ vi xử lý (micro proccessor) 8 bit Intel 1) XCHG dest,source Chức năng: Hoán chuyển nội dung của hai toán hạng nguồn và đích Ta chỉ có thể hoán chuyển giữa thanh ghi... chỉ cơ sở A23 - A0 Kích thớc mảng d) Các thanh ghi quản lý địa chỉ ảo 2 Byte - 1 Byte - 3 Byte - 2 Byte CS DS ES SS Byte đặc tả Phần kín (63-48) Đ/c cơ sở A23 A0 Kích thớc Mảng L15-0 Phần hở (47-15) Hệ vi xử lý 16 bit Intel Đặc quyền yêu cầu = 1 CucBo Phân biệt vùng nhớ = 0 ToanCuc Kết hợp: 14bit + 16bit offset = 30bit -> 230 = 1GB a) Bộ mô tả mảng dl Cho hệ VXL từ 386 trở lên P D PL 1 0 ED W Phần... A23-A16 A15 - A0 L15 - L0 c) Phơng thức tính đại chỉ Vật lý từ địa chỉ ảo Bộ chọn TI DPL OFFSET 0-Toàn cục 1-Cục bộ RAM RAM Ngăn nhớ 2) V) Cơ chế quản lý địa chỉ của 80x86 và cơ chế ngắt 1) cơ chế quản lý không gian bộ nhớ :vxl16/32 bit - mảng nhớ - đ/c cơ sở hình vẽ Kích thớc mảng Đ/c cở sở Đợc quyền thâm nhập Đ/c thực : Bộ chọn mảng +offset Các bít cao của đ/c đ/c ảo :bộ chọn mảng IT RPL Bộ mô tả mảng Địa