microsoftxiao

记忆 流逝

导航

今天的汇编,接触这个问题

4.8 利用查表法计算 S = X2 + Y2,设0<= X <= 15, 0<=Y<=15,且分别在DAX,DAY字节单元存放,结果存入RLT单元。

这个问题要涉及到XLAT查表。

另外今天还用笨拙的方法解决了4.6 4.7问题,但是在网上寻求精简的方法无效果。
;函数 NumValue_CCCode[Me]
NumValue_CCCode proc
;入口 si = 存储单元地址 di = 掩码地址 ENDD为存储单元末地址 dx = 原始数据
;出口 si指行的地址
  mov bl,0
again3: cmp si,offset DataEndAddr
        ja  exit
        mov ax,dx
        mov cl,[di]
        cmp bl,2
        jae logicn
  and ah,cl
  jmp caseZ
logicn: and al,cl

caseZ:  cmp bl,0       ;=0时
  jz  right4
  cmp bl,2       ;=2时
  jz  right3
  jmp perform
right4: mov cl,4
  shr ah,cl
  jmp perform
right3: mov cl,3
        shr al,cl
perform:cmp bl,2
        jae jbcase1
        mov [si],ah
        jmp subcase  
jbcase1:mov [si],al
subcase:inc si; 地址增1
        inc di
        inc bl
        jmp again3
 ret

NumValue_CCCode endp
这个函数就解决书上的问题4.7的
设内存OPCD单元存放一个16位代码,编程将其中15~13,12~8,7~3,2~0位的代码分别存入WCD开始的单元,每段代码的最低位与单元的第0位对齐。

posted on 2006-08-18 14:26  龙巢NET刀  阅读(312)  评论(0)    收藏  举报