装配程序添加两个数字

时间:2017-01-24 10:19:51

标签: assembly x86

我从只添加两个数字的程序生成了以下转储 我无法理解添加两个数字的逻辑 在给定代码的第6行和第7行,根据我没有意义,请帮助两行

add ecx,00001010  6th line 

and ecx,00002020 7th line

       movzx   ecx,%GWA+000000E0 : VAR1
       movzx   eax,%GWA+000000E8 : VAR2
       sal     ecx,08
       or      ecx,eax
       mov     eax,ecx
       add     ecx,00001010
       and     ecx,00002020
       jne     GLB.4
       movzx   ecx,%GWA+000000E0 : VAR1
       movzx   eax,%GWA+000000E8 : VAR2
       and     ecx,0F0F0F0F
       and     eax,0F0F0F0F
       add     ecx,eax
       add     ecx,F6F6F6F6
       mov     eax,ecx
       and     eax,60606060
       shr     eax,04
       and     ecx,0F0F0F0F
       sub     ecx,eax
       or      ecx,30303030
       add     ecx,10
       bswap   ecx
       shr     ecx,10
       mov     %GWA+0000000A,cx : TRLP+0
       jmp     GLB.5

1 个答案:

答案 0 :(得分:1)

这两行正在检查16位分区或未分组十进制数中的任何一个上的“否定”符号,其中每个字节包含一个十进制数字(bcd - 二进制编码的十进制),位于低位(位0到3) )。符号存储在最低有效字节的第4到7位。查看分区或解压缩的十进制数的最后一个字节,值0x10,0x50,0x90,0xd0将表示负数。

jne GLB.4之后的代码正在执行一个解压缩的bcd add,但后来它进行了一个字节交换,所以我不确定它是用它做什么的。

您是否可以为这两个数字包含Cobol数据部门,以及添加的程序部门?

cout