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位对齐。