用查表的方法将一位十六进制数转换成与它相应的ASCII码,并将结果放到ASCI单元中
既然指定用查表的方法,那么首先要建立一个表TABLE。我们在表中按照十六进制数从小到大的顺序放入他们对应的ASCII码值。
DATA SEGMENT
TABLE DB 30H,31H,32H,33H,34H,35H,36H,37H
DB 38H,39H,41H,42H,43H,44H,45H,46H
HEX DB X ;X为待转换的十六进制数
ASCI DB ?;存放转换后的ASCII码
DATA ENDS
不知道具体是怎样查表的。
用的 mov al,hex
mov bx,offset table
xlat
------解决方案--------------------------------------------------------
- Assembly code
table segmenttab_da db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h db 41h,42h,43h,44h,45h,46hhextab db 0,1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fhasibuf db 16 dup(?)eol db '$'table endsstack segment para stack 'stack' stapn db 100 dup(?)stack endscoseg segment assume cs:coseg,ds:table,ss:stack,es:tablestart: mov ax,table mov ds,ax mov es,ax mov si,offset hextab ;根据si mov bx,offset tab_da ;表的基址必须放在bx中(必须的) mov di,offset asibuf ;结果放进di mov cx,16 ;循环计数器next: lodsb ;从[si] 装入一个字节 --> al xlat tab_da ;xlat以al为索引,查tab_da表,结果还是放在al中 stosb ;再将al存入[di] loop next ;cx--,if cx<> 进入下一循环 mov cx,16 mov ah,2 ;显示字符的功能号 xor si,siagain: mov dl,asibuf[si] int 21h inc si loop again mov ax,4c00h int 21hcoseg ends end start
------解决方案--------------------------------------------------------
比如 “5” -> table_addr + 5 = 35h
"A" -> table_addr + 10 = 41h
------解决方案--------------------------------------------------------
百度一下xlat指令,一切都明白了,再说这种问题,前面已经有多个帖子问过了……
------解决方案--------------------------------------------------------
屏幕上显示,要通过适当的中断功能调用才可以实现的,怎么能要求你把个字符放到 asci 里就在屏幕上显示出来了呢?单个字符的显示,可以用 int21h 的 02h 功能吧,待显示的字符放在 DL 里。