導航:首頁 > 編程語言 > 匯編程序怎麼判斷有鍵盤

匯編程序怎麼判斷有鍵盤

發布時間:2024-09-29 10:44:23

❶ 用89C51單片機設計4*4矩陣式鍵盤計算器程序 要匯編的

KEYBUF EQU 40H ;鍵號存放單元
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV KEYBUF,#0 ;初始鍵號設位0,也可以為任意值
MOV R0,#30H ;顯示首地址
MOV R2,#0CH ;計算數據存放單元個數
CLR A
QING: MOV @R0,A ;將數據存放單元清零
INC R0
DJNZ R2,QING
MOV P0,#8FH ;關閉顯示
MOV R1,#30H ;將顯示首地址存放R1里
;===============================================
;五位無符號顯示子程序
DIS1: MOV R0,#30H ;把顯示數據第一位放在R0里
MOV R2,#04H ;把顯示的位碼放在R2里
MOV R3,#05H ;把顯示的長度放在R3里
DIS2: MOV A,@R0
ANL A,#0FH ;屏蔽顯示數據的高四位
MOV B,A
MOV A,R2
ANL A,#0FH ;屏蔽位碼的高四位
SWAP A
ORL A,B
MOV P0,A ;送總顯示數據到P0顯示
LCALL DELY4ms ;調用延時4ms
INC R0 ;取下一個顯示數據
DEC R2
DJNZ R3,DIS2 ;四位顯示晚後重新開始顯示
;===================================================
;鍵盤掃描子程序
WAIT: MOV P1,#0FFH ;P1口送高電平
CLR P1.0 ;第一行清零
MOV A,P1 ;讀P1口
ANL A,#0F0H ;低位屏蔽
XRL A,#0F0H ;判斷低位是否有低電平 ,即判斷是否有按鍵按下
JZ NOKEY1 ;地位有低電平繼續掃描,否者跳到第而行去掃描
LCALL DELY10ms ;延時10ms去抖在進行判斷是否有按鍵按下
MOV A,P1 ;繼續讀P1口
ANL A,#0F0H ;判斷低位是否有低電平
CJNE A,#0E0H,NK1 ;如果掃描數據不為0E0H就轉到NK1
MOV KEYBUF,#0 ;否者判斷為0號鍵
AJMP DK ;轉DK1查表程序
NK1: CJNE A,#0D0H,NK2 ;如果掃描數據不為0D0H就轉到NK2
MOV KEYBUF,#1 ;否者判斷為1號鍵
AJMP DK ;轉DK2查表程序
NK2: CJNE A,#0B0H,NK3 ;如果掃描數據不為0B0H就轉到NK3
MOV KEYBUF,#2 ;否者判斷為2號鍵
AJMP DK ;轉DK3查表程序
NK3: CJNE A,#70H,NK4 ;如果掃描數據不為70H就轉到NK4
LJMP SAN_CHU
NK4: NOP
NOKEY1: MOV P1,#0FFH ;和上面相同
CLR P1.1
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY2
LCALL DELY10MS
MOV A,p1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY2
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK5
MOV KEYBUF,#3
AJMP DK
NK5: CJNE A,#0D0H,NK6
MOV KEYBUF,#4
AJMP DK
NK6: CJNE A,#0B0H,NK7
MOV KEYBUF,#5
AJMP DK
NK7: CJNE A,#70H,NK8
MOV KEYBUF,#10 ;否者判斷為3號鍵
AJMP DK ;轉DK4查表程序
NK8: NOP
NOKEY2: MOV P1,#0FFH
CLR P1.2
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY3
LCALL DELY10MS
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY3
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK9
MOV KEYBUF,#6
AJMP DK
NK9: CJNE A,#0D0H,NK10
MOV KEYBUF,#7
AJMP DK
NK10: CJNE A,#0B0H,NK11
MOV KEYBUF,#8
AJMP DK
NK11: CJNE A,#70H,NK12
LJMP DENG_HAO
NK12: NOP
NOKEY3: MOV P1,#0FFH
CLR P1.3
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY4
LCALL DELY10MS
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY4
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK13
LJMP CHU
NK13: CJNE A,#0D0H,NK14
LJMP CHENG
NK14: CJNE A,#0B0H,NK15
LJMP JIAN
NK15: CJNE A,#70H,NK16
LJMP JIA
NK16: NOP
;=======================================================
;查表求鍵值程序
DK: MOV B,#00H
MOV A,KEYBUF ;查表程序 查對應的鍵號數據
MOV DPTR,#TABLE ;把表頭地址放入DPTR
MOVC A,@A+DPTR ;A裡面存放的為鍵號,利用A和表頭地址找到對應的鍵號數據
MOV B,A ;把查到的數據送往顯示單元
INC R1 ;取下一個顯示單元
MOV A,R1
CJNE A,#36H,DKA1 ;判斷顯示單元是否已滿
MOV R1,#35H ;35H,36H單元用於更好的控制五位顯示
AJMP DKA
DKA1: MOV 34H,33H ;按鍵代碼按左移顯示,先按先顯示
MOV 33H,32H
MOV 32H,31H
MOV 31H,30H
MOV 30H,B
DKA: MOV A,P1 ;讀P1口
ANL A,#0F0H ;屏蔽高四位
XRL A,#0F0H ;地位是有低電平
JNZ DKA ;如果有低電平繼續讀P1口,否者向下執行,查找第二行
NOKEY4: LJMP DIS1
;===================================
;功能按鍵功能設定
DENG_HAO:MOV DPTR,#JI_SUAN ;等號鍵功能通過加、減、乘、除設定的偏移量來調用子程序
MOV A,3CH ;3CH存放的為功能程序入口地址偏移量
JMP @A+DPTR ;轉移到按鍵功能程序
JI_SUAN: AJMP JIA1 ;加計運算元程序
AJMP JIAN1 ;減計運算元程序
AJMP CHENG1 ;乘計運算元程序
AJMP CHU ;除計運算元程序
;=======刪除鍵功能
SAN_CHU: ACALL QING_DIS
AJMP DKA
;=======加鍵功能
JIA: MOV 3CH,#00H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA
;=======減鍵功能
JIAN: MOV 3CH,#02H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA
;=======乘鍵功能
CHENG: MOV 3CH,#04H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA
;=======除鍵功能
CHU: MOV 3DH,#06H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA

;=================================
;存被加(減、乘、除)數,存放在37H~3BH里
CUN_SHU: MOV 37H,30H ;36H存放的為最低位
MOV 38H,31H
MOV 39H,32H
MOV 3AH,33H
MOV 3BH,34H ;3AH存放的為最高位
RET
;================================
;清除顯示單元
QING_DIS: MOV R1,#30H
QING1: MOV @R1,#00H
INC R1
MOV A,R1
CJNE A,#36H,QING1
MOV R1,#30H
LOP1: RET
;================================
;十進制加法子程序
JIA1:
MOV A,37H ;個位被加數
ADD A,30H ;個位被加數+加數
MOV B,#10 ;十六進制除10轉換成BCD碼
DIV AB
MOV 30H,B ;余數即個位存放在30H
MOV 37H,A ;商存放在37H
MOV A,38H ;十位被加數
ADD A,31H ;十位被加數+加數
ADD A,37H ;加上個位之和的進位
MOV 37H,#00H ;清除37H
MOV B,#10 ;十六進制除10轉換成BCD碼
DIV AB
MOV 31H,B ;余數即十位存放在31H
MOV 38H,A ;商存放在38H
MOV A,39H ;百位計算同十位
ADD A,32H
ADD A,38H
MOV 38H,#00H
MOV B,#10
DIV AB
MOV 32H,B
MOV 39H,A
MOV A,3AH ;千位計算同十位
ADD A,33H
ADD A,39H
MOV 39H,#00H
MOV B,#10
DIV AB
MOV 33H,B
MOV 3AH,A
MOV A,3BH ;萬位計算同十位
ADD A,34H
ADD A,3AH
MOV 3AH,#00H
MOV B,#10
DIV AB
MOV 34H,B
MOV 3BH,#00H
AJMP DKA
;=====================
JIAN1: AJMP DKA
CHENG1: AJMP DKA
CHU1: AJMP DKA
;=============================================
;延時程序和查表表格
DELY4ms: MOV R6,#8 ;延時4毫秒
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DELY10ms:MOV R6,#20 ;延時10毫秒
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
RET
TABLE: DB 07H, 04H, 01H ; / 本表格是以鍵盤為參考 7 8 9 /
DB 08H, 05H, 02H ; * 4 5 6 *
DB 09H, 06H, 03H ; - 1 2 3 -
DB 00H, 00H ;= + 清除 0 = +
END

❷ 用匯編語言編寫一個程序,能用鍵盤選擇選擇產生正弦波、方波、三角形波和鋸齒波形

T0832-1.asm
;D/A轉換實驗,產生方波

;***************根據CHECK配置信息修改下列符號值*******************
IOY0 EQU 9C00H ;片選IOY0對應的埠始地址
;*****************************************************************
DA0832 EQU IOY0+00H*4 ;DA0832的埠地址

STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS

DATA SEGMENT
STR1 DB 'DA0832: Square Wave $' ;定義顯示的字元串
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA
MOV DS,AX

MOV DX,OFFSET STR1 ;顯示字元串
MOV AH,9
INT 21H

LOOP1: MOV DX,DA0832 ;寫00H,輸出低電平
MOV AL,00H
OUT DX,AL
CALL DALLY

MOV DX,DA0832 ;寫0FH,輸出高電平
MOV AL,7FH
OUT DX,AL
CALL DALLY

MOV AH,1 ;判斷是否有按鍵按下
INT 16H
JZ LOOP1 ;無按鍵則跳回繼續循環,有則退出

QUIT: MOV AX,4C00H ;返回到DOS
INT 21H

DALLY PROC NEAR ;軟體延時子程序
PUSH CX
PUSH AX
MOV CX,0050H
D1: MOV AX,5000H
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP

CODE ENDS
END START

;T0832-2.asm
;D/A轉換實驗,產生三角波

;***************根據CHECK配置信息修改下列符號值*******************
IOY0 EQU 9C00H ;片選IOY0對應的埠始地址
;*****************************************************************
DA0832 EQU IOY0+00H*4 ;DA0832的埠地址

STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS

DATA SEGMENT
STR1 DB 'DA0832: Triangle Wave $' ;定義顯示的字元串
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA
MOV DS,AX

MOV DX,OFFSET STR1 ;顯示字元串
MOV AH,9
INT 21H

LOOP1: MOV AL,00H ;D/A轉換起始值
UP: MOV DX,DA0832 ;啟動D/A轉換
OUT DX,AL
CALL DALLY

INC AL
CMP AL,7FH
JNE UP

DOWN: MOV DX,DA0832
OUT DX,AL
CALL DALLY

DEC AL
CMP AL,00H
JNE DOWN

MOV AH,1 ;判斷是否有按鍵按下
INT 16H
JZ LOOP1 ;無按鍵則跳回繼續循環,有則退出

QUIT: MOV AX,4C00H ;返回到DOS
INT 21H

DALLY PROC NEAR ;軟體延時子程序
PUSH CX
PUSH AX
MOV CX,0010H
D1: MOV AX,0100H
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP

CODE ENDS
END START

❸ 匯編無鍵盤輸入的判斷

0B 檢驗鍵盤狀態 AL=00 有輸入AL=FF 無輸入

中斷調用
AH 功能 調用參數 返回參數
00 程序終止(同INT 20H) CS=程序段前綴
01 鍵盤輸入並回顯 AL=輸入字元
02 顯示輸出 DL=輸出字元
03 非同步通迅輸入 AL=輸入數據
04 非同步通迅輸出 DL=輸出數據
05 列印機輸出 DL=輸出字元
06 直接控制台I/O DL=FF(輸入)DL=字元(輸出) AL=輸入字元
07 鍵盤輸入(無回顯) AL=輸入字元
08 鍵盤輸入(無回顯)檢測Ctrl-Break AL=輸入字元
09 顯示字元串 DS:DX=串地址'$'結束字元串
0A 鍵盤輸入到緩沖區 DS:DX=緩沖區首地址(DS:DX)=緩沖區最大字元數 (DS:DX+1)=實際輸入的字元數
0B 檢驗鍵盤狀態 AL=00 有輸入AL=FF 無輸入
0C 清除輸入緩沖區並請求指定的輸入功能 AL=輸入功能號(1,6,7,8,A)
0D 磁碟復位 清除文件緩沖區
0E 指定當前預設的磁碟驅動器 DL=驅動器號 0=A,1=B,... AL=驅動器數
0F 打開文件 DS:DX=FCB首地址 AL=00 文件找到AL=FF 文件未找到
10 關閉文件 DS:DX=FCB首地址 AL=00 目錄修改成功AL=FF 目錄中未找到文件
11 查找第一個目錄項 DS:DX=FCB首地址 AL=00 找到AL=FF 未找到
12 查找下一個目錄項 DS:DX=FCB首地址(文件中帶有*或?) AL=00 找到AL=FF 未找到
13 刪除文件 DS:DX=FCB首地址 AL=00 刪除成功AL=FF 未找到
14 順序讀 DS:DX=FCB首地址 AL=00 讀成功 =01 文件結束,記錄中無數據 =02 DTA空間不夠 =03 文件結束,記錄不完整
15 順序寫 DS:DX=FCB首地址 AL=00 寫成功 =01 盤滿 =02 DTA空間不夠
16 建文件 DS:DX=FCB首地址 AL=00 建立成功 =FF 無磁碟空間
17 文件改名 DS:DX=FCB首地址(DS:DX+1)=舊文件名(DS:DX+17)=新文件名 AL=00 成功AL=FF 未成功
19 取當前預設磁碟驅動器 AL=預設的驅動器號 0=A,1=B,2=C,...
1A 置DTA地址 DS:DX=DTA地址
1B 取預設驅動器FAT信息 AL=每簇的扇區數DS:BX=FAT標識位元組CX=物理扇區大小DX=預設驅動器的簇數
1C 取任一驅動器FAT信息 DL=驅動器號 同上
21 隨機讀 DS:DX=FCB首地址 AL=00 讀成功 =01 文件結束 =02 緩沖區溢出 =03 緩沖區不滿
22 隨機寫 DS:DX=FCB首地址 AL=00 寫成功 =01 盤滿 =02 緩沖區溢出
23 測定文件大小 DS:DX=FCB首地址 AL=00 成功(文件長度填入FCB)AL=FF 未找到
24 設置隨機記錄號 DS:DX=FCB首地址
25 設置中斷向量 DS:DX=中斷向量AL=中斷類型號
26 建立程序段前綴 DX=新的程序段前綴
27 隨機分塊讀 DS:DX=FCB首地址CX=記錄數 AL=00 讀成功 =01 文件結束 =02 緩沖區太小,傳輸結束 =03 緩沖區不滿
28 隨機分塊寫 DS:DX=FCB首地址CX=記錄數 AL=00 寫成功 =01 盤滿 =02 緩沖區溢出
29 分析文件名 ES:DI=FCB首地址DS:SI=ASCIIZ串AL=控制分析標志 AL=00 標准文件 =01 多義文件 =02 非法盤符
2A 取日期 CX=年DH:DL=月:日(二進制)
2B 設置日期 CX:DH:DL=年:月:日 AL=00 成功 =FF 無效
2C 取時間 CH:CL=時:分DH:DL=秒:1/100秒
2D 設置時間 CH:CL=時:分DH:DL=秒:1/100秒 AL=00 成功 =FF 無效
2E 置磁碟自動讀寫標志 AL=00 關閉標志AL=01 打開標志
2F 取磁碟緩沖區的首址 ES:BX=緩沖區首址
30 取DOS版本號 AH=發行號,AL=版本
31 結束並駐留 AL=返回碼DX=駐留區大小
33 Ctrl-Break檢測 AL=00 取狀態 =01 置狀態(DL)DL=00 關閉檢測 =01 打開檢測 DL=00 關閉Ctrl-Break檢測 =01 打開Ctrl-Break檢測
35 取中斷向量 AL=中斷類型 ES:BX=中斷向量
36 取空閑磁碟空間 DL=驅動器號 0=預設,1=A,2=B,... 成功:AX=每簇扇區數 BX=有效簇數 CX=每扇區位元組數 DX=總簇數失敗:AX=FFFF
38 置/取國家信息 DS:DX=信息區首地址 BX=國家碼(國際電話前綴碼)AX=錯誤碼
39 建立子目錄(MKDIR) DS:DX=ASCIIZ串地址 AX=錯誤碼
3A 刪除子目錄(RMDIR) DS:DX=ASCIIZ串地址 AX=錯誤碼
3B 改變當前目錄(CHDIR) DS:DX=ASCIIZ串地址 AX=錯誤碼
3C 建立文件 DS:DX=ASCIIZ串地址CX=文件屬性 成功:AX=文件代號錯誤:AX=錯誤碼
3D 打開文件 DS:DX=ASCIIZ串地址AL=0 讀 =1 寫 =3 讀/寫 成功:AX=文件代號錯誤:AX=錯誤碼
3E 關閉文件 BX=文件代號 失敗:AX=錯誤碼
3F 讀文件或設備 DS:DX=數據緩沖區地址BX=文件代號CX=讀取的位元組數 讀成功: AX=實際讀入的位元組數 AX=0 已到文件尾讀出錯:AX=錯誤碼
40 寫文件或設備 DS:DX=數據緩沖區地址BX=文件代號CX=寫入的位元組數 寫成功: AX=實際寫入的位元組數寫出錯:AX=錯誤碼
41 刪除文件 DS:DX=ASCIIZ串地址 成功:AX=00出錯:AX=錯誤碼(2,5)
42 移動文件指針 BX=文件代號CX:DX=位移量AL=移動方式(0:從文件頭絕對位移,1:從當前位置相對移動,2:從文件尾絕對位移) 成功:DX:AX=新文件指針位置出錯:AX=錯誤碼
43 置/取文件屬性 DS:DX=ASCIIZ串地址AL=0 取文件屬性AL=1 置文件屬性CX=文件屬性 成功:CX=文件屬性失敗:CX=錯誤碼
44 設備文件I/O控制 BX=文件代號AL=0 取狀態 =1 置狀態DX =2 讀數據 =3 寫數據 =6 取輸入狀態 =7 取輸出狀態 DX=設備信息
45 復制文件代號 BX=文件代號1 成功:AX=文件代號2失敗:AX=錯誤碼
46 人工復制文件代號 BX=文件代號1CX=文件代號2 失敗:AX=錯誤碼
47 取當前目錄路徑名 DL=驅動器號DS:SI=ASCIIZ串地址 (DS:SI)=ASCIIZ串失敗:AX=出錯碼
48 分配內存空間 BX=申請內存容量 成功:AX=分配內存首地失敗:BX=最大可用內存
49 釋放內容空間 ES=內存起始段地址 失敗:AX=錯誤碼
4A 調整已分配的存儲塊 ES=原內存起始地址BX=再申請的容量 失敗:BX=最大可用空間 AX=錯誤碼
4B 裝配/執行程序 DS:DX=ASCIIZ串地址ES:BX=參數區首地址AL=0 裝入執行AL=3 裝入不執行 失敗:AX=錯誤碼
4C 帶返回碼結束 AL=返回碼
4D 取返回代碼 AX=返回代碼
4E 查找第一個匹配文件 DS:DX=ASCIIZ串地址CX=屬性 AX=出錯代碼(02,18)
4F 查找下一個匹配文件 DS:DX=ASCIIZ串地址(文件名中帶有?或*) AX=出錯代碼(18)
54 取盤自動讀寫標志 AL=當前標志值
56 文件改名 DS:DX=ASCIIZ串(舊)ES:DI=ASCIIZ串(新) AX=出錯碼(03,05,17)
57 置/取文件日期和時間 BX=文件代號AL=0 讀取AL=1 設置(DX:CX) DX:CX=日期和時間失敗:AX=錯誤碼
58 取/置分配策略碼 AL=0 取碼AL=1 置碼(BX) 成功:AX=策略碼失敗:AX=錯誤碼
59 取擴充錯誤碼 AX=擴充錯誤碼BH=錯誤類型BL=建議的操作CH=錯誤場所
5A 建立臨時文件 CX=文件屬性DS:DX=ASCIIZ串地址 成功:AX=文件代號失敗:AX=錯誤碼
5B 建立新文件 CX=文件屬性DS:DX=ASCIIZ串地址 成功:AX=文件代號失敗:AX=錯誤碼
5C 控制文件存取 AL=00封鎖 =01開啟BX=文件代號CX:DX=文件位移SI:DI=文件長度 失敗:AX=錯誤碼
62 取程序段前綴 BX=PSP地址

I/O埠功能表
———————————————————————————
I/O地址 功能、用途
———————————————————————————
0 DMA通道0,內存地址寄存器(DMA控制器1(8237))
1 DMA通道0, 傳輸計數寄存器
2 DMA通道1,內存地址寄存器
3 DMA通道1, 傳輸計數寄存器
4 DMA通道2,內存地址寄存器
5 DMA通道2, 傳輸計數寄存器
6 DMA通道3,內存地址寄存器
7 DMA通道3, 傳輸計數寄存器
8 DMA通道0-3的狀態寄存器
AH DMA通道0-3的屏蔽寄存器
BH DMA通道0-3的方式寄存器
CH DMA清除位元組指針
DH DMA主清除位元組
EH DMA通道0-3的清屏蔽寄存器
FH DMA通道0-3的寫屏蔽寄存器
19H DMA起始寄存器
20H-3FH 可編程中斷控制器1(8259)使用
40H 可編程中斷計時器(8253)使用,讀/寫計數器0
41H 可編程中斷計時器寄存器
42H 可編程中斷計時器雜項寄存器
43H 可編程中斷計時器,控制字寄存器
44H 可編程中斷計時器,雜項寄存器(AT)
47H 可編程中斷計時器,計數器0的控制字寄存器
48H-5FH 可編程中斷計時器使用
60H-61H 鍵盤輸入數據緩沖區
61H AT:8042鍵盤控制寄存器/XT:8255輸出寄存器
62H 8255輸入寄存器
63H 8255命令方式寄存器
64H 8042鍵盤輸入緩沖區/8042狀態
65H-6FH 8255/8042專用
70H CMOS RAM地址寄存器
71H CMOS RAM數據寄存器
80H 生產測試埠
81H DMA通道2,頁表地址寄存器
82H DMA通道3,頁表地址寄存器
83H DMA通道1,頁表地址寄存器
87H DMA通道0,頁表地址寄存器
89H DMA通道6,頁表地址寄存器
8AH DMA通道7,頁表地址寄存器
8BH DMA通道5,頁表地址寄存器
8FH DMA通道4,頁表地址寄存器
93H-9FH DMA控制器專用
A0H NM1屏蔽寄存器/可編程中斷控制器2
A1H 可編程中斷控制器2屏蔽
C0H DMA通道0,內存地址寄存器(DMA控制器2(8237))
C2H DMA通道0, 傳輸計數寄存器
C4H DMA通道1,內存地址寄存器
C6H DMA通道1, 傳輸計數寄存器
C8H DMA通道2,內存地址寄存器
CAH DMA通道2, 傳輸計數寄存器
CCH DMA通道3,內存地址寄存器
CEH DMA通道3, 傳輸計數寄存器
D0H DMA狀態寄存器
D2H DMA寫請求寄存器
D4H DMA屏蔽寄存器
D6H DMA方式寄存器
D8H DMA清除位元組指針
DAH DMA主清
DCH DMA清屏蔽寄存器
DEH DMA寫屏蔽寄存器
DFH-EFH 保留
F0H-FFH 協處理器使用
100H-16FH保留
170H 1號硬碟數據寄存器
171H 1號硬碟錯誤寄存器
172H 1號硬碟數據扇區計數
173H 1號硬碟扇區數
174H 1號硬碟柱面(低位元組)
175H 1號硬碟柱面(高位元組)
176H 1號硬碟驅動器/磁頭寄存器
177H 1號硬碟狀態寄存器
1F0H 0號硬碟數據寄存器
1F1H 0號硬碟錯誤寄存器
1F2H 0號硬碟數據扇區計數
1F3H 0號硬碟扇區數
1F4H 0號硬碟柱面(低位元組)
1F5H 0號硬碟柱面(高位元組)
1F6H 0號硬碟驅動器/磁頭寄存器
1F7H 0號硬碟狀態寄存器
1F9H-1FFH保留
200H-20FH游戲控制埠
210H-21FH擴展單元
278H 3號並行口,數據埠
279H 3號並行口,狀態埠
27AH 3號並行口,控制埠
2B0H-2DFH保留
2E0H EGA/VGA使用
2E1H GPIP(0號適配器)
2E2H 數據獲取(0號適配器)
2E3H 數據獲取(1號適配器)
2E4H-2F7H保留
2F8H 2號串列口,發送/保持寄存器(RS232介面卡2)
2F9H 2號串列口,中斷有效寄存器
2FAH 2號串列口,中斷ID寄存器
2FBH 2號串列口,線控制寄存器
2FCH 2號串列口,調制解調控制寄存器
2FDH 2號串列口,線狀態寄存器
2FEH 2號串列口,調制解調狀態寄存器
2FFH 保留
300H-31FH原形卡
320H 硬碟適配器寄存器
322H 硬碟適配器控制/狀態寄存器
324H 硬碟適配器提示/中斷狀態寄存器
325H-347H保留
348H-357H DCA3278
366H-36FH PC網路
372H 軟盤適配器數據輸出/狀態寄存器
375H-376H 軟盤適配器數據寄存器
377H 軟盤適配器數據輸入寄存器
378H 2號並行口,數據埠
379H 2號並行口,狀態埠
37AH 2號並行口,控制埠
380H-38FH SDLC及BSC通訊
390H-393H Cluster適配器0
3A0H-3AFH BSC通訊
3B0H-3B H MDA視頻寄存器
3BCH 1號並行口,數據埠
3BDH 1號並行口,狀態埠
3BEH 1號並行口,控制埠
3C0H-3CFH EGA/VGA視頻寄存器
3D0H-3D7H CGA視頻寄存器
3F0H-3F7H 軟盤控制器寄存器
3F8H 1號串列口,發送/保持寄存器(RS232介面卡1)
3F9H 1號串列口,中斷有效寄存器
3FAH 1號串列口,中斷ID寄存器
3FBH 1號串列口,線控制寄存器
3FCH 1號串列口,調制解調控制寄存器
3FDH 1號串列口,線狀態寄存器
3FEH 1號串列口,調制解調狀態寄存器
3FFH 保留

❹ 匯編如何顯示鍵盤的輸入字元

直接寫顯存把,把ASCII寫到顯存里之後顯卡就會幫你把字元顯示出來了
比如在80×25,16色文本顯示模式(默認的顯示模式)下,往B800:0000寫30H的話,在第一行第一列就會顯示一個"0"
不過這種方法需要比較復雜的軟體支持
你可以通過10號中斷的03H子功能讀取游標位置,然後計算顯存地址,然後把AL中的ASCII MOV到顯存里
80×25,16色文本顯示模式的顯存格式是:
ASCII(位元組型數據)|前景及背景顏色(位元組型數據,白字黑背景是07H)
兩個位元組為一個單位,表示一個字元,然後就是這樣循環,來映射屏幕
==========================================================
對了,你是不是沒有設置好字元的屬性啊?
(9)、功能09H
功能描述:在當前游標處按指定屬性顯示字元
入口參數:AH=09H
AL=字元
BH=顯示頁碼
BL=屬性(文本模式)或顏色(圖形模式)
CX=重復輸出字元的次數
出口參數:無
要在BL里填07H才能顯示白字黑背景的字呢
================================================
通過寫顯存的方式顯示字元的例子,這個是在DOS下運行的,不過改一下的話估計就能在裸機上運行了,那個顯示字元的子過程沒保存用到的寄存器,注意一下

assume cs:code,ds:data
data segment
db 'Love WenDaoSheYu Forever!','#'
data ends
code segment
start:mov ax,000EH
int 10H
mov ax,0002H
int 10H
;-------全屏一下,不用按Alt+Enter了
mov ax,data
mov ds,ax
mov al,11001010B
xor bx,bx
mov dx,0604H
;-------"實參表"
call print

exit:mov ah,0
int 16H
mov ax,4C00H
int 21H

print:;(AL=字元屬性 DS=待顯示字元段地址)
;(BX=待顯示字元偏移地址 DH=行 DL=列)
;80×25字元顯示模式
;功能簡介:顯示以"#"結尾的一串字元
push ax
mov cx,0
mov cl,dh
dec cl
mov ax,cx
mov cl,160
mul cl
mov bp,ax
pop ax
;-------處理行信息
mov cl,dl
mov si,cx
dec si
shl si,1
;-------處理列信息
mov cx,0B800H
mov es,cx
;-------初始化顯存段寄存器
mov ah,[bx]
mov cl,'#'
pris:mov es:[bp+si],ah
inc si
mov es:[bp+si],al
inc si
inc bx
mov ah,[bx]
cmp ah,cl
jnz pris
;-------顯示字元串
ret

code ends
end start

閱讀全文

與匯編程序怎麼判斷有鍵盤相關的資料

熱點內容
命令如同 瀏覽:661
怎麼基於安卓開發手機系統 瀏覽:176
編譯的書籍值得看 瀏覽:13
mirai安卓版怎麼用 瀏覽:807
定位app哪裡做 瀏覽:16
單片機p1口程序 瀏覽:211
python的可視化界面設計 瀏覽:878
雲伺服器中的網卡是什麼 瀏覽:632
手機版商城php 瀏覽:805
python中的null 瀏覽:544
php伺服器集成環境 瀏覽:603
騰訊雲輕量應用伺服器怎麼進入 瀏覽:859
232如何連接串口伺服器 瀏覽:322
日本的伺服器地址是什麼 瀏覽:74
蘇州雲主機伺服器費用 瀏覽:543
河北國稅安全接入伺服器地址 瀏覽:140
如何快速完成反詐app任務 瀏覽:541
倆男是什麼app 瀏覽:395
廣告程序員是做什麼的 瀏覽:140
python中文字元串處理 瀏覽:539