当前位置: 代码迷 >> 汇编语言 >> 关于汇编的查表程序设计,该如何处理
  详细解决方案

关于汇编的查表程序设计,该如何处理

热度:6063   发布时间:2013-02-26 00:00:00.0
关于汇编的查表程序设计
用查表的方法将一位十六进制数转换成与它相应的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 里。
  相关解决方案