【正文】
AL,[DI] MOV BX,OFFSET LED XLAT MOV DX,word ptr io_base_address add dx,PORTSEG OUT DX,AL MOV AL,CL MOV DX,word ptr io_base_address add dx,PORTBIT OUT DX,AL PUSH CX MOV CX,8000H 。(ah) is col data not ax mov si,offset table1 mov di,offset char mov cx,24tt: cmp ax,[si] 。porta output 00 MOV DX,word ptr io_base_address add dx,pb55 in al,dx 。simulate LED show。 JB Readin CMP AL,39。clear MOV byte ptr operator,4 CMP AL,39。P39。設(shè)置 tpc 卡中9054芯片io口,關(guān)閉中斷 mov ds,ax mov dx,word ptr io_9054base_address add dx,68h in ax,dx and ax,0f7ffh out dx,ax mov ax,4c00h int 21h 。reset the error status。設(shè)置 tpc 卡中9054芯片io口,使能中斷 in ax,dx or ax,0900h out dx,ax mov bx,word ptr interrupt_line 。,0ah,0dh,39。新的中斷掩碼,中斷07時(shí)全一,中斷815時(shí)從低至高相應(yīng)位為零 INTMASK DB ? LED DB 3FH,06,5BH,4FH,66H,6DH,7DH,07,7FH,6FH,40H DB 0AH,0DH,39。8253A TIMER0 IN MODE3! COUNT=0200H39。$39。$39。數(shù)碼管端口地址 PORTBIT EQU 210H200H pa55 equ 218h200H 。 這4個(gè)端口地址由最低2位地址碼AA0來選擇。當(dāng)計(jì)數(shù)脈沖是已知周期的時(shí)鐘信號(hào)時(shí),計(jì)數(shù)就成為定時(shí)。 CS 片選信號(hào):由CPU輸入,有效時(shí)表示該8255A被選中。通常將端口A和端口B定義為輸入/輸出的數(shù)據(jù)端口,而端口C則既可以作數(shù)據(jù)端口,又可以作為端口A和端口B的狀態(tài)和控制信息的傳送端口。PC口可以進(jìn)行輸入和輸出。 =顯示器顯示結(jié)果數(shù)據(jù),當(dāng)超出能顯示的最大值,顯示F(溢出) ,結(jié)束退出設(shè)計(jì)思路:首先利用程序不斷掃描鍵盤是不是有輸入,如果沒有就一直掃描,如果有就停止掃描,完成輸入,利用匯編的程序核對(duì)輸入鍵的數(shù)值,通過調(diào)用子程序?qū)崿F(xiàn)2位十進(jìn)制數(shù)以內(nèi)的及減法運(yùn)算。要完成設(shè)計(jì)首先需要構(gòu)建簡單的微型計(jì)算機(jī)應(yīng)用系統(tǒng),其次是確定組成各部件的芯片,然后畫原理圖,根據(jù)相應(yīng)的原理以及實(shí)現(xiàn)過程,編寫出相應(yīng)的匯編代碼。程序設(shè)計(jì)方案 。我們的模擬計(jì)算器能實(shí)現(xiàn)2位十進(jìn)制數(shù)以內(nèi)的及減法運(yùn)算。鍵盤采用逐次掃描原理,16個(gè)按鍵中0~9座位數(shù)字健,+、=作為加、減和等號(hào)功能鍵,C為清零鍵。鍵盤中有無按鍵按下是由行線送入全掃描字、列線讀入行線狀態(tài)來判斷。 A組和B組利用各自的控制單元來接收讀寫控制部件的命令和CPU通過數(shù)據(jù)總線(D0~D7)送來的控制字,并根據(jù)他們來定義各個(gè)端口的操作方式。RESET 復(fù)位信號(hào):由CPU輸入。這是8253與CPU之間的數(shù)據(jù)接口,它由8位雙向三態(tài)緩沖寄存器構(gòu)成,是CPU與8253之間交換信息的必經(jīng)之路。純dos下才能使用。TPC卡設(shè)備ID io_plx_vendor_id equ 010b5h 。TPC卡PCI接口芯片I/O基地址暫存空間 io_base_address db 4 DUP(0) 。,39。,39。,0AH,0DH,39。CDEFBA9845673210 RPMG39。extra data num1 db 6 dup (?) num2 db 6 dup (?) result db 6 dup (?) count db 0 operator db 0 LedNum db 6 dup (?)data endsstacks segment db 100 dup (?)STA DW 512 DUP (?)TOP EQU LENGTH STAstacks endscode segment assume cs:code,ds:data,ss:stacks,es:datastart:。設(shè)置中斷掩碼 mov bx,word ptr interrupt_line mov ah,byte ptr [irq_mask_0_7_table+bx] and al,ah out 21h, al in al, 0a1h mov bx,word ptr interrupt_line mov ah,byte ptr [irq_mask_8_15_table+bx] and al,ah out 0a1h, al sti 。 JZ FunExit CMP DL,39。you must provide the number address to BX PUSH AX PUSH CX PUSH DXReadin:。M39。exit MOV byte ptr operator,5 CMP AL,39。number CMP byte ptr count,6 JZ ReadinLeftMove:。Move the data to LED segment LEA DI,LedNum MOV CX,6 MOV SI,0ShowLoop: MOV AL,[BX+SI] PUSH DI ADD DI,SI MOV [DI],AL POP DI INC SI LOOP ShowLoop retLedShow endpClearNum proc。save the col data push ax call delay MOV DX,word ptr io_base_address add dx,p55ctl mov al,90h 。set mand word of 8255a 。延時(shí) pop ds POP DI pop dx POP CX pop ax sti iretint_proc endpfindtpc proc near 。讀TPC卡I/O基址信息 mov dword ptr io_base_address,ecx and ecx,1 jz findtpc_notfind 。顯示i/o基地址 mov dx,offset intnumber 。判斷是否=9 jle dispword_num 。39。才開始思路很清晰。從理論知識(shí)上我對(duì)8253和8255A的作用、功能以及初始化更加熟悉,并且有了客觀上的理解。 參考文獻(xiàn):[1]微型計(jì)算機(jī)技術(shù)及應(yīng)用(第四版).清華大學(xué)出版社[2]