刘强东(刘强东:简历个人资料)
突发换帅,京东巨变,刘强东面临10个艰难抉择
2018年6月,刘强东在牛津大学赛德商学院演讲,分享了京东创业路上三次大的抉择:把线下店全关掉,只做线上;扩充品类,从只做电子产品到做全品类的大平台;在几乎所有投资人都反对的时候,自建物流。
那是京东巨变的前夜。在那之后的五年里,京东陷入了一个又一个危急关头,抉择时刻只多不少。刘强东,京东唯一的创始人、绝对的控制者,一度隐身、放权,但我们梳理公开信息后发现,在每一个关键路口,他都会现身一线,强势地给出方向。
文 | 徐田艺
编辑 | 辛野
运营 | 刘璇
徐雷,还是许冉?
5月11日,京东发布了一则管理层变动公告:现任CFO许冉将接替徐雷,担任京东集团CEO兼执行董事。
落款是京东集团董事会主席刘强东。让CFO成为CEO,是他和京东的最新抉择。
徐雷,热爱摇滚乐、个性张扬的型互联网高管,此前被外界看作京东的“二号人物”。2022年11月,刘强东在内部会议上提到,“京东最顶头的领导,一个是我,一个是徐雷”。再往前,他还曾经在一场酒局上,语气强硬地对高管们宣布:“谁不服徐雷,就是不服我。”
一切来得太过突然,徐雷在京东集团CEO这个位置上刚刚待满一年。现年49岁的他和刘强东同岁,远未到退休年纪,却在这个初夏宣布因个人原因退休。交接匆忙,流程将立即开始,“以确保留有充足时间”,在6月份完成平稳过渡。
至于徐雷过往的成绩,刘强东也在公告里给予了评价,“曾担任多个高级职务,为公司的发展作出重大贡献”。
与徐雷相比,他的继任者在京东内外都要低调得多。
公开资料里,京东是许冉供职的第二家公司,第一家是普华永道,一待就是近20年,做到审计合伙人。2018年加入京东后,她从未担任过业务线一号位,而是深耕财务,从副总监一路升任集团CFO。
刘强东在公告里称赞许冉,“在京东投融史上发挥了重要作用”。达达、德邦等多起并购案,京东科技业务重组,以及京东赴港二次上市等资本动作,都由她带领团队完成。
徐雷则在他作为CEO出席的最后一次财报会上补充,许冉专业度强、有战斗力、能传承京东的价值观,“过往五年(我)和Sandy(许冉)非常紧密地合作”。
▲京东集团CFO许冉升任CEO。图 / 京东公众号
能拼杀的,还是会算账的?
徐雷和许冉年龄相仿,却是在不同时期加入京东。
2009年,在为京东做了两年营销顾问后,徐雷接受刘强东的邀请,正式成为京东商城营销副总裁。上任没多久,他就交出第一份亮眼的答卷——将定位模糊的“红六月”促销,改名为“618”,自此,京东有了可以与双十一抗衡的购物节,影响延续至今。
但徐雷真正被推向台前,是在2018年。京东唯一的创始人身陷负面、退至幕后时,徐雷以“救火队长”的姿态,推动京东内部大调整。
彼时,摆在京东面前的困境是营收增速下滑,追不上阿里不说,还被后来者拼多多步步紧逼。刘强东环视众高管,痛斥“混日子的人太多了”,他需要像徐雷这样,能打仗、会拼杀的“兄弟”。
“有战斗力”的许冉也在那时加入京东。她最突出的能力标签之一是“会算账”,打的第一场重要战役便是和徐雷配合。据晚点LatePost报道,2018年下半年,徐雷花了四个多月的时间,分析京东商城存在的问题,正是许冉用外部视角帮助分析了财务状况,得出结论:如果再不调整运营、组织模式,公司的经营风险可能会很大。
此后,徐雷开始了多轮组织、业务调整,通过搭建前、中、后台等动作,将京东拽回增长轨道——2019至2021年,京东连续三年保持净收入同比增速26%以上,活跃用户数也从3.05亿增长至5.8亿。2021年9月,徐雷履新京东集团总裁,这是京东20多年历史上第一次出现的职位,他也成为刘强东之外,京东最有权力的高管。
可惜,增长的甜蜜过于短暂。进入2022年后,受疫情叠加影响,打仗、扩张成为过去式,省钱、保利润成为包括京东在内,头部互联网公司的核心任务。
在降本增效的大趋势下,“会算账”的能力,前所未有地被看重。有京东零售中层人士接受36氪采访时表示,“互联网现在越来越关注生意的本质,没有谁会比CFO更懂得赚钱。少亏钱是赚钱,节流也是赚钱。”除了许冉,原京东零售CFO李帅和原京东健康CFO曹冬,在始自去年11月的这场变革中,走到了京东集团业务的一号位上。
这一定程度上也能够解释,为什么京东、华为、TikTok,开始让许冉、孟晚舟、周受资这些CFO走上CEO的位置。
▲ 京东集团候任CEO许冉。图 / 京东公众号
敲打高管,还是照拂“兄弟”?
此次京东集团CEO换人之前,各板块的核心高管,已经在刘强东的意志下开启了一洗牌。
起因是,他对不少高管的表现非常不满意。2022年11月20日,身在香港的刘强东,先是通过一场长达三小时的视频会议,隔空严肃批评高管们,尤其是零售业务的负责人们“谈花里胡哨的故事太多,但谈成本、效率、体验太少”,他认为,如果对如此核心的战略都把握不够,那将很难带领团队长远走下去。
刘强东还直指,许多高管一团和气,不讲核心问题,甚至拿PPT骗他。“整个京东零售,只有1.5个人在会上说真话、提问题。0.5是缪钦,1是姚彦中。”
会上被骂,还没有结束。不到48小时后,高管们又收到一封全员信,核心决定有四条,前三条都是给“兄弟”加福利,包括给德邦十几万员工缴五险一金、为工作满五年的基层员工设立“住房保障基金”,以及刘强东自掏腰包一个亿,加上集团各事业群、事业部拿出的现金,扩充“员工子女救助基金”的规模。
最后一条,京东全部高级管理人员,现金薪酬全部降低10%-20%不等,职位越高降得越多。
管培生,还是职业经理人?
在高管会和全员信后,刘强东又掀起一场人事风暴,首当其冲受到影响的是京东零售,各个事业群的一号位几乎都经历了一番调整。
“说真话的1.5个人”,迎来了变化——姚彦中由3C家电事业群总裁出任大商超全渠道事业群总裁,缪钦继续留任生活服务事业群负责人,但所管辖的房产业务线被拆分出去,更多是为了业务优化。
其中最引人注目的是两个年轻的面孔——电脑通讯事业群负责人吴双喜,和时尚美妆事业群负责人孔祥莹。他们都是京东2012届的管培生,在公司内部走出了陡峭的晋升曲线,尤其是吴双喜,短短一年多时间,职级变了三次,从业务总监到副总裁再到总裁。
什么时候选择什么样的人来管理公司,一直是考验一号人物的难题。
刘强东一直愿意给他信任的管培生,打造畅通的上升通道。此前直线向他汇报的高管里,2019年上任的CHO余睿和后来接替他的张雱,都是京东早期的管培生。
但在公司待得久,并不是绝对的护身符。据新行情援引内部人士观察,这次调整有三大特点:空谈派下课、实干派上台;一些曾被刘强东扶持起来的人“留在老功劳簿里,没有新功劳”,于是被拿下或换岗;刘强东在管培生、“老京东人”和职业经理人之间寻求微妙的平衡。
上一次如此规模的高管汰换,还要追溯到2016年。2014年上市之前,京东处于从草莽向成熟转变的关键时期,刘强东热衷于从外部引入“新鲜血液”,激活整个组织,不少履历光鲜的外企高管空降京东。但短短两三年,这些人又都纷纷离职。
一度有人调侃:京东高管比京东的库存周转更快。
▲京东集团总部大厦。图 / 视觉中国
个人意志,还是集体决策?
在去年11月那场高管会上,刘强东还提到,“我这几年一直在尝试各种放权”。
比如,2020年6月18日,京东回港上市当天,用鼓槌敲响钟声的是徐雷,刘强东并未现身。京东集团战略执行委员会(Strategy Executive Committee,SEC )的十余人团队,也在那一天首次亮相。
▲2020年6月18日,京东正式登陆港交所的仪式在京东总部举行,京东零售CEO徐雷等高管出现在现场参与“云敲钟”仪式。图 / 视觉中国
官方表示,SEC是京东战略管理的最高执行机构,由各业务板块和职能部门的负责人组成,核心工作包括战略规划,监督和保障集团战略级业务和项目的有效落地。
看上去,这是刘强东减弱个人意志,逐渐放权到集体决策的标志之一。
然而,此刻被放出去的权力,一年前刚刚收束过。2019年2月,刘强东提出要在当年年末汰换10%副总裁以上的高管。一并推出的还有“核心高管轮值”计划,超过一定年限,核心管理岗上的高管就会换。
放权,在京东历史上并不新鲜,只是每一次“放”,都没那么彻底。
2013年,刘强东前往美国,但依然远程监控公司的运转。2014年,京东上市后,时任京东商城COO的沈皓瑜出任京东商城CEO,刘强东也说要逐步退出日常运营和管理。但随着阿里进攻加剧,京东自身业务增速放缓,他在2016年又重新执掌一线。
第三次便是2018年,京东商城宣布实行轮值CEO制度,由集团CMO徐雷出任第一任轮值CEO,负责京东商城日常工作。之后,徐雷一路晋升,2021年出任京东零售CEO,2022年更执掌起整个京东集团,直到2023年5月11日,宣告退休。
放权、收权、放权……京东版本的权力的游戏里,不少人的角色都变了,只有刘强东和他接近80%投票权带来的绝对控制权,岿然不动。
品质电商,还是低价战略?
在京东,一号人物每一次权力的收放,都有明确的指向。
眼下回到一线,刘强东的目标也非常清晰:将未来三年最重要的“低价战略” ,贯彻到京东零售的每一个角落。
刘强东认定,“今天京东在品牌方、零售行业地位的下降,本质是因为其他渠道的快速增长”。
在他看来,京东如今营收和GMV增长缓慢的数据,或许很刺眼。财报数据显示,京东2022全年实现营收10462亿元,同比增长9.9%;GMV为34820亿元,同比增长5.6%。此前四年,京东的这两项指标都保持着同比25%以上的高速增长。
这位创始人在不同场合,向公司高管和管培生们传递共识。徐雷还未宣布退休之前,也在内部强调说:“我们坚定了要做低价,大家意志统一了,以后的改变特别多、特别难,但没办法,(低价)这条路,我们必须走下去。”
这是一次动作巨大的转身。徐雷开始执掌京东零售的2019年,京东的选择是“向上走”“实现有质量的增长”。“品质电商”也通过强大的供应链和物流,在消费者心中烙下深深的印记。“多快好省”的slogan里,最深入人心、也为京东带来增长的是“快”和“好”。
然而,在新一轮的零售战争中,京东决定拿起“低价武器”,把货品不够多和买东西不够省的短板恶补一气,将失去的下沉市场找回来。
为此,京东甚至不惜冒着“拾人牙慧”的质疑,直接在今年3月8日“复制”了拼多多的“百亿补贴”。
▲ 图 / 视觉中国
补贴自营,还是扶持第三方?
执行“低价战略”的第一个难题:百亿补贴到底向谁倾斜?
此前在京东,平台流量倾斜的对象一直是利润高、品质好的自营商品,但消费者也形成了“自营商品偏贵”的印象。现在,奉行“低价为王”的京东要学会,将广大下沉市场的POP(第三方卖家)笼进大盘,让更多卖家出现在平台上卖货。
4月,京东零售的组织变革中,全面打通自营与POP成为最受关注的举措之一。3月8日上线的“百亿补贴”,也试图覆盖全品类,自营与POP商家都会参与其中。刘强东多次强调,“谁能做到低价就给谁流量”。
这一倾斜并非全然没有风险。允许POP商家选择其它物流服务,或者放开“个人商家开店”的限制,都有可能发生物流不及时、正品率无法保证的问题,进而影响京东一直以来苦心经营的企业形象。
没有起色的新业务,投入还是砍掉?
京东不是没有过下沉的心思。
早在2014年,京东就尝试过社交电商的玩法,2019年又组建了京喜事业群。社区团购的风吹过互联网,京东一度犹豫不决,最终在2021年1月还是决定成立京喜拼拼下场拼杀,刘强东亲自带队。
但这项新业务,入场还是太晚了。仅仅一年后,20多个省份的业务被砍到个位数,社区团购熄火的同时,京东也铩羽而归。
京喜拼拼的收缩,为京东2022年的降本拉开序幕。
据晚点LatePost报道,京喜业务的持续亏损没有为京东换来想象中的规模,零售自营业务的优势品类通电、日用品的增长也开始放缓,此后,京东先后对零售、物流、科技、国际等几乎所有业务线进行了数次裁员。
在零售赛道之外,京东也曾在美团“腹地”本地生活伺机出手,想要试水外卖和同城购。契机或许在于,美团触碰到了京东的核心业务——3C消费电子。
近几年,越来越多的品牌如小米、华为、苹果、vivo 等与美团闪购建立合作,一些消费电子产品通过美团,最快可以30分钟送达用户。据报道,2021年美团闪购在这一块的总交易额(GTV)高达600至700亿元。
虽然京东二十多年来倾力培养起来的消费习惯,短时间内还未必会被撼动,但考虑到美团在外卖行业建立的即时履约能力和用户量级,已经足够形成威胁,这是无法接受的。
只是同城这条赛道已经非常拥挤,京东想要发力也并不轻松。已经在直播带货领先一大截的抖音,也显示出对本地生活的野心——据媒体报道,2022年,抖音生活服务超预期完成了各项目标,最终完成了大约770亿的GMV;2023年更是定下了翻倍的目标,1500亿。
如今的京东,对新业务的扶持也受到挑战。虽然京东零售CEO辛利军曾声明,京东的百亿补贴“在预算层面不设上限”,但当时还是CFO的许冉在提到2023年规划时却坦承,“京东内部没有大幅度提升本年度营销预算的计划”。
对于京东而言,能不能狠下心来烧钱,也将决定“低价战略”推行效果的成色。
▲广东东莞:华南首家京东MALL开业在即。图 / 视觉中国
要收入,还是要利润?
一系列动作的背后,京东的经营目标也已经发生变化。
2022年三季报电话会上,被问及如何驱动利润增长时,徐雷的答案是:提升高毛利商品占比、提升服务性收入,以及几乎所有大公司都在谈的,降本增效。他说,2022年主要靠降本,2023年会将更多的精力放在“增效”上,“在我看来,整个组织还有太多的效率可以提升”。
只是伴随着CEO的人事变动,“增效”的重任落到了许冉身上。
几天前的2023一季报电话会上,许冉强调:京东的战略方向不会发生变化,在相当长的时间也会保持一致。
具体到考核指标,京东各个业务线,不再盯着客单价,而是开始考核与低价相关的指标。有知情人士告诉虎嗅,财务背景的许冉,可能会在执行刘强东“低价”策略的同时,带领集团恰到好处地走在“收支平衡红线”边缘。
追求“性感”,还是接受“平庸”?
京东要成为一家怎样的公司?
刘强东说:“我讨厌去做一家平庸的公司,如果我们是一家平庸的公司,我宁愿把它关掉。”
徐雷也曾在2019年接受采访时提到,舆论场中的京东已经没有那么性感了,“因为有一家你们觉得更性感的公司”。这家公司,或许是拼多多,在阿里和京东防守薄弱的下沉市场攻城略地;又或者是抖音,在相当短的时间内,通过短视频海量获客,并且对直播电商、本地生活虎视眈眈。
但无论是平庸还是性感,都是极为主观的词,千人千面。只有数据不会撒谎。
成立超过二十年后,京东如何找到继续增长的曲线?或许这已经不是选择题,而是没有参考答案、刘强东和京东也无法避开的问答题。
▲图 / 视觉中国
参考资料:
[1]京东徐雷谈竞争:京东零售是古典电商 不用担心它今天不性感 晚点LatePost
[2]徐雷卸任京东集团 CEO,CFO 许冉接替,刘强东继续掌舵 晚点LatePost
[3]刘强东详解京东低价战略:一个共识、两条公式和三大痛点 晚点LatePost
[4]三小时内部发言,刘强东批评了哪些人哪些事 晚点LatePost
[5]毕竟,刘强东从未离开过 虎嗅
[6]京东零售开启5年来最大组织变革:取消事业群制,全面打通自营与POP 36氪
[7]京东是刘强东的京东 品玩
文章为每日人物原创,侵权必究。
雷军 26 年前写的代码,你见过吗?
来源 | techug/post/code-wroten-by-leijun-22-years-ago.html
作为小米科技的创始人、董事长和首席执行官,雷军的名字如雷贯耳。网上出现一篇“刘强东的代码水平如何”的文章,有网友在下面回复“代码只服雷军”。雷军的代码水平真的很牛吗?
原来雷军年轻的时候,也是一名程序员,而且一干就是10年。雷军在22年前的作文中写道:我会当一辈子程序员,由此可以看出雷军对编程有着狂热的爱好。
还有网友分享了一篇雷军22年前写的代码,废话不多说,直接贴代码。
雷军写的这篇代码,是不是看起来很牛逼?简直就是亮瞎眼!
前方高能……
;; RI.A Revision 2.12 [ July 12, 1994 ]Revision equ 'V2.12 ';;;; RAMinit Release 2.0 ; Copyright (c) 1989-1994 by Yellow Rose Software Co.; Written by Mr. Leijun;; Function:; Press HotKey to remove all TSR program after this program;;; ..........................................................................; Removed Softwares by RI:; SPDOS v6.0F, WPS v3.0F; Game Busters III, IV; NETX ( Novell 3.11 ); PC-CACHE; Norton Cache; Microsoft SmartDrv; SideKick 1.56A; MOUSE Driver; Crazy (Monochrome simulate CGA program); RAMBIOS v2.0; 386MAX Version 6.01; ..........................................................................; No cancel softwares:; Windows 3.1 MSD;; No removed TSR softwares:; MS-DOS fastopen; Buffers, Files ... (QEMM 6.0); QCache (386MAX 6.01); ..........................................................................;COMMENTV2.04 Use mouse driver software reset function to initiation mouse2/17/1993 by Mr. Lei and Mr. FengV2.05 RI cannot work in Windows DOS prompt3/9/1993 by Mr. LeiV2.06 1. When XMS cannot allocate 1K memory, RI halts.2. RI repeat deallocates EMS memory.V2.07 HotKey Setup Error4/25/1993 by Mr. LeiV2.08 KB BufferV2.10 1. Release high memory blocks (EMM386 QEMM386 S-ICE 386MAX)2. RI copies flagV2.12 1. Exists a critical error in Init 8259 procedure2. Save [40:F0--FF] user data areadosseg.model tinydelocals @@org 100hStart: jmp Mainorg 103hTrue equ 1False equ 0MaxHandles equ 100hINT3 macroout 0ffh,alendm;; HotKey Status Test Var; --------------- ---------------;; 7 6 5 4 3 2 1 0 417 418 496; . . x . x . . . Left Alt is pressed 8 2; x . . . x . . . Right Alt is pressed 8 8; . . . x . x . . Left Ctrl is pressed 4 1; . x . . . x . . Right Ctrl is pressed 4 4; . . . . . . x . Left Shift is pressed 2; . . . . . . . x Right Shift is pressed 1;LeftAlt equ 00101000bRightAlt equ 10001000bLeftCtrl equ 00010100bRightCtrl equ 01000100bLeftShift equ 00000010bRightShift equ 00000001bHotKey db LeftCtrl or RightCtrlDataBegin dw 0NextDataSeg dw 0ffffholdInt2F_addr dw 0, 0XMS_control dw 0, 0Handle_begin dw 0cvtOfs dw 0 ; DOS 3.0 equ 0 and above DOS 4.0 is 1org 104hdb 0dhdb Revisiondb ??datedb 26org 114htsrLength dw 0MachineID db 0FCh ; IBM PC/ATAuxHotKey db 0 ; 2Dh ; 'X' Scan CodeAuxHotKeyName db 'X$ 'Power db TrueFlag db '!'Kbd102 db 0NoFlag db 0StopFlag db 1DosEnv dw 0WorkSeg dw 0PrevDataSeg dw 0Copies db '1'old_8259 db 0 ; 21h portdb 0 ; a1h portStatus dw 0XMSbit equ 00000001bEMSbit equ 00000010bSKbit equ 10000000bGoINT1C: db 0eaholdInt1C_addr dw 0, 0newINT1C:test cs:Status, SKbitjnz GoINT1Ccmp cs:StopFlag, 0jz @@0;; Mr. Lei 2/8/1993; Problem: if WPS quit and reenter, old RI cann't control keyboard. ;push dspush axxor ax, axmov ds, axmov ax, ds:[94]cmp ax, offset NewInt9pop axpop dsjnz GoINT1Cmov cs:StopFlag, 0@@0: push axpush dspush esxor ax, axmov ds, axmov es, ds:[94+2]cmp word ptr es:[101h], 'IE' ; 'LEI'jz @@1climov cs:StopFlag, 1mov ax, ds:[94]mov cs:oldINT9_addr2, axmov ax, ds:[94+2]mov cs:oldINT9_addr2[2], axmov ds:[94], offset newINT9_2mov ds:[94+2], cssti@@1: pop espop dspop axjmp GoINT1C; ----------------------------------------------------------------------; INT2F Func;; AX = C0D7h Return RI segment in AX; AX = C0D8h Removes all TSR programs after RI; AX = C0D9h Removes all TSR programs include RI; AX = C0DAh Removes all RI copies; ----------------------------------------------------------------------newINT2F:cmp ax, 0c0d7h ; LEI Hanzi GB Codejnz @@1push cspop axiret@@1: cmp ax, 0c0d7h+1jnz @@2jmp KeepSelf@@2: cmp ax, 0c0d7h+2jnz @@3jmp NoKeepSelf@@3: cmp ax, 0c0d7h+3jnz @@9mov cs:NextDataSeg, -1mov cs:Copies, '1'jmp NoKeepSelf@@9: jmp dword ptr cs:oldInt2F_addrCallInt9:retnewINT9_2:mov cs:NoFlag, 1pushfdb 9ah ; call far ptr oldint9_addroldInt9_Addr2 dw 0, 0jmp newINT9_procnewINT9:pushfdb 9ah ; call far ptr oldint9_addroldInt9_Addr dw 0, 0 cmp cs:NoFlag, 0jz newINT9_procmov cs:NoFlag, 0iretnewINT9_proc:cmp cs:Flag, '!' ; busy ?jnz @@0iret@@0:mov cs:Flag, '!' ; set busy flagpush ax ; cmp hot keypush bxpush esmov ax,40hmov es,axcmp cs:AuxHotKey, 0jz @@_1mov bx, es:[1ah]cmp bx, es:[1ch]jz @@10push bxmov bl, es:[bx+1]cmp bl, cs:AuxHotKeypop bxjnz @@10@@_1:mov ah,es:[17h] ; test CTRL SHIFT ALTmov al,cs:HotKeypush axand ax,0f0fhcmp al,ahpop axjnz @@10 cmp cs:Kbd102, Truejnz @@1shr al, 1shr al, 1shr al, 1shr al, 1push axmov ah, es:[18h]and ax, 303hcmp al, ahpop axjnz @@10mov ah, es:[96h]shr ax, 1shr ax, 1and ax, 303hcmp al, ahjnz @@10 cmp cs:AuxHotKey, 0jz @@_3inc bxinc bxcmp bx, 3ehjb @@_2mov bx, 1eh@@_2:mov es:[1ah], bx@@_3:call IsWinDosor ax, axjz @@1call Beep@@10:stipop espop bxpop axmov cs:Flag, ' ' ; no busyiret@@1: ; OKpop espop bxpop axKeepSelf:call RemoveTSRpush esmov es,cs:WorkSegmov dx,es:tsrLengthmov di,dxmov al,0h ; Aug 24, 1993mov cx,100hrep stosbpop esint 27hNoKeepSelf:mov ax,0e07hint 10hmov cs:clsStr, 47h ; Color (White in Red)call RemoveTSRdec cs:Copiescall RestoreSelfIntVecpush escmp cs:PrevDataSeg, 0jz @@1mov es, cs:PrevDataSegmov es:NextDataSeg, -1@@1: pop esmov ax, 4c00hint 21h; ---------------------------------------------------------------------------IsWinDOS:mov ax, 1600hint 2fhcmp al, 01hjz @@9 cmp al, 0ffhjz @@9 ; Windows/386 Version 2.Xcmp al, 00hjz @@1 cmp al, 80hjnz @@9 ; Windows 3 in enhanced mode; Version number in AL/AH@@1:mov ax, 4680hint 2fhcmp al, 80hjnz @@9xor ax, axjmp @@10@@9: mov ax, 1@@10: ret; -----------------------------------------------------------------------RestoreSelfIntVec:cmp Copies, '0'jz @@0ret@@0:clipush cspop dsxor ax, axmov es, axmov si, offset oldInt9_Addrmov di, 94movswmovswmov si, offset oldInt2F_Addrmov di, 2Fh4movswmovswmov si, offset oldInt1C_Addrmov di, 1Ch4movswmovswstiret; ------------- KERNEL PROGRAM ----------------------------------------------RemoveTSR:pop axcli ; Set stackmov sp, csmov ss, spmov sp, 100hstipush axcmp cs:Power, Truejnz @@1call Init8259@@1:push cspop ds@@_0:mov ax,ds:NextDataSegcmp ax, -1jz @@_1mov cs:PrevDataSeg, dsmov ds, axjmp @@_0@@_1: mov si,ds:DataBeginmov cs:WorkSeg, dslodswcmp ax, 'XX'jz @@_2call Beepret@@_2:call RestoreEnvStrcall RestoreMCB ; restore current mcbcall CloseFilescall RestorePortcall RestoreLEDscall RestoreVecList ; Restore vectors listcall RestoreFloppyParamcmp cs:Power, Truejnz @@2call RestoreCVTchain ; Restore cvt chaincall RestoreMemoryManager@@2:call RestoreBiosDatacall Enable8259mov ah, 1 int 16hcall RestoreClockSpeedcall CloseSpeakercall ResetDiskcall UpdateTimecall ClosePRNmov bx,cs:WorkSegmov ah,50hint 21h ; Set PSP segmentmov ax,3 int 10h ; Set display modecall InitPRNcall InitMousemov al, cs:Copiescmp al, '1'ja @@_sh1mov cs:ShowCopies, ''jmp @@_sh2@@_sh1: mov cs:ShowCopies, al@@_sh2:mov si, offset clsStrcall ColorPrintStrmov cs:Flag, ' ' ; no busycmp Copies, '1'jnz @@_endmov cs:StopFlag, 0@@_end:call ClearKB_bufferretBeep:mov ax,0e07hint 10hret; #########################################################################ClearKB_Buffer:push espush bxmov bx, 0040hmov es, bxclimov bx, es:[1ah]mov es:[1ch], bxstipop bxpop esretInit8259:; cmp cs:Copies, '1'; jz @@1; ret@@1:cmp cs:MachineID, 0fchja @@pc_xt@@AT:mov bx,870h ;mov al,0 ;out 0F1h,al ;jcxz $+2jcxz $+2mov al,11h ; ICW1out 0A0h,aljcxz $+2jcxz $+2out 20h,aljcxz $+2jcxz $+2mov al,bl ; ICW2out 0A1h,aljcxz $+2jcxz $+2mov al,bhout 21h,aljcxz $+2jcxz $+2mov al,2 ; ICW3out 0A1h,aljcxz $+2jcxz $+2mov al,4out 21h,aljcxz $+2jcxz $+2mov al,1 ; ICW4out 0A1h,aljcxz $+2jcxz $+2out 21h,aljcxz $+2jcxz $+2mov al,0FFh ; OCW1out 0A1h,aljcxz $+2jcxz $+2out 21h,alret@@PC_XT:mov al,13h ; ICW1out 20h,aljcxz $+2jcxz $+2mov al,8 ; ICW2out 21h,aljcxz $+2jcxz $+2mov al,9 ; ICW4out 21h,aljcxz $+2jcxz $+2mov al,0FFh ; OCW1out 21h,alretEnable8259:mov ax, word ptr cs:old_8259out 021h,aljcxz $+2jcxz $+2mov al,ahout 0a1h,al ; DEC PC Bus Mouseret ; July 1994 by Mr. Lei; -------------------------------------------------------------------------RestoreBiosData:lodswcmp ax, '--'jz @@1call Beepret@@1: push espush dimov di, 40hmov es, dimov di, 10hmovswmov di, 0a8h ; [40h:a8h]movswmovswmov di, 49hmov cx, 1dhrep movsbmov di, 0f0h ; User datamov cx, 8rep movswpop dipop esret; -------------------------------------------------------------------------RestoreMCB:push dspush eslodsw ; 'MZ'@@0: lodswcmp ax, 'MM'jz @@1mov es,axxor di,dimovsbmovswmovswinc axmov bx, dscmp ax, bxjz @@10mov byte ptr es:[8], 0 ; Aug 24, 1993@@10: cmp byte ptr es:[0], 'Z'jnz @@0mov byte ptr es:[10h], 0jmp @@0@@1:pop espop dsret; -------------------------------------------------------------------------CloseFiles:mov ax, 5 ; Begin handlepush dspush simov cx, 15 ; Max handlesub cx, axinc cxmov bx, ax@@1: push bxpush cxmov ah, 3ehint 21hpop cxpop bxinc bxloop @@1pop sipop dsret; -------------------------------------------------------------------------RestorePort:mov di, 40h ; restore portmov es, dixor di, dimov cx, 8rep movswret; -------------------------------------------------------------------------RestoreLEDs:lodsband al, 11110000b ; LED statusmov ah, es:[17h]and ah, 00001111bor ah, aland ah, 0f0h ; Clear CTRL ALT SHIFTmov es:[17h], ahret; -------------------------------------------------------------------------RestoreEnvStr:lodswpush sipush dipush dspush esmov es, cs:DosEnvmov ds, axxor si, simov di, si@@0: lodsbor al, aljnz @@1 cmp byte ptr ds:[si], 0jz @@2@@1: stosbjmp @@0@@2: stosbstosbpop espop dspop dipop siret; -----------------------------------------------------------------------RestoreVecList:xor ax,axmov di,axmov es,axmov cx,100h@@0: lodswxchg dx, axlodswcmp dx, 'EL'jnz @@1 cmp al, 'I'jnz @@1sub cl, ahpush cxmov cl, ahmov ax, es:[di-4]mov dx, es:[di-2]@@a: stoswxchg ax, dxstoswxchg ax, dxloop @@apop cxor cx, cxjz @@9jmp @@0@@1:xchg ax, dxstoswxchg ax, dxstoswloop @@0@@9:ret;----------------------------------------------------------------------------RestoreFloppyParam: ; Mr. Lei 2/10/1992push espush axxor ax, axmov es, axmov byte ptr es:[525h], 2pop axpop esret;---------------------------------------------------------------------------RestoreCVTchain:lodswcmp ax, 'VC'jz @@_0call Beepret@@_0:push axpush cxpush es; -----------------------------------------------------------------lodsw ; DPBmov di, axlodswmov es, ax@@1: lodsbinc distosbadd di, cs:cvtOfsadd di, 10hmovswmovswles di, es:[di+2]cmp di, -1jnz @@1; -----------------------------------------------------------------lodsw ; DCBmov di, axlodswmov es, axxor ax, axdec axstosw; -----------------------------------------------------------------lodsw ; Device Driver Chainmov di, axlodswmov es, axxor cx, cx@@9: push dimov cl, 5rep movswpop diles di, es:[di]mov ax, diinc axjnz @@9pop espop cxpop axret; ----------------------------------------------------------------------------RestoreMemoryManager:test cs:Status, XMSbitjz @@1call LoadXMSstatus@@1:test cs:Status, EMSbitjz @@2call LoadEMSstatus@@2:retLoadEMSstatus:lodswcmp ax, 'ME'jz @@_0call Beepret@@_0:lodswmov cx, axxor dx, dx@@_1: push dspush sipush dxpush cx@@0: cmp dx, ds:[si]jz @@1add si, 4loop @@0push cxmov cx, 5@@0: mov ah, 45h ; Deallocate Handle and Memoryint 67hor ah, ahjz @@1loop @@0@@1: pop cx@@1:pop cxpop dxpop sipop dsinc dxcmp dx, 100hjb @@_1shl cx, 1shl cx, 1add si, cxretLoadXMSstatus:lodswcmp ax, 'MX'jz @@_0call Beepret@@_0:lodswmov cx, axjcxz @@5@@1:lodswmov dx, ax@@2: push dxmov ah, 0ah ; freecall dword ptr cs:xms_controlor ax, axpop dxjnz @@4 cmp bl, 0abhjnz @@4push dxmov ah, 0dh ; unlockcall dword ptr cs:xms_controlor ax, axpop dxjmp @@2@@4: loop @@1@@5: retendp; -----------------------------------------------------------------------CloseSpeaker:in al, 61hand al, 0fchout 61h, alret; -----------------------------------------------------------------------RestoreClockSpeed:mov al, 00110110bout 43h, alxor ax, axout 40h, alout 40h, alret; -----------------------------------------------------------------------ResetDisk:xor ax, axxor dx, dxint 13h ; Restore Ainc dxint 13h ; Restore Bmov dl, 80hint 13h ; Restore Cret; --------------------------------------------------------------------------ClosePRN:mov ah, 51h ; Get PSP segint 21hmov es, bxmov ax, es:[16h] ; Prev PSP segcmp ax, bxjnz @@9mov ax, 3e00h ; COMMANDmov bx, 4 int 21h@@9:retInitPRN:mov ax, 3e00hmov bx, 4 ; PRNint 21hmov ax, 3d01hmov dx, offset PRNnamepush cspop dsint 21hretPRNname db 'PRN',0InitMouse: ; 2/16/1993 by Mr. Leipush esxor ax, axmov es, axcmp word ptr es:[33h4+2], 0jz @@0 cmp word ptr es:[33h4], 0jz @@0mov ax, 21hint 33h ; Hook Mouse Interrupt@@0: pop esret; ------------- CMOS CLOCK set to System -----------------------------------UpdateTime:call GetRealTimemov ah, 2dhint 21hretGetRealTime:mov ah,2 int 1Ahmov al,chcall bcdxchgmov ch,almov al,clcall bcdxchgmov cl,almov al,dhcall bcdxchgmov dh,almov dl,0retBCDxchg:push axpush cxmov cl,4shr al,clpop cxmov bl,0Ahmul blpop bxand bl,0Fhadd al,blret; -----------------------------------------------------------------------; Display stringColorPrintStr:lodsbmov bh, al ; colorxor cx, cxmov dx, 014fhmov ax, 0600hint 10hmov ah, 02 ; GotoXY (0, 0)xor dx, dxmov bh, 0 int 10hPrintStr:push cspop dsxor bx, bx@@1: lodsbcmp al, '$'jz @@2or al, aljz @@2mov ah, 0ehint 10hjmp short @@1@@2: mov al, cs:clsStrcolormov cs:clsStr, alret; -----------------------------------------------------------------------Self dw 0clsStrcolor db 17hclsStr db 17h ; Color (White in Blue)db ' RAMinit Version 2.12 (c) 1989-1994 by KingSoft Ltd. Mr. Leijun'db 0dh,0ahdb ' ['ShowCopies db ''db '] Activate...',0ah,0dh,'$'endTSR equ $mcbList equ offset endTSR + 2 + 2vecList equ mcbList + 710 + 2 + 10h + 1 + 400hdevLink equ vecList + 4 + 5 26 + 4 + 10 30h + 4xmsList equ devLink + 2 + MaxHandles 2emsList equ xmsList + 4 + 1024crtMode equ emsList + 2 + 1Dh + 4 + 10htsrLen equ crtMode + 1;; DOS Environment Reserved by RI; --------------------------------------------------; Flag 'XX' 2 bytes; Environment Segment 1 word; Free MCBs <=710 bytes; MCB segment 1 word; MCB 5 bytes; End flag 'MM' 1 word; COM LPT ports 10h bytes; LEDs status 1 bytes; Packed vectors list <=400h bytes; Flag 'CV' 2 bytes; CVT First DPB pointer 4 bytes; DPBs data <=526 bytes; First DCB pointer 4 bytes; Pointer to NUL 4 bytes; All device driver datas <=30h10 bytes; Flag 'XM' 2 bytes; XMS free handle counter 2 bytes; EMS free handle list <=100h4 bytes; Flag 'EM' 2 bytes; EMS free handle counter 2 bytes; EMS free handle list <=1024 bytes; EMS handle 1 word; Number of pages 1 word; Flag '--' 1 word; Equipment List 1 word; CRT 40:49h-66h 1dh bytes; 40:A8h 1 dword; BIOS User Data Area 40:F0--FF 10h bytes; **;main: jmp main0Print Macro StrLea dx, Strcall DisplayStrendmInstMsg db 'RAMinit Version 2.12 'db 'Copyright (c) 1989-1994 by KingSoft Ltd. ',0dh,0ah,'$'Msg0 db 'Already installed !',0dh,0ah,0ahdb 'For Help, type "RI /?". ',0dh,0ah,'$'Msg_0 db 0ah,'Residents a new RAMinit copy [y/n] ? $'Msg_2 db 'OK, RI No.'Msg_RI db '2'db ' residents successful !', 0dh,0ah,'$'Msg1 db 'Activate with: $'KeyMsg db 'Right_Shift$'db 'Left_Shift$ 'KMsg1 db 'Left_Ctrl$ 'db 'Left_Alt$ 'db 'Right_Ctrl$ 'db 'Right_Alt$ 'KMsg2 db 'Ctrl$ 'db 'Alt$ 'db 'Ctrl$ 'db 'Alt$ 'PlusMsg db ' + $'crlf db 0dh,0ah,'$'HelpMsg db 'Programmed by Mr. Leijun Dec 1992', 0dh,0ah,0ahdb 'Usage: RI [options]',0dh,0ah,0ahdb '/H,/? Display this screen',0dh,0ahdb '/CLS Removes all TSR programs after current RI',0dh,0ahdb '/RET Removes TSR programs include current RI',0dh,0ahdb '/NEW Residents a new data copy of current environment',0dh,0ahdb '/ALL Removes all RI copies and all other tsr programs',0dh,0ahdb '/Sxyy.. Define Hotkey x=AuxHotkey yy..=shift status',0dh,0ahdb ' x=auxiliary hotkey (default is "X") ',0dh,0ahdb ' x equ "1" means need AuxHotkey',0dh,0ahdb ' yy..=shift status [CAScas]',0dh,0ahdb ' C: Left Ctrl A: Left Alt S: Left Shift',0dh,0ahdb ' c: Right Ctrl a: Right Alt s: Right Shift',0dh,0ah,0ahdb 'Example: "RI /S1c" means Hotkey is Right_Ctrl+X',0dh,0ahdb ' "RI /S0Cc" means HotKey is Left_Ctrl+Right_Ctrl',0dh,0ahdb ' "RI /CLS" equals simply press hotkey',0dh,0ahdb ' "RI /RET" Removes all TSRs after current RI and this RI',0dh,0ahdb 0ahdb 'Contact me for RAMinit problems: (01)2561155 Call 1997',0dh,0ahdb '$'ErrMsg db 'ERROR: Invalid options !',0dh,0ah,0ah,'$'WinErr db 7, 'Sorry, I cannot work in Windows DOS environment.',0dh,0ah,'$'SetMsg db 7, 'Defines new Hotkey successful !',0dh,0ah,0ah,'$'tsrOK db FalseMain0:cldPrint instMsgcall IsWinDosor ax, axjz @@1Print WinErrmov ax, 4c00hint 21h@@1:call HotKeyValidmov cs:Status, 0call EMS_testcall CmpDosVercall CmpSideKickcall GetMachineIDcall ModifyHotKeyPromptmov ax, 0c0d7hint 2fhmov es, axcmp word ptr es:[101h], 'IE' ; 'LEI'jnz @@0mov cs:Self, ax@@0:call CmdLinecall PrintHotKeyPromptcmp cs:tsrOK, truejz @@2call tsrReplyOK@@2: cmp cs:tsrOK, truejnz @@_2call PrintCopies@@_2:mov word ptr cs:[100h], 'EL'mov byte ptr cs:[102h], 'I'push cspop espush cspop dsstdmov si, offset eofmov cx, eof - offset Heremov di, tsrLenadd di, cxinc cxrep movsbcldmov bx, tsrLenjmp bxHere:mov ax,csmov es,axmov di,offset endTSRmov cs:DataBegin, dimov cs:NextDataSeg, -1mov ax, 'XX'stoswin al, 0a1hmov ah, alin al, 21hpush axmov word ptr cs:old_8259, axxor ax, axout 21h,al ; CLIcall SaveOtherscall SetSelfIntcall BackupVecListcmp cs:Power, truejnz @@20call BackupCVTchaincall BackupMemoryManager@@20:call BackupBiosDatastimov cs:Flag, ' ' ; no busymov cs:StopFlag, 0 ;mov cs:tsrLength, dicall SetDosEnvSegcmp cs:Self, 0jz @@29push cspop dspush cspop escldmov cx, cs:tsrLengthmov si, cs:DataBeginsub cx, simov di, 120hmov cs:DataBegin, direp movsbmov cs:tsrLength, di@@29:pop axout 21h, al ; STImov al, ahout 0a1h, almov dx, cs:tsrLengthinc dxint 27h; ----------------------------------------------------------------------------SetDosEnvSeg:push dspush esmov ax, cs@@10: mov es, axmov ax, es:[16h] ; Get father process psp segmentor ax, axjz @@11mov bx, escmp ax, bxjnz @@10@@11:mov es, word ptr es:[2ch] ; Get father process env segmentmov cs:DosEnv, espop espop dsret; ----------------------------------------------------------------------------SaveOthers:mov ax, cs:[2ch] ; Env Segstoswcall backupMCB ; Current MCBmov ax, 40h ; COM LPT Portmov ds, axmov si, 0hmov cx, 8rep movswmov si, 17h ; LED statuslodsbstosb; call OpenLEDsret; --------------------------------------------------------------------------backupMCB:mov ax, 'ZM'stoswpush dspush esmov ah, 52hint 21h ; Get MCB chain headmov ax, es:[bx-2]pop es@@0: mov ds, axcmp byte ptr ds:[0], 'Z' ; End ?jz @@20 cmp byte ptr ds:[0], 'M' ; Memory control blockjnz @@30 cmp word ptr ds:[3], 0 ; Nul mcbjz @@10 cmp word ptr ds:[1], 0 ; Free MCBjnz @@10call SaveFreeMCB@@10: inc axadd ax, ds:[3]jmp @@0@@20:call SaveFreeMCBcmp ax, 0a000hinc axjnb @@30mov ax, 9fffh ; MS-DOS UMBjmp @@0@@30:cmp ax, 0c000h ; 386MAXja @@90mov ax, 0c020hjmp @@0@@90: ; Error ?pop dsmov ax, 'MM' ; Set MCB flagstoswretSaveFreeMCB:stoswxor si,simovsbmovswmovswret;; push ax; stosw; xor si,si; movsb; movsw; movsw; pop ax; cmp ax, 09fffh; jnb @@3; push ax; push ds; mov ds,ax; cmp byte ptr ds:[0], 'M'; pop ds; pop ax; jnz @@4; mov ax, 09fffh ; MS-DOS UMB; jmp @@0; @@4: cmp ax, 0c000h; ja @@3; mov ax, 0c020h ; 386MAX; jmp @@0;; --------------------------------------------------------------------------OpenLEDs: push ax ; Open all LEDsor al, 070hmov ds:[17h], almov ah, 1 int 16hmov cx, 4 ; Delay@@20: push cxxor cx, cx@@21: loop @@21pop cxloop @@20pop axmov ds:[17h], almov ah, 1 int 16hret; --------------------------------------------------------------------------SetSelfInt:push espush dicmp cs:self, 0jnz @@1push cspop dsmov ax,3509hint 21hmov word ptr cs:oldInt9_addr,bxmov word ptr cs:oldInt9_addr[2],esmov dx,offset NewInt9mov ax,2509hint 21hmov ax,352Fhint 21hmov word ptr cs:oldInt2F_addr,bxmov word ptr cs:oldInt2F_addr[2],esmov dx,offset newInt2Fmov ax,252Fhint 21hmov ax,351Chint 21hmov word ptr cs:oldInt1C_addr,bxmov word ptr cs:oldInt1C_addr[2],esmov dx,offset newInt1Cmov ax,251chint 21hclijmp @@2@@1:mov es, cs:Selfinc es:Copies@@_0: cmp es:NextDataSeg, -1jz @@_1mov es, es:NextDataSegjmp @@_0@@_1: mov es:NextDataSeg, cs@@2:pop dipop esret; -----------------------------------------------------------------------SaveCounter:mov word ptr es:[di], 'EL'mov byte ptr es:[di+2], 'I'mov byte ptr es:[di+3], blxor bx, bxadd di, 4ret; -----------------------------------------------------------------------DisplayStr: push cspop dsmov ah, 9 int 21hret; -----------------------------------------------------------------------CmdLine:push cspop dsxor ax, axmov si, 80hlodsbor al, aljnz @@1ret@@1:mov cx, axdec axpush axpush si@@0: lodsbcmp al, ' 'jz @@0 cmp al, '/'jnz @@2lodsbcmp al, 'S'jz @@_2cmp al, 's'jnz @@2@@_2:call SetHotKeyPrint SetMsgmov ax, 4c00hint 21h@@2:pop sipop axpush axpush si@@_3: lodsbcmp al, 'A'jb @@3 cmp al, 'Z'ja @@3add byte ptr ds:[si-1],20h ; DownCase@@3: loop @@_3pop sipop cxadd si, cxlodsbcmp al, 's' ; CLSjnz @@5 cmp word ptr ds:[si-3], 'lc'jnz @@5 cmp cs:Self, 0jz @Errmov ax, 0c0d7h+1 int 2fh@@5: cmp al, 'h' ; HELPjz @helpcmp al, '?'jz @helpcmp al, 't' ; RETjnz @@6 cmp word ptr ds:[si-3], 'er'jnz @@6@@7:cmp cs:Self, 0jz @Errmov ax, 0c0d7h+2 int 2fh@@6: cmp al, 'w' ; NEWjnz @@8 cmp word ptr ds:[si-3], 'en'jnz @@8mov cs:tsrOK, trueret@@8:cmp al, 'l' ; ALLjnz @@9 cmp word ptr ds:[si-3], 'la'jnz @@9mov ax, 0c0d7h+3 int 2fh@@9:cmp al, ' 'jnz @Errret@Err:Print ErrMsg@help:Print HelpMsgmov ax, 4c00hint 21h;---------------------------------------------------------------------------tsrReplyOK:cmp cs:Self, 0jz @@1Print Msg0push esmov ax, cs:Self@@_10: mov es, axmov ax, es:NextDataSegcmp ax, -1jnz @@_10mov ax, es@@_0: push axdec axmov es, axmov bx, es:[3]pop axadd ax, bxinc axmov es, axcmp word ptr es:[0], 'OC'jz @@_0mov bx, cscmp ax, bxpop esjz @@2Print Msg_0mov ah, 1 int 21hpush axPrint crlfpop axcmp al, 'y'jz @@3 cmp al, 'Y'jz @@3@@2: ; Print Msg_1mov ax, 4c01hint 21h@@3:@@1: mov cs:tsrOK, trueretPrintCopies:cmp cs:Self, 0jz @@1push es ; Added -by- Mr. Leimov es, cs:Self ; Aug 24, 1993mov al, es:Copiesinc al ; Total RI copiespush ax ; Set es = current mcbmov ax, csdec axmov es, axpop axmov cx, 5 ; Search end of file namemov bx, 8@@10: inc bxcmp byte ptr es:[bx], 20hjz @@20 cmp byte ptr es:[bx], 0ffhjz @@20 cmp byte ptr es:[bx], 00hjz @@20loop @@10@@20: ; Set current RI nomov byte ptr es:[bx], ':' ; "RI:2"mov byte ptr es:[bx+1], alcmp bx, 8+7jnb @@30mov byte ptr es:[bx+2], 0@@30:pop esmov cs:Msg_RI, alPrint Msg_2@@1: ret;---------------------------------------------------------------------------; Backup Interrupt Vector List;BackupVecList:push dspush cspop esxor si,si ; Vectorsmov ds,simovswmovswxor bx, bxmov cx,00ffh@@0: lodswxchg dx, axlodswcmp ax, es:[di-2]jnz @@1 cmp dx, es:[di-4]jz @@2@@1: or bx, bxjz @@3call SaveCounter@@3: xchg dx, axstoswxchg dx, axstoswloop @@0jmp @@4@@2: inc bxloop @@0call SaveCounter@@4:pop dsret;;-----------------------------------------------------------------------------BackupCVTchain:mov ax, 'VC'stoswpush axpush bxpush cxpush dspush esmov ah, 52hint 21h ; ES:BX -- DOS table as described below; --------------------------------------------------------------------push es ; DPB chainspush bxlds si, es:[bx]push cspop esmov ax, sistoswmov ax, dsstoswmov bx, cs:cvtOfsxor cx, cx@@1: mov al, ds:[si+1]stosbmov ax, ds:[si+bx+12h]stoswmov ax, ds:[si+bx+14h]stoswinc cxlds si, ds:[si+bx+18h]cmp si, -1jnz @@1; mov ax, 5; mul cl; add ax, 4; add cs:tsrLength, axpop bxpop es; --------------------------------------------------------------------push es ; DCB file control blockspush bxles bx, es:[bx+4]@@11: cmp word ptr es:[bx], -1jz @@10les bx, es:[bx]jmp @@11@@10:mov ax, esxchg ax, bxpush cspop esstoswxchg ax, bxstoswpop bxpop es; add cs:tsrLength, 4; ---------------------------------------------------------------------push es ; Device Driver Chainspop dsadd bx, 22hmov si, bx ; NULpop esmov ax, sistoswmov ax, dsstoswxor cx, cxxor bx, bx@@9: push simov cl, 5rep movswinc bxpop silds si, ds:[si]mov ax, siinc axjnz @@9pop dspop cxpop bxpop axret; ----------------------------------------------------------------------------BackupBiosData:mov ax, '--'stoswpush dspush simov si, 40hmov ds, simov si, 10hmovswmov si, 0a8hmovswmovswmov si, 49hmov cx, 1dhrep movsbmov si, 0f0hmov cx, 8rep movswpop sipop dsret; ---------------------------------------------------------------------------BackupMemoryManager:push cspop espush dspush escall SaveXMSstatuscall SaveEMSstatuspop espop dsret;---------------------------------------------------------------------SaveEMSstatus:test cs:status, EMSbitjnz @@1ret@@1:mov ax, 'ME'stoswinc diinc dipush dimov ah, 4dhint 67hpop dimov es:[di-2], bxshl bx, 1shl bx, 1add di, bxret; -------------------------------------------------------------------SaveXMSstatus:call XMS_testtest cs:status, XMSbitjnz @@1ret@@1:mov ax, 'MX'stoswmov dx, 1call XMS_allocjnz @@_1xor cx, cx ; XMS alloc failurestoswret@@_1:push dxsub dx, MaxHandles 10@@2:push dxcall XMS_Lockpop dxjnz @@3 cmp bl, 0a2hjnz @@4add dx, 10jmp @@2@@3: push dxcall XMS_unlockpop dx@@4:mov cs:handle_begin, dxpop dxpush dxcall XMS_bstatxor cx, cxmov cl, blinc cxpop dxcall XMS_Freemov dx, cs:Handle_beginpush cxpush cspop esmov ax, cxstosw@@5: push dxcall XMS_Lockpop dxjnz @@6 cmp bl, 0a2h ; Handle invalidjz @@7@@6: call XMS_unlockadd dx, 10jmp @@5@@7: mov ax, dxstoswadd dx, 10loop @@5pop cxret; ------------------------------------------------------------------XMS_test:push esmov ax, 4300hint 2fhcmp al, 80hjnz @@9mov ax, 4310hint 2fhmov cs:XMS_control, bxmov cs:XMS_control[2], esor cs:Status, XMSbit@@9:pop esretXMS_stat:mov ah, 0call dword ptr cs:xms_controlmov hma_exist, dlrethma_exist db 0XMS_alloc:mov ah, 9call dword ptr cs:xms_controlor ax, axretXMS_lock:mov ah, 0chcall dword ptr cs:xms_controlor ax, axretXMS_unlock:mov ah, 0dhcall dword ptr cs:xms_controlor ax, axretXMS_bstat:mov ah, 0ehcall dword ptr cs:xms_controlor ax, axretXMS_free:mov ah, 0ahcall dword ptr cs:xms_controlor ax, axret; ----------------------------------------------------------------------------EMS_test:push cspop dsmov dx, offset EMMnamemov ax, 3d00hint 21hjc @@2mov bx, axmov ah, 3ehint 21hor cs:Status, EMSbit@@2:retEMMname db 'EMMXXXX0',0; -----------------------------------------------------------------------------SetHotKey:xor bx, bxlodsbpush ax@@1: lodsbcmp al, 0dhjz @@9 cmp al, 'C'jnz @@2or bl, LeftCtrljmp @@1@@2:cmp al, 'c'jnz @@3or bl, RightCtrljmp @@1@@3:cmp al, 'A'jnz @@4or bl, LeftAltjmp @@1@@4:cmp al, 'a'jnz @@5or bl, RightAltjmp @@1@@5:cmp al, 'S'jnz @@6or bl, LeftShiftjmp @@1@@6:cmp al, 's'jnz @@7or bl, RightShiftjmp @@1@@7: pop axjmp @Err@@9:mov cs:HotKey, blpop axmov cs:AuxHotKey, 2dh ; 'X' scan keycmp al, '1'jz @@29mov cs:AuxHotKey, 0@@29:cmp cs:Self, 0jz @@30push esmov es, cs:Selfmov es:HotKey, blmov bl, cs:AuxHotKeymov es:AuxHotKey, blpop es@@30:call GetRunFileNamemov ax, 3d02hint 21hjc @@10push cspop dsmov bx, axmov cx, 4mov dx, 100hmov ah, 40hint 21hjc @@10mov ax, 4200hxor cx, cxmov dx, 17hint 21hjc @@10mov cx, 1mov dx, offset AuxHotKeymov ah, 40hint 21hjc @@10mov ah, 3ehint 21h@@10:ret; -----------------------------------------------------------------------GetRunFileName:; Return:; DS:DX Pointer of this run file name ASCIIZ stringpush axpush bxpush cxpush sipush dipush espush cspop esmov ax, es:[2ch]mov es, axxor di, dimov cx, 1000hxor al, al@@1: repnz scasbcmp es:[di], alloopnz @@1mov dx, diadd dx, 3push espop dspop espop dipop sipop cxpop bxpop axret; ---------------------------------------------------------------------------GetMachineID:push esmov KBD102,Truemov ax,40hmov es,axtest byte ptr es:[96h], 00010000bjnz @@1mov Kbd102,False@@1:xor ax,axdec axmov es,axmov al,es:[0eh]mov cs:MachineID, alpop esret; ---------------------------------------------------------------------------ModifyHotKeyPrompt:cmp cs:Kbd102, Truejz @@9push cspop espush cspop dsmov cx, 124mov si, offset KMsg2mov di, offset KMsg1rep movsb@@9: cmp cs:MachineID, 0fchjna @@10mov cs:clsStrcolor, 70h ; Monomov cs:clsStr, 70h@@10:ret; ---------------------------------------------------------------------------PrintHotKeyPrompt:Print Msg1mov al, cs:HotKeymov ah, alshr al, 1shr al, 1and ax, 33chor al, ahmov dx, offset KeyMsg@@40:or ax, ax ; Mr. Lei 4/25/1993jz @@_42shr al, 1push axjnc @@41push axcall ColorDisplayStr; mov ah, 9; int 21hpop axor al, aljz @@42push dxmov dx, offset PlusMsgcall ColorDisplayStr; Print PlusMsgpop dx@@41: add dx, 12pop axjmp @@40@@42: pop ax@@_42: cmp cs:AuxHotKey, 0jz @@43 cmp cs:HotKey, 0 ; Mr. Leijz @@_43mov dx, offset PlusMsgcall ColorDisplayStr; Print PlusMsg@@_43: mov dx, offset AuxHotKeyNamecall ColorDisplayStr; Print AuxHotKeyName@@43:Print crlfretColorDisplayStr:push bxpush cxpush dxpush simov bl, 0fhmov si, dxxor bh, bhmov cx, 1@@1: lodsbcmp al, '$'jz @@2or al, aljz @@2push cxmov ah, 09hint 10hmov ah, 3 int 10hinc dlmov ah, 2 int 10hpop cxjmp short @@1@@2:pop sipop dxpop cxpop bxret; ---------------------------------------------------------------------------CmpSideKick:xor ax, axmov es, axles bx, es:[20h]cmp word ptr es:[bx-4], 4b53hjnz @@1 cmp word ptr es:[bx-2], 4942hjz @@2@@1: mov es, axles bx, es:[94h]cmp word ptr es:[bx-2], 4b53hjz @@2ret@@2: or cs:Status, SKbitret; ---------------------------------------------------------------------------CmpDosVer: mov ah, 30hint 21hcmp al, 3jb @@1 cmp al, 3jna @@2mov cs:cvtOfs, 1ret@@2: mov cs:cvtOfs, 0ret@@1: Print DosVerErrmov ax, 4cffhint 21hDosVerErr db 'Sorry, DOS version too lower !',0dh,0ah,'$'HotKeyValid:cmp cs:HotKey, 0jnz @@_1cmp cs:AuxHotKey, 0jnz @@_1Print HotKeyErrmov ax, 4cfehint 21h@@_1: retHotKeyErr db 'Sorry, please setup hotkey again. ',0dh,0ah,'$'eof:endsend Start; ------------- The End ! ---------------------------------------------------
电脑是雷军人生中的最爱,电脑的世界对于雷军而言实在太美妙。雷军觉得,电脑的世界没有人那么复杂。只要你程序写得好,就可以和电脑处好关系,也可以指挥电脑,做一些你想做的事情。
雷军认为,电脑的世界很大,程序员都是活在自己的王国里。在这里,程序员可以主宰一切。正是因为热爱,所以雷军一干就是10年。
雷军心爱的代码被新程序员格式化
对于雷军来说,虽然现在他更加 专注在产品开发以及管理方面,但是曾经他对心爱的代码视为珍宝。之前来了一位技术支持人员,而这位技术人员进公司的第一份工作,就是帮雷军整理他的硬盘。
一位理解错误,原本只要覆盖式的安装系统就可以的事情,这位程序员却把雷军的硬盘格式化了。这些代码是雷军多年来积累下来,而且也是他的最爱,就这样成为 炮灰,相信雷军非常难过。
编程是技术,也是一种艺术
雷军认为,编程的工作同石匠的工作相类似,即是技术活,也是体力活,而编写优秀的软件,算是一件比较难得事。
编程是一门技术活,因此才有可能大规模的进行,进而才会有软件工程。此外,因为编程是一种艺术,因此有很多好的产品。
雷军关爱下属 亲自指导女程序员
因为自己是程序员出身,雷军在技术方面的水平不用质疑。雷军对于下面的程序员,也是很关照的。
早前,雷军亲自指导美女程序员的一张图片爆红。从曝光的图片来看,这名由雷总亲自指导的女程序员,竟是位前端开发工程师。雷总下基层,还亲自指导码农,小米不强大都说不过去。
当然,上面的只是雷军生活中的一个小插曲。曾经,雷军认为自己会干一辈子的编程。但是现在,雷军作为小米董事长,身价已经不能用数字来衡量了。他接触程序的机会,相信是少之又少,因为下面有很多程序员帮他干活。
50岁刘强东,连冲两个IPO
记者|何己派
编辑|江昱玢
刘强东“再造一个京东”的夙愿,又多了两架马车。
3月30日晚,京东集团连发两则公告,拟分拆旗下京东产发、京东工业赴港独立上市。
分拆完成后,京东将继续间接持有京东产发、京东工业50%以上的股权,两家公司仍是京东子公司。
目前,京东系共有5家上市公司,分别为京东集团、达达、京东健康、京东物流以及德邦股份。
加上去年底传闻重启IPO的京东科技,以及这次的产发、工业,50岁的刘强东,或很快集齐8家上市公司。
化整为零
子公司分拆上市的消息一出,3月31日,京东股价一度涨逾8%,当日收盘价172港元/股,总市值5394亿港元。
“分拆出来的子公司一般会得到更好的估值,有助于提升上市母公司的市值。”
深度科技研究院院长张孝荣向《21CBR》表示,业务分拆形成新的上市公司,信息更加透明,有助于投资人理解。
分拆大计,刘强东构想已久。
京东版图不断扩大,截至2022年底,员工规模达到55万人。公司管理难度几何级增长,许多业务动作极易迟缓、变形。
集团内部涉及组织变革的相关会议,经常讨论一个问题:
中国每几千人就有一个在京东工作,公司未来的规模还将持续扩大,京东要变成一个什么样的组织?
从子公司的独立看,刘强东化整为零,可以追溯到2017年。
那一年,京东物流、京东工业相继拆分,成为独立业务单位;1年后,京东产发独立运营;2019年,拆分健康业务并启动融资。
刘挑选的标的,均是潜力业务,它们专注所在赛道,业务外部化,短短几年快速走向成熟。
“组织变革可进一步提升组织敏捷性,业务板块和公司更快速有效进行决策,响应市场变化,也利于让具备条件的业务板块和公司独立融资及上市。”天使投资人、互联网专家郭涛向《21CBR》表示。
过程中,刘强东逐渐从具体业务中抽身,把权力交出去。
京东产发、京东工业招股书披露,刘强东为两家子公司的非执行董事,提供战略建议,不担任行政职务,也不参与日常管理及运营。
刘指派的掌舵手,均是追随他10年左右的老京东人。
40岁的胡伟,2010年加入京东,曾在京东物流多个职位历练,物流仓储领域经验丰富,2019年开始担任京东产发CEO。
46岁的宋春正,2013年加入京东,是京东内部的“连续创业者”,主导孵化京东企业业务,2017年着手工业业务的内部孵化。
去年,二人年薪均超1500万元。
(京东产发招股书截图)
管理上放权,刘强东仍牢牢把着股权命脉,控制京东总表决权的约73.9%。
嫡系发力
京东工业和京东产发,做的To B方向,大众知名度不比京东物流等,但业务成长速度很快。
京东产发,持有京东集团旗下自建的全部仓储物流设施项目,开发的典型项目是“亚洲一号”超大型智能仓库。
其主要面向行业,提供现代化标准仓库、一体化智能产业园、数据中心、光伏新能源等基础设施建设与运营的综合解决方案。
服务对象包括物流服务商、制造商、电商平台和零售商等,京东物流、宝马、本来生活、永辉超市等均在客户之列。
2022年,京东产发总营收23.2亿元,同比猛增190.3%。
受期内每年录得已完工与在建投资性房地产公允价值变动收益影响,京东产发的净利润高于收入。
经调整净利润,从2020年的28.8亿元,提高到2022年的31.1亿元。
2022年京东产发的毛利率为70.6%。
其资产管理规模总额近万亿,按建筑面积计,现代化基础设施供应商中,排名亚洲第三,中国第二。
京东工业,做的是工业供应链生意,为企业客户提供跨场景、跨品类的工业品及技术与服务。毛利率较低,2022年为18%。
去年交易额为223亿元,按此计算,它是中国工业供应链技术与服务市场最大的服务提供商。
平台上SKU约4250万个,链接约3万家制造商、分销商及代理商,2022年服务6900个重点企业客户和超过260万家中小企业。
京东工业2022年收入141亿元,近三年复合增长率为44.2%。
综合来看,京东产发和京东工业有共性,都是专业性强的慢赛道。
京东产发在物流产业链上游,需要巨额的前期投资,周期长,且相较住宅地产回报较低。
京东工业所处的工业供应链市场,复杂且高度分散,巨头难觅,存在大量非标化商品,采购透明度低。京东做到国内第一,市场份额不过4.1%。
将这两块业务分拆上市,有树立独立形象的用意,也有资金的考量。
“由于京东工业为独立上市实体,本公司可完全专注并将财务资源调配于京东集团业务的发展,而无需考虑京东工业的资金需求。”京东集团在公告中称。
2022年,京东总收入突破万亿。
对刘强东而言,他批量打造上市企业的无限宇宙,才刚刚起了个头。
马云用20分钟的《功守道》告诉刘强东:不止章泽天跟娱乐圈关系好
看了马云主演的《功守道》,有神评论说:“天下武功,唯钱不破”。
确实是如此,短短20分钟的《功守道》就有娱乐圈的大佬级别出来给马云当配角,战狼吴京甄子丹,李连杰邹市明甘愿做马云的手下败将,黄晓明,佟大为,李晨甘做甲乙丙,这种对娱乐圈的掌控才叫真高级玩家。
而刘强东的妻子章泽天跟娱乐圈的关系也很好,不仅认识超模和当红花旦,还市场出席各种时尚秀场。可马云的这部电影还真不是章泽天走几个秀场就能比得了的,刘强东需要再加把劲了!
刘强东涉嫌性犯罪案释疑:零保释金不意味罪轻,现在就可回国
国内电商巨头京东集团创始人刘强东,在美国卷入指控事件进一步清晰。
9月2日,澎湃新闻记者在美国明尼苏达州亨内平县郡县治安官办公室官网查询到的记录显示,当地时间8月31日23时32分,一名叫“Liu Qiang Dong”的人士因“涉嫌性犯罪”行为被该州警方逮捕,并在9月1日16时05分释放。从字面上看,此案目前的状态是:“释放等待控告”(released pending complaint)。
对此,美国明尼苏达州泓发律师事务所律师周东发对澎湃新闻记者解释,刘强东现在的情况是“释放等待指控”,指警方现在还在调查,还没有足够证据进行指控或不指控,所以释放了他,“他还是自由人,所以刘强东可以回国。”
明尼阿波利斯警察局发言人艾德(John Elder)也对中文媒体表示,刘强东目前可以离开明尼苏达州,也可以离开美国,但并不代表他是无罪的。
下面是澎湃新闻记者根据多方信息,试图回应外界对于该案关注的诸多疑点。
美联社称,由Hennepin县警长办公室提供的照片显示,中国亿万富豪刘强东因涉嫌性犯罪在明尼阿波利斯被捕。
1,Liu,Qiang Dong=刘强东?
明尼苏达州亨内平县郡县治安官办公室官网查询到的记录显示,当地时间8月31日(周五)23时32分,一名叫“Liu Qiang Dong”的人士因“涉嫌性犯罪”行为被该州警方逮捕,并在9月1日16时05分释放。
明尼苏达州亨内平县治安官办公室在接受澎湃新闻记者采访时表示,它们现在没有介入这起案件,仅知道叫这个名字的人在该监狱登记进入过。明尼阿波利斯警察局是此案的调查部门。
虽然美国警方公布的信息未公布中文姓名信息,但各方提供的信息均指向了京东集团创始人刘强东。比如出生日期。明尼苏达警方披露的“Liu Qiang Dong”生日为1973年3月10日,全国工商联网站披露的信息显示,刘强东,汉族,1973年3月生,江苏宿迁人。现任中国民间商会副会长,京东集团董事局主席兼首席执行官。
京东集团9月2日下午的回应中,也默认了这一点。该声明称,刘强东在美国商务活动期间,遭遇到了失实指控,经过当地警方调查,未发现有任何不当行为。
美联社当地时间9月2日发布的一张“拘留照”进一步确认了这一点。这张由Hennepin县警长办公室提供的照片显示,中国亿万富豪刘强东因涉嫌性犯罪在明尼阿波利斯被捕,刘强东也被称为为Richard Liu,是京东的创始人。
2, 被捕理由是什么?
明尼苏达州给出的逮捕理由是:性犯罪行为。警方没有更多的案件细节。不过,警方在公布的文件中称,有“合理依据”(Probable Cause)逮捕刘强东。根据美国相关法律,在这种情况下,警方可以不经法院签发逮捕令而当场实施逮捕。
第一财经援引明尼阿波利斯警察局发言人艾德(John Elder)的说法称,“合理证据”是指警方在接到相关举报后,进行初始的调查中发现“有合理的证据”显示,这个人有可能从事了“或大或小”的犯罪行为,并且,这样的证据让警方认为,“有必要进行逮捕收押和审问。”
3,为何隔天即被释放?
据周东发对澎湃新闻记者介绍,根据警方记录,刘强东现在的情况是“释放等待指控”,指警方现在还在调查,还没有足够证据进行指控或不指控,所以释放了他。
周东发认为,警方没有起诉的原因有很多,可能是没有完成调查,可能是情节难判定。
据周东发介绍,这种现象在明尼苏达州是常见的现象,最多只能关36个小时。只关押了十几个小时,可能因素很多,最重要的因素还是警察在调查时掌握的资料不足。其他还有可能与周末有关,周一又是劳动节(Labor Day)。按照明州的规定,周末、包括联邦节日是不算关押时间的,如果把礼拜六、礼拜天、礼拜一都算上,时间可能很长,所以可能也考虑到这个因素。
3,为何是零保释金?
明尼苏达州亨内平县郡县治安官办公室官网显示,刘强东被释放,并未缴纳保释金。官网显示:保释金为0。对此,周东发认为,因为警方、检方还没有对刘强东提起指控,他还没有被正式指控,所以保释金为零。
4,零保释金是否意味着罪行较轻?
据周东发律师对澎湃新闻记者介绍,刘强东被指控的“性犯罪行为”在明尼苏达州分为五级,一到三级是重罪,第四、第五级是轻罪或重轻罪,不同等级罪行的法律刑罚不同。所谓四、五或三级很难定,但性犯罪这种刑罚总体比较重。
而且,周东发强调,不能说零保释金就是轻罪,因为零保释金只能说明警方没有对他展开起诉。
5,刘强东是否可以回国?
9月2日,侨报曾援引明尼阿波利斯警察局发言人的说法称,警方会和检察部门配合调查此事,在调查期间,他(刘强东)可以自由出入境。一旦调查有了结果,若发现有问题,才会联系当地有关单位请他回来。
华尔街日报的报道同样明确,明尼阿波利斯警察局拒绝评论刘先生的行踪。 警方说,只要他愿意,刘先生可以离开该地区和国家。
周东发也表示,保释金为零,“意味着没有其他条件,他还是自由人,所以刘强东可以回国。”
6,受害人是谁?
迄今为止,相关各方均未披露受害人信息。
有明尼苏达当地律师提到,曾有明尼苏达大学校友会人士托人联系到他,不过因为时间太晚,他没有接。
有网络传言称,涉嫌被的女性为明尼苏达大学的中国女留学生。不过这一信息未获权威信源确认。
对于这起传言中的性犯罪中的受害者身份,周东发律师表示,尚不清楚,警方仍在调查。
9月2日,曾有网友发布微博称,刘强东现身为期一周的明尼苏达卡尔森商学院课程。
7,刘强东的商务行程
关于刘强东的这次美国行,京东方面并未披露更为详细的信息。
有网友9月2日上午发布微博称,刘强东参加了为期一周的明尼苏达卡尔森商学院的课程,并晒出了刘强东个人发言的照片。不过该条微博目前已被删除。
针对网上传言,京东官方于9月2日下午发布声明表示:“刘强东先生在美国商务活动期间,遭遇到了失实指控,经过当地警方调查,未发现有任何不当行为,他将按照原计划继续其行程。”
当被问及刘强东此次美国行的行程、何时返回中国时,京东方面对澎湃新闻记者表示,暂时没有这方面的信息。
免责声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件举报,一经查实,本站将立刻删除。