前置知识:code
XLAT
指令:将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给AL,实际至关于(AL) = (DS:(BX+AL))
。注意,不是单纯地赋予AL+BX,而是对应地址的值。内存
换码指令执行前,通常在主存创建一个字节量表格(以下代码4-6行),内含要转换成的目的代码表格首地址存放于BX,AL存放相对表格首地址的位移量。asm
换码指令执行后,将AL寄存器内容转换为目的代码。table
系统功能调用:21号中断,是DOS提供给用户用于调用系统功能的中断,有近百个功能供使用。class
字符输出的功能调用:DOS功能调用 INT 21H
im
功能号:AH=02H
;入口参数:DL=字符的ASCII码
;功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。数据
assume cs:codesg, ds:datasg datasg segment ASCII db 30h,31h,32h,33h,34h,35h db 36h,37h,38h,39h ;0~9的ASCII码 db 41h,42h,43h,44h,45h,46h ;A~F的ASCII码 hex db 09h ;任意设定了一个待转换的一位16进制数,这里以'0f'为例 datasg ends codesg segment start: mov ax, datasg mov ds, ax mov bx, offset ASCII ;bx存储标号ASCII的偏移地址(将其做为基准值) mov al, hex ;将待转换的16进制数放到低位寄存器 and al, 0fh ;按位与,对8位的前4位清0(由于实验只要求输出后4位) xlat ;换码:al<- DS:[BX+AL] 基准值BX(ASCII的offset)+位移量AL(待转换) mov dl, al ;入口参数:dl<-al mov ah, 2 ;02号DOS功能调用 int 21h ;显示一个ASCII码字符 mov ah, 4ch int 21h codesg ends end start
内存中存储的数据:db
运行结果:img
hex赋值 | 0fh |
09h |
---|---|---|
运行结果 | ![]() |
![]() |