在 x86 asm 中添加 32 位错误端序数

问题描述

我正在推出自己的 TCP/IP 堆栈。网络字节顺序与 PC 字节顺序不同,当我使用 linux tcpdump 在自己的堆栈上运行测试时,我看到了这一点。

如果我取一个 16 位网络值并且我想将原始值加 1,我可以使用这种代码(在所有情况下,networkvalue 都被声明为双字):

mov AX,[CS:networkvalue]
xchg AL,AH
inc AX
xchg AL,AH
mov [CS:networkvalue],AX

但是我如何成功地使用 32 位值呢?因为这种代码

mov EAX,[CS:networkvalue]
inc EAX
mov [CS:networkvalue],EAX

无法正常工作。

我之所以这么问是因为我想获取远程数据包的序列号,将其递增,然后将其作为确认发送出去,并且两个值都是 32 位。

我唯一能想到的就是这个,但我可能会离开:

mov BL,[CS:networkvalue]
mov BH,[CS:networkvalue+1]
mov CL,[CS:networkvalue+2]
mov CH,[CS:networkvalue+3]
mov [CS:networkvalue],CH
mov [CS:networkvalue+1],CL
mov [CS:networkvalue+2],BH
mov [CS:networkvalue+3],BL
mov EAX,EAX
mov BL,BL

知道如何解决我的问题吗?

而且我更喜欢适用于较旧(例如 386' 或 486' 型号 PC)的答案,因为我正在为较旧的流行游戏制作网络软件。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)