assembly - 在 x86 asm 中添加 32 位错误字节序数
问题描述
我正在推出我自己的 TCP/IP 堆栈。网络字节顺序与 PC 字节顺序不同,当我使用 linux tcpdump 在自己的堆栈上运行测试时,我看到了这一点。
如果我采用 16 位网络值并且我想将原始值增加 1,我可以使用这种代码(在所有情况下,网络值都被声明为双字):
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,[CS:networkvalue]
inc EAX
mov [CS:networkvalue],EAX
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
知道如何解决我的问题吗?
而且我更喜欢适用于较旧(例如 386' 或 486' 型号 PC)的答案,因为我正在为较旧的流行游戏制作网络软件。
解决方案
推荐阅读
- javascript - 通过循环将下拉列表项传递到 iframe
- vba - 请告诉我在访问 vba 中使用类似值编写此代码的更好方法?
- sql - SQL 连接和包含
- machine-learning - 在 CoNLL 2003 数据上从头开始训练 spaCy 的 NER 模型得到了非常奇怪的结果
- signing - signtool - 新机器上指定的 PFX 密码不正确
- javascript - 从列值生成数据表中的按钮
- python - 为什么在 python 线程中使用全局是不好的做法?
- vba - .summary 的 VBA 单元格格式
- python - 如何在python中生成随机增加或减少的字符串?
- c++ - Add, subtract and compare compressed integers