![]() | 第5章 子程序和串处理 | -81- | |||||||||||||||||||
main hexout hexloop: hexout code |
call cmp jnz mov int endp proc push mov push mov rol push and xlat mov mov int pop pop loop mov mov int mov int pop ret endp ends end |
hexout al,ESCKEY getkey ax,4c00h 21h near ax cx,2 cx cl,4 al,cl ax al,0fh ascii dl,al ah,2 21h ax cx hexloop dl,CR ah,2 21h dl,LF 21h ax main |
;调用HEXOUT子过程 ;是ESC键吗? ;不是ESC键,返回GETKEY处继续 ;选择DOS API的4CH功能 ;结束进程 ;HEXOUT子过程 ;保存AX寄存器 ;显示2位十六进制数 ;保存CX寄存器 ;CL寄存器置入循环左移位数 ;循环左移AL,将高4位与低4位交换 ;暂存AX寄存器以备后面处理低4位 ;屏蔽低4位,保留高4位 ;取高4位对应十六进制数字的ASCII码 ;将ASCII码送入DL寄存器 ;选择DOS API的02功能 ;输出DL寄存器中的字符 ;取回AX寄存器 ;取回CX寄存器 ;处理低4位 ;DL寄存器送入回车符 ;选择DOS API的02功能 ;显示回车符 ;DL寄存器送入换行符 ;显示换行符 ;恢复AX寄存器的原值 ;子过程返回 |
||||||||||||||||||
先来讨论程序中出现的一个新指令--XLAT: | |||||||||||||||||||||
![]() |
助记符:XLAT(Translate) 用 途:换码指令,将AL寄存器中的数据与存储器中数据进行交换 格 式:XLAT XLAT ADDR 执 行:AL中的数据被位于DS:[BX+AL]处的数据替代 |
||||||||||||||||||||
CPU执行此指令时会把AL中的数作为偏移量从BX指向的表中取出一字节数据并以此取代AL中的数据。这条指令有些绕,应用起来也有些麻烦: | |||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |