注册 登录
编程论坛 汇编论坛

关于汇编指令xlat代码问题,哪位大虾帮忙看看,看了好多天就是不理解先谢谢啦

zkzq 发布于 2013-01-05 22:02, 593 次点击
程序实现功能:循环不断从8255的c口输入二进制0~fH,换码后从a口输出,如果键盘上有按键就退出循环返回到dos
程序代码:
方式字=10001001B
A、B、C、控制口地址为0E488H、0E489H0E48AH、0E48BH

DATA SEGMENT
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
    DB 7FH,67H,77H,7CH,39H,5EH,79H,71H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      MOV AL,89H,
      MOV DX,0e48BH,
      OUT DX,AL
INOUT:MOV DX,0E48AH
      IN AL,DX     
      AND AL,OFH     ;经过and后AL的值是多少?
      MOV BX,OFFSET DATA
      XLAT
      MOV DX,OE488H
      OUT DX,AL
      MOV AH,1
      INT 16H
      JZ INOUT
      MOV AH,4CH
      INT 21H
CODE ENDS
    ENDSTART


我想问第一次执行AND AL,OFH 时,AL=?,我是按al=3fh计算的,第一次xlat后,al=bx+(al and ofh),al=71h,第二次xlat后,al= bx+(71h and 0fh),al=06h,第三次xlat后,al= bx+(06h and 0fh),al=7dh,第四次xlat后,al= bx+(7dh and 0fh),al=5eh,第五次xlat后,al= bx+(5eh and 0fh),al=79h,第六次xlat后,al= bx+(79h and 0fh),al=67h,第七次xlat后,al= bx+(67h and 0fh),al=07h,第八次xlat后,al= bx+(07h and 0fh),al=07h,第九次第十次。。。。,以后都是07h了,死循环了吗?我这样计算对吗?哪位高手帮忙看看

顺便可否帮忙告诉下怎么根据电路图计算8255的四个端口地址啊?
谢谢啦
3 回复
#2
zklhp2013-01-06 12:21
从没用过这个指令 而且之后这个指令好像淘汰了。。
#3
水哥2013-01-06 22:57
查表指令,看下8086手册有实例
#4
hu9jj2013-01-07 12:40
xlat是换码指令,执行的操作是(AL)<-((BX)+(AL))。使用这个命令之前,应先建立一个字节表格,表格的首地址提前存入BX寄存器,偏移量也提前存入AL寄存器中,程序执行时将基址(BX)+偏移量(AL)所处的内存数据送AL。
1