安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

原来汇编中的循环是这么玩儿的

3月3日 栀璃鸢投稿
  汇编系列其实也在一直更新,只不过更新的频率会挺慢的由于白天一直忙于工作,空闲时间还要看书、学习各种技术栈,早上也要抽时间早期健身,晚上回家还要陪家人学习,时间安排的满满当当,所以我就慢慢写,各位读者也别太着急,我其实真想再分一个自己出来。
  之前的文章中介绍过〔0〕表示的是内存单元,它一般存储在ds寄存器中,偏移地址为0。比如下面的指令movax,〔0〕
  就是将一个内存单元的内容送入ax,这个内存单元的长度为2个字节,正好存放一个字型数据,偏移地址为0,段地址在ds中。这种寻址方式相当于是直接寻址。
  比如下面代码moval,〔0〕
  就是将一个内存单元的地址送入al中,这个内存单元的长度是1字节,存放字节型数据,偏移地址位0,段地址在ds中。
  所以要描述一个完整的一个内存单元,应该需要两种信息:即内存单元的地址和内存单元的长度。
  比如我们要读取一个10000H的数据,你可能会需要下面这段代码。movbx,10000Hmovds,bxmoval,〔0〕
  上面这三条指令就把10000H读取到了al中。
  但是表示内存地址的方式不只有直接指定其内存地址,还可以用一种间接寻址的方式,比如〔bx〕,它表示的是一种寄存器间接寻址,也是一种偏移地址,同样的,比如我们要读取一个10000H的数据,使用〔bx〕这种方式的代码如下(假设ds1000H)movbx,1movax,〔bx〕
  这样计算机就会寻找段地址为1000H,偏移地址为0001H的数据放入到ax中。
  它的中文解释就是把〔bx〕指向的地址中的内容,送入ax寄存器中。
  比如下面这段代码movax,〔bx〕
  它表示的就是将偏移地址为bx的数据,送入到ax中,送入的内存单元地址是2个字节,存放字型数据。
  又比如下面这段代码moval,〔bx〕
  它表示的就是将偏移地址为bx的数据,送入到al中,送入的内存单元地址是1个字节,存放字节型数据。
  〔bx〕这种间接寻址的好处就是每次偏移地址不是固定的,这为我们接下来的循环指令奠定了基础。
  为了更方便的描述后面,我们后面使用()来表示一个寄存器或者内存单元中的内容。这里需要注意一下,()内的表示的元素一般有三种类型:
  寄存器名,比如(ax)就表示ax中的内容,(al)就表示al中的内容。段寄存器名,比如(ds)就表示段寄存器ds中的内容。内存单元的物理地址,比如((ds)16(bx)),一个20位的数据。
  我们知道,寄存器存储的数据类型有两种,字型和字节型,字型数据一般用ax这类寄存器来存储,字节型数据一般用ah、al这种寄存器来存储。
  同样的,()内的数据类型也有两种,字型和字节型。比如(al)、(bl)、(cl)这种表示的数据就是字节型,而(ax)、(bx)、(cx)表示的数据就是字型。
  在了解完上述的这些知识点后,我们就可以来正式看一下〔bx〕了。〔BX〕
  再来啰嗦一下〔bx〕的寻址方式,比如下面代码movax,〔bx〕
  bx中存放的数据作为一个偏移地址,这里用EA表示(没有其他意思,只是单纯地表示偏移地址),段地址在ds中,用SA表示(同EA的解释),将SA:EA处的数据送入ax中,即(ax)((ds)16(bx))。
  可以将内存单元送入寄存器中,也可以将寄存器的数据送入到内存单元中,如下代码所示mov〔bx〕,ax
  就是将ax中的数据送入到SA:EA处,即((ds)16(bx))(ax)。
  为了让大家加深对〔bx〕的认识,我们通过一些汇编指令来认识一下程序的执行过程,代码如下movax,2000Hmovds,axmovbx,1000Hmovax,〔bx〕incbxincbxmov〔bx〕,axincbxincbxmov〔bx〕,axincbxmov〔bx〕,alincbxmov〔bx〕,al
  下面我们就按照每一行指令来分析一下
  首先,movax,2000H就是将2000送入ax中,movds,ax就是将设置段地址为2000H,movbx,1000H就是将1000送入bx中,movax,〔bx〕就是将2000:1000处的地址送入到ax中(因为段基址为2000,偏移地址dx为1000),2000H:1000H处的指令是00be,所以ax00BEH,存储字型数据,示意图如下
  incbx就是将寄存器bx的值加1,此处有两条inc指令,所以执行完成后bx1002H,此处段基址:偏移地址为2000H:1002H。
  然后下面(第七行指令)mov〔bx〕,ax就是将ax中的数据送入到〔bx〕中,也就是1002H处,指令执行后,2000:1002单元的内容为BE,2000:1003单元的内容为00,存放字型数据,执行完成后的示意图如下
  继续执行第8、9行的指令,incbx,执行完成后bx1004H,然后执行第10行指令mov〔bx〕,ax,指令执行前:ds2000H,bx1004H,mov〔bx〕,ax相当于是把ax中的数据送到2000:1004处,指令执行完成后,2000:1004的单元内容为BE,2000:1005的单元内容为00,如下示意图所示
  接下来执行第11行指令,incbx,执行完成后bx1005H,mov〔bx〕,al是把al中的数据送入内存2000:1005处,指令执行完成后,2000:1005处的单元内容为BE,如下示意图所示
  继续执行指令,第13、14行指令和11、12行指令一样,它的意思就是将bx的值加一之后,将al的值送入到指定地址处,执行完成后的ds2000H,bx1006H,所以2000:1006处的内容是BE(al存储的数据),示意图如下
  想必大家跟完上面的流程后,应该对〔bx〕这个间接寻址方式有了比较深刻的认识。
  下面想个问题,使用汇编编程计算22,并将结果存储在ax寄存器中。
  这个思路还是比较简单的,直接将2放在ax寄存器中,然后执行ax的add操作就可以了,下面是汇编代码assumecs:codesgcodesgsegmentmovax,2addax,axmovax,4c00hint21hcodesgendsend
  上面这段代码中的计算量还比较低,但是如果要让你计算222222222呢,你难道要写n个addax,ax吗?assumecs:codesgcodesgsegmentmovax,2addax,axaddax,axaddax,axaddax,axmovax,4c00hint21hcodesgendsend
  这就很繁琐啊,所以不能这么玩,那该怎么搞呢?这里就需要一种能够循环之星addax,ax的指令了,这个指令就是Loop。Loop指令
  Loop指令能够循环判断是否执行指定的指令,它的执行流程就相当于我们Java中的for循环。
  我们先来使用Loop改写一下上面n个2相乘的代码,然后再讲解一下Loop的使用。assumecs:codesgcodesgsegmentmovax,2movcx,8s:addax,axloopsmovax,4c00hint21hcodesgendsend
  可以看到,我们使用8个2相乘的代码被优化的这么简单,这就是loop指令的精髓所在。
  其实关键代码就是三条指令,即movcx,8s:addax,axloops
  翻译过来的意思就是将8放在cx中,然后给addax,ax处设置一个标号,然后执行s循环。
  loop指令的格式是:loop标号,CPU执行loop指令的时候,要进行两步操作,第一步:(cx)(cx)1,第二步:判断cx的值,不为0则转至标号(上面代码是s)处继续执行指令,如果为0则向下执行(上面代码中乡下继续执行就是movax,4c00h)。上面代码中,我们把8送入了cx中,也就是说,cx中存储的就是执行次数。
  下面我们详细介绍一下上面这段程序的执行过程,从中体会一下cx和loops是如何配合实现循环的。
  (1)执行cx,8,设置cx8
  (2)执行addax,ax(第1次)
  (3)执行loops将cx的值1,此时(cx)7,(cx)!0,所以转至s处
  (4)执行addax,ax(第2次)
  (5)执行loops将cx的值1,此时(cx)6,(cx)!0,所以转至s处
  (6)执行addax,ax(第3次)
  (7)执行loops将cx的值1,此时(cx)5,(cx)!0,所以转至s处
  (8)执行addax,ax(第4次)
  (9)执行loops将cx的值1,此时(cx)4,(cx)!0,所以转至s处
  (10)执行addax,ax(第5次)
  (11)执行loops将cx的值1,此时(cx)3,(cx)!0,所以转至s处
  (12)执行addax,ax(第6次)
  (13)执行loops将cx的值1,此时(cx)2,(cx)!0,所以转至s处
  (14)执行addax,ax(第7次)
  (15)执行loops将cx的值1,此时(cx)1,(cx)!0,所以转至s处
  (16)执行addax,ax(第8次)
  (15)执行loops将cx的值1,此时(cx)0,(cx)0,所以转至s处
  (16)执行movax,4c00h(循环结束)
  从上面这个过程中,我们可以总结处用cx和loop指令相配合实现循环功能的3点注意事项:在cx中存放循环次数。loop指令中的标号所标识的地址要在前面要循环执行的程序段,要写在标号和loop指令的中间。
  所以综上所述,使用Loop和cx相配合实现的循环功能的结构如下:movcx,循环次数s:循环执行的程序段loops
  比如我们想用Loop循环计算出123456这个值,就可以使用这种方式assumecs:codesgcodesgsegmentmovax,0movcx,456s:addax,123loopsmovax,4c00hint21hcodesgendsend
  如果文章对你有帮助,小伙伴们三连走起呀!
投诉 评论 转载

北京2连败真内讧曝光,圈内人爆料内讧剧情,新人上位老将低迷79100,继上一轮不敌辽宁男篮后北京首钢又输给了另一支东北球队吉林男篮,相比辽宁队,吉林队虽然拥有琼斯这样的顶级外援,但整体实力其实不及北京首钢,否则双方的胜场差距也不会多达……一个痛快止泻的经典方剂,常被用治肠炎结肠炎肠易激综合征等这是一个常被用于治急性肠炎、慢性结肠炎、肠易激综合征等属于肝旺脾虚者的方剂。脾主升清运化,胃主降浊消化,肠道将漏余的精微再次传化给脾,由它运行至需要的地方。故若脾虚,水谷……人生半百回头望第一个7年怕黑的童年第一个7年关键词是:怕黑与我的妈妈。父亲长期在外地工作,而我的母亲(我习惯叫老妈),她整天都是辛勤的耕耘在田地里面,到天黑很久以后才回到家,因为……她是胡明轩的老板娘,曾给易建联亿元合同,如今年过40仍气质十今晚,中国男篮与伊朗的对决,就要拉开帷幕。在最后公布的12人名单中,广东有3名球员入选,分别是赵睿、徐杰和任骏飞。胡明轩因为在训练中,腰部受伤,所以缺席对阵伊朗的比赛。众……羽毛球世锦赛8月27日国羽四项冲决赛陈雨菲戴资颖第24次交手陈雨菲8月27日,羽毛球世锦赛将展开五个单项半决赛的争夺,比赛从北京时间9点开始。国羽将在除了没有参赛的男双之外的四个项目上向决赛发起冲击。首场比赛是男双的半决赛,……我虽然熬夜,但每天保证八小时睡眠可以吗?韩主任不建议大家好,我是中医韩颖萍。上个视频我们分享了一个患者的真实问诊情况,里面提到了她经常熬夜,月经量很少。谁都知道熬夜对身体,尤其是女性身体,危害很大。但现实中还是会时不……家长品行好,孩子大多不会太差有宝妈问我,她的宝宝不听话,让她很担心,担心自己管不住孩子,担心孩子不能成人成才,内心忐忑不安,缺乏信心。我问她:你对自己的言行和个人品质有信心吗?,她认为自己基本上是一……2022车市纪撞不起的电动爹天价维修费,问题到底出在哪?文:懂车帝原创彩丽美〔懂车帝原创行业〕编者按:2022年已经行至尾声,回望这一年,汽车行业是黑天鹅与灰犀牛交织其中、油价与车价各自起起伏伏。站在2022年的尾巴上,我们即……一企业董事长被立案调查,曾涉70亿口罩订单消失谜案5月26日,金发科技公告称,因2016年涉嫌内幕交易、泄露内幕信息,实际控制人、董事长袁志敏被深圳市公安局经济犯罪侦查局立案调查。袁志敏目前已被取保候审,可正常履职,公司经营运……34岁还能做板凳奇兵?玫瑰依然绽放尼克斯后场不能没有他作为尼克斯如今阵容中的一员,罗斯对于尼克斯的贡献一直非常大,而且也凭借出色的表现得到了一份续约合同。不过在新赛季,尼克斯的后场轮换进行了调整,罗斯的出场时间也随之降低。可是这并……原来汇编中的循环是这么玩儿的汇编系列其实也在一直更新,只不过更新的频率会挺慢的由于白天一直忙于工作,空闲时间还要看书、学习各种技术栈,早上也要抽时间早期健身,晚上回家还要陪家人学习,时间安排的满满当当,所……郭艾伦担心的事情发生!CBA工资帽重新调整辽篮计划额外补偿在姚明不断改革下,如今的CBA联盟变得越来越完善,例如CBA公司对各支球队外援的限制使用,大大的给了本土球员上场时间,再例如联赛赛会制的颁布,让所有球员都在同一个台阶上打球,当……
罗纳尔多vs梅西数据比较金九过半百强房企业绩升了,四季度楼市或将回暖老话说三餐不合理,健康远离你,3餐该怎么吃?怎么吃最合理长大后和妈妈不亲的孩子,从小就有征兆,看看你家孩子有吗?龙胆泻肝丸能解决这2大问题,这3类人不能用,看看你用对了吗?楼市承压,房价低迷的特殊阶段,对中国城市价值的一次复盘思考云南梅里雪山地区名胜古迹简介,都在这里,建议收藏微小生物,潜力无穷,或帮助人类发现地外文明涉险过关!苏炳添10。15以21名晋级亚洲飞人状态不佳仍不负正式签约!NBA榜眼秀加盟吉林男篮,携手琼斯冲击季后赛八强刘诗诗也有不温柔的时候,穿黑色风衣又飒又酷,大女人气场拿捏了今日欧美明星时尚街拍图集(2022年12月11日)特训造句用特训造句大全草莓叶子发黄怎么补救绿帽门5年后,马蓉疯了,王宝强赢了判刑10年一般几年出狱?上海欢乐谷值不值得去表情包制作器表情包编辑APP封门村1963枕边鬼脸灵异事件因路上做这事邪性开始4500万“知识教”信徒、毛利90,樊登读书3年赚了50亿?学生学习雷锋倡议书在花开里起伏情节难忘的运动会作文250字胰岛素集采现灵魂砍价,最高降幅超70,有人当场买入通化东宝股

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利