分享

x86inc.asm用例

 盛夏流年闪耀 2014-11-04
%include "x86inc.asm"
;void exam_1(char *pDst, char *refMain, int width, int deltaInt, int deltaFract, int refMainIndex, int l)
; {
; for (l = 0; l < width; l++)
; {
; refMainIndex = l + deltaInt + 1;
; pDst[l] = (char)(((32 - deltaFract) * refMain[refMainIndex] + deltaFract * refMain[refMainIndex + 1] + 16) >> 5);
; }
;}
;void exam_1(char *pDst, char *refMain, int deltaFract, int deltaInt, int width)
cglobal exam_1_asm, 2,7,0
    mov r2d, r2m
    mov r3d, r3m
    mov r6d, r4m
    lea r1, [r1 + r3 + 1]
    mov r4d, 32
    sub r4d, r2d
    ; ***** register map *****
    ; r0 = pDst
    ; r1 = &refMain[deltaInt + 1]
    ; r2 = deltaFract
    ; r4 = 32 - deltaFract
    ; r6 = width
    ; r3 = FREE
    ; r5 = FREE
.loop:
    movzx r3d, byte [r1]
    imul r3d, r4d ; r3d = (32 - deltaFract) * refMain[refMainIndex]
    inc r1
    movzx r5d, byte [r1] ; r5d = deltaFract * refMain[refMainIndex + 1]
    imul r5d, r2d
    lea r3, [r3 + r5 + 16] ; 可以使用'd'后缀的版本,会增加一字节代码长度
    shr r3d, 5
    mov byte [r0], r3b
    inc r0 ; pDst++
    dec r6d
    jnz .loop
    RET

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多