00:00
今天的内容呢,是这个比较有意思的内容啊,你说的这个预言要学吗?不要学啊,不要学那种东西误人子弟啊,没有什么实际意义啊,然后呢,我们今天呢,主要来讲一些这个在我们开发过程中啊,非常用的东西,就是一些指令啊。呃,我们在前边呢,像是这种分支啊,循环之类的东西,因为我们都是使用的汇编语言嘛,所以说呢,我们都是使用的这个3P啊,TTST啊,然后加上指令来构成的,那么实际上而言呢,我们没有更好的选择啊,当然是开发而言啊,你要搞逆向的时候,你看到肯定看不到这些令啊,那比如说我们现在啊,我们要来这个写一个选择语句啊,比如说我选择这个,呃,两两个分支啊,或者三个分支啊,这种情况下我应该怎么来做?那首先呢,我还是声明一个打印啊,要不然的话可能不太好看啊ex。T,然后呢,我现在呢个后,我现在就可以来做分支了,如果说我用这个CP对比分支,那我的条件啊,肯定比如说我E这个64做对比,然后是决定使用这个G还是什么G还是G啊来进行跳转啊,什么GG进行跳转对不对啊,那我这如果说有了指令,我要进行一个这种判断啊,就非常好判断,怎么判断呢?首先你在起始位置的地方按点儿,然后呢什么呢点if。
01:29
点if后边呢,跟的就是什么呢?跟的就是你的条件,比如说啊,你的这个ex啊,Ex比较容易变动啊,我们声明一个变量吧。我们在这声明一个变量啊,DW index啊,然后DD,然后比如说我给他一个问号啊,未知和初始值,然后呢,现在呢,我们用这个变量,我来判断这个变量啊,它是如果说它等于这个十啊,我就进入当前这个分值,那比如说我要再来一个什么呢?再来一个else if else if,比如说我这个当前这个变量等于11啊,我就进入到我当前这个分值,那如果说呢,我是等于这个12啊,如果说等于12啊,我就进入这个分支,如果都不是啊,我就一个单纯的else,那我就干嘛呢?我就进入这个分支,最后呢啊,他这个最后呢,你要有一个结束啊,不然的话,他这个else底下就都是当前分支的了啊,所以说呢,你这个里边呢,因为它这个汇编没有括号嘛,没有这个画括号嘛,你像高级原理它有画括号什么的,那你就这个给它生明成代码块了,那么我们现在呢,就干嘛呢,我们就直接来这个给它用一个啊什么的if啊,来给它进行一个结尾,然后上面呢,你就可以在它什么的两个。
02:39
分支之间啊,来实现它的一个过程,那比如说我在这儿啊,如果说我这等于十,那我就可以干嘛呢?我就可以直接给他一个,比如说我铺一个十,哎,不不对啊,啊,你如果我如果这么复试的话,还挺麻烦的,那我给他写一个打印数字的这个函数吧,啊,正好复习一下函数啊,我给他来一个print number,然后PC啊,我给他一个number啊,做一个参数啊,然后这个number呢,我是显示成一个or。
03:08
然后print a number and p。好,那我要用这个print f进行打印的话呢,首先呢,我要把这个我的number啊取出来,把它放到我的这个ES里啊,那呢,它传进来的时候呢,就已经传的是一个这个地址了啊,就是用一个来取出来的啊,我们这呢,就可以直接来给它进行一个使用了,那么接下来啊,我们取出来它的这个地址之后,我们直接把它呢进行一个push啊,把它铺到站里边,Push到站里边之后呢,接下来呢,下一步呢,我要给它一个格式化字符串啊,那比如说我在这边给它声明一个格式化字符串,呃,SZ啊,这个format d。Form d啊,为什么是D呢?啊,这是主要是因为我们的格式化字符串里百分号D啊,就是输出这个数字的啊,然后呢,现在呢,我就可以来啊使用这个百2D啊来在这边啊给它再来进行一个move啊还是ex,然后呢用这个啊它的这个form d啊,然后呢,给它传进去地址,然后再把它这个地址给进站里边,那我现在有一个格式化字符串了,有一个值了,那现在是不是我就可以打印了啊对,那现在呢,我就可以拷一下这个F啊完之后,因为我们这是C的一个库函数,我们使用的是这个CDC的一个调用约定,所以说呢,我们现在呢要对它进行一个站,也就是说呢,我现在呢,要给他这个A啊E的一个这个八啊八字节两个参数啊,完站之后呢,因为它是一个函数啊,一个子过程,我现在呢,要给它进行一个it啊返回,接着呢,我现在呢,因为这个声明呢,实际上是以一个SD call的形式对它进行声明的,并且我对内部进行内屏站,所以。
04:52
那我如果在这儿调用它的时候,我可以直接调用这个,我给他来一个这个tab缩进吧,然后来一个in work in work啊这个print number,然后呢,我在这儿啊,给他直接传一个数字进去啊,比如说我传个十啊这种的啊,但是我建议呢,最好呢,给他整个变量什么的啊,或者整个寄存器什么的稍微好一点啊,当然你直接传十应该是也不会出问题啊。
05:19
我我给他来个变量吧。来个变量啊,来一个变量,那我就给DW一个number。DD啊,一个问号,然后呢,如果说我在这儿啊,它是一个十啊,那我就直接到这个变量里给他一个十,然后呢,给它offset。啊,传一个这个number啊就可以了,那这边呢就是十啊,那底下呢,如果这条分支呢,它就是一个11。那如果是这条分支呢,就是一个这个12啊,那如果是啊了else,那就说明都不对啊,那我们这个呢,就比如说我们给他传个666啊,这都无所谓啊,666啊啊这样就行了,那么我们现在呢,给他进行一个重启啊,不是重启啊,重新生成。
06:11
重新生成之后呢,我们现在呢,就已经生成成功了啊,那么在这儿比如说我们下一个断点啊,那么我们运行起来,运行起来之后啊,不对,我这儿没给他初始值啊,那我如果要给这个他一个初始值呢,我们应该给他接收一下,但是呢,我就不接收了啊,我直接给他这个目一下啊,一会儿呢,我们在其他这个练习的时候,再给大家写这什么接收啊,做分支,然后目啊这个里边呢,给他传一个,比如说我们现在传一个11啊,传一个11啊就这样,然后呢,我们现在呢,就给它来这个进行重新生成。然后运行。好,那现在它是11啊,你看啊,分支跳过去啊,然后跳到11跳到分支上,然后干嘛进行打印啊,现在他就已经打印出来了,看到没?诶打印东西打印错了啊,这个打印成地址了,然后走啊,然后退出啊嗯,他打印成地址了,它是DW啊这个。
07:04
嗯,Number,那我是不是上面取了两遍地址啊,我操。诶不对啊,那怎怎么回事,这个东西我这上来试一下啊。我重新生成啊,看看是不是这个原因啊。啊,是这个原因啊,这个块因为是个值啊,它不应该传set啊,是这个原因。好,那么这个呢,就是一个条件分支啊,比如说我这个等于这个11啊,我不用使用CMP,也不用使用GC7,我就可以做一个判断,判断它等于11,那么这种呢,实际上而言,它除了说了这个分支的这个高级的一个为止令之外呢,实际上我们还设计一类的为止令,就是对比,那这类对比的为止令呢,有很多个啊,它比如说最常用的像我们啊现在使用的这个横等于啊,恒等于,还有什么呢?还有这个不等于,比如说大于等于,小于等于,嗯,我想想啊,它应该是还有几个,等会儿我看一下啊。
08:16
呃,我不知道哪个资料上去了啊,忘了啊,反正这几个呢,是肯定是常用的一些这个对比的一个为止令啊,然后我们啊在这用的呢,就是其中的这个判断是不是相等啊,判断是不是相等这么一个为止令,然后就进去了,好那么我们现在呢,已经啊就是写完这么一个程序了啊,那么我们就其中啊运用的为止令已经不少了啊,首先是点if啊,点else if.else然后呢是已work,然后是等等,这些东西全部都是止令,但是需要注意的是什么呢?实际上而言,像是什么点if啊,If类东西,实际上就是对于它的这个原生的C之类的东西的调用啊,所以说呢,它跟高级语言的实现呢,其实通常情况下呢,是不太一样的。
09:04
呃,然后呢,我们现在呢,这是我们的最基础的最基础的这个if else的一种指令啊,那除了这种为止令之外呢,我们常用的就两种东西嘛,一种呢是这种分支啊,还有一种就是循环啊,那我们把这个分支先给它去了。我们先给它做一个注释,注释掉之后呢,我们写一个循环,循环呢也是类似的一个手法,就是什么呢?就是点well.well然后呢,后边跟它的条件啊,比如说我们还是这个D啊,那我比如说ex要大于零啊,大于零啊,那比如这种情况下,那我干嘛呢?我在底下最后也要有一个结尾,比如说啊,我这是干嘛的,一个NW啊,NW就是n while啊,就是结束,那中间呢,就是它的代码块,如果说index啊,是这个大于零的啊,那就会不不断循环,如果说呢,没有大于零的它就出去了,那比如说我现在呢,我要做一个这个100到零,或者零到100的都可以啊,那我现在呢,如果说是做到零到100呢,你需要这个小于100,那现在我大于零呢,就从倒着来来循环啊,比如说我从100转转到零,那这样怎么做呢?那首先呢,我们来给他这个嗯,赋个值啊,给他附一个初始值,那你要说便利到100,那首先你要肯定要给他赋值个100对不对。
10:21
100从100往后数,往倒着数啊,那倒着数呢,很明显它作为一个索引,它要自检对不对,那这呢,你就给他给他来一个这个DC啊,DC下DW index,他每次就自检了啊,自检了之后呢,我们现在呢,还要给他进行一个打印,对不对,因为你循环打印了,他才能这个输出嘛,从一百九十九九十八九十七九十六九十五这样进行输出嘛,那现在呢,我就可以调用这个东西啊,来给它进行一个数数啊,然后呢,我直接啊in work一个呃,Print啊,一个number,然后呢,我现在呢,比如说我直接把这个呃DW index放上去啊,然后自检它不就打印了吗?那我现在呢,重新生成一下,我们看一下是不是我们想要的效果。
11:07
好,我们运行运行之后呢,它一会儿呢,会在这断下来啊,然后它就执行结束了,但是你看啊,虽然说达到了我们想的要消的效果,从100打印到了一啊,那但是呢,它这个东西是连着打印的,没有换行啊,比较不美观啊,那如果说我们是C语言啊,那你在你的格式化字符串里直接反手加一个反斜杠N啊,这事儿就解决了,但是实际上而言呢,我们的这个汇编呢,它这个调用的这个普兰F呢,是不认这个玩意儿的,所以说呢,你还稍许啊,需要是费一点小小劲儿啊,怎么样呢,你可以给它封装一个这个红啊,封装一个代餐红啊,怎么写呢?首先呢,你给他再以ten一个这个put叉啊,Put叉这个呢是输出一个字符,然后呢,你给它有了这个put叉之后呢,比如说我现在要写一个换行的红啊换行,然后呢,是一个这个maco啊,这么一个宏啊,我现在不需要参数,然后NM啊,或这里边我写什么呢,我就输。
12:08
出这个它的换行符,那我们在这种换行,我们在32位下啊,16位的换行符跟我们现在有点稍微有点区别,但是大致相同啊,我们现在可以用什么呢?0D0A,其实就杠二-N啊,那怎么输出呢?首先我push一个什么呢?Push一个这个0DH,然后呢,我直接干嘛呢,Call我的这个put叉,然后呢,我一个啊什么0AH,然后呢,我再给一个什么呢?一个叉啊这样就完事了,然后呢,我现在呢,因为调用了两个啊,调用了两个参两次参数,那我要平战,那我就是A啊EP啊给他一个八啊,现在呢,我就声明完一个有三红了,接着呢,我直接把这个有长红拿过来啊在干嘛呢?每次调用完之后,我直接在这儿啊给它调用一下这个红啊,调用一下红就它就换行了啊,那我们重新生成。
13:00
重新生证之后呢,我们再运行啊,你可以看到啊,我们运行完之后结束的时候啊,它是每一个都有换行了,从一百九十九一直到一啊你看着没这个就是什么呢?这个就是给它添加了一个换行,那我们现在呢,再把它这个点well和我们刚才的点if给它做一个结合啊怎么结合呢?就是我比如说我这个Y循环,虽然说是从100到零的,但是我中间想让它断一下,比如说遇见这个50啊,我就把它取消掉,那么这种情况下怎么做呢?啊,那你就在这点if啊,然后干什么呢?我的这个DW啊,我我应该在我的这个输出之前啊,输出之前给它跳出,这样他就不打印50啊,比如说我这点if啊,然后我的DW啊,Index等于等于50啊,这个时候呢,我在这儿啊,再给他来一个点N的if,中间呢,我写一个跳出点con啊,这个continue啊continue,然后接着呢,我重新给它重新生成。
14:02
重新生成之后再运行。好啊,诶,他直接整个跳出了啊,他这个跳出循环了没有继续啊,那跟我想要的效果还不太一样啊,我我我只想让他跳出一层啊,但是他这种可能是跳出两层了啊,直接全都跳出去了,你可以看到到50之后啊,他就直接这个没了啊,那你想达到跳出一次的这种的的话呢,可能就得组合一下了,就不能用continue了,这里头还有一个叫做break的啊,也会实现这种中断啊,这种直接到50就停了这种啊,那我们来看一下。你可以看到啊,也是到50都停了,那我如果说只想跳入50,其他的还继续啊,那怎么办呢?啊,那我在这儿呢,就不能用这种指令了啊,那就得用个别的小花招了,比如说我在这儿,我给他下一个这个呃,下一个这个RP的一个标签。然后呢,我在上边呢,我用标签跳过来啊,我直接一个这个jump RP啊,然后这样啊,我们来看一下重新生成。
15:05
运行。好,你可以看到啊,这是运行到一的啊,但是我们看一下这51和49之间就没之间就没有50了啊,这是什么原因呢?就是因为刚才那两种无论是耿还是break,他直接把循环给跳出去了,那我们现在这种呢,只是在50的情况下判断一个特殊条件啊,把中间的什么呢?把中间的输出给跳过了,然后直接自检,自检到49,然后进行下一次循环啊,这个是两种不同的啊,就是为指令和原生指令之间的一个结合啊,然后大家看一下公屏上啊,公屏上有小助理发送的我们的这个群啊,如果需要往期的课程工具资料的啊,可以进群啊,来找这个小助理进行领取啊嗯,好,然后呢,我们继续啊,继续呢,我们这个东西呢,就是我们的这个一个外循环啊,和我们的if以及原生指令中间说的做了这么一个结合啊,那理论上而言呢,我们今天的这个知识点啊,就讲完了啊,但是呢,我们今天的内容还没有结束啊,就是我们知识点讲完了之后呢,给大家写一个小练习啊,上面这些东西呢,我们。
16:08
给它全部注释掉。注释掉之后呢,我们直接啊开始写啊,那我们现在呢,就来先封装一系列函数啊。我们现在已经有一个打印这个数字的了,那我再给他来一个打印文本的啊,那打印文本呢,我这边呢,还需要一个这个格式化字符串啊,就是iz啊,这个form ma s DB啊,然后百分号S,逗号零,然后我想想啊,除了D和S,我们啊,还需要一个单个字符的啊,我前面这个format写错了,Format啊,C啊,DB。2C啊,然后零好,这样就行了,那接下来呢,我们给它来输出啊,输出print什么呢,Print test PC啊,然后一个string啊,Word friend test啊,然后end p,好,然后呢,我们现在呢要输出文本啊,输出文本呢,首先呢,我们目一个ex啊,把这个string给转进来,然后呢,进行地址的一个push push之后呢,我们move ex,呃,Off啊,然后取出我们sc form s啊,也就是我们的这个字符串的一个格式化,然后呢,取出来之后我们嗯再把它也push到我们的站里边,Push ES,接着拷我们的print f平站啊ADEP,然后一个八字节,然后返回好,那这样呢,我们一个打印文本的啊,就完成了打印文本的,有了这个打印数字的。
17:48
走了,那接下来呢,我还需要干嘛呢?我还需要这个两个东西,一个接收数字,一个接收这个单个字符啊,那如果说我们是接收数字啊,那我们就用一个非常常用的这个C语言的库函数就行了啊看。
18:04
然后呢,我们如果需要接收一个单个字符啊,那我们用什么呢?ESTN啊这个get。嗯,我想想啊。这样是呃,理论上可以了啊,理论上可以了,然后呢,够用了,那我们在这边给他做一个多个封装啊,我们这边打印呢,都已经封装好了,那接下来呢,我们就封装一下它这个接收,那首先呢是接收文本。这个。啊文本啊文本我们用。先数字吧,一个number吧,Number文本,一会儿我等一下,想一下我用什么东西接收number。然后1WORD。P啊,然后呢,我在里头接收的时候,我要这样写,首先啊,我来这个获取一下啊,我的。
19:09
然后我来这个push我的ex push完我的ex之后啊,我move move,我的格式化字符串啊,也到EXAX里啊,就是我的Z啊,这个for form d。接着啊,再把它push到我们站里,Push e,接着call我们的SCF。Call完我们的SCF之后呢,我们进行评站ADB啊,然后EP一个八,最后啊return啊搞定,这样呢,就打印一个这个接收一个数字啊,从控制台上接收一个数字回来啊,然后呢,接下来呢,我们还需要一个啊嗯。还需要一个这个我们直接用一个变量接收啊,我们不需要参数了啊,我们直接一个N叉,这个是呃,用来接收那什么的啊,接收多余字符的。
20:06
哎,我用它接收多余字符,还是直接用它接收一下我们的。我不用它接收多余字符了,我用它接收一下我们的符号啊,一会儿告诉大家有什么用啊,DB问号。好,那么现在呢,我来给他。Sc better,然后PC。NP啊,我们再封装最后一个函数,然后就可以来写我们的功能了,嗯。那我们这个应该是。木。木ex,然后呢,O set,然后一个C叉,我刚才是不是写的C叉,N叉,N叉,我写个C应该N叉啊,不是C叉,然后呢,我取到它的地址之后,直接push ex啊搞进去,搞进去之后呢,Move EXO set format。
21:10
Form c,然后接着再给他push一个ex啊,Push进去之后呢,我现在呢,我的这个。Ad啊,然后ESP8,然后好这样的函数我们就都封装完了啊,那接下来呢,我要开始写今天最这个练习代码了,这个练习码主要是干什么的啊,我要实现一个计算器啊,它最最常规的功能呢,基本上就是加减乘除啊,当然我就不写那么多了,我写个加减啊乘除你们可以课后自己写一下,那这个东西怎么来这个写它呢?首先呢,我们要打印这个一个提示啊,你总要让人输入东西,你肯定要给他提示对不对啊,那这呢,你就给他写两个提示,比如说我一个啊这个test啊DB,然后呢,我让他这个input啊number,然后还得需要他输入一个这个运算符。
22:19
好,那这两个提示就有了,那么首先我们要给它进行输出提示嘛,那我们第一个输出的提示啊,In work,嗯,Print,嗯,什么东西来着。啊,这个,然后它的参数啊,它的参数呢,就是我们刚才写的这个提示啊,我们直接把它地址传进去就行了,首先我们提示要它输入数字啊,那我们用一个啊把数字啊传进去啊,然后那我们输入完数字之后呢,我们接下来啊,要给它进行一个接收啊就是啊然后。SCF。Number啊,我们接收第一个数字啊,无论加减乘除的都需要两个数字嘛,那我们首先接收第一个数字,然后我们接收数字呢,我们给他也来用两个变量来存一下吧,然后DW,呃,NUMBER1啊,然后DD。
23:16
DW2DD问号首先我们接收第一个数字。啊,这个数字呢,我们也通过一个off啊给它传进去,然后呢,我们接收完之后呢,我们现在要做下一个提醒,下一个提醒呢,就是干嘛呢,就是开始这个打印这个运算符啊,输出运算符,接着呢,我们在这儿呢,就要用这个啊,用这个接收一个字符的这个啊来给它进行一个接收,那这个的调用呢,我们就必须要传参数啊,我们直接啊在这儿给它调用就行,调用完事之后呢,我们再给它提示,第一个啊,我们要打印这个第下一个字符啊,打印个下一个字符呢,我们继续啊在这个位置上啊进行输出啊,不是输入啊,那这个呢,就是接收到我们的这个啊二啊,然后我们现在呢,接收完之后呢,我们现在不是所有的数都已经到手了吗?那么接下来我们就要进行这个进行判断了,怎么进行判断呢?我们刚才学了啊,用这个点if啊,那首先if我们的这个接收到的这个,呃,接收到的这个符号啊,接收符号加减乘除这个符号,我们啊我们直接进行一个等号的判断,判断啊用单单引号啊这个。
24:24
呃,之后里边比如说我是一个加号啊,我这if判断,然后呢,我这个else if啊我这个。啊。点l if啊,L if啊,然后呢,我判断是不是等于减号乘除号呢,你们自己写啊,好,我就判断加减,然后呢,我就这点n if啊,这样我一个判逻辑就判断完了,判断完之后呢,如果它是一个加法就是加法,如果是减法就是减法,那这两个的加法减法呢,我还要要再给它再次进行一个封装啊,我封装一下啊,比如说我这是RADD啊,然后不要写ADD啊,ADD是原生指令的名字啊,一定会报错的啊,所以我加了一个RARA的D,然后呢俩数啊,那个NUMBER1啊,然后是一个ord,然后逗号啊,这个number two啊,也是一个ord啊,两个or啊进行加法,然后rad n p啊,中间呢,我们来直接实现它加法的一个功能,首先呢对eass进行一个清空,嗯,然后呢,再给他e as啊,清空一下E,当然了,如果你为保险起见,你可以给他进行push这个它的环境啊,但是现在我们不需要我们直接A啊,然后。
25:35
后呢,A de啊加先加它的第一个数啊,因为它已经变成零了,它加完第一个数之后,把结果存在E里,它实际上就是一的值,然后在ad啊加上这个二的值。啊,现在呢就得出了结果,然后呢,直接return就行,因为你返回值时间就应该放在E里,所以他现在运算结果在EAS里是正确的,那我们这个加法完事之后呢,我们直接再来给他来个减法,那减法呢就是。
26:04
参数上没有什么变化,还是两个数清空,清空完之后这就不是这个加法了啊,而是干嘛呢?而是我们首先把第一个数啊,我们不是直接ADE啊,我们叫木啊被被减数呢,目到A里边,E ass里边,然后呢进行一个sub啊,用这个ES啊减去这个二,然后呢再把结果放在ES返回啊,当然这个结果逻辑不是特别这个完善啊好,现在呢,我们就有了这两个函数,现在呢,我们在底下啊对它进行一个调用,比如说如果说进了家这边,我直接调了一一个这个呃,In work啊,然后RA啊,然后呢,再传它的参数啊,这俩参数呢,一个是我们的这个n number11个是我们的这个n number2啊,我们直接给它这个调用进去就行了。然后呢,我们同样的啊,底下这个萨啊,也是一样的一个效果。好,这就是加减啊加减,那么我们主要逻辑上应该来说呢,是写完了,但是不知道语法对不对啊,我们重新生成一下,看看有没有问题啊。
27:12
有一个操作失败啊,这有一个RP啊,我这应该是ESP啊,我这一顺手写成64位的了啊,然后我们重新生成。好,那我再看一下啊,这in。诶,这是啥。啊,少个逗号啊,少个逗号。好,成功了啊,成功之后呢,我们来尝试一下,看看有没有错误什么的啊,首先啊,在这下个断点,然后我们给它重新生成。然后运行。运行首先啊,我们会在这个位置上断下来啊,我们现在已经断下来了,断下来之后我们走一步,走一步之后呢,我们这儿啊输出提示了,输出提示呢,我们现在呢,再走一步啊走一步啊这呢我们应该输入一个变量的值啊,那我们现在呢,可以给他,比如说我输入一个123123之后呢,它到这儿了,到这儿之后呢,我们直接啊在这监视里,我们可以监视一下啊,监视一下什么呢?监视一下我们的这几个值啊,比如说我这个NUMBER1。
28:22
和我这个NUMBER2,以及我的这个符号。那符号哪去了?啊,符号在这儿啊。好,现在呢,首先我第一个7B啊没有问题,123吧,然后呢,我再给他来这个F10F10,但你看啊,我这个接收这个中间符号加减,加减符号这个东西,这个函数直接跳过去了,这是为什么呢?这是因为我们在输出第一次的时候啊,我们摁了,我们输入完之后啊,比如输入123之后,它会摁一个回车,会输入一个回车之后呢,它就产生了一个这个缓冲区之后会产生一个反向杠N的这么一个符号,那我们的这个第一个这个呃SC这个number呢,他把前面的数字取走了,但是这个反斜杠N呢,留在了它的控制台缓冲区里,然后当第二次取的时候呢,他就直接把这缓冲区里的东西取出来了,而没有再去获取新的东西让你输入,所以说呢,这种情况下呢,就是不对的,那你应该干什么呢?你应该首先把那个他留遗留的东西给它理掉,那么它遗留的东西它是从哪出现的呢?就是从这个呃,接收完第一次之后出现的,那这种情况下呢,调最好调用的就是什么呢?就是你一下get,把它遗留那一个字节给它走就完事了。
29:30
那现在呢,我们给它重新生成。好运行。运行之后呢,我们现在啊来这个F10F10啊,现在我们接收第一个数啊,比如说我输入一个这个12啊回车,回车之后你看是个C没有问题啊,然后现在呢继续走走,现在呢,弹出了第二条提示,让你输入运算符啊,然后呢走诶你看它这次就没有直接划过去,而是让你输入运算符了,比如说我输入一个这个写错了啊,输入一个加号,然后回车,现在你看我这里边就是一个2B一个加号啊,加号之后呢,我继续F10 f10呢,它就输出了一个什么第二个提示啊,输出第二个数,然后走。
30:09
走完之后呢,比如说我输入再输入一个一啊,然后回车,回车之后啊,我现在进判断我是不是加号,判断是加号,我进入到我这个A里,然后进行加法运算,加法运算啊完事,诶你看我现在呢,就得到了一个D啊,加一变成了D啊,这个就完成了啊,那比如说我现在呢,我要给他进行一个展示啊,因为我现在呢,只是显示出来,没有展示啊,那怎么办呢?那底下呢,我就可以在最后啊,或者说在它每一个底下啊,来进行一个打印都可以啊,调用什么呢?调用一下这个,呃,Print number啊,我们这不又有一个这个number的这个函数嘛,我们调用一下它。比如说我在它每一个底下啊,加一个这个in work print print number啊,然后呢,我的参数就是它的一个运算结果,那它的运算结果呢,通常情况下在E里我就直接放到ES啊,给它放在这儿,然后我把两边啊都给它加上,现在呢,我把它这个断点去掉,我直接来运行,尝试一下我们的这个过程是不是正确啊来运行。
31:06
比如说我现在我输入一个12啊,然后呢,给它这个加上一啊不对,直接加号加一,你看它就是13,那我们再重新生成,重新运行一下啊,你比如说我再算一下减法,我给他算一个这个200,然后呢,减去多少呢?减去一。好,然后你看它就是多少199啊,所以加减运算都是正常的啊,那你如果说要给它先加上乘除运算呢,实际上就是干嘛呢,你要再给它封装两个乘法和除法的函数,然后呢,再给他做两个分支啊就可以了,好,那这个呢,就是咱们今天的这个练习啊,然后呢,完事儿啊,然后有什么问题呢,你们现在就可以问了,没有问题呢,就咱们找助理回来啊,然后呢,屏幕上有助理发的这个群啊,也可以直接加助理,这样呢,你就可以领取往期的课程工具啊资料啊。
32:12
好,没有问题,我就先这样了。
我来说两句