不用辅助节点,使用_asm{}实现单链表的反转。

2024年网络安全最全【信息安全】主机与windows虚拟机远程桌面实现方法 当无法通过共享文件夹实现主机与windows虚拟机文件共享时,可以通过主机与虚拟机远程桌面的方法实现文件的共享传输。本文主要介绍主机与虚拟机远程桌面的实现方式以及文件的传输。 阅读详情

由于使用宏,还是有要引入几个int类型的临时变量及指针,没有完全发挥xor操作的速度,改用块汇编实现。
只是替换了三处,测试与用C实现的结果一样。速度及空间应该都有改良。
#include <stdio.h>
#include <stdlib.h>

#define SWAP(a,b) { /
 a=a^0xFFFFFFFF; /
 b=b^a; /
 a=a^b; /
 b=b^0xFFFFFFFF; /
 b=b^a; /
 }
#define SWAP_POINT(pA,pB) {/
 int h,t; /
 pLinkList ph,pt; /
 h=(int)pA; /
 t=(int)pB; /
 ph = (pLinkList)h; /
 pt = (pLinkList)t; /
 SWAP(h,t); /
 pA = (pLinkList)h; /
 pB = (pLinkList)t; /
 }

typedef struct tagLinkList
{
 int data;
 struct tagLinkList *next;
} LinkList , *pLinkList ;


int main(int argc, char* argv[])
{
 /*
 int a=10,b=99;
 _asm {  
 mov eax,a
 mov ebx,b
 xor ebx,eax
 xor eax,ebx
 xor ebx,eax
 mov a,eax
 mov b,ebx
 }
 printf("a=%d , b=%d /n",a,b);
 */

 int count,i;
 pLinkList Head,tmpNode,Tail;
 
 Head=NULL;
 
 // Construct LinkList.
 printf("Enter count:"); scanf("%d",&count);
 if(count <= 1)
 {
  printf("Count error,must large than 1./n");
  exit(1);
 }
 for(i=1;i<=count;++i)
 {
  tmpNode=(LinkList *)malloc(sizeof(LinkList));
  tmpNode->data=i;
  printf("No.=%d/t Address:%X , Data:%d/n",i,tmpNode,tmpNode->data);
  if(!Head)
   Tail=Head=tmpNode;
  
  else{
   Tail->next=tmpNode;
   Tail=tmpNode;
  }
 }
 Tail->next=NULL;
 
 // Reverse LinkList.
 if(2 == count) {
  //N=2
  //SWAP_POINT(Head,Tail->next);
  _asm {  
   mov eax,DWORD PTR Head
   mov edx,DWORD PTR Tail
   mov esi,4
   mov ebx,[edx][esi]
   xor ebx,eax
   xor eax,ebx
   xor ebx,eax
   mov Head,eax
   mov [edx][esi],ebx
  }
  SWAP_POINT(Head,Tail);
  SWAP_POINT(Head->next->next,Tail);
 }else if(3 == count) {
  //N=3
  SWAP_POINT(Head->next,Tail->next);
  SWAP_POINT(Head,Tail);
  SWAP_POINT(Head->next->next,Tail);
 }else{
  //N>=4
  SWAP_POINT(Head->next,Tail->next);
  SWAP_POINT(Head,Tail);
  SWAP_POINT(Head->next->next,Tail);
  SWAP_POINT(Head->next,Tail->next);
  SWAP_POINT(Head->next->next,Tail);
  for(i=6;i<=count;++i)
  {
   //SWAP_POINT(Head->next,Tail);
   _asm {  
    mov edx,DWORD PTR Head
    mov ebx,DWORD PTR Tail
    mov esi,4
    mov eax,[edx][esi]
    xor ebx,eax
    xor eax,ebx
    xor ebx,eax
    mov Tail,ebx
    mov [edx][esi],eax
   }
   //SWAP_POINT(Head->next->next,Tail);
   _asm {  
    mov eax,DWORD PTR Head
    mov ebx,DWORD PTR Tail
    mov esi,4
    mov edx,[edx][esi]
    mov eax,[edx][esi]
    xor ebx,eax
    xor eax,ebx
    xor ebx,eax
    mov Tail,ebx
    mov [edx][esi],eax
   }
  }
 }
 
 //Output reversed LinkList.
 tmpNode=Head;
 printf("After reverse./n");
 for(i=1;i<=count;++i)
 {
  printf("No.=%d/t Address:%X , Data:%d/n",i,tmpNode,tmpNode->data);
  tmpNode = tmpNode->next;
 }
 printf("Tail->data = %d/n",Tail->data);
 //Release LinkList
 printf("Release LinkList./n");
 for(i=1;i<=count;++i)
 {
  tmpNode=Head;
  Head = Head->next;
  free(tmpNode);
 }

 return 0;
}

 

Python OpenCV基于颜色通道分离法去除图片中的红色印章 最近一段时间的工作都是研究如何去除图片中的红色印章,在网上查找了大量的大佬写过的方法,发现大多数是采取颜色通道分离法来做,并且效果还不错。站在前人的肩膀上,我又做了些许调整,谈不上是改进,但是能应对更对的情况总还是好的,特此记录。 拿发票做例子,印章相较于其它部分最大的不同就是印章是红色的,而其它部分不是(这是一句废话)。 那么第一步当然就是将红色分离出来,这一步可以采用Python第三方库OpenCV里的 cv2.split()方法,该方法是把RGB图像的三个通道拆分开来,得... 阅读详情

相关推荐

关于光耦隔离与SP3485E芯片一起使用无法拉高485使能引脚问题

最近在做的一个项目,定制了一块STM32F407ZG的工控板,工控板载4个485接口全部都是只能接收数据,不能对外发送数据。1.接线不正确:接线不正确导致485收发出现问题。 2.程序端口初始化问题:控制光耦隔离的输入脚IO的初始化和置位状态有问题。 3.GPIO复用问题:控制对应串口的GPIO不是正点原子默认的GPIO,而是经过复用的其他IO,复用问题。 4.程序设置与485E芯片收发模式不对应:对于使能引脚的电平要根据光耦的输出情况确定输入IO与RE的关系,可能模式没有对应。 5.光耦隔离或者SP485

weixin_45862642的博客 2977

C语言:__asm关键字

简介 __asm 关键字用于调用内联汇编程序,并且可在 C 或 C++ 语句合法时出现。   _asm是 __ASM 的同义词。 语法  __asm后跟一个程序集指令、一组括在大括号中的指令或者至少一对空大括号。    1、__asm与大括号一起使用,则该关键字表示大括号之间的每一行都是一条汇编语言语句。    如: _asm { mov al, 2  mov dx, 0xD0

WCG的博客 7万+

Qt上位机实战:5步搞定STM32 IAP固件升级(附拖拽文件处理技巧)

本文详细介绍了如何使用Qt开发STM32 IAP固件升级上位机。通过五个核心步骤,包括理解IAP机制、搭建Qt环境、实现拖拽文件加载、封装串口通信以及设计可靠通信协议,帮助开发者快速构建一个稳定、易用且支持图形化操作的固件升级工具,显著提升嵌入式产品开发与维护效率。

ss78901的博客 1071

__asm关键字

__asm关键字  __asm在嵌入式开发中常见,经常在c代码中看到。__asm实际是说明接下来的语句是汇编代码。 __asm用于函数  __asm在函数定义上,放置在函数返回类型之前,然后说明函数体内部都是汇编代码。 __asm void INTX_DISABLE(void) { CPSID I // 汇编代码 BX LR // 汇编代码 } __asm用于语句  __asm用于语句,直接用花括号将汇编代码括起来。 __asm { CPSID I

村头 9614

存储关键技术·RAID技术·RAID2.0·华为RAID2.0+·华为服务器·云计算

一.RAID基本概念 常见的RAID级别组合RAID级别 二.RAID的数据组织形式 三.RAID的数据保护功能 方法一:镜像方法二:奇偶校验算法(XOR) 四.RAID热备和重构 1.热备(Hot Spare)的定义2.热备的分类3.热备的工作原理 五.RAID 2.0技术 1.RAID 2.02.RAID 2.0+3.华为RAID 2.0+ 六.RAID 2.0+块虚拟化技术 1.什么会出现RAID 2.0+技术?2.什么是RAID 2.0?3.RAID 2.0+的原理是什么?

qq_47480932的博客 3319

边缘AI硬件风向:从专用芯片到端侧大模型

边缘AI硬件正呈现五大发展趋势:专用AI加速芯片(如华为昇腾、谷歌EdgeTPU)凭借高能效比成为主流;端侧大模型催生支持Transformer架构的新硬件需求;存算一体技术突破内存墙限制;FPGA和可重构计算提供灵活性;异构集成与Chiplet技术实现模块化设计。这些发展需要配套软件工具链支持,未来边缘设备将演变成具备本地智能的"智能体",竞争焦点转向算力、能效、易用性和成本的多维平衡。

qq_37027335的博客 347

《汇编: asm函数》

在linux源码中经常遇到__asm__函数。它其实是函数asm的宏定义 #define __asm__ asm,asm函数让系统执行汇编语句。 __asm__常常与__volatile__一起出现。__volatile__限制编译器不能对下面的汇编语句进行优化处理。 分析下面语句 __asm__("movb %3,%%dh\n\t" \ "movb %2,%%dl\n\t" \ "...

yexiang优快云的专栏 1万+

嵌入式学习(29)-ASM330LHH驱动程序

ASM330LHH是一种系统级封装器件,具有3D数字加速度计和3D数字陀螺仪,扩展温度范围上限为+105 °C,适用于汽车非安全领域的应用。ASM330LHH 的满量程加速范围为±2 g、±4 g、±8 g 和 ±16 g,角速度范围扩展至 ±125 dps、±250 dps、±500 dps、±1000 dps、± 2000 dps 和 ±4000 dps,适合各种汽车应用。

剑藏锋的博客 1175

实战案例分析:远程桌面密码获取(附内网各个密码获取方式)

这期我们就来说说在不制作镜像的情况下,如何直接获取windiws系统下的连接过且保存的远程桌面密码,以及各类内网密码获取方式。

m0_37867238的博客 9122

CPRI原理及应用--基本原理

本文主要介绍CPRI的基本原理,包括CPRI的发展历程、CPRI基本协议、速率、帧结构、时延模型等

u014035968的博客 2万+

用deepseek部署全自动的机器人--bytebot

Bytebot是一款开源AI桌面代理,提供完整的虚拟桌面环境,支持跨应用任务处理、文件管理、文档处理等复杂工作流。其技术架构包含核心控制、LLM代理、UI等组件,支持Docker和Kubernetes部署。本文演示了基于CloudStudio的部署流程,包括环境配置、Docker部署及DeepSeek API集成,实现多模型调用功能。

Kin 2480

java 获取docker ip_docker容器内部获取宿主机ip地址方法以及报错解决

1,在docker容器内执行以下python代码或根据需要插入到你的.py文件中:import paramiko #通过pip3 install paramiko 安装s = paramiko.SSHClient()s.load_system_host_keys()s.set_missing_host_key_policy(paramiko.AutoAddPolicy())s.connect(ho...

weixin_42298424的博客 7774

基于 ESP32 的智慧图书馆图书定位与借阅管理系统

本文设计的基于 ESP32 的智慧图书馆图书定位与借阅管理系统,以低成本、模块化、易部署为核心优势,融合 UWB 精准定位、RFID 自动识别、WiFi 无线通信技术,解决了传统图书馆的痛点问题。

weixin_42300449的博客 99

远程桌面,前端部署

运行或者直接按windows键 然后输入“mstsc”打开远程链接 输入这些信息连接。远程桌面端口:18081。海创调度管理系统:ip地址。

weixin_47175934的博客 215

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java调用远程主机shell_Java 执行远程主机shell命令代码

packagecom.gosun.utils;importch.ethz.ssh2.ChannelCondition;importch.ethz.ssh2.Connection;importch.ethz.ssh2.Session;importch.ethz.ssh2.StreamGobbler;importjava.io.IOException;importjava.io.InputStream...

weixin_30033489的博客 187

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java调用远程主机shell_【原】Java程序调用远程Shell脚本

此程序的目的是执行远程机器上的Shell脚本。【环境参数】远程机器IP:192.168.234.123用户名:root密码:rootShell脚本的路径:/home/IFileGenTool/BakProvisionAndOccurEntrance.sh【具体步骤】1、在远程机器上,准备Shell脚本。[root@localhost IFileGenTool]# vim ./load_data.s...

weixin_31264565的博客 310

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【Docker】docker容器内获取宿主机的信息和执行宿主机的脚本

docker容器内获取宿主机的信息和执行宿主机的脚本

酷酷的馫博客 4502

expect数组遍历ip密码使用scp自动输入密码拷贝文件

a=($line)expect {expect {expect eofEOFdoneip和密码文件注,如果ip过多,建议ip分批存放。【且第一次执行应该只放两三个ip,测试没问题了,再批量】执行结果logout自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。

2401_84023604的博客 931

如何在15分钟内免费搭建UltraVNC远程桌面?终极快速入门指南

UltraVNC是一款强大且完全免费的远程桌面连接软件,它能够让你通过网络远程控制其他计算机,实现跨设备的高效协作与管理。无论你是需要远程技术支持、居家办公,还是管理多台服务器,UltraVNC都能提供稳定、安全的远程控制体验。今天,我将为你带来一份完整的UltraVNC快速入门指南,让你在15分钟内掌握这个强大的远程桌面工具! ## 🔧 为什么选择UltraVNC?三大核心优势 在众多远程

gitblog_00448的博客 384

主机上有多个网卡用java指定获取某一个网卡ip的问题

**前几天写过一个基于tomcat发邮件修改密码的功能,大致是这样: 点击修改密码按钮就发送一封邮件去指定账户的邮箱,邮箱里有个超链接和验证码,超链接打开进入修改密码页面。之前能用,但是今天我的笔记本打开了猎豹免费wifi,造成有两个网卡都被激活,如下图** 发给邮箱的超链接的ip地址是通过InetAddress.getLocalHost().getHostAddress()获取,此时得到的

curtain147的博客 8305

linux设置ip地址,主机映射,主机名

设置IP地址,主机映射,主机名 $ su - //切换到root用户 1.修改或确认主机名主机名:大小写英文字母开头,可以出现. _ 除此之外的特殊字符不允许(*@$),不能以数字开头hostname //查看主机名 修改主机名(两种方式): # hostname MyPc.java //临时修改主机名,重启后失效 # vi /etc/sysconfig/network

wsong_14的博客 1466

Java下载安装配置,主机名、IP、SSH免密登录,防火墙、SELinux、时间同步

主机名是网络中设备的可读名称,用于标识设备。IP地址是设备的数字标识符,用于网络通信。防火墙是用于监控和控制网络流量的安全系统,可以基于规则允许或阻止数据包进出网络或主机。SELinux是Linux内核的安全模块,提供强制访问控制(MAC),通过标签和策略限制进程与文件的交互。修改主机名的方法因操作系统而异。SSH免密登录通过公钥认证实现,无需每次输入密码。若无需输入密码即登录成功,则配置完成。输出应显示已安装的Java版本信息。SSH服务配置:检查目标服务器的。(基于iptables的封装)。

2301_82153731的博客 587

java用ip直接连服务器软件吗_java – 如何使用IP地址和端口号连接到服务器套接字(客户端运行在与服务器不同的机器上)...

客户端程序public class client implements Runnable {protected static String server_IP = "141.117.57.42";private static final int server_Port = 5555 ;protected static String client_IP ;public static void mai...

weixin_39686230的博客 395

任务2:主机名、IP、SSH免密登录

主机名 | `root@centos7-java` || 固定 IP | `192.168.139.150/24` 重启不变 || 免密登录 | `ssh root@192.168.139.150` 直接进 |

YYYY_Nlx的博客 219
上一篇: 不用辅助节点,实现单链表的反转。
下一篇: 安装CodeGear RAD Studio 2007 v11.0.2804.9245 升级至 2852.9797
yunin
博客等级 码龄22年 8粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值