汇编代码2,求分析啊

DATA SEGMENT
PORTA EQU 408H
TABLE DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H
S DB "WATCH AND TEST THE KEYBOARD ONEXPERIMENT PLATFORM. PRESS ANY KEY TO END...",0DH,0AH,"$"
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOVAX,DATA
MOV DS,AX
MOV DX,OFFSET S
MOV AH,9
INT 21H
MOV DX, PORTA+3
MOV AL,82H
OUT DX,AL
L0:MOV SI,0
MOV AL,0FEH
MOVBX,04H
L1:MOVDX,PORTA
OUTDX,AL
PUSHAX
MOVDX,PORTA+1
INAL,DX
MOVCX,04H
MOVDI,0
L2:SHRAL,1
JC L3
CALLDISP
L3:INC DI
LOOPL2
POP AX
ROLAL,1
INC SI
DEC BX
JNZ L1
MOV AH,0BH
INT 21H
CMP AL,0FFH
JNZ L0
MOV AH,4CH
INT 21H
DISP PROCNEAR
PUSH BX
PUSH SI
PUSH DI
PUSH AX
PUSH DX
LEABX,TABLE
ADDSI,SI
ADDSI,SI
ADDDI,SI
MOVAX,DI
XLAT
MOV DL,AL
MOVAH,02H
INT 21H
POP DX
POP AX
POP DI
POP SI
POP BX
RET
DISP ENDP
CODE ENDS
END START

以下这段子程序是什么用的

DISP PROCNEAR
PUSH BX
PUSH SI
PUSH DI
PUSH AX
PUSH DX
LEABX,TABLE
ADDSI,SI
ADDSI,SI
ADDDI,SI
MOVAX,DI
XLAT
MOV DL,AL
MOVAH,02H
INT 21H
POP DX
POP AX
POP DI
POP SI
POP BX
RET
DISP ENDP

很显然,disp 这个子程序是用16进制,显示di的 的低4位的数值。
感觉是不是你程序没有贴全?怪怪的。
xlat的功能是把[bx+al]地址的数据,送入al中。
bx通常指向了换码表,这里的码表是
TABLE DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H

即:db '0123456789ABCDEF'
比如:如果di=0A0BH,则mov ax, di后,al=0BH
所以xlat 即执行 [bx+0bh] = 'B',送入al中,(al)='B'
然后执行int 21h的2号功能,把'B'输入到屏幕上。
温馨提示:答案为网友推荐,仅供参考
相似回答