
80486微处理器的指令系统P58
利用查表转换功能实现一位十六进制数与ASCII码的转换DATASEGMENTTABDB'0123456789ABCDEF'NUMDB?DATAENDS代码段设置如下指令,...
利用查表转换功能实现一位十六进制数与ASCII码的转换
DATA SEGMENT
TAB DB '0123456789ABCDEF'
NUM DB ?
DATA ENDS
代码段设置如下指令,即可查出与NUM单元中的数相对应的ASCII编码:
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET TAB
MOV AL,NUM
XLAT
我想问下,每一行的意思是什么?
通过MOV与XLAT的那些指令,是如何得到ASCII编码的? 展开
DATA SEGMENT
TAB DB '0123456789ABCDEF'
NUM DB ?
DATA ENDS
代码段设置如下指令,即可查出与NUM单元中的数相对应的ASCII编码:
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET TAB
MOV AL,NUM
XLAT
我想问下,每一行的意思是什么?
通过MOV与XLAT的那些指令,是如何得到ASCII编码的? 展开
1个回答
展开全部
MOV AX,DATA ;把数据赋给AX
MOV DS,AX ;设置数据段地址为数据地址。
MOV BX,OFFSET TAB ;把TAB的偏移量给BX,因为BX是一串字符,所以不能直接赋值,一定要传地址。
MOV AL,NUM ;NUM赋给AL
XLAT 调用XLAT
得到ASCII编码主要靠XLAT,XLAT的功能是把BX指向一个一块内存地址用的第AL个,放到AL里面。也就是说,如果AL里面是3,那么AL里面放的就是TAB[3],也就是‘3’这个字符。
因为你声明的时候是按照字符串声明的,所以,'3'这个字母是按照ASCII码值存储的,放到AL里面就是'3'相应的ASCII码值。从而得到的ASCII码。
给你一段微软MASM guide上的程序,就是显示ASCII码的,但是不全
; Table of hexadecimal digits
hex BYTE "0123456789ABCDEF"
convert BYTE "You pressed the key with ASCII code "
key BYTE ?,?,"h",13,10,"$"
.CODE
.
.
.
mov ah, 8 ; Get a key in AL
int 21h ; Call DOS
mov bx, OFFSET hex ; Load table address
mov ah, al ; Save a copy in high byte
and al, 00001111y ; Mask out top character
xlat ; Translate
mov key[1], al ; Store the character
mov cl, 12 ; Load shift count
shr ax, cl ; Shift high char into position
xlat ; Translate
mov key, al ; Store the character
mov dx, OFFSET convert ; Load message
mov ah, 9 ; Display character
int 21h ; Call DOS
MOV DS,AX ;设置数据段地址为数据地址。
MOV BX,OFFSET TAB ;把TAB的偏移量给BX,因为BX是一串字符,所以不能直接赋值,一定要传地址。
MOV AL,NUM ;NUM赋给AL
XLAT 调用XLAT
得到ASCII编码主要靠XLAT,XLAT的功能是把BX指向一个一块内存地址用的第AL个,放到AL里面。也就是说,如果AL里面是3,那么AL里面放的就是TAB[3],也就是‘3’这个字符。
因为你声明的时候是按照字符串声明的,所以,'3'这个字母是按照ASCII码值存储的,放到AL里面就是'3'相应的ASCII码值。从而得到的ASCII码。
给你一段微软MASM guide上的程序,就是显示ASCII码的,但是不全
; Table of hexadecimal digits
hex BYTE "0123456789ABCDEF"
convert BYTE "You pressed the key with ASCII code "
key BYTE ?,?,"h",13,10,"$"
.CODE
.
.
.
mov ah, 8 ; Get a key in AL
int 21h ; Call DOS
mov bx, OFFSET hex ; Load table address
mov ah, al ; Save a copy in high byte
and al, 00001111y ; Mask out top character
xlat ; Translate
mov key[1], al ; Store the character
mov cl, 12 ; Load shift count
shr ax, cl ; Shift high char into position
xlat ; Translate
mov key, al ; Store the character
mov dx, OFFSET convert ; Load message
mov ah, 9 ; Display character
int 21h ; Call DOS
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询