我从只添加两个数字的程序生成了以下转储 我无法理解添加两个数字的逻辑 在给定代码的第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
答案 0 :(得分:1)
这两行正在检查16位分区或未分组十进制数中的任何一个上的“否定”符号,其中每个字节包含一个十进制数字(bcd - 二进制编码的十进制),位于低位(位0到3) )。符号存储在最低有效字节的第4到7位。查看分区或解压缩的十进制数的最后一个字节,值0x10,0x50,0x90,0xd0将表示负数。
jne GLB.4之后的代码正在执行一个解压缩的bcd add,但后来它进行了一个字节交换,所以我不确定它是用它做什么的。
您是否可以为这两个数字包含Cobol数据部门,以及添加的程序部门?
cout