对,这个二万刚才计算过啊,这个是几位啊?这大概十五位啊,是二十六位啊,所以呢,这个也是不行同步过的。 下面的加法指令八位对多少呢?幺零零 h, 他也是那个 对不上号的,因为八位在幺零零 h, 我们也可以转换一下幺零零 h, 这里 幺零零啊, h 只是一个标记啊,这个这个码是四 六进次吗?啊,转换成二进次,他等于几位啊?啊,他就等于九位对不对啊?九位传到八位里面啊,那他就不行。 我想高级语言里面如果这么做的话,会丢失数据啊,或者说他计算的结果呢?不准确啊,要注意一下啊,指令的用法啊 啊,切记,他那个对选一与对选二啊, 他这个他的胃常驻度必须啊,是一样的, 否则呢,他可能会发生错误,无法变异。那我们再来看一下,下一页也是捡到的会点指令。第三个例子 啊,执行指令后对继承其中数据进行的改变。 列题,假设 ax 的值是零零零 hbx 的值也是零。程序段中指令的执行情况啊,怎么样? 从上往下直行第一条指令, mov ax, 逗号,六二六二七,这,这其实是一个十进字的指。六二六二 七啊,这里看一下啊,放松一下,是一个十斤子的子,六二六二 七,他等于十六斤尺,就是四位的十六斤尺码, 那就是 ax, 他是等于 f 四 a 三 f 四 a 上 第一个,第二个, 第二条指令, m o v a h 啊, a x 继承器,它的高八位,它等于三一 h。 高八位是什么呢?昂,十进字描述的话就是两位。是啊,昂,十六进字描述的话,他就是 f 四两位,他等于高八位, 那就是他要对 f 四这个内容进行改变,他等于多少呢?减 f 四变成商业 h, 他其实就是这个意思, 因为低包位 a 商高啊,低包位值是 a 商高包位值是 f 是, 那这个意思呢?这里就等于高包位要改变一下,那就三一 a 三 啊,他变成之后呢,就会 商一 a 商。 第三条指令, a l 逗号二三 h, 那就是低八位,他的值要变成二上 h, 那么高八位不变,商一低八位变成二上 啊。这里我们都是以十六金之啊结果进行计算的 啊,要不然就是缩写的时候呢,我们后面要加上一个 h h, 熟悉的时候都要加上 ajh, 这样的话呢, 啊,就与这个石径子的区别开来,否则啊,别人看到呢,就把他认为是石石径子,三千一百二十三啊,这其实不是啊,他是等于三幺二三十六斤子吗? 第四条指令, a d d a x 逗号 a x, 那就是说 a x 等于 a x 加 a x, 那 ex 等于多少呢?就是三幺二三 h 加上三幺二三 h 啊,十六进次加法, 三幺二三 加上三幺二三等于,那就是等于四啊,六二四六 六二四六 h h, 我们一加上 将来呢, movbx 都好,八二六 c, 那就是 bx 等于八二六 c, 八二六 c h。 收入 你去洗大洗 啊,大小区没什么关系啊,因为我们这里呢, 既然都是大写呢,就啊大写输入,因为大写的字体的输入呢,像 c h 啊啊,这样跟小写呢容易区别,而且显示的啊,这个大小呢,以大一点容易看得清楚点,所以我们采用大写 啊,当然也可以。是啊,小写设计也可以的,这描述没什么关系。 下一条指令, moa c x 到啊。 a x, 那就 c x 等于 a x 啊。 cx 这个继承器呢要发生改变,那 x 等于什么呢? x 啊, 直行到 ax 的最后一步,那么就是这个字啊,那么为什么不是上面的 啊?上面的 x 呢?里面继承器的里面的内容呢?啊,从上往下发生了改变,那到最后一步呢?是这里,所以说 ax 等于六二四六 h 啊,我们将最终改变的这个字呢啊,提取过来,那就是 cx 等于什么? cx 等于六二四六 h 等于这个。复制一下啊,贴进去。 那在下刚下一条, mov ax 等于 bxbx 是什么?找最后的。哦,在这里啊,如果前面都是 bx, 你找最后一个就对了啊,就是这个, 那么这个就是 x 等于 bx, 就是等于这个八二六 c h 等于这个, 然后再加上面啊,再看下面加法, a x 等于 a x 加 b x, a x 加 b x, a x 等于这个, b x 等于这个啊,这两个先加啊,那我们通过计算器呢? 嗯, 数字比较,数为比较长,数字比较复杂 啊,那我们自己讲, ax 加 bx, 八二六 c 加上八二六 c, 八二六 c 加上八二六 c 啊,除非点错,否则不会错误。 幺零四 d 八是不是,是不是这个啊? 幺零四第八,幺零四第八,是这个结果吗? h 啊,几个 f 啊,几个 十六十斤十六斤子啊,几个十六斤子数看一下,他是五个,五个,你一个继承器, ax 怎么会等于五个呢? 选这种计算结果啊 啊,他就会略去,因为超出了这个 ax, 他的胃肠 他是等于十六位的,那幺零四 d 八,我们来看一下,来看一下二点四啊, 啊,他这个就不是啊,四位啊,哎,四位,这四位 啊,这十位啊,这个一就是最最高位,这个一其实就是我们第十七位,所以不行, 所以不行的话,那就是他取的时候呢,会取第一十六位啊,第一十六位,那这样呢?这个高位一 他就会忽略掉,那么选这个位置呢?他的 ax 等于零四 d 八 啊,真正的计算的正确的值呢啊,是我们要 幺零四七八,幺零四七八,但是由于机床传输数据,他的 这个胃肠啊不一样,所以呢他略掉了。
粉丝5180获赞1.2万

好了,我们继续看下面 三点一,一点四,实验任务一,使用第八个减下面的程序段, 吸入内存主条直行,根据指令直行后的实际情况填空好,把数据呢填到这些地方, 我们出力的讲解一下这个程序执行的那么一些过程,简单的做一下分析。 m o v a x 四个 f, 这四个 f 是什么位置呢?如果要指定一个数据段啊,这四个 f 作为它的内存段地址的话,这个直线的位置是我们电脑主板 信息的位置,比如说他的生产日期啊,这个呢在我们以以前那个第八个当中呢,已经讲过 啊,我们试图呢以去更改这个主板的日期啊,他是无法更改,因为他这个内存是属于直读啊,存储器只能读不能写。 然后呢,他又定义了一个账段,那么在这里呢,也指定了一个账顶的一个位置,零幺零零,后面呢进行了 加法的计算,还进行了呢数据压入的计算和数据呢出账的计算, 又进行了四号六号单元的数据的压入, 我们来看一下启动 第八个,然后输入这段程序,准备实验一下啊,我们来看一下,第一 b 有机先启动第八个,先观察一下当前状态, a 输入 a 呢是输输入程序段代码段, a 是输入代码段 m o v a x 四个 f, 第一句,第二句, m o v d s a x 第三句, m o a x 这个呢是战段的一个断题词。二二零零,不要说错, m o v s s a x m o v sp 零幺零零,暂定的一个指针啊,指定了账的大小 movax, 这个呢是取数据段 零号单元的数据字,以字为单位,下一步加法指令 ax 加二号单元, 下一步 movbx 等于四号单元。 mov 啊,这是加法指令, a, d, d, b x 加上六号单元, 后面是压入, 压入 bx 弹出,把正宗的数据取出来送给谁呢? 第一个占重的数据送给 ax, 暂停的数据,第二个数据送给 bx, 那么前面压入 ax, bx, 后面弹出 ax, 弹出 bx 就是将继承器的数据呢? ax 和 bx 呢交换一下, 然后下面 p, u, s, h 压入四号单元, 鸭肉六号党员 好了,嗯,好,输入完成之后 会唱,那么我们的程序呢?在哪里执行呢啊?通过啊,观察一下。第一步, m o v a x, x, f 打着程序断,地址零七三 f, 片域地址零幺零零,这个就是 ip 指针 子线的第一句,那么这个指令 我们昂贴裆部跟踪。 第一步,输入完毕之后, a x 等于四个 f, 然后把四个 f 传到 ds 当中, ds 等于四个 f, 这样呢,我们初始化这个数据断 一直完成,以指明了数据段他的内存的空间。 下一步,说实话,这账空间设置账的大小, 上的账的大小呢?这里好像这部没有显示 movsp 零幺零零应该在 movssax 的下面,但是下一句他已经到了取领的位置, 好像跳过了这个 sp, 这 sp 涨顶零幺零零这个位置。这局呢, 他在执行了,我们这个调试过程当中呢,是不会看到这一局的,那么我们看下一局 取数据段零号单元的字,零号单元等什么呢?零 c 零一 a 是 c 零一 a 吗? 那么我们可以呢观察一下啊,观察一下,取出来之后呢, ax 的就等于 c 零一,那么怎么观察呢?我们通过 dds 啊显示,显示从零位置开始便宜地址,零位置开始显示数据, 第零个字单元 c 零一 a, 第二个字单元零零幺二,第四个字单元三零 f 零,第六个字单元二 f 三幺,我们把这个呢通过习字本记录一下, d s 零打等于 c 零一 a, 其实就是我们刚才调试的内容,已经已经怎么样已经执行了。 ax 等于 c 零一, a 其实就是 d 零的位置 啊, d s 零号单元的位置,那么二号单元呢? 二号单元零幺二,是这个是不是幺二这个,那么是由于是 以字为单位,他是零零幺二, 然后第四个单元, 第四个单元 零幺二三四,那么他是三零 f 零, 数据位置不要搞错啊,否则呢他计算位置,那么这个呢,六 六呢,指的是六七六七呢?零至七是第八号,当一开始零幺二三四五六 二 f 三幺。 好了,我们这 见这个数据呢已经记录出来,那么一会呢,我们就不需要观察这个数据段,内存当中的这个数据,我们不需要去显示,他也能清楚里面的内容。 好了,我们再咨询下一步,下一步是什么呢?通过 r 来观察啊, r 呢显示当前状态呢?显示内存中的信息呢?包括指令的, 我们来看一下,这部指令是加法指令,也就是这部 a d d a x 逗号括号二,通过计算器呢计算一下 x 等于多少?零 c 一, 加上零号二号单元的内容是零零幺二零 cea 加上零零幺二 c 零一 a, 然后呢加上零零幺二, 也就是加上这个二号单元字零幺二,他是零零幺二零零幺二零,输入无法输入的,所以呢,他是幺二等于 c 零 f c, 目前所看到的是这个 c 零 f c, 看看是不是啊?嗯,直行就知道了 啊,他是 c 零 fc, 说明呢,我们通过计算器呢,计算是正确的。再下一步, mov bx 取四号单元的内容, 然后呢进行了一个加法计算, bx 加上六号当月的内容。六号当月的内容是什么? 十二 f 三幺, 那当前 bx 等于三零 f 零,三零 f 零呢? 是这个单元,也就是说将这个单元的内容加上这个单元的内容, 放进线夹,前面的是 c 零一 a, 加上零零幺二。第二步加法指令呢?这三零 f 零,加上二 f 三幺, 然后呢加法指令执行之后呢,他把这个内容呢储存到 bx 中啊, bx 等于什么呢?我们来执行啊,是六零二幺, 再下一步,再下一步呢,这一步呢是铺序压入 a x x 等于零 c 零 f c, 压入到哪什么地方呢?这个呢,是压入到继承器 ss 等于二二零零的位置,我们直行压入四下,然后查看一下数据,查看一下 ss 啊,账段的数据,现在呢,我们已经压入,压入了什么呢? c 零 f c, 记住了啊, c 零 f c, 我们是不是能找到这个数据 通过地呢?啊,观察内存中数显示啊,查看显示内存数据, ss 端,它的账顶的指针在什么位置呢?嗯, 张伟空呢,他是在零幺零零,现在已经压入了一个数据,那么他应该是在 零零 f 一的位置, 零零 f 一的位置在这个位置,为什么这么说呢? 张伟空时他指针的位置是幺零零,截取二个自己 就是一个字,他等于 f 一的位置,那么我们是不是呢?为这一下 我们就能找到 fc 啊?零一, c 零,我们就能找到 c 零, fc 就是我们这个内容, 我们再压入 bxbx 等于多少?六零二幺, 那么再观察看看怎么显示啊?怎么显示账端的内容?我们 f 一再减二,减去二个字,减,他等于 fc, 那么我们这里显示 fc 的,你 fc 后面的这个内存状态 六零二幺,他压住了啊。

同学们大家好,我是来自数学中国老歌团队的吉老师,今天给大家带来的是单片机原理及接口技术的期末复习课,我们来看一下这部分我们主要讲解哪些内容? 这部分我们主要来讲解这个汇编语言程序设计,基于单片机来给大家进行一个仔细的讲解。后面我们会给大家进行一些考题的练习啊,精讲精练。 好,我们接着上一部分来讲,上一部分我们讲这个尾指令,尾指令呢,一共是这三个,首先是 o r g, o r g, 也就是 origin 嘛,它表示的是汇编语言它起始的地址 啊,也就是说我是从哪部分开始啊?进行这个存储数据,然后我进行编成的是 o r g o r g, 后面呢,我们一般是跟一个数据啊,十六帧或者是十帧,比如说,呃,我写一个, 我来写一下,比如说我是 o r g 啊,零零零三 h, 也就是意味着我要在这部分我开始编程啊,我在这部分开始编程,然后写我的程序,比如说我啊, l g a m p, 然后这个内函数 啊,对吧?这样的,然后我再进行一个这个数据传传送啊,木子,怎么样?是这样的 好,然后这个 and and 就是 我们在编程结束之后都会写的啊,比如说我这个 s g m p, 然后我 look, 我 让这个函数一直循环,然后最后呢,我这个函数,也就是我这个程序结束了啊,我就写一个这个 and, 表示我这个程序啊结束了, 然后这个 e q u e q u 就是 我们的赋值,赋值啊,标号名称 e q u 会编符号,也就是我把这个数或者是一个符号给它给定一个编号名称,数在左,这个标号在左边,然后数在右边,比如说啊, max 是 这个标号 max, 然后它 equ 是 多少呢? equ 给它一个数,比如说是三零 h 啊,就这个意思,就这么就这样来进行一个啊理解,这个是负值为的量,然后这个是第四个和第五个 dbdb 是 什么意思呢?就是 define 嘛, define, 然后 byte, 就是 定义自结嘛,定义自结为指令,也就是说我这个地址单元开始呢,定义一个或若干自结个数 d b, 比如说 d b 个二零 h, 然后我二三 h, 然后二二五 h, 这都可以,然后如果呢?这张写如果换行,我还是要先写 d b 啊,就这个意思,我这个定义字节的一个为指令, 然后 d w, d w 有 字节就有字吧,对吧? w 是 什么呢?就是 define define word 吧啊,表示定义字为指定,也就是我从这个单元开始,我存放这个字多两个字的数啊,就这个意思,了解就可以啊,了解就可以能看得懂。程序是这样写的,能理解就可以啊。 然后 ds, ds 就是 define space 呗,就是预留一个空间啊,保留一个,保留一些空间,然后给大家进行一个备用啊,给一个程序备用啊,这个意思 d i t 啊,就是位位地址符号,位地址符号,也就是说我把这个位地址付给这个标号,然后用来这个阅读程序的,用来阅读程序,也就是说我把二零 h 单元第零位付给了这个标号 啊,也就是说把这个这一位定义成这个 pet 标号之后呢,然后我再把,也就是相当于把二零 h 点零代替了啊,把它叫 pet 了, pet 之后, 然后我再进行一个这个位寻址,或者是啊位计算,再进行一个数据的传送,这个就是 b i t 位地址符号啊,为指令,就这个意思。 然后我们来看这个顺序程序设计,顺序程序设计我们在 c 一 当中已经是司空见惯了,对吧?我们 c 一 就学顺序,还有什么?还有条件判断,对吧?还有条件判断什么 if 啊, else, 对 吧? 然后还有什么这个 while 啊之类的。那我们这个会员语言也这么学啊,也这么学,但是程序就是啥意思啊?我如果拿这个流程图、流程图或者说这个程序框图 去进行一个理解的话,是不是我第一步我输入它,然后我下一步怎么样啊?比如说,然后接下来我是要判断了判断,然后如果说是怎么样, 这个是不是叫这个条件判断,条件判断这个语句了,对吧?那我顺序是啥意思?就是我一条路走到黑吧,我一直就这样吧,也就是说我输入了一个东西,我最后要输出一个东西,对不对? 也就是我要输入了一个东西,然后我要输出一个东西,没有这个附加的判断,比如说像这个,我如果这个符合,我就 yes, 然后就这么走,然后我 no, 我 可能返回某一步啊,这个是条件判断,这个设计的语句啊,顺序就是说我一条路走到黑啊,就是这个意思啊,我们理解即可。 然后我们来看这个题型,这题型其实给大家前面铺垫过啊,把三零 h 单元两位 b、 c、 d 码拆开,并转换成 ask 码,我们在这个第一章的时候给大家讲过,这个零到九的这个 ask 码是多少,对不对? 零到九是不是三零 h 到三个九 h, 对 吧?这个是它的这个 ask 码,对不对?好,那这个提示让你把这个两位 b、 c、 d 码拆开,转换成 ask 码,存到这两个单元当中,这个我们怎么去写呢?我们就怎么进行一个程序编写呢? 首先这个题审题说这个数据是不是在三零 h 单元内啊?我是不是想要取这个数值?大家跟我的思路走,首先我要取值,第一步是不是目目 a, 三零 h, 我 要取到这个数,对吧? 这是我第一步对不对?然后干嘛呢?我要把它拆开转换成二次码,那我怎么拆呀?我是不是四位?四位拆比较好,两位 bcd 码,我拆开拆开计算对不对? 好,那我下一步是干嘛呢?我给它拆开,也就是我要取低四位,取低四位,是不是?我把这个啊?高四位需要清零啊?我清零的话是不是需要我们在上一部分讲的这个 a n l 预算? a n l 是 不是语晕?算呀?我把高四位清零,也就说我让高四位为零就对了,对不对?所以说是不是零 f h, 第四位不用动,我把它让它全移就对了,对不对?也就是说我是零零零零幺幺幺幺,这样式就可以了。这个这一波折的是干嘛呀?我取的是什么?取第四位吧,我先进行一个处理,对不对?哎,好,然后我转换成二次码,零到九变,三零 h 到三九 h, 我 怎么变啊? 是不是?我给它加上三零 h 就 妥了?好,我将来转换是不是用 add 就 可以了? a d d a, 然后三零 h, 是 不是就是转换好了?转换好了之后,我这个是不是说过,题里是不是要存到一个单元当中?存哪里啊?我给它存三二 h 单元里了, 我把这个结果也就是我这个 a 存三二 h, 把 a 这个结果存到这里,是不是我的第四位存完了, 结果就存完了,对不对?好,下一步我干嘛呢?下一步我们大家想一想,我如果低四位结束,我是不是要弄高四位?高四位我怎么办呢? 我用一个 swipe 语句是不是就可以了呀?大家想高低四节互换是不是就可以了?所以说我 swipe a 对 不对?这个时候我是不是就可以操作的?是谁啊?是不是就是高四位了? 是不是就高四位?也就是我高四位和第四位是不是互换了呀?互换之后我怎么办呢?互换之后我是不是还是进行这个取啊? 互换之后我是不是还可以取?我取谁呀?我是不是相当于互换之后还取第四位就可以?所以是不是还是这部分我重来一遍,也就是 a n l, 然后 a, 然后零 f h, 对 吧? 还是取第四位?取的这个第四位其实是我们原来的高四位,对不对?哎,好,然后我们下一步干嘛呢?还是给他变二次码,对吧?所以说还是 a, d, d 呗,然后 a d d a, 然后给他加这个 三零 h, 是 不是这部分我的这个二次码转换完了?转换完了,刚才存的是三二 h, 他 给的另一个是三幺 h, 对 不对?我们把它存这里面,对吧?好,往这写,往这写,我是不是就把它存到三一 h 就 可以了, 把这个结果存到三 e、 h 是 不就可以了?然后干嘛呢?这个是不是就结束了?是不是就结束了?结束了我们可以这样写啊, s、 g、 m、 p, 然后这样写就可以了,也就是让它自循环就可以自循环,所以这个就结束了。所以这个题考点是啥呢?考点首先考到了啥? 首先考到了我这个语运算啊,清零,高四位,高四位,低四位清零或还有一个就是我们可以在这个高低互换的时候呢, 进行一个 swap 指定的一个使用啊, swap 指定的一个使用,其实它跟这个 x、 c、 h、 d 其实是不是相当于?嗯,有一定区别,但是也是很像的一个指定啊,我们在上一部分讲过, 那互换我们一般用 swap 啊,一般用 swap 啊,进行高低四位的一个互换,然后转换二十码,重点就是在于这个你要加三零 h, 这样才能转换转化成二十码,然后存的话呢,你要注意一个地址空间的一个分配啊,这就是这道题啊,这个练习的一个答案。 好,我把这部分给清除掉啊,这个部分清除掉,我们来看一下这题的答案,答案对吧?啊?先取直,然后取第四位给它转换,转换之后我要保存,然后我再取,取了之后呢?互换,互换之后还是第四位,是不是就重复这部分了? 重复这步对吧?然后我再加,再转换,再保存,我让他自循环啊,这题就是顺序是这样的,然后我们来看一下这个分支和循环,首先分支刚才我在是不是在这部分其实讲过, 在这个顺序的时候其实讲过,对不对?在顺序那讲过,那个图找不到了啊?也就是说我要判断,要么这个,呃,满足了我就走 a, 不 满足呢?我要继续回去判断,对吧?要么就是这种多重分支的,要么就是啊,这是两种不同的判断条件,一个 a 一个 d, 对 吧?它是不一样的, 这是三种不同的分支结构。好,这个我们大概理解了之后呢,其实都是老生常谈的内容。然后我们来看这个例子吧, 例子它说 x、 y 都是带符号数,都是带符号数,它存在这个地址 m 和 n 当中。这题呢?答案可能会有点墨迹,那这题为什么是这么写呢?存在这里边,其实就让你让你复习一下什么呢?复习就是这个标号 啊,这个为指令啊,这部分的内容为指令,咱们知道一些啊,你怎么去用啊?怎么一个写法就可以它存到这里边了?然后让你编程计算 y 等于 f x, 然后 f x 给你了,这个函数是这样的, 这部分我们是不是要结合什么?是不是得结合我们前面讲过这个指定系统当中的这些指定啊?比如说判断呀,对吧?然后你这个到底他大于零的时候,然后他是谁,然后我是不是得循环这样之类的,对不对?那我们看一下思路,思路怎么判断啊?第一次我们说先找这个特殊情况, 特殊情况是什么呢?特殊情况是不是它等于零的时候啊?等于零的时候,我们判断它等于零,那是不是答案就是零?我这个时候用什么?用?接 g 对 不对?为什么用接 g 啊?等于零的话,判断嘛?是用接 g, 接下来呢?接下来是不是要区分这个 x 大 于零和小于零?大于零和小于零我们怎么来判断呢? 是不是用应该用这个 gnb 啊?用 gnb 来判断这个符号位对不对? 用 g、 n、 b 来判断符号位,如果说是大于零的为一,然后如果小于零呢?答案就是这个负一, 这个就是我们的一个分支程序设计的一个主要的思路。好,我们来看一下它这个结果。答案,你看这部分就是个标号的使用吧,对吧?这题说是地址存在这两个单元里,那我就把 m 复制到这 n 呢,就是 c、 e、 h 这个单元,然后我给他的一个起始地址,这个 o、 r、 g 这个为指定,就这么用了。 然后我第一步干嘛呢?我把这个数取出来了,把 m 存的数取出来赋给 a 了,然后呢我用接 g 判断是不是接 g, 也就是说我这个 x 如果等于零的话,我要干嘛?我要跳到 next 二这里, next 二在哪啊?在这对不对? 如果等于零,我是不是存结果了?存结果也就是我把这个 a 的 结果赋给 n, 是 不是就我们实现了?就是说 x 等于零的时候, y 就 等于零这一步了,是不这步就实现了?好,然后呢,我们往下看,用接 n、 b 这个指令来干嘛呢?来判断。判断什么?判断 a、 c 七点七是啥意思?因为题里说它是不是带符号数,带符号数的第七位是不是符号位啊? 是不是符号位?符号位。如果说 a、 c 七点 a, 它是等于一的话,它是不是等于一的话,就要跳到哪呀?要跳到 x 一, 为什么等于一?是不是负数?我要把它跳到 next one next 一 也是跳到这来了,对不对? 跳到这来,然后把一呢送给 a, 这个是不是就相当于符合了这个 x 大 于零,然后 y 等于一的这个编程的这个函数,对吧? 我们用的是这个接 n b 指令,接 n b 是 什么?大家注意啊,接 n b 这个 n 是 啥?就是 not 嘛,也就说这一位它不为一,我们才跳,对不对? 那我们刚才说,如果 x 要大于零,是不相当于这一位不是零,它是正数,我们跳到它,然后把一这个数我给存到它这里,对吧?那么否则下一步我要干嘛呀?否则下一步我就要把这个考虑 x 小 于零的情况,把它移进去,把它传送过去,然后我再去循环 next 二这个函数,就是还是返回到这个 这部分来判断第一个情况等于零的情况,然后接着继续循环,能懂这个意思吧?啊?这个是一个分支程序设计,所以这个大家首先要理解 g n b, 然后 g n g, 然后还有这个我们会用到 g c 啊, d, g, n z 啊这些的指令,大家如果不理解啊,不清楚它具体的意义的话,是会出错的。 好,然后是这个循环程序,循环程序非常重要,非常重要啊,就跟 c 语言里面我们经常就是写个什么或者是 python, 对 吧? python 里面各种就是 for i, in range, 然后我 e 到 n, 然后怎么 e 赋怎么样,对吧?循环各种循环,你像 c 语言就是 for i 等于零, i 小 于多少? i 加加或 i 减减, 对不对?都是非常常见的,非常重要的部分,常见但重要啊,是这个循环程序的一个特点,那他这个包括哪些部分就始化,对吧?我先定义,然后循环体构建,然后我怎么控制他呢?也就说给他循环多少次,然后我才结束,对吧?一共是这四部分,就比较书面化了, 然后他呢,一共是两种,这个结构我们来看一下,就可以计数器控制循环,也就说我负一个值计数,然后要么就是一个条条件啊,一个是条件控制啊,一共是这两种, 这个是他的这个两种循环的这个图啊,我们了解一下就行啊,看是一定能看懂,能不花这个时间啊。在这部分理解上, 我们接下来看一下这个单循环的程序。单循环是什么意思?单循环就一次循环的,一次循环就能搞定的一个编程题啊,这题怎么说?在片内啊?片内,大家注意,只要是片内就都好写,因为你不涉及到什么 gdp, 这个墨迹的,这个就是很,还有这个木板 x 这些指定的一些使用 是这样的,他说片内四零 h 呢,存放了一串单次结束,把这个擦了擦, 说这个四零 h 单元当中呢,存放了这个一串单次结数,然后串的长度呢?是八,让你编成求其中最大值,这个是不是很简单? 求最大值咋求啊?求最大值怎么求?大家想你跟 c 元是一样的,你一串数,然后是八八个数,然后让你求最大值,我是说挨个比啊,我让这个,我如果是 c 元数,我是不是让第一个数是这个 最大的 max, 然后我跟谁我跟谁比啊?我是不是跟 a 一 比,然后我再跟 a 二比?如果说我这个最大值是不是比这个 a 一 要小的话,我是不是让他当这个最大值啊?然后我再跟 a 二比吧,然后我再跟 a 三比,是不是一个循环呀?是不是一次循环就能搞定啊? 对不对?好,那我们来看一下吧,这题是不是给思路了?给思路了吧,除以两两比较,较大值存在 a 直到整串的圆,就是这个原理,对不对?直接看一下吧, 它这个给的程序,首先它说偏内四零 h, 我 先把这个立即存到它这里,对吧?然后我干嘛呢? 我串的长度是八的话,八个数又需要比几次啊?需要比八减一次,对不对?因为你初始的时候已经第一个数已经负过去了,对吧?我比七次就可以,所以我在这个 r 二里面,其实你用哪个都行,你 r 七也行,你 r 七让 r 七得七也可以 啊,如果 r 七也就是把这个循环次数给他了,然后干嘛呢?然后接下来我用减值寻值,用减值寻值把 r 零所在单元内容呢赋给 a, 也就是让 a 的 那个数呢?当极大值 极大值之后,然后我干嘛?然后我进行这个二零的自增,自增就是让这个四零 h 开始吗?对不对?让他后面这个数的单元的数每个都能取到,所以我要自增。自增之后,比如说我自增了一个之后,我要把它存到 b 里面,所以我要再用一次减值寻值, 这是我的一次取了一次,对不对?第一次数据我要进行一个比较,那比较的话,我们这时候就要想到那个三字节了,对不对?三字节指令也就说比较准, 比较转是什么呢?是不是 c 接 n e 啊? c 接 n e 是 不是?是他他,然后逗号他逗号他逗号他, 我应该怎么比较啊?是不是让 a 和 b 的 内容做减法之后,然后如果不相等,然后我跳到 next, 这对不对?哎?是这个一个原理,对不对?所以我们看这个问啊,让 a 和 b 做减法,然后跳到它,如果不相等,我要跳到这 比较后,要产生这个标志的标志是 c y, 那 大家想 a 减 b 的 话,什么情况下这个 c y 会啊改变呢?也就说我这个 c y 什么时候会等于一呢? a 减 b 不 够减,是不是就等于一了?有介位的对不对?所以就 a 小 于 b 的 时候呗,对不对?好,然后大家看这个 next 这个函数是不是跳到这来了? g n c, 也就是说这个 c y 是 等于零的话,我要跳到 next one, 对 吧?否则呢?这个就是更大的数,我要给它存到 a 里边,我就找到了这个更大的数,否则干嘛呢?否则我就继续循环 这个 next one 函数是啥意思?用 d 加 n z 是 什么意思呢?我要在这个循环里面去循环我的一个比较次数,对不对? d 加 n z r 是 什么意思呢?就是只要这个 r 减一啊,它不等于零的话,我就一直要 进行这个 look 循环,大家能理解吧?我就要一直取出让 r 零递增,继续 a 和 b 进行比较, 是这个意思,然后第一次比较,这个过程我讲过了,对不对?如果说我第一个这个数极大值,我比你这个后边取的这个是不是要小的话呢?我是不是让新的这个也就说更大数从 a, 否则的话呢? 否则话呢?否则话我要继续循环,对不对?我要找到比我更大的数,等我这个循环结束之后,我就得到了最大值,我再给他存进去啊,这就是这个整个的过程。好,那啊,这部分呢?这部分是这个练习题,练习题这部分我们来看一下吧。 那些题这部分说啊,这个是外部了,外部了就涉及到这个木板 x 指令和这个 dptr 这个计算器,对吧? dptr 这个计算器来看一下这个题,他说外部 ram 三千 h, 三零零零 h 开始有五十个数送到内部 ram 当中,再让你编程实现,对不对?那这个题我说了,外部的话,我们肯定要用到什么 dptr, 对 不对?取 dptr, 它这个是不是地址指征是不是在三千 h 呀? 对吧?然后呢,内部的话我们用这个监制寻址吧,对吧?对,所以我让二零是什么?三三零 h 八, 那他说有五十个数,我是不是得传呢?我是不是得挨个送啊?我要记记,我是不是得设计一个计数器,就是说我要传多少次, 我让他从 r 七里,对吧?我一般都常用 r 七,他让让他百分之五十的就可以,对不对?然后我们第一步干嘛呢?第一步就跟大家练的题,首先我先把三千 h 呢赋给这个 d t r, 这是第一步, 对吧?赋完了之后我再把三零 h 是 不是赋给这个 r 零呢? 第三步我要负这个基数次数,对不对?幕布 r 七,然后五十,对吧?我们这也可以写三二 h 啊,一个意思 一个意思啊,然后干嘛呢?然后我就应该循环了吧,我要外部的送到就是内部,那我是不是用幕布 x 了?外部的是不是目的操作数写后边,对吧?然后传到哪?传到,传到 a, 传到这个内部三零 h, 对 不对? 先传到 a 里边,然后呢?然后怎么办?然后我要监止群止,对不对?监止群止,怎么监止群止? 把 a 的 内容是不是传到 r 零所在单元的内容,这是第一个,第一个数的传送,对不对? 这是我传送的第一个数,也就是说把 a 的 内容传给了二零所在单元的内容。二三,这个也就是说三零 h 开始的这个区域,这是我第一个数,对不对?然后下一步我干嘛呢?下一步我是不是让这个 d v t r 去自增啊? i n c d v t r 吧,然后这样我能方便取下一个数, 对吧?然后我还得 i n c 谁啊? i n c 二零吧,因为我这个内部也得给它继续开拓这个区域,对不对?我让二零自增,然后这个时候我们得设置一个循环结束吧。什么时候循环结束啊? d g n z 什么时候啊?是不是 r 七啊?也就是跟我这个循环次数挂钩,对不对?技术技术次数挂钩, r 七。 look, 好, 我,那我们来看这个 look, 我 们应该写在哪呢?这个标号写在哪?是不是应该写在这? 因为从这开始我就要一个一个取数,然后传送从外部传到内部,对不对?所以这个路盘应该标号写在这,下一步是啥呢?下一步我让它自循环啊,然后最后要接一个 end, 这个题就写完了, 很简单的一个逻辑,首先呢,这个 ram 三三零零 h 啊,这个外部我们就先想到 dpr, 然后传到内部三零 h 开始的区域,我们想要用监止群止, 然后五十个数传五十次啊,计数次数要给出来,然后先赋值,都是立即寻址赋值,这个是一个固定套路,然后我们开始传,对不对?外一步传内一步,之前那一题是讲过的,对不对?我们要考虑原目的数原原操作数,目的操作数,他们两个的位置,对吧?这个大家进行一个区分辨别,然后就能写出来。 然后后面呢我要自增,自增是开辟这个空更多的空间,对不对?开辟空间,然后让它继续传,让它自增,然后最后我要设一个这个循环次数啊, b g n z r 七, oppo, 然后这个部分就是我们的计数器这部分啊, 让它一直循环,所以我们这部分的这个标号要写在这,然后最后结束啊, s g m p oppo, 然后 and 这个题就可以了, 我们来看一下这个答案是怎么写的,答案是这样的,大家来参考一下就可以。好。 然后就是多重循环,多重循环这部分呢,比较难的可能就是让你编写这个软件延时程序啊,这是一个重点,它就是包含这个外循环、内循环或者是外中内啊,这各种循环的这个一个欠套是这样的, 然后这个是我们一个重要考点,就是这个软件延时程序,软件延时程序呢?他是前面一个知识的一个和结合啊,相对难度呢,就是稍微大了那么一点,大那么一点,大家听我讲就可以理解 这个是啊,一个考题比较重要的一个考题,他可能会给你嵌在一个综合题里面,然后让你写这个,他可能只是你的一个一部分,但是可能就是一些啊,普通的高校他可能就直接考你,让你进行一个软件延时程序的一个编辑啊,这是也有可能的, 那这个延时程序我们来看一下吧,它会给出你这个进站频率,也就是我们之前提到这个 f o s c 啊,它是等于这个十二兆赫兹, 然后问你这个,让你写这个两毫米验证程序,这题我们咋想呢?这题我们可以先不看,给出这个答案我们怎么想?也就是说它给出的进账频率,首先你要想七周七是多少,第一步用这个公式,对吧?十二除以 f o s c 等于就是 那笔有点不太好使用,十二除以十二乘十的 六次方,也就是十的负六次方秒,也就是一缪秒,也就是说我一个机器周期, 机器周期就是一缪秒,我要编辑两毫秒的演示程序,我们来看一下,把这个两毫秒给它画一下,对不对?两毫秒是不是二乘十的三次方 为秒啊?也就是两千吧,两千为秒对不对?两千为秒。然后我们要记得一个一个套路,就是说啊,因为是这个外层循环套,内层内层外层这个件套嘛,对吧? 所以我们会用到的指令有哪些呢?首先肯定是外层有一个赋值,比如说我赋一个是一个多少,然后我内层呢?也有一个, 但有时候可能里边还需要有一个啊,是这样的,然后我这个循环里面肯定是有 dgnz 的 啊,因为我要循环嘛,对不对?我要乘以多少的,一定有 dgnz 这个这条这个指令,然后是多少? 然后我再返回我内层的一个循环啊,这个是一个基本套路,那我们应该一般是从这个从外往内去考虑这个数字付多少,我外边一般付的是最少的,我们一般是给十,我们先试一下好不好?先付十的话,也就是说我这个最后要乘十,也就说我内层是不是剩内层让他记两百就可以? 进两百的话,大家要了解的是,如果 dgnz 这条指令它是不是两个周期,两个机器周期就是二微秒呀?二微秒的话是不是我一百次就可以, 你是不是一百次就可以?这个大家能理解吗?好,然后呢 我让他进行一个递减这一个循环的编辑,那我们直接来看一下这个他给出的这个 delete 二二毫秒的这个函数吧, 他这个最外层呢是二七十,这个是为什么呢?他这个木是不是一个机器周期单周期的一个指令?然后他接下来这个开始这个 d 二一这个循环,把这个四十八付给了二十六,把四十八付给了二十六,也就是我要循环四十八次,在哪循环?是不是在这循环? 然后 dl 二呢?是这个两个空指令,空指令每个空指令是一个机器周期,那是这样的, 那大家想啊,四十八加一加一是不是就五十个了?五十个的话是不是就相当于外部就是五十乘十就是五百了,五百,然后我内部这个是 整体,它是不是还得再乘二啊?因为我 dgnz 是 不是两个机器周期啊? 所以是不是就是二毫秒啊?这个能理解吗? 也就是说这部分首先外层呢,我给它负一个十,然后 dl 一 呢?我给它负一个啊,除以十之后我应该是多少?但我们要考虑到我们用的 dgnz 是 两个机器周期的 这个指令,所以我要在这个啊,基单基周期的这个数的基础上,我要乘以二,那为什么要乘两次二呢?因为它是两层的一个循环,对不对? 所以说它要乘两次,这样的话呢,就构成了一个两毫秒延时程序,它是这样计算的, 基本的一个思路是在这,如果大家这部分呢,没有特别的清晰去理解呢?我们直接告诉大家,就说这个 nop 这部分,我们其实是不不会要求你去写在这个程序里的,也就是说我们只需要把一个大致的个数,比如说我负的值是正确的就可以,我们尽量是去取这个十五、十二、十一百这种数就可以了。 我们拿一道题来进行一个举例,我带大家写一下,大家就理解了啊,他让你写的是一秒的延时值程序,然后给出了这个 现在频率是六兆赫兹,那还是他这个周期是不是六啊?是不是两微秒?两微秒的话,他让你延时一秒,一秒是多少呀?是不是十的六次方微秒啊?那我十的六次方除以二是不是? 这是多少啊?这个不是很多,就是数特别大,对不对?十六乘以二,我先暂且先不这么考虑。那我第一步应该先怎么考虑呢?第一步 一个级周期是两位秒哈,一个级周期两位秒,我们用到会用到这个 d g n z, 我 会用到 move, move 是 单级的指令。那我们第一步应该先怎么写呢?先写外层吧,比如说外层 啊,我先给他付一个元数,比较大啊,我们用这个三位数吧,我们用一百先付一百,先付一百之后,然后我们考虑一下内层。内层的话, 我们用二十六存,然后二十六存,我给他存一个十吧,我给他存一个十,这都是单子期指定啊,单子期一个,一个子期周期,然后我们应该怎么付呢?我们来想一下,用十的六次方除以二,是不是相当于是,嗯,五,然后是零零, 对吧?也就是说这个笔三四五六,然后我除以二,对吧?所以其实五后面五个零,五个零,然后我给他怎么拆呢?我给他怎么拆?一个是两位秒, 我再除以二是不就可以? 是不是就是二五零零零零,然后这部分我们怎么办呢?这部分我们怎么办?给它拆成二百五乘十乘一百是不是就可以了? 我们这样是不是就顺利找到了这个内部外部的这个循环了?那也就是说内部怎么付啊? 内部我把这个值赋给二十七,我是不是让它乘,就是内部是二百五就可以了,对吧?然后这个是我的,就是内部循环第一步,然后接下来我循环,我怎么循环?是不是 dgnz 二十七,然后这个循环,对吧?下一个 dgnz 是 谁啊?我应该循环二六这了,对不对?然后二六,然后 dgl 一, 那是第一个,然后我再循环谁啊? dgl 二, dgl 在 哪?这个标号应该写哪? 应该写字啊?这是 d l 一, 这是 d l 二吧,为什么这么写呢?按刚才这个拆的方法,我再说一遍啊,十个六次方为秒,每个周期是两为秒, 我们除以二之后发现,哎,我们的这个子程序里面应该是这部分进行一个拆解,对不对?然后我除以二之后,是不是 得到了这个最内部的这个循环?最内部的这个循环应该是多少?最内部的循环应该是二五零零零零,我把它拆成三部分,也就是二五零乘十乘一百,这样的话呢,我的这个循环的这个负值我就大概知道了 啊,我这个在内部付最大的,然后中中层呢?可以付一百,也可以付十啊,这个大家自己选择就可以。然后我这个,呃, d l e 这个喊这个循环里面呢,我需要对它进行一个 d g n z 的 一个循环啊, d g n z 这个循环, d g n z 这个循环,考虑到 因为它一个指令是二周期,二周期也就是四微秒,对吧?所以是四微秒,然后我要循环二百五十四,所以这个是 一千为秒,然后再到这一层是不是十次?我要乘十是一万为秒,一万为秒再乘,这个最外层是不是还要再乘一百?所以是不是就变成十到六次方为秒了?是不是就是一秒? 所以说这个子程序是这样写出来,嗯,是这样慢慢凑出来,但相当于这个是一个相当于大家去理解、去计算的一个部分。其实大家如果题做多了的话,对这个数据的这个循环次数的把握是会更加简单的 啊,就是直接能写出来,不用说把它拎出来啊,它是多少微秒,然后我出它是多少,但是啊,重中之重还是这一步,我们要知道用哪些指令,然后每个指令它是单级周期指令啊?还是说是二级?这个机器周期指令, 你看这个 d n z, 它就是二 t, 二 t 呢?一个 t 是 二维秒,二 t 就是 四维秒啊,我们是从这一点拿到了切入点,然后判断出来这个是二百五就可以啊,这个是第一步的这个内存,把这搞定了,然后我们再去解决这个外部的这两个,一个是二十六,一个是一百, 这个是一个固定的格式。其实来讲这个啊,延迟子程序的话啊,我们这关就讲到这个, 然后啊,我们这边给出了他的这个答案哈,答案我把这部分给大家清空,大家理解一下啊。先看这个 d e 一 这个循环,刚才说了是 二 t 等于四微秒,对吧?然后乘二百五就是一千了,一千,然后再看内部是它,然后最外乘一百啊,这样就是十的六次方微秒了,但是这部分从后往前写,这部分我写出来之后,我教大家一个答题技巧, 从这儿开始写,往前写对吧?要瞻前顾后对吧?我前面这部分设计完了,但是我这是一个循环,对吧?我成是因为啥?是不是我成的是这个循环次数啊?所以我后面要继续用这个 djnz 来完善吧, 所以这部分也要进行一个书写,大家能理解吧?所以这个格式是很简单的啊,大家多练几个就可以,你随便写一个,比如说五百毫米啊,比如说六十,这个六十秒有点长,比如说你练习一个五秒五秒子程序延迟啊,我们在这个可能实验中会学到的。 好,那这部分我们先到这,接下来我们来看这个子程序吧,子程序以及其调用调用子程序我们其实是在函数里面是提到过的 c 语言函数,对不对?我调用泛函数,然后我去让它 啊输入一个数据,然后我启动这个函数,让他执行调用。此程序呢,也就是说我暂时要中断我这个函数,这个这个程序执行啊,主程序执行,然后转到这部分的子程序,然后进行一个执行,然后我这部分执行结束之后呢,我要返回主程序继续执行主程序啊,就是这样的一个意思,大家了解就可以。 然后啊,它的一个这个书写的一个重点,一个是名称地址公用啊,就是一个像像我们为指定这个大概是那种意思似的,我要标明入口地址是在哪,然后名称是什么,然后我们方便的调用,对吧?比如说我 loop 啊, next, 这都是 像我们刚才上一个题啊,然后还有这个重点还是在哪呢?还有这个保护现场,这保护现场在会编其实讲过,也就是我的入站,然后出就是入站这部分嘛,对不对?给它 push, 然后子程序末用 r e t 返回,表示这个指令结束, r e t 就是 return 嘛,那 return 跟 c 元这个 return 连,其实是有这个差不多是一个意思啊,只要大家了解就可以, 然后我们来看一下有关的指令,有关指令刚刚讲了入站出站保护,对不对?嗯,保护现场就是 push 和 pop, 然后子程序调用,子程序调用调用,我们用的是靠这个指令,靠里面呢主要包含第一个叫绝对调用,绝对调用叫 a call a 呢,就是这个 absolute, 绝对调用啊,绝对调用,第二个叫长调用,叫 l call, l call 呢,它是范围就是在十六十六位啊,十六位,然后子程序返回 r e t。 就 刚才说过了 啊,这个部分呢,其实是跟我们前面讲的,大家发没发现就是跟这个 l g m p 啊,然后这个 a g m p 啊,还有这个 s g m p, 是 不是 啊?是可以,就是结合着去记忆的都是 a l s 这个 absolute long short。 但是雕用里面其实就只有绝对和缠斗用啊,绝对雕用,缠斗用,大家结合着去记忆就可以啊, 但是我们在编程的时候,大家如果怕错的话,编程大家写错的话,我们就用 l call 就 可以啊,就是大家统一用 l call, 然后用 s g m p, 其实就可以啊,不会对大家有这种硬性的要求啊,编程这个硬性的要求不会的,这个大家注意一下就可以。 好,我们来看一下这一张指令系统以及会编语言程序设计这部分的,我们有一些重点习题给大家进行一个讲解啊,我们来看第一题, 片内 ram 三零 h, 内容是零 e h, 他 问你执行下面程序中 a 的 内容是什么,然后让你给出程序完成的功能是什么?我们一个一个看啊,这第一步把三零 h 这个数据是不是传给 r 零了?我们一步一步写哈,也就是说 r 零的内容是谁啊?是不是三零 h 所在单元内容是谁啊?是不是零 e h? 也就是说现在 a 当中存的内容是不是就是 零 e h 呀?好,然后大家看,执行了一个 r l a, 也就是说是啊,循环左移指令对不对?循环左移, 那也就是说把这个零 e h 循环左移移位呗,对吧?那零 e h, 我 们写一下哈,零零零零 e 是 什么?幺幺幺零对不对?循环左移,是不是把这个零挪到后边去,是不是就变成零零零幺幺幺零零呢? 把它挪到后边去,把它提起来,对吧?这样变的吧?是不是就变成零零零幺幺幺零零了?是不是就变成幺 e h 了? 幺 e h, 对 不对啊?不对。什么幺 e h? 幺幺零零是多少? 应该是幺 c h 吧?零零零,然后幺幺零零幺幺零零是不是 c? 所以 答案是幺 c h? 好, 其实我们算它这个结果,没有必要哈,其实它这个就是啊,左移一位,对吧?然后往下看哈,然后把 a 传给 b 了,就存到 b 里了,然后我继续让它移移,这是,这是又移了一次,然后又移了一次。那这个题主要想考大家啥呢?这个 r l 呢? 他其实就是乘二的意思,左移就是乘二,右移呢?就是除二。那大家看第一步,第一步他这个 r l 一 次是乘二,为什么是乘二啊?零 e h, e 是 多少啊? e 是 不是十四啊?幺 c h 是 多少呢? 幺 c 是 多少?是不是十六加十二啊?是不是二十八呀?是不是相当于乘二了?那它这个又乘这又一个二,然后又乘二,这是不是又乘二?所以其实我一共这乘了多少了? 是不是乘了八次啊?乘八次对不对?然后我这个时候要拿 a 的 值和 b 的 值加一起,我 b 的 值是不是乘二了? 所以其实是,我是乘了多少次?乘了八加二次,对不对?所以其实是扩大了十倍吧。那这个结果我还用我讲吗?那我答案还用我讲?就是你把这个零点也是扩大十倍就完事了, 对不对?所以这个答案是啥呀?把三零就当内容乘十操作,对不对?然后最后我存到 a 里边啊,来看下答案,答案就八 c h, 八 c h 是 多少?你一算就可以啊,不就是这个十四然后乘八吗?对吧?十四乘八,一百一十二, 嗯,好, 不对?乘十对吧?十四乘八一百四嘛,对吧?这个题是这样的,是一百四。 然后第二题,第二题编程让你片内这个,然后传送到它,这个是不是刚才讲过一个片外,然后送到这个片内那个题,对不对?刚才已经这个演示过了,这题怎么算?三零到三九 h 是 这个这个内容,然后我要送到这个三零零零为首的这个存储区当中, 这个题怎么写啊?第一个是不是还根据题先写啊?先这个肯定要坚持循序嘛,这个题套路对吧?我先把三零 h 给给得到,对不对?所以我用什么?立即数循序吧, 立即数循序之后,然后我要送到这里边,我要获得这个三零零 h 第一日指针,所以我要用到 dbtr, 因为它是十六位,对吧? 三零零零 h, 然后大家看我三零 h 到三九 h, 我 要传多少次,就是应该给多少,应该给十啊,零到九嘛,给十次对不对? 给十次。好,给了十次之后,我们来看一下这部,后边这个就变成我的这个,如果写习惯了,其实就是 look 了,就到这个循环环节了,然后我怎么循环啊?我第一步是不是先把这个数先给存到三零零 h 为为首的这个存储区当中,我取第一个数吧, 对不对?那这一步大家看这个 a 和 d v t r 它俩能互传吗?是不是不能这样写?所以说这个 a 应该换成谁啊?应该换成二零,这样的话我能够用进行这个监止寻址,对吧? 因为你 a 和 d p r 互传应该用的是这个啊,木瓦 x 指令,所以我们这一步如果改成 r 零了之后,我这个是不是就可以先这个啊?禁止寻址了,对吧?所以就是艾特 r 零,就是把三零 h 单元所在内容,哎,我传给谁啊?我传给谁?传给 a, 也就我目的操作数是 a, 传给 a 了之后,然后我再让 a 和 d p r 这个指令,对吧?传给谁呢?传给 d p r, 所以 这个目的操作是不是 d p r, 然后原操作数是谁啊? 圆槽的数就是 a, 对 吧?这是第一个数,乘完了,乘完了,我是不是得乘第二个数啊?我是不是得让这个 r 零自增,然后 d p t r 是 不是也得自增啊? d p t r 然后我也得自增,这个比 啊, i n c 然后 d p t r 是 不是它也得自增? 它们两个自动之后,然后我们是不是得判断什么时候结束了,什么时候结束,是不是在这写了这个循环次数?计数器是不是给了?就是 d j n z r 七吧,然后 look 吧,后边就跟这个循环标号吧,对吧?用这个函数结这个,这个程序结束了,用 read r e t 就 可以 啊,这个数就结束了,实现了这个循环,对不对?三零 h 到三九 h, 然后往挨个去传,然后 log 是 在这开始的,因为这是传的第一个数,然后一直循环,让它自增,然后写了一下,看到没有问题,对吧?好,我们来看一下答案,看一下答案, 答案啊,它在给二零上,然后这个是取这个 d t、 r 地址,然后计数器,这是准备工作,大家理解一下,就是准备工作,准备工作哪来的呢?齐来的,齐来的 开始是三零 h, 然后传十个,传十个单元当中内容对不对?然后三零零零 h 是 不是这个存储区为首这个存储区的这个开头这部分啊?这是三行代码对应三个题里给的这个题,这个题内容,然后我循环,循环,就一个一个取数,对不对?循环取,然后传到这里,就不能就是写我一个动作, 动作就是第一个结束了,然后我要让它自增,然后 d v t r 也要自增,然后开启下一个数的这个,这个这个存储,对吧?传送,然后我要判断循环什么时候结束,循环什么时候结束,是不是根据这个 r 七计数器来判断的? r 七只要不等于零,我是不是让它一直循环,一直循环在这个 l 一, 这个 l 一, 就我们刚才老师比这个展示的这个 look 啊,其实是一个意思,你就是愿意定义啥,定义啥啊?你随便,你 a、 b、 c、 d、 e、 f、 g, 你 随便定义啊,都可以,然后最后结束。这个题是这样的,还是比较简单,比较简单,大家理解它的过程,然后掌握这个套路就没问题。 然后第四题,第四题呢?相对墨迹一点啊,但是这个题主要考的是什么?考的是你这个子程序调用,这题是咋说呢?他说是二十四、二十五、二十六,当中三个字节数据对半分解成六个字节啊,这题啥意思呢?画一个图哈, 这是三个字节的数据,这是二十五,然后这是二十六,这是三个字节,你就说一个字节八倍呗,对不对? 三个字节,三个字节,是不是一个里面存着一个字节,也就是八位,它要对半分解。什么叫对半分解成六个字节?就是这样分呗,这个这个,这个直线画的不好, 对半分,对吧?对半分解,你就变成四位四位的了呗,对吧?变成四位四位的,这是四四四四四,然后它让你存到这个显示缓冲区, d i s m e m 零到五就给了六个缓冲区,对不对? 给了六个缓冲区,很显然,我们这个只需要写出一个子程序,然后我一直给他调用,是不就可以啊?对吧?我给他分解,然后存进去,其实只需要一步,然后给他写成一个子程序,我来回调用就可以,对不对?好,那我们先考虑谁呢?先考虑这个 第一部分啊。第一部分我们怎么想?怎么考虑?我们先看先写什么呢?先写这个对半分解吧。对半,对半分解,我怎么分解啊?对半分解,我直接这么写吧,就分解 分解这个子程序,我咋写分解子程序? 对半分解是不是可以先?像刚才就是讲之前讲过那个题似的,先啊,取这个高四位,然后低四位,然后我这个给它交换,然后我再去传,是不是一个道理啊?对半分解,是不是就这个意思?就是高四位低四位嘛?然后来回给它换,然后给它分解,然后存进去, 对吧?那我第一步我先这样吧,我先把 a 这个数据我存到 b 里边,所以我先把这个数存到 b 里边,对吧?然后这个时候呢,我先取的是谁啊? 我先取的是 d 四位吧,取,先取 d 四位的话,我是用语音算,比如说把高四位清零,对吧?所以就很简单,快点写啊。我们然后就是 a, 然后零 f h, 对 吧?这个时候我们取了 d 四位,取了 d 四位呢? 把这个数,把 a 得到这个第四位的数存到二零里边,然后这个时候呢,我再把 b 的 值呢?我再存到 a 里边,这个时候我在干嘛呢?我是不是继续给它进行一个这个取这个高四位呀? 这个时候就变成啥呀?变成零 f 零 h 了吧?零 f 零 h, 对 不对?这个时候我取的是高四位,取完高四位了,然后我给它对半分解这个六个字节,就是根据提议,对吧?我要给它高低字节互换吧,是不是用一个 swap a 就 可以, 对吧?用了一次 swap a, 是 不是就相当于我给它把它存到一个计算器里就可以了? 我们用这个 r 一 计算器吧,把这个结果存到 r 一 计算器当中,然后这个就结束了,大家注意,这个是我的这个子程序,这是我的子程序,那我刚才说了,你把这个写好了,你只调用它就可以了,对不对?我们怎么调用啊?我们先先用第一个吧。 啊?把这个值啊,我先付给,把 r 六,先把 r 六当中,这个内容呢?啊?我先付给 a, 付给 a 之后 是不是我要进行操作了,我进行操作,是不是调用子程序就可以了?用 lcall 吧,刚才说过一直咱们用 lcall 就 可以, lcall 这个分解,对吧? lcall 分 解, lcall 分 解就可以, 就是啊,我们调用了之后,调用了之后是不是说这个 r 零和 r 一 一部分是存这个高高四次结,然后那一部分是低低四次结,对吧?啊?高四位,低四位啊,对吧?那我们第一个就是把 r 零的内容,它说存到谁啊?存到显示缓冲区里边,对不对?那你就根据题来就行了, d i s m e m 零,对吧?然后把 r 一 存给谁啊? 把它存到一里边,对吧?这是我们的 r 六当中的这个字节数据,对不对?存完了,然后我下一步还干嘛呀?我是不继续 l 靠就可以了,我还 l 靠。分解,然后我存到存谁了,该存谁了?这个是一啊,该存谁了?该存 r 五里边,是吧? 把它存到这个二三里,对吧? d i s m e m 二三,我再 l 靠一直子程序调用啊,就可以了,就结束了,其实很简单的一个题其实很简单的一个题,你只要把一个图啊图式图给他拆一下,然后你给他画出来,然后我们大致能够理解出它是怎么的一个对半分解的一个过程 啊,就可以了。好,然后大家如果对于这部分不理解的话,大家其实是可以去参考一下前面讲过的,就是说我做了与预算,然后我再给他这个高低字节互换,就这些指令一个结合,大家先去理解之后啊,再来看这道题的讲解也是可以的。这个前面我是有啊,仔细讲过这部分 如何去高思维清零,然后高低字节,这个高低思维互换是这样的, 这题正好就考的是这个字节吗?数据对半吧,其实是跟前面讲的那个内容是有重叠的。好,这个题我们就讲到这,我们来看下一个题吧。 啊,这部分是答案,我们给大家展示一下啊,是在这这样子先写这个子程序, 你大家看,虽然他这个顺序是是这样的这么排布的啊,但是你做题肯定是先把先想下子程序,完了我一直调用就可以,对不对你,其实你怎么写都行啊,好 看,下个题,下个题啊,这题是不是 ppt 上讲过呀?就是二零 h 开始单元存放十个 b b c d 码,然后转换成这个 r 色码,对吧?这个是不是还是循环?循环计数是循环多少啊?循环十次吧, 循环十次,二零 h 开始单元,所以是不是开始准备那部分?我让二零付给谁呀?二零付给二零 h 吧,传到片内五零 h, 这是不是不用 t p t r 了?我用这个二一是不就行?然后二一是五零 h, 然后我给它减值,寻值吧, 减值寻值之后,然后我是不是给它加 add, 然后我给它转换成这个二次码,我加多少是重点,对吧?加三零 h 是 不是就变成这个二次码了,然后给它存进去,对不对?然后接下来我是不是循环循环前面我是不是得让它自增, 就按 c, 二零按 c 这个 r 一 啊,然后我就判断循环 d g n z d g n z 有 谁取由谁,这个决定是我这个循环次数十次决定啊, 就是 r 七,然后我再拿个 look, 然后我再决定一下我 look 写哪,写这,对吧,然后最后结束 r e t, 那 很简单,我不细讲,我们接下来看答案啊,再看一下答案 啊,这个跟我说的一样,对吧?啊?先赋值,赋完值,然后我开始循环了,传数啊,这个它们两个相加,就是第一个数的这个阿斯玛的转换,然后减指寻值自增,然后循环,循环,只要它不为零,我就一直要跳到这进行循环,这样就存到了十个 这个数,然后存到五零,就开始单元,然后最后结束,很简单嘛,对吧?是不是很简单, 给大家去整理一下啊?我前面的 ppt 其实给大家展示过,也讲过这个具体的这个做题的一个方法啊,其实就是套路题,套路题好,来看看第六题吧。第六题是?嗯,也是也是比较简单,但是可能理解起来呢,跟之前的题不太一样。 大家听我讲啊,这题是说二零 h 单元开始有一个无符号数据块,然后说长度在二零 h 单元,让你求最小值存入它,这时候跟我刚才讲的那个就是 max, 就 让你求这个 最大值那块,其实很像的啊。 c 是 不是讲过,就是说你怎么求这个数据?刚才给的是字母串,这个是八串,八一串是八个数,对吧?我得比这个七次,对吧?他说这个长度在这里面,也就是说我这个 二零 h 是 不是他的长度,他他里边内容是他,对吧?那我他减一,是不是我的比比较的这个次数啊,对吧?我比较求这个最小值值的这个次数,对吧?然后这题还给了二零 h 单元,开始有这个无符号数据罐,然后让你求他,然后我要存入他,这是不是题里的已知条件呀, 对吧?好,那我们来看一下这个题,他说这个长度在这里边,然后如果我要编写这个准,就是调,根据已知条件写代码的话,我应该怎么写这个?呃,计数器呢? 我们 c 里面是让这个它减减,对不对?就或者它减一就可以,那我们在汇编里面应该用什么呀?大家应该想到它减一的话,其实用一个一次自减就可以,是不是我用一次 d e c 就 可以, 对吧?那我怎么写呢?我就先把二零 h 存到 a 里边,对不对?第一步我把二零 h 存到 a 里边,大家跟着我的思路走啊,就能理解。先把二零 h 存到这里边,是不是就我的这个数据块长度呀?对吧?然后接下来我第一 c a 是 不是就是我的比较次数就出来了? 它减一是不是我的比较次数也就我计数器,对吧?然后接下来呢,我把这个比较次数呢? 我给存到 r 七里边,这个计数器是不是就有了,对吧?还是一样的,其实跟以前没有变,我们自检一次,然后取过就是。好,然后它要存入这个 r 一 h 单元,我们把这个 r 一 h 赋给一个寄寄存器就可以,是吧?我们把这个赋给这个 r 零吧,就是 r 一 h 这个数赋给 r 零,然后这个时候我们应该怎么写啊?我是不是这题要用这个监止值啊? 对吧?我因为它要存到这个 r e h 单元当中嘛,所以我要用一次监制寻址,找到最小值,存到 r e h 所在单元,对吧?然后下一步干嘛呢?我们根据之前我们学到的,我是不是可以让它增?因为它其实跟前面那个是一个意思,对吧? 哎,我让他自增,然后我继续去跟他比较,然后谁小,然后我就判断他,然后谁怎么样,我再执行下一步,所以我先 i n c r 零吧, i n c r 零,对不对? i n c r 零,然后这个时候我应该怎么办呢? 这个时候我要把这个数存给谁啊?我比如说我存给一个四零 h 这个空间, 我把这个数暂存到二零这个二零这个所在单元内容存到四零 h 里边,对吧?这是我的这一步,这一步是为了干嘛呢?这一步是为了下一步来考虑,下一步我要进行比较了吧?进行比较,就像我们刚才讲的是要用到 c g n e 这个指令, c g n e 是 不是三字节指令? 我要和谁比?是不是和 a 比啊? a, 然后四零 h 吧,然后后边应该是一个循环,对不对?那我就用 look 啊,我用 look 一 吧,用 look 一 啊,也就说这步我要用 a 和四零 h 做比较,对不对?如果他们不等的话,我要跳到 look 一, 对不对? 那我们来看 look 一 怎么写啊?从这个标号开始, look 一 怎么写?如果说他们不相等的话,是我要进行一个具体的比较了, 具体的比较怎么比较呢?是不是我这个数和这个数就是说我小的话,是不是 c y 就 等于一了?这个时候我们是应该用接接 c 这个这个指令,如果说我这个数比它小,也就说我 a 的 数和四零 h 数相比的话, a 的 值要小,对吧?如果就是这个情况下呢?我们接 c next, 就 跳到 next, 然后接下来我们要写这个 next 的 这个函数,对吧?如果说呢?我这个数要大干嘛啊?如果这个数大,我是不是就直接给它存里就行了?把这个二零所在单元内容我存给他,是不就就结束了呀? 对吧?然后如果 next 的 话呢? next 的 话就是我们要进行一个循环,对不对?就是 d g n z, 然后我要进行一个 r 七 look, 让它一直循环比较,对吧?循环比较只要它等于零了,然后我们满足了,这个最小值已经找到了,我们把这个 啊最小值啊存到 a 里面,然后给它存到二 e h 当中,然后我再结束啊,这是不是一个基本的思路?它跟前面那个最大值其实思路是一模一样,一模一样 用的质量 c n e, 然后接 c, 他 那个可能他他那个是用的接 b c, 对 吧?还有这个啊,不是接 b c, 用的接 n c, 然后他那个串的这个长度是给了的,所以我们直接赋值。但这个题多了一步是这个长度,在这个单元里面,我们需要给它自减一次,然后再赋给二七做这个计数器。这个题他都不一样的点啊,确实他不一样的点 啊,这个很简单。然后这个 look 一 我们写出来了,我们来看哪部分还需要再啊?改进一下,大家看这部分是不是我自增,这部分是不是我也要啊?取数的一个循环,需要一个取数的循环让它自增,所以我这部分是 look, 对 不对? look 是 不是就跟这对应上了?取数的循环是不是跟这就对应上了?所以我这个 look 应该加在这吧,所以大家注意完善这个代码啊。所以一共是两个循环,一个是这个取数的,然后一个是这个比较之后,然后不相等的话,然后继续继续进行比较的这个循环一共是两个循环啊,是这样的, 然后大家看这个还有这个 next, 这个 next 呢,是在这个 loop 当中的另一个循环,也就是说这个题呢,整体来看是一个嵌套的啊,是一个嵌套的,大家整体看这个结构,再自己去,然后写一遍这个程序,我把答案给大家,大家再看着去理解一下啊,整理到自己的笔记上 啊,是不是这样的啊?从哪开始的?这部分是准备工作对不对啊?没有标号开始的就准备工作,准备工作,然后自增传给他,然后第一次比较,比较之后不相等我再转他,这 如果说他小于他,我跳到这来,然后我进行循环循环比较,循环结束了,我得到最小值了给他,否则呢,我就把这个所在单元继续传给 a, 那 就这样这样的一个判断的一个过程。 好,那我们这部分就讲完了啊,那第二章的第二部分我们就结束了,第二章就告一段落啊,那谢谢大家的这个收听,那祝大家能够在期末高峰通过这门课。

前面我们说了,计算机是基于电工做的,他能直接理解的就是高低电瓶所对应的零一零一这种二经之指令。 而直接用二键字编程的这种方式就是机器语言,这种编程方式执行效率是最高的,因为计算机可以无障碍理解,直接运行,但是它的复杂度极高,开发效率极低,你可能要写一大堆零一零一这种二键之数,才能实现一个非常小的功能。然后我们再来说会编语言,会 汇编语言仅仅是用一个英文标签代表一组二电子指令,汇编语言打印一句哈伦味的需要十多行代码,可以稍微看一下。相对于机器语言,汇编语言使用英文标签编写程序相对简单,资金效率稍低, 还是太复杂,开发效率依旧很低。而高级语言就是站在人的角度,用人类的字符去编写程序,但是因为高级语言离硬件更远,更贴近人类的语言,人类可以理解, 而计算机则需要通过编辑最终转换为二经制计算机才能理解。所以高级语言的执行效率相对前面两种语言会低一些,但是开发效率却得到了极大的提升。在高级语言中,按编意方式的不同又分为两种,一种叫变异性语言,比如 c 语言,另一种叫解释型语言,比如 变异性语言,就是程序写完之后,用一个变异器类似于翻译软件,把完整的程序员代码翻译成计算机能识别的机器语言。因此这个变异之后的机器语言可以脱离其语言环境独立执行,执行效率极高,但是开发效率相对较低,应用程序一旦需要修改,必须先修改原代码,然后 重新变异,生成新的目标文件才能执行。并且变异型代码是针对某一个平台变异的,当前平台的变异结果无法在其他的平台使用,因此跨平台性也很差。而解释新语言 需要有一个解释器,类似于翻译官,解释器会读取程序代码,解释一行立马执行一行,因此执行效率会被解释器拖慢。但是开发效率极高, 一旦发现错误直接修改就好,改完直接就可以运行解释型语言针对不同的平台会有不同的解释器,所以解释型语言的代码在不同的平台也可以直接运行。最后我们来总结一下,从执行效率来讲,机器语言是大于汇编语言,大于高级语言的,而高级语言中变异型又大于解释型。 从开发效率来讲,机器语言小于汇编语言,小于高级语言,而高级语言中变异型又小于解释型。同时解释型语言也具有极强的跨平台型。 由于现在主流开发的程序都是基于网络通信的,我们写的程序执行效率再高,最终都会被网络延迟拖慢,所以我们主要考虑的就是开发效率和跨平台性,这就是为什么拍摄现在这么火的原因。

同学们大家好,我是来自数学建模老婆团队的 g 老师,今天很开心给大家分享单片机原理及接口技术这门课程的期末突击课, 帮助大家能够在考前高分速成这门课,避免挂科。首先我们来看一下这一章我们主要讲解的内容有哪些。本章主要有两个重点,第一部分是选址方式的判断,接着我们会讲解单片机的指令系统。 第三部分我们会进行一些这两个部分章节的考题精讲和精练。 我们来仔细看一下这一张的内容主要有哪些。首先对指令进行一个概述,对定义进行一个说明,接着我们会讲解指令的寻址方式。 接下来我们会讲解五大类的指令,主要包括数据传送类指令、算术运算类指令、逻辑操作类指令、控制转移类指令,还有我们的类操作指令。 好,我们从头开始讲。首先看第一部分,叫做指令的一个基本的引入, 指令的格式是一个固定的,我们主要包括标号、操作码、操作数,还有一个注示,但是注示和冒号它们是一个相当于捆绑的一个状态, 也就是说我在一行代码的后面,如果要对这一行代码进行一个注示的话,是要在这行代码后面标一个分号,然后写出我的注示,其实就相当于我们 c 语言当中的什么表示,这个 或者是这个就是对这一行的一个注示啊,他们是一个意思。好,那我们看这个固定的这个指令格式,其实主要还是包含的是操作码和操作数, 我们下面给给出了操作码和操作数的定义,首先操作码它表示的就是我们指定的操作种类,也就是说我如何对这个数据进行一个啊移动啊传送,或者是啊操作。 比如说我们列举 move 这个指令,或者说是 a d d 这个指令,或者说我们还可以列举 dc 指令, i n c 指令啊, dc 表示的是自减, i n c 表示的是自增。我们可以发现操作码的意思,其实就是我对这个数我怎么去给它操作,我的动作是什么? 那操作数也就顾名思义,如果我们指令中有操作数,也就是说这个参加的这个数据,或者说我这个数据的地址就表示操作数, 也就是我要把这个数据送到哪啊,也就是我们的这个定语,也就是这个名词是什么? 我们在英语当中说是动词加名词对不对?动词其实就是我们的操作码,我目对不对? 然后名词是什么?我要 move 一个 number 对 不对?我要把数传给哪里?所以操作数其实就是我们这个 number 啊,大家可以这样去理解, 然后我们来看一下操作数的类型有哪些啊?在上一章我们其实讲到了一些啊,立即数,还有我们的计算器组织的一些概念 啊,它主要是啊类型是这三类啊,我们这个稍稍带去理解一下,主要是立即数,存储器操作数和存储器啊,寄存器操作数和存储器操作数这这三类啊这三类。 然后我们来看一下指令的描述约定,我给大家列了一个表出来,我们挨个来看,我们一组一组来看,首先我们来看 r n 和 r i rn 表示的是啊,工作寄存器组,我们在第一章的时候其实是讲过的,我们把这个啊工作寄存器组啊,是分成了 r 零到 r 七的,也就是八个,对不对?它其实是两个一组的, 两个为一组,也就是四组。 r 零到 r 七啊,一共是四组,那它的这个序号 是不是我们就可以这样理解,这个 n 它是等于零到七的啊?大家一定记住是从零开始的啊, 这个表示的是工作寄存器 r i 呢? r i 这个下角标变成 i 了的话,你要注意它呢是只能是零或者是一,也就只有两个啊,两个这个兼职群主啊,主要是用于兼职群主的。 好,这一组我们看完之后,我们来看这两个,这两个 data 啊,它后面大家看,先看十六吧,十六其实就表示十六个立即数, 那它这个没有了,其实也就是 data 八啊,大家也可以继承 data 八或者是 data, 它就是八位的立即数,这个就是一个数据啊,因为前面是有这个简号的,简号我们后面会讲表示的就是立即数的一个标志啊,然后你再看这个 a d d r 和 a d d r 十一啊, a d d r 的 意思就是啊, address 的 缩写对不对? 然后后面接的这个数字,一个是表示十六位,一个是表示十一位,它们的寻址范围是不一样的,大家来看为什么哈,它这个是说用于六十四 k 寻址,六十四 k, 大家想六十四 k 是 多少个 k 呢? 是多少 k 呢?大家学了祭祖就应该知道是二的十六次方,因为一 k 呢,它是二的十次方, 对不对?然后我六十四开六十四,是不是二十六次方?是不是就二的十六次方的字节? 嗯,是这个意思啊,它是用于这个范围进行选址的,然后十一位,那我们这上面其实就是十一位,是不是相当于是二的十一次方,二的十一次方是不是就等于 两 k 啊?因为一 k 是 二的十次方 b 吗?对不对?然后我这个二的十次方,我乘以二,是不是就是二的十一次方,就是二 k 啊?这个就是带大家进行一个基础的一个复习啊, 然后这部分看完了,我们来看这个 direct, direct 就是 一个直接地址啊,我们用于的是这个内部的这个数据存储器当中某一个单元的地址,或者说是这个专用的功能计算器,我们叫 sfr, 这个后面我们会讲到, 然后这个 rio 呢? rio 其实啊大家不用特别的去着重去记忆,它就是一个偏移量啊,主要是负幺二八到正幺二七,它是带正负的啊,带符号的, 然后 b i t 呢?大家知道 b i t 其实就是 b 嘛,啊,在英语里面就是 b, 对 不对? 在这写 b, b 就是 位嘛,所以我们就理解,理解成这个是外寻址区的啊,直接寻址位, 然后 x x, 然后加括号啊,这个我们要着重的去理解啊,我们在后面去讲解,主要就代表的就是啊它这个地址单元当中的内容,这个我们会在立即数寻址和直接寻址当中给大家进行一个具体的区分, 然后这个箭头啊,由右向左的啊,这样的一个箭,箭头呢,表示的是把这个内容哎,把这个箭尾的内容传给箭头啊,就这个意思, 然后我这还单还列了一个这个 at 的 符号, at 的 符号呢,它就是一个监制寻址方式的一个前缀。我们 at 后面一般啊,首先 at 它是一个监制寻址一个标志,这是第一点, 这是第一点啊,然后第二点呢?它还是这个 at 后面一般接的是什么呢?接的是 r 零或者是 r 一 这两个兼职寄存器啊,这个是 一般是接这两个兼职寄存器,或者我们也可以接啊, d p t r 这个是十六位的,这个我们在后面进行讲解。 好,这个是一个基本的,我们去阅读一个指令的时候啊,一个基本的描述,我们一个固定的约定,大家去啊基本的进行一个理解就可以啊。 好,我们来到了寻址方式这一部分。寻址方式,那什么叫寻址呢?寻址,顾名思义寻找地址对不对? 也就是说我们寻找刚才提到这个指令当中我这个数啊,我这个操作数,或者说我这个操作数所在的这个地址是在哪? 如果立即给出了这个数呢?他是立即数,我就直接就找的就是操作数,如果说给出的是以别的方式,比如说我把它存在计算器当中啊,他就是在啊操作数所在的地址啊, 我们要这样去进行一个寻找,所以这个叫做寻址啊,那么寻址方式其实就是如何找到存放操作数的地址, 也就是说我这个数据我给他存在哪了?我给他存到寄存器里了啊,我把他这个存到这个存储器当中啊,我把他存到这个工作寄存器当中啊, 啊,或者说我直接给出来的地址了,这这些不同就造成了我们后面的这些不同的选址方式啊,比如说立即选址、 计算器选址,然后间接选址啊,基址变址选址啊,这都不一样。然后我们主要讲解的就是会编语言当中的这个选址方式啊。 好,这个就是刚才我给大家基本讲解的啊,就是说有哪些选址方式?一共是啊,主要考察这七种啊,一共是这七种 立即选址啊,计算器选址,直接选址,然后计算器间接选址。 我就刚才提了一个 at 啊,有这个符号,然后这个叫基计算器加变址的计算器间接寻址,我们一般也叫基址变址寻址,然后还有这个相对寻址,就刚刚给大家提到这个 real 啊,未寻址啊,就是这个 bit 啊,跟 bit 有 关。 好,我们一个一个看。首先来看这个立即寻址,立即寻址很简单,就是说我这个操作数就是一个立即数,那立即数是啥意思呢? 就是说直接给出了这个操作的这个数字量,什么意思? 就这个意思,二零 h, 是 不是一个哎?一个一个数字对不对?十六金质对不对?然后我前面必须要加上井号,它就是一个立即数了,也就是说我这个井号是一个立即数的一个标志,对不对?这个井号这个前缀是一个立即数的标志, 表示我在这个指令当中直接给出了操作的数字量,给多少就是多少啊。那我们来看一下这个给出的这个例子,指令是啥意思啊?我这个操作数是什么?是不是立即数七零 h, 是 不是?我将这个立即数七零 h 直接传递给谁啊? 直接传递给 a 吧,所以怎么理解啊?就是把七零 h, 把七零 h 这个立即数传送给谁啊?传送给了 寄存器啊,我们也叫累加器,它不能叫寄存器,就是叫叫累加器,累加器传给累加器 a 了,这个就是立即寻址, 很简单,对吧?就是说七十 h 七零 h 立即数,然后是把这个八位立即数七零 h 送入了这个累加器 a 当中,对吧? 好,我们来看第二种啊,很简单,大家跟着我去理解就可以。直接寻址的意思是啥呢?直接寻址就是我刚才说的啊,我们没有直接给你回答题啊,没直接给立即数, 没有,我这次就不直接给你这个立即数了。我给的是什么?我给的是这个数所在存储单元的地址。那我画个图,大家理解一下,什么叫存储它所在的存储单元的地址啊? 等一下, 这个图有点没画好,没画好哈,比如说我们举这个例子哈, move a, 三零 h, 我这个站中啊,我存的啊,我存的是一个二零 h, 我 存了这个数,但是我在写指令的时候,我给出的是三零 h 这个地址,也就是说我要取的是二零 h, 但二零 h 这个数据是存在哪了?存在三零 h 所在的存储单元, 大家能懂这个意思不?也就是说我们刚才提到的这个 x 是 什么意思?就是它所在存储单元的意思, 所以我这个里面的注是,其实可以怎么写?就是把三零 h 当中的内容传给 a 啊,是这个意思, 我们再来看一遍啊,就是说我这个立即数是我也不是立即数,就是我这个需要取的这个数是存在这个单元里面的,这个存储单元所在地址是三零 h, 所以 说我默认 a。 三零 h 的 意思是什么?就是把三零 h 所在的这个 存储单元的那个内容我给传给 a 啊,其实我们的目的是要把这个二零 h 这个数啊,我传给 a 啊,这个叫直接寻址,这叫直接寻址啊。 好,然后我们来看,呃,这个让比较两个指定区别,那我们怎么去思考一下啊?我把这个上一个指定,比如说我这样写, 这个我刚才就讲了,对不对?这个叫直接,这个叫这个立即数寻址,立即数寻址是不是有一个前缀?是这个井号,有井号代表我给出的这个数是多少,它就是多少。我把这个数直接传给 a 了,对不对? 那这个相当于要多一步,对不对?这个叫直接寻址,多一步是在哪呀?我没有给出立即数所在的,我没有给出立即数是多少,我给的是它所在的这个存储单元的地址,对不对? 也就说三三零也是,存储单元的内容是三零也是。然后我把它给传送给这个 a, 这个是直接寻址啊,这就是这两个的区别啊,直接寻址要比这个立即数要麻烦一点啊,多了那么一步啊,大家可以这样去理解, 然后我们来看寄存器选址,顾名思义啊,也就是说我这个操作数所在地址这个内容,我指定给了这个寄存器啊,我让这个寄存器的内容作为操作数了, 所以说我们给出了一个寄存器啊,也就是说我们给二零到二七任意一个啊,这个寄存器 指定了它,然后我们就能得到这个操作数,比如说我们举的这个例子啊,把这个 r 一 自寻器的内容作为操作数,然后传递给 a 啊,就出现了这个叫做寄存器寻址的一个方式啊。 然后第四点啊,这个是相对更重要一些的,叫纪存希间节寻址,纪存希间节寻址啊,这个笔有点不太灵活,这个一个, 这个很重要,这个我们在后面会会经常用到,它指的是什么呢?我们直接来看这个定义,就是说指令中操作数是怎么给的呢?它在寄存器的内容所指的地址单元当中,什么意思呢?这个寄存器间接寻址,我们通常 有两条指令, 通常是两条指令结合着,然后我们去理解啊, 我们来看这个例子,大家看第一个,这个叫 move r 一 三零 h, 是 不是刚才讲的立即寻址啊? 我们把三零 h 这个立即数是不是传给了谁啊?传给了 r 一 对不对?哎?送给了 r 一 寄存器,然后我后面这个 at r 一, 然后又给了 a, 这个 at 刚才讲过了,对不对?我们格式约定里面它是一个监制寻址的一个标志,对不对? 那刚才也讲了,用来监制寻址的计算器,主要就是 r 零和 r 一, 这两个不是叫我们规定的叫 r i 嘛, 然后 i 它是只能等于零或者一的,就这两个对不对?还有一个就是十六位的地址指向叫 dpt 二啊,这三个只能啊,用来这个监制寻址,那这个指令是什么意思呢? 现在 r 一 当中是不是存的是三三零 h 这个数据?我要把三零 h 单元如果说它加了这个 at 这个符号了,我们的意思就是把三零 h 单元中的这个数 送到 a 中,这就不再是把三零 h 这个立即数我又传给 a 了啊,一旦它加上了这个 at 符号,也就是说我们监制寻址这个符号,就是它变成了三零 h 单元当中的内容, 也就是这个意思,三零 h 单元当中的内容,然后我去传给 a 了, 这个叫做啊寄存器间接寻址。第一步先把立即数或者说其他的操作数传给一个寄存器,接着我用寄存器前面加上一个艾特符号的一个啊,兼职寻址的前缀, 表示的是计算机应该寻址。把这个所在单元当中的内容我再传给 a 当中啊,一般是两条指令进行一个混合的啊,我们一般会写两条指令, 那这边也也给出了,就是说这个寻址方式主要是访问啊,片内或者是片外的这个 ram 的 啊,是非常常见的。片内和片外的数据处理器啊,非常常见。 后面我会有一个题题的讲解啊,然后这个辨址寻址啊,这个大家了解哈。 变址寻址是啥意思?就是我们刚才提的这个基址加变址寄存器,大家顾名思义理解一下,一个是写这吧,一个是基址寄存器, 一个是变址寄存器呗,对不对?它有两种,那我的基址寄存器这个技术大家是要用的是 gbtr 这个十六位的,或者是 pc 啊, pc 我 们在这个寄组当中学过,叫程序计数器啊, program counter, 然后我的变值寄存器呢,就是一个累加器 a 啊,它们两个的内容进行一个相加,进行一个相加,然后得到的才是这个最终的一个 操作数的地址啊,然后我再传给谁?再传给这个 a 档, 这个呃,主要用于查表操作,查表操作呢,我们不是特别的经常作为一个重要考点来进行考察,但是大家去理解啊,比如说给出这个例子,比如说把这个擦一下, 把这部分擦一下擦掉, 他说那首先把这个三三零零零 h 啊,我传给了 d p t r, d p t r, 刚才说过它是一个十六位的这个内存器啊,十六位的 把三零零零 h 传给了它,然后这个呢?有井号,对不对?这个立即寻址前缀,把零二 h 这个利息数,然后给传给 a 了,然后我把这个 变址计算器 a 当中的内容和 dptr, 也就是基址计算器,它俩当中的内容相加,也就是说三零零零 h 加这个零二 h, 我 们就写零零零二 h, 对 不对?然后我们两个做一个加法,是不是三零零二 h 啊? 我把这个三零零二 h, 我 前面有一个监制寻址的一个标志,对不对?也就是说我把三零零二 h 单元当中的数送给 a 了,它俩相加之后的这个结果啊,它这个单元当中的数,然后送给 a 了。 但是大家注意这部分的这个问题是在哪?是在这个这个目 c 指令,这个是查表指令 专用的一个数据盘,专用的一个数据传送 操作码啊,操作码就是我就是怎么给它移动啊?怎么传送啊?正常我们都是木,对不对?但我这个传送类,这个这个查表操作要用的是木 c 啊,木 c, 因为它是取的是这个 啊。 roam, 也就是我们的这个程序,程序当中的内容啊,这个大家要记住就可以啊。然后我们来讲相对寻址,相对寻址重要的就是我们在指令当中这个操作数, 重点就是说操作数是这个程序转移偏移量,偏移量刚才给大家讲,他是从负幺二七到正幺二八,对不对?也就是说一共是二百五十六个字节呗,对不对?然后我们给出了转移的目的地址,目的地址一个是 啊,我们说这个是叫 pc 值, pc 值一个是 pc 程序器,程序器它其实存的是什么呀?存的是这个将要执行的下一条指令所在的地址, 然后加上偏移量,要么就是转移指定所在的地址,加字结束加 real。 这个大家去啊看一看就可以理解一下就可以啊,因为这部分呢,也不算是一个考察重点啊, 大家进这个公式啊,就可以了,理解一下。然后我们来看位寻址,位寻址它是一个啊, 比较固定在一个未寻址区当中的一个操作的一个方式啊,一个寻址方式主要是在未寻址区当中啊,因为它这个名字,它这个名字就可以 理解出来未寻址区啊,它是在这个二零 h 到二 f h, 就在这个范围当中。然后我们能够进行一个未寻址的一些啊,专用的寄存器啊,主要还是用 c 啊,或者是一些其他的口之类的啊, 进行一个位操作。你在第一张去给大家看过他的这个,嗯, p 零 p 一、 p 二、 p 三口,他有一些口是进行一个未寻址的啊,是可以的。 然后我们一般来讲进行微操作的时候,一般是用这个 c 这个处理器啊,进行一个累加,作为这个累加器,比如说我这个操作的这个继电器,或者说处理器,我用的一般是 c, 然后操作数呢?直接给出这个位的地址,比如说,嗯,大家想二零 h 点六是什么意思?二零 h 点六,我这样写的话,其实就是什么? 就是这是它的第几位呀?这应该是它的第七位,对不对?二零 h 所在单元的第七位, 二零 h 所在的这个未寻址区,他是不是在这个未寻址区当中?未寻址区当中,然后我的第七位,因为他是从零到七,一共是八位,对不对?那我六点六是不是第七位啊?然后点七是个第八位,他一般是这么表示,比如说我木子,大家看这个例子, 木木 c 零零 h 其实就是什么呀?就是二十二零 h 点零的, 这就是第一位嘛,也就是说把这个二零 s 单元中 d 零位,然后送给 c, 然后这个 p 目 p 一 点零, c 就是 把 c 当中的这个内容送给 p 口的 d 零位。 p 一 点零嘛? d 零位,大家注意这个 d 零位是啥意思啊? 第零位是什么意思?我们说第七、第六、第五、第四、第三、第二、第一、第零,这个第零是啥意思啊?这个 d 是 字母,对不?当我们理解的时候是啥呀?是第一位啊,这个是什么?这个是第八位 啊,他这个虽然说我们读起来是一样的,但是这个大的和这个字母 d 啊,这个大家去啊区分去理解一下, 然后再看这个例子,主要是这个这 set b 二零 h 点零,也就是说把这个二零 h 单元当中定零位,也就是我们的第一个位,第一位对不对?第一位给它置一 set b, 就是 置一的这个指令啊,我们在后面会讲啊, 然后啊,这部分的例子我们理解了之后,我们给大家做一个总结啊,做一个总结就是说他的这个寻址方式和寻址空间的一个啊总结。 寄存器寻址啊,我们用寄存器的时候是能用哪些呢?我们是啊,可以用这个 这八个计算器,然后用雷佳器,用 b, 用 c, 用这个十六位的地址指针啊,这个 pr 是 可以的,直接寻址,直接寻址就是片内 ram 和这个 sfr 是 都可以, 然后间接寻址,间接寻址,寻址空间是什么呢?寻址空间是你的片内片外啊,这个数据存储器都是可以的。 未寻址,刚才有明确的规定,就是说只能是在这个二零 h 到二 f h, 还有我的这个特殊计算器啊,特殊功能计算器当中可以未寻址的这个单元里, 然后立即数及址,编址,相对寻址这部分,大家去进行一个啊,就看一看啊,稍微了解一下, 然后我们来讲一下这个指令分类的一个介绍啊,它一共是主要分这么五类, 这么五类,虽然说啊,就是每一类有这么多条,但是基本上大家能够理解它的这个 啊,含义,其实就理解的大差不差了啊,理解大差不差了,他只不过是写法的一个啊,约束不同而已啊,一共是分为五类,主要是这个数据传送类啊,算术运算类, 逻辑运算,然后控制转移,会操作啊,一共这五类。好, 先来讲这个数据传送类,也就我们刚才经常看到我给大家举例子的这个,这个木工对不对?他跟大家提到这个查表指令啊,只能是在这个 room 当中使用的啊,在 room 的 使用的这个 就是把 room 的 数据传给这个李佳琦的啊,这个木 c 指令啊,查表指令,还有就是木 x, 木 x 就是 我们经常会用到的啊,在监制的时候 啊,片外的数据和这个片内它们之间的一个传送,我们会用这个 move x 啊,这个数据传送的指令, 然后它的这个重点是这个说不影响这个标志位, cy, 然后辅助镜位还有溢出位啊,对于 p 不 一般无价的说明,这个大家了解。 然后第一点它是说讲用于片内的 ram 传送,片内 ram 传送一共是啊,以这个累加器 a 为这个目的操作数的,一共是这四条,大家简单看一下啊, 一个是这个 r n, 也就是零到七这个操,这八个计算器都可以传给这个 a, 然后这个是直接地址传给 a, 这个是啊,监制寻址啊,这个是立即数啊,这四个是比较常见的了啊,这个就我们的一带而过。 然后是接下来这些以 r n 为目的操作数,也就是把 a 当中内容传给计算器啊,是可以的,然后这个立即数传给他,直接地址传给他,可以的。然后第三点以直接地址为目的操作数 是这样的,就是大家可以理解了就可以啊,没有说固定格式,我们就要考察编程,或者说让你计算什么之类的,他不会说给你深究 你这块到底哪有错,他如果真的要考你的话,一般就是啊,你给我改一下我这行哪块错了,但是其实我们不会特别的去啊,完全去啊, 投投身于或者说专注在这部分的一个考察啊。然后第四个就是兼职为目的的操作数,如果我加了个艾特这个前缀 啊,然后这个是这个十六位数据指向的这个也就是说把这个数十六位数传给这个 t 二啊,这个是可以的。 好,我们来看一个练习吧,我们来看一个练习啊,这个大家看这部分的代码,我们去理解一下是什么意思呢?首先来看第一个叫这个 目录三零 h, 然后这个七 a h 什么意思?先看操作数吧,操作数是加了井号,是不是立即数啊?加了井号是立即数,是不是把这个立即数七 a h 送给了三零 h 当中? 三零 h 是 什么?三零 h 是 一个存储单元啊,不是立即数了,把七 a h 这个立即数送给三零 h 所在存储单元啊, 送给三零 h 这个单元,然后这个指令把三零 h 这个立即输,谁啊?哎?送给 r 零这个计算器啊,然后这个呢是什么意思啊? r 零是这个什么计算器吧? 然后我前面加了这个 at, 是 不是兼职前缀,也就是把二零指定当中的这个内容传给谁啊?传给 a, 我 们这个指定不能除了一条一条看,也要连接前面的内容, 对不对?所以说我们往前再看,其实说三零 h 当中的内容现在是谁了?是不是七 a h 啊?第一条结束对不对?然后这部分内容是什么呢? r 零当中的内容变成谁了?是不是变成三零 h 了? 我们来看第三条,说二零的这个监止巡止二零现在是不是三一三零 h 了?三零 h, 我 监止巡止传给 a 了,对不对?也就是说把三零 h 所在单元的内容我是不是传给 a 了? 三零 h 所在单元的内容又在哪呢?是不是在这啊? 它是谁呀?是七 a h 吧,所以是不是就是把七 a h 这个数送给 a 了,对吧?好,然后往后看啊,往后看, 呃,把这个幺零零零 h 是 不是送给了这个 d v t r 这个指数里面啊?把这个送给这个计算器啊,一起幺零零零 h 送给他了之后,然后我这个目五 x 是 不是刚才讲过的这个片外和片内数据之间的一个传送?我要用目五 x 指令了, 大家看,把 a 的 内容送给片外的 dvr 计算器,是不是这意思啊? 我 a 当中的内容是谁啊?现在 a 当中内容是谁? 是不是三零 h 的 单元内容是不是七 a h? 所以 把七 a h 送给谁呀?送给片外幺零零零 h 单元当中的内容吧,对不对?哎,所以这个就是一个片外和片内数据的一个 传送啊,这是这样理解的 好。然后刚才讲了一个木板 x, 我 们就继续来给它延伸啊,延伸去讲用于片外 rap 传送的一共是四四条哈, 那因为片外的这个地址是十六位,所以我们一般会采用这个十六位的计算器,也就是用 t t 二,那我们也可以用这个 r i, r i 就是 在呃第八位编制的时候,第一八位啊,就用这个 r 零或者 r 一 去进行间接选址啊,是没有问题的。 第一个是这个外部就是偏外和 a 之间传送,第一个就是说啊,我就是间接寻址呗,对不对?这个也是,然后,但是我们这个是需要把这个传送指令啊,操作码改成木马 x 啊, 这个两个就是相反啊,反过来的,然后这个呢,就是六十四 kb 啊,这个就是十六位的地址的时候呢,我要把这个 这个寄存器啊,也就是这个变成 d p t r 啊,由二 i 变成 d p t r, 因为它是十六位了,对不对?然后一个是啊, d p t r 在 这个操作数,一个是在这个 在前面,这个叫目的操作数,一个叫原操作数,它们两个互换一下位置,对不对?这是这两种啊,大家去理解一下, 大家举个例子哈,一个是把这个两零二零零零 h, 然后传给这个 d v t r 了, 是把这个立即数给了这个计算器,然后呢,接下来我加了这个艾特这个兼职前置的,也就是我要把这个外部的二零零零 h 当中内容,我要传给 a 了,这就是片外和片内之间的传送 啊,是这个意思,大家去理解一下。然后我们给出一个思考题,像片内 ram 五零 h 单元内容传给片外,我怎么写呀?大家来思考一下。 思考完我们已经讲解了刚才给的例子,是不是把外部就是片外的内容,然后传给片内啊?那我这个思考内容是把片内的传给片外,我怎么去写? 其实很简单,对不对?因为我要传给片外来写啊, 片内是五零 h 单元内容,然后我片外是这个五零零零 h 单元内容,我们第一步是不是先要获得这个片内 ram 单元的内容?片内,所以我先干嘛呀?我目 a, 我 是不是先得得到这个五零 h 单元的内容? 五零 h 单元内容我是不是先给 a? 五零 h 单元的内容我给 a 了之后,然后我干嘛呢?我是不是还得得到这个片外的这个 ram 的 五零零零 h 它的这个单元,所以我要干嘛呢?我应该把这个五零零零 h 是 不是先传给 gptr 啊? 我要把这立柱先给他,对不对?我要传给他的话,是不是我目的操作数应该写哪呀? 是不是应该写到目的操作数上,把这个 t p t r, 也就是 at t p t r, 那 我的原操作数是谁?是不是把我这个五零 h 单元当中内容 五零 h 单元当中内容我是不是现在已经给 a 了,所以它的原操作数是 a, 然后我这个时候应该怎么写?是不是要传给片内?传给片外是不是应该是 加叉了就默认 x 了,对吧?所以这三行就解决了呗。第一步,先获得五零 h 单元内容, 对吧?第二步,我要获得五零零零 h 单元所在的这个,我先用力积数传传给他,获得他所在的这个单元, 对吧?然后我用这个监制,监制寻址,完成这个片内片外的一个传输,对不对?要用的这个模板 x 这个指令,这个就结束了, 我们就实现了把这个片内 ram 五零 h 单元内容传给片外 ram 五零零 h 单元啊, 然后啊,然后我们来讲的就是这个 rom 传送 rom 就是 刚才讲查表指令这两个啊,我们这个时间原因,我们直接带过一带而过啊,然后是这个交换指令,交换指令比较重要的是,呃,这几个 主要是 x c h 和 x c h d 还有这个 swap 指令 swap 其实我们在 c 语言当中其实是遇到过的哈,比如说 swap x 就 把这个 x 的 那个和别的内容进行交换, 那我们一个一个来看,首先是直接讲内容啊,直接讲正点, x c h 和这个 x c h d 还有这个 s s one 啊,首先这个叫做的是自结交换, 一个字节数八位啊,也就是说两个数就给它相当于兑换啊,这个叫字节交换。然后 x, c、 h、 d 呢和 swap 呢?它们两个其实可以这样去理解啊, x c、 h、 d 其实是第四位啊, 低四位相互交换,然后 swap 呢?它是高低四位互换,所以 x h、 d 和 swap 它们两个可以在一起去进行一个理解。 然后我们的 x, c, h、 d 和这个 swap 呢,它们又有一个名字叫什么呢?叫半字节交换,半字节一个字节八位,半字节是不是四位啊?也就是我是在四位四位的进行一个兑换啊? 那我们来看这个例子吧, x c h a 和 r n 是 不是把 r n 的 内容和 a 进行一个互换啊?对吧?就把它们两个内容进行互换, 然后我们来看这个半字节,举的举个例子啊,就是说 r 一 的这个所在的内容, r 一 所在这个单元的内容和 a 是 会进行一个 半字节交换。我们后面会有这个题型的讲解啊,我们先理解这个大致的一个原理,我后面会进行一个题型讲解 啊,这个练习的话呢,我们可以做一下啊,做一下把它给擦掉,然后咱来做一下, 他说这个 换一个颜色, 说 a 是 三四 h, 然后 r 六是二九 h, 然后让你执行以下指令之后, a 是 什么?首先第一个是叫 x c h a, r 六是什么意思?就把什么呀? a 当中的内容和 r 六当中的内容怎么样啊?互换嘛,对不对? 它俩当中内容互换,那现在原来二二六当中内容是二二九 h, a 当中内容是三四 h, 互换了之后,我的 a 当中内容是谁呀? a 现在是谁? a 是 二九 h 吧,然后二六当中的内容是谁呀? 是三四 h, 对 不对?好,我带着这步之后,我们来看后面的, 后面的这个叫 swap a, swap a, 刚才说是不是半字节,半字节交换呀?半字节我们是不是就得看一位,一位来说,因为它是四位,四位换对不对?好,我们接下来把这个 a 和二六他们两个是不是给写一下,对不对?我把 a 写出来, a, a 是 二九 h, a 是 二九 h, 怎么写啊?是不是 零零幺零?然后九是什么?幺零零幺,对不对?然后二六是谁啊?三零零幺幺四是谁啊? 零幺零零,对不对?然后我现在执行的是 swap a, 也就是说把 a 的 高低四位互换吧, 所以这个题跟二六有关系吗?没有关系了,对不对?哎,这个所以是大家经常会遇到的一个问题啊,大家会把它们给进行一个怎么样的去交换 swap a, 大家看它这个操作是其实只有 a, 所以 我们只需要把它的高低四位互换就可以了,对不对?就是什么呀?是不是变成了 幺零零幺零零幺零呢?是不是就是九二 h 了? 这个意思对不对?九二 h 啊?那 所以说这个题想强调的是什么呢?是这个,第一个是 a 和二六,它们两个交换的时候是这个字节交换 swap 的 时候呢?是啊, 高低四位互换啊,高低四位互换。第一个先是啊字,这个字节 其实就是每一位都要换,也就是这两个数互换,然后这个是高低四位互换,这是一个这样的一个练习。好, 然后讲一下这个对战操作,对战操作是这个后进先出原则,我们在数据结构当中其实讲过,对吧?比如说这是一个战,对吧?战叫 stack, 你就站啊站,然后我,比如说我现在有这样一组数,一二四九三啊,我给我给他入站,这是不是一先入啊? 然后我谁入啊?我是不是二入?然后我四入,对不对?然后我九再入,然后我三再入,对不对?那如果我出站呢?我出站谁先出啊?是不是三先出? 三出完了是不是剩九完了?我九出,九出完了,剩四出,然后这剩二一的话二先出,对不对?然后猜一。所以说他的原则是啥呀?我先进来的怎么样? 我先进来的一定是后出的,也就是说我后进来的是怎么样啊?我后进的是先出的,他应该跟谁区分呀?他应该跟的是队列进行区分。队列是什么?队列是先进的先出。我们拿一个,比如说你排队吧,就是一个人, 我是三个人,然后我去这个,比如说我去买东西,对不对?哎?这个是一个摊啊,我去买东西排队,这是第一个人,第二个人,第三个人,我谁先买啊?肯定是第一个人先买,对不对? 我入队是不是一先入的,然后二,然后是三,那我出队呢?我,我买完了,我还用买不?我买完了,对不对?已经,所以说一就完事了,然后二和三再排队买,对不对?然后二先排,然后三。所以它的原则就是什么?是先进先出, 所以站的这个原则是跟对列进行一个区分的。然后我们对站操作反过来说啊,对站操作地址指针是 sp 啊,这个是一个固定的,它给的是站顶指的一个位置,也就是说啊,这是 sp, 这是站顶, 你也成占顶,我一个占是空的,或者说只有一个元素给出它占顶位置,对不对?就是 s p 占顶指针,然后给出这个复位的这个地址。零七 h, 这个是记忆的啊,记忆记忆的问题, 然后有这个入站和出站的一个操作,一个叫 pose, 一个叫 pose 啊,这个在会编里都是大写啊,一千二十个大,大阶小,但是正常我们在编程时候应该不会有特别大的一个区别, 还是都写大写好看一些,或者说都写小写啊。 push 啊, push 是 什么? push 就是 入站,入站, 它的操作是固定的,第一步叫 sp 先自增, 入站操作,它先自增,然后再压站,这个是 push 的 原则,然后 pop 呢?再出站,对不对?然后它的原则是啥呀?第一个先出站, 数千出战,完了 sp 再减,再自减,就这样的一个啊。行,然后我们来看一个练习题,练习题直接来看啊,就说给出这个占领之战,我们直接画图啊,直接画图, 这 s p 是 零九 h d p t r 是 它,然后执行下来指令之后啊,这个问 s p 是 怎么变的?然后零 a h, 零 b h 是 怎么变好, 他问零 a h 当中的这个内容对不对?是什么?然后这个零 b h 当中内容是什么?他说这个 d p t r 这个寄存器当中存的是谁呀?是幺二三四 h。 让大家搞明白一点,什么叫低八位?什么叫高八位?这个是低八位,这个是高八位,对不对?然后刚才说了,之前讲过 dph, 他 是给区分成什么 dph 和 dpl 吧, 对不对? d p h 和 d p l。 d p l 是 什么呀?是不是低八位啊?因为漏嘛,它是存低八位的吧,然后 d p d p l 是 低八位,然后 d p h 什么?存的就是高八位呗。 那我现在这个站里面,我存的这个幺二三四 h 应该怎么排布的? 这是三四 h 吧,这是幺二 h 吧,对不对?好,现在要执行这个指令了,也就是说我首先把这个 dpl 给入站了吧,他先入了, 然后呢?这个 d p h 也给录炸了,他们两个现在都录了,执行下列指令之后,然后问你这个,呃, sp 是 多少?零 a h 是 多少和零 b h。 那第一个我们先看 sp 怎么变?首先 sp 这个时候是零九 h, 对 不对?暂停指征是零九 h, 我 入了两次站,入了两次站,是不是这个暂停指征险得自增两次?零九 h 加二是什么呀?是幺幺 h 吗? 对吗?不对,零九 h, 它加上二,肯定是什么呀?肯定是零 b h 啊,因为它是十六定制啊,零 b h 啊,暂停指征变零 b h 了, 暂停指征变零 b h 了,暂停指征如果是零 b h 了的话, 是不是就是这部分?其实我这个暂停指令标的有点问题啊,因为我那个是在空站时候标的,我还没有把输入占,对不对?这个就我稍微给它擦一下,改一下啊? 暂停指令现在是零 b h, 这是零九 h, 一零 h, 一 零 h, 零 a h, 然后零 b h, 啊,对吧?现在暂停指令是这样,然后他问你 ram 零 a h 当中的内容是多少? ram 零 a h 当中的内容是多少? 你得看图就有了,对不对?这个是三四 h, 这个是幺二 h 的, 大家就理解这个入站和出站的这个原则就可以。

啊,然后是这个算术类,算术类的话其实我们书店或者是说之前会编语言是讲过一部分, 它主要是加减乘除啊,加法是啊, a、 d、 d 这个是不带进位的,带进位的呢,我们注意就是在后面加上这个 cy 位,加 cy 位的话,就表示你这个有进位了,对不对? 那这个 c 吧,要么是零,要么是一吧,你带进位了肯定就是一了呗,你不带进位其实跟 a、 d、 d 差不多了,你的意思啊,行。然后这个部分的话呢,其实是一个练习题, 这个练习题我们来做一下,很简单说 a 是 它,然后 r 一 的内容是它,让你执行它俩,也就是让这俩数的内容相加呗,对不对?那 a 是 什么? a 是 不是十啊? 是不是幺零幺零啊? e 是 什么幺幺幺零啊, 对吧?这个是 a 吧,然后 r 一 的内容呢?八幺幺零零零零零幺吧,它俩相加怎么算?零加一得一,这是一,对吧?零,然后这是一, 这是一,这是零,一加一,零是不是进一了,对吧?这个时候我们会发现这个最后的结果是谁呀?我们肯定是取八位,对不对?这是二,是不是 f 吧? 所以 a 是 什么?二? f h 对 不对? c 是 谁啊? c 是 不是就我的定位啊? c 有 没有定位啊? 没有精位啊,对不对?我这个精位是不是?有没有精位?其实是看哪是不是?看这部分, c 是 肯定有精位的,所以是一。 o、 b 位是什么?有没有溢出对不对? 有没有溢出对不对? o、 b 位是什么?我们看这部分说取决于带符号除以算十,第六位和第七位它俩做异货,对不对? 第六位和第七位他俩是异互零一二三四五六七这六位,第七位 有一个产生净位的,是不就是 o, 一 等于一,也就是说两个数异互有一个净位的, 这就是一啊,这不有一个经纬了,所以 o b 是 一, a, c 是 什么呢? a c 是 不是辅助经纬,也就是 b 六位,它是零, p 就是 看那个零的个数 是不是奇数,奇数为谁啊?偶数为零,奇数为一吧,对不对? 所以这个题就结束了,这个时候是把它们都看成了是什么呀?把它们看成都是代符号数,对不对?好, 这部分我们结束,主要就是一个基本的一个加法计算,对吧? 然后是这个减法,减法我们先说哈,它没有这个不带进位的, 都是带界位,减法就是 s u b, d, 我 们在后边是叫 s, b, d 啊,但这个它叫 sub, 然后加 b 也是这四条,主要就是做减法,带进带进位的,带界位的哈,就是你最后把它这个进的, 把借的这个位给减过去,把 c u i 给减掉就可以了。然后第四点,这个乘法指令 m u l 就是 multi, 大家就根据它这个英语去进行一个记忆,叫 multi 啊, 就是乘法。乘法呢,是这个意思,它是这个 a 和这两个数是连起来写的, m u l a b a b 就是 a 乘 b 嘛,让 a 的 数, a 内的数和 b 的 数进行一个啊,一个相乘 啊,是这个意思,然后除法指令。除法指令,大家要记住的是这个 d i b d y b 就是 di, diy 的 也可以就是叫 devicer 的 devicer, 这是除法啊,它也是跟这个乘法一个意思啊,就是 ab 两个数谁一起,对吧? d i b a b, 然后这个要记的是它的这个结果,也就是说 a 除以 b 的 这个结果呢? 我这个商啊,存给 a, 然后余数啊,我存给的是 b 啊,也就是说我商的结果是不是就我 a 整出 b 了,存给 a 了,然后我余数就是 a 对 b 求余的结果,我存给 b, 我 能查这个啊, python 的 这个思思想去大概理解一下啊。 整除了之后呢?商给 a, 余数给 p, 这个是除法,这部分都是很简单。嗯, 然后是这个刚才讲过的这个自增和自减的 i n c 和。呃, d e c i n c 自增就是什么呀?就是 increase 嘛, 自增然后减一就是 decrease 啊,自减,然后是这些条,然后其中这个 gptr 是 可以进行自增的,按 cptr, 但我们这个减一也没有啊,减一它没有这个 gptr 自减的操作。 然后这部分还有一个重点,就是说只有这个自增自减它们是影响这个基友标志位的,因为你自增或者自减它的这个会产生进位,你这个零的个数 啊,会不一样,所以它会影响基友位的,所以说我们,呃,它是会影响这个 p 的 值,其他的我们是不影响,这个大家会理解啊。 然后就是这个时间制调整指令, d a a d a a d a a 表示的是一个在 b c d 码数啊,进行一个加法的时候,也就是说我这条指令在使用之前的那条指令一定是加法, 我要增加一条 dna 指令,对结果进行一个调整。那 b c d 码是啥意思呢?其实共,其实我们简单来讲就是拿二进制来表示一个实进制, 嗯,用二进制表示十进制的一种表示的形式啊,然后这个是这个 dna 十进制条容指令, dna 指令呢?只能是使用在加法指令后面啊,这个是我们要注意的。 然后我们来看一个练习题哈,他说阅读下列程序段,写出这个指令执行后的结果,并说明完成什么功能。首先我们来看这个程序段哈,他把这个八八 h 立即数传给 a 了,对吧? 我们每一行写一下的意思啊,现在 a 当中的内容是八八 h, 然后把这个四零 h 是 不是传给二一了?所以我二一现在的内容是不是四零 h, 然后我把这个五零 h 和 a 的 内容是不是相当于做一个加法, a 当中内容是谁啊?是八八 h 吧,也就是说我把八八 h 啊和我们的 五零 h 做加法吧。然后这时候出现了一条 dna, 就是 时序的调整指令,让你怎么做时序?刚才说了,其实就是用二英制表示时序的一种方式,对不对?那时序大家要了解的就是时序, 他说只有零到九的一个表示方法呀,所以说他的做题方法就是说分为低八位和高八位,你如果低八位的数的结果是大于九的话, 低八位的数如果大于九的话,我就给他加六,如果说高八位大于九也加六,这是我们固定就是比较基本的一个做题方式, 为什么要加六呢?你零到九了,然后你如果说这个结果我是个 e 的 话,他是不是大于九了呀?大于九了,你给他加六,是不是就是变成这个零到九这种形式了,把它调回十进这个形式对不对? 好,那我们来做一下这个八八 h 和五零 h 的 这个十六英寸的一个,这两个数的一个,呃,加法啊,八八 h 是 幺零零零 h, 幺零零零,然后幺零零零, 然后和这个四零 h, 零幺零零零零零零吧,用作加法,零零零幺零零幺幺,这个是不是结果是谁啊?幺幺零零是不是十二啊?是不是 c 啊? 十二是不是 c, 然后幺零零零是不是八?是 c 八 h。 那 我们来看这个 第四位和高四位吧,这个是第四位是八,是不是相当于 这个?我是不是写错了,这应该叫第四位和高四位啊,不是第八位,高八位,因为我们这个题就给它限制在了是八位的数,八位嘛,对不对?那就看第四位,第四位是八就不用调,对不对? 这个是不是 c, 是 不是高四位大于九了,我给他加六。 c 加六是等于多少啊? c 加六是谁啊? 这就是十二加六啊,是不是十八呀?你十八了的话,我再减去十六,是不是二啊?我要进一位呀, 是不是就变成幺二八 h, 对 不对?所以这个时候我的 cy 位是不是等于一了,然后最后结果是谁啊?是不是二八 h, 然后我再把这个二八 h 这个数呢?我传给二一的这个所在的单元,也就是说四零 h 所在单元,也就是说最终结果是什么?四零 h 所在单元当中内容是谁啊?是二八 h 吧,这就是我们的结果,大家去理解一下。 好,我们返回到前面啊,返回前面这个逻辑运算和循环类指定的部分 逻辑运算啊,语或非数电里面是学过的啊,或运算,我们用这个 o、 r、 l 啊, 你用 a、 n、 l 啊, e 或用 s、 r l, 我 们数电其实学过是 o、 r、 m、 d, 还有什么,还有什么 s、 o、 r 啊,就这种,这个这个啊,但是我们这个主要单片机会编语言是这三条指令,它的这个格式,大家去像之前的传送的指令这样去一个进行基本的一个看一下啊,或者说了解一下就可以啊, 这个是给大家总结的一个算数运算类的一个指令汇总表,大家可以按照这个去进行一个记忆啊,或者是说我们去进行一个总结就可以啊,这就是方便大家一个记忆的 好。然后这部分是总结的对这个 psw 当中标志位的一个影响 啊,也就是说主要看的还是这个带进位的和这个乘除法,乘除法这个进位是零啊,不用,不用考虑,然后这些都要考虑溢出和这个辅助进位, 然后还是乘除法是不考虑这个 a、 c 位的。这个是一个小总结,大家去把前面的这个指令看懂了,理解懂,其实这部分就不算是什么特别重要的总结啊, 因为大家其实心里其实是知道他到底变不变啊,影不影响的啊?好,这个是刚才讲过的这个练习题,然后重点讲这个逻辑预算哈,重点讲逻辑预算,什么意思呢? 逻辑一算与霍菲都是按位操作的,都是按位操作的,然后他这个重要考点是在哪呢?主要考点就是在我对一些位进行清零至一,或者说取反。那这里面的重点就是 我直接说啊, a、 n l 呢是把某位清零,某些位清零, o r l 呢是置一把某些位置一 s r l 呢?是对某些位取反,什么原理呢?我说一下啊, a n l 是 不是叫羽啊?羽是什么意思?我们数典里学着,比如说零和一个数进行一个羽, 零和一个数进行宇,如果这个数是零的话,是不是就是零?零和一进行宇是谁呀?是零,所以说这个原理是什么?有零则零吧,对不对?那如果是一和一进行宇呢?就是一对不对? 或者是全一则一吧,这个是宇,对不对? 我把这个先关掉哈,这个是雨,然后我来说或或操作 o r l o r l 是 不是 我拿零和一进一个货,它的结果是一对吧?然后我拿零,他们两个进行货呢,它的结果一定是零,如果是一和一进行货呢?就是一。所以 ol 它的原则是什么呀?有一则一对不对, 然后全零则零吧。所以说我如果要置一的话,为什么 ol 能置一啊? 为什么货能置一啊?有一则一嘛?所以我把我某一位调成一,它是不是就变成一了? 因为位操作之后,它的结果有移就移嘛。然后这个宇呢?有零则零,是不是?我就是把某一位啊给调成零之后,它们进行一个语音算,就变成零了, 然后 x r l。 我 再说啊, x r l 取反取反是什么意思啊?我们说异或异或,在这个数链是这样写的,对不对?异或的一个原则是什么呢? 相同为零,不同为一。也就是说我零和零是不是两个数?一样,它是零,然后一和一,它俩相同也是零,然后零和一相,它俩如果不同了,就是一,然后一和零异或也是一, 就是这个相同为零,不同为一,然后我能够给他取反的意思就是在于我把一个数调成另一个数,他的另一个部分, 对不对?把零我给他变成一之后,然后他们两个在异或,然后他们两个不同了,是不是就变成一了,就相当于取反了吗?啊?这个去理解一下啊。 嗯,这个是说 x r l 指定用一和某数对应位一或啊,对应位一或,可将这个位取反,用零和某数对应位一或,可将指定位不变。 你就是相同为零,不同为一,这个原则。记住了啊,这个我们后面就可以去做题了,比如说,啊,这个 啊,这个咋写啊?这个咋写?直接看答案吧。啊,他说第七和第三位至一,刚才说第七位,这是第八位啊, 对吧?他说这个至一了,他取反,他清零,其他位保持不变,所以说至一这位用谁啊?至一这位用 o r l, 对 不对? 这个取反用 x r l, 对 吧?这个清零用谁啊?用 a n l, 对 吧?好,我们先写置一置一,是用 o r l, 把谁把二零 h 单元的内容,然后给进行一个置一,它是第七位和第三位吧。 好,我们随便我就给他写出啊,第七、第六、第五、第四、第三,后面大家更好理解啊,第二、第一和第零,他说要把他俩给制成, 把他俩给制成一吧,也就是说我,我拿什么数跟他进行一个啊?货运算他就得这个一了,我是不是有一除一啊?你是不是也就把这两位变成一,其他都是零就可以了,对吧?所以就是幺零零零,幺零零零, 但是一定是这个立即数啊。好,然后我取反,第五位取反,第五位取反。取反是什么意思呀? 是不是就 x r l 就 可以异或对不对?异或也就是把它变成一,对不对?把它变成一,其他都是零,对不对?所以 x r l 二零 h, 然后 零零幺零零零零零啊,这个答案是给 b, 但是其实你这么写就可以啊,然后第六位清零,第六位我给他清零,有是不是语,这个语音算是有零则零,其他都是一就可以,对不对? 他是零,其他都是一对不对,所以就变成啥了。 a n l 二零 h, 然后是 幺零幺幺幺幺幺幺,然后前面加这个,直接一结束前缀,对不对?有零则零,是这样的,好,这个题就练完了,我们 然后后面这个求反指令,清零指令,还有前面给大家补充的这个叫啊 set b, 这个叫置一指令,这三个大家一起记啊,这个是跟前面这个逻辑类的,我们去一起学习的,用 c p l a 和 cl r a 还有 set b 啊,这个是另一种方式,我们去进行求反啊,清零或者是置一的,比如说我们看刚才这个另一题 啊,你如果想更简单,不用算,这么就把它列出来,然后去进行怎么怎么去进行选择。这个位的话就直接写零三 h 啊,这一位给他置一了,零七 h, 置一了,然后 c p l 零五 h 啊,这个就是把这个第五位,第五位给这个取反了啊,这样是也可以的,而且更简单啊,但我们更希望大家去练一练这个思维啊,然后这个要注意的时候是这个求法和清零指对 a 有 效啊。 嗯,然后是这个循环移位指令,循环移位指令的话呢,主要是左移右移待进位, c y 左移待进位 c y 的 右移 啊,不带镜位的就是 r l 和 r r l 就是 左嘛。 left r 是 右移啊,是 right 啊, r l c 就是 带镜位, c y 嘛,就加了个 c, 这个 r l c 就是 右移带镜位啊,这个是怎么移的啊? c y 位在左侧是这样进行一个移动,从这个 第零位到第七位,这个循环一位。我们不会对这个仔细的去进行一个讲解,我们直接去看题去理解啊。这个说是说这个将双字结束,双字结什么意思?两个字结束十六位啊, 两个字节十六位,十六位双结数啊,又移一位,又移一位是啥意思啊?比如说我这个数是幺幺幺零幺零零, 然后幺幺零零幺幺零啊,比如说这样的双字节数,这个里边存的是二二,这个里边存存的是二三,对吧? 啊?这是双字结束,然后他要让你分析这个执行过程来看一下,首先啊 clear c, 然后把这个 r 二,这个这个数据, 把这个数据我给传给 a 了,然后我 r r c a 是 啥意思啊?是不是待进位,待进位循环又移啊?待进位循环又移了, 然后幕布二二 a 是 什么意思?幕布二二 a, 是不是就是把这个循环之后的结果又存给二二了?存给二二了之后我再把二三挪过去,对不对?你给 a, 然后我再让他又移,然后再把二三的结果存给 a, 这个就是是不是就实现了又移移位, 也就是说他的这个主要的理念是什么?先移高八位吧, 高八位挪完了,然后再挪谁呢?再移低八位,然后各用一次。什么?各用一次 r r c 吧,各用一次带经位吧,对不对? 就根据这个图来去理解 好,然后讲一下这个控制程序转移的指令。重点啊,主要是这四种,长转移,绝对转移啊,短转移和间接转移。主要的还是 这四种,叫 l g m p。 这个范围。是啊,六十四 k 啊,十六位地址,然后 a g m p 是 十一位地址,就是这个 r 的 十一次方啊,方这个范围,这个是 a, 就是 absolute 啊,绝对转,然后 l g m p 就是 浪嘛,它这个转移其实是啥意思?就是说我这个指令写出来之后,我要把它转到另一个 pc 所指的地址,我去继续执行啊, 然后 s g m p 呢?这就是短转移的啊,这个就是范围更小,是幺二八到幺二七啊,用 s g m p s 是 short 啊,然后是间接转移,散散转指令就是用 g m p, 这个就是大家理解就可以啊,主要还是这三个, l g m p, a g m p 和 s g m p, 了解它们的范围好, 然后我们来看一下这个条件转移指令,条件转移指令一共八条,第一个叫累加七判零转啊,一个叫接 z, 一个叫接 z, 一个叫 g n z, 接 z 呢,就是接,就是 jump 嘛,然后 z 呢,就是 zero 嘛,也就是说我这个结果呢,等于零的话,我又转到下一条 j n z, 这个 n 多了个 n 就是 not 嘛啊,也就是说我不为零的时候转啊,这是它俩的区别。然后 c y 为条件判转 j c 和 j n c, 按照刚才的意思, c 就是 那个 c y, 如果说 c c y 位啊,它是一的话,我就转,然后 g n c, 也就说我不得一,也就是说我 c y 是 零,我再转,这么理解, 然后更重要的是这个数值比较转啊,这是三次结指令,它是怎么写的呢? c j n e 写这 c j n e, 然后 a, 然后我一个数,然后我再转到哪? 比如说我是二零 h, 它是什么意思呢?也就是说我判断之后,它们两个不相等,之后呢?它们两个不相等,之后,它们两个之中数不相等。我要对 a 和二零 h 进行一个减法, 对它们两个进行减法,然后我再去判断这个 后面,比如说我结果是得零,然后不得零啊,我有没有精位呀? j n c 呀?所以说 c j n e 主要是一个做减法啊,做减法的,做减法的一个步骤,数值一个比较, 然后这个可寻址位,也就是说我判断这一位是不是一对不对。 接 b 就是 等于一转接 n b 就是 这位不得一,你就说得零,我转接 b, c 呢?就更多了,更多了一个这个步骤,就是说我这位等于一,之后啊,我转,然后我把这一位我要清零,也就是说我 clear, 把零传给这一位, 然后第五个叫 dgnz, dgnz, 我 们就是常用在这个循环指令当中啊,循环指令 dgnz, 它的功能主要就是把这个 原操作处减一,然后送回它,然后再判断,如果结果不为零,就转到目的地啊。大家看这个部分,这个注解吧,注解更好理解一点啊,也就说把这个 r n 减一,我们举个例子,一接 d j n z, 然后 r 七,然后路啊,这是一个循环哈,我把 r 七减一,如果说它不等于零,我继续转到这个循环,如果说我这个时候等于零了的话呢, 我就进行下一条指令了,我就不循环了啊,它是这样,这个这样的一个意思, 也就是说我这个 look 可能是在他前面的一个循环程序,我写的这条,然后 d 间 z 呢?我二十七 look, 我 这个二十七里面一般存的是什么呢?我可能也写在前面,我这个二十七,是啊,一个循环次数,我可能循十次 啊,他如果十减去一等于九,对不对?如果说他不等于零的话,我就继续回到这个 循环当中,如果说他这时候等于零呢?有时候我循环十次了的话呢?我就进行下一步,我可能是把这个得到的数我再给传给他啊,可能是这个意思啊,这个是主要应用在循环结构编程当中,循环结束控制用, 然后这个的话让你思考,我们直接看答案哈,他说让你求这俩稍其中比较大的数,存它,存它当中,首先用 o、 r g 定义这个初始这个存,存储这个范单,那个单元,对不对?然后我给它跳到这个主函数当中, 换一个地方执行这个程序啊,然后把 r e 传给 a 了, 然后我判断吧数值判断比较准,对不对? c 接 n e a 和零二也是做一个减法,然后我转到它那儿,它们两个不相等,然后我进行一个啊,跳到 next 这儿, next 这儿的话,我用接 c 和接 n c 就 判断这一位,判断它们是否有进位,对不对? 有进位或者是无进位,然后我要跳到这个蛋这儿 啊,跳到蛋这,然后我把这个 a 这个值,然后我传给二三,也就说我得到了这个较大的这个数了,就是这个意思 啊,然后如果说,比如说我接 c, 也说我这一位等于等于一了的话呢,也就是说啊,我这个 a 是 不是比零二 h 这个里面的数要小,比这个数要小的话呢,我要跳到这就得到这个小的数了, 否则呢,我就要把这个二二这个数传给就是这样的一个循环的过程。然后我们来看这个 l p 就 标黄的部分,这一个循环函数啊,它个叫 s g m p l p 啊,这是啥意思呢?我简单的说一下,这个就是就是一个自循环, 就让他自循环,一直在这循环就可以,就这个意思啊,自循环,那我们也可以这么写, s c m p, 然后一个 double 符啊,这也是让他自己自循环的一个意思,然后然后加一个 and, 这就是一个函数结束了啊,这是一个除了强调它的这个存储的这个比较方法, 还有一个就是它的一个格式的一个说明啊,它其实我们这张答题是不用写这么复杂啊,不用定义这个零零零零 h, 然后又起始是在零零三零啊,这个就是特别的缜密啊,节省这个存储空间的事情。 然后就是这个子程序调用,子程序调用呢,跟刚才那个 这样吧啊,跳转是很像的,一个是长调用 l call 啊,也是十六位,然后绝对调用是 a call, 然后子程序返回是 r e t 中断返回,这个要注意,是 r e t i r e t i 啊, i 是 中断啊,中断是中断的意思,它只能用于中断返回的时候啊,中断完了后面会讲, 所以这个人就说不能用 r e t 来代替 r e t i 啊,然后这个 n o p 就是 啊,空操作指令执行时间是一个周期这样一个字节。 然后我们来讲这个位操作,位操作呢,是这些刚才已经说过啊,我们用这个 c 这个累加器进行一个判断,这个木 c b, 它就是把某一位的值传给这个累加器啊,这个是反过来的, 我们来看这个例子,他说木 p 点五 c, 就是 把 c 这当中里面的值传给谁啊? 传给 p 一 口的第六位对不对?就传给 p 一 点五口第六位啊, 然后这个未修改指令前面那个逻辑那已经提过一个是啊,清零,一个是置一,然后一个是取反啊,一个是取反,取反,我们在注示当中是这么写的啊,就是前面加一个杠叫取反,就是一变零,零变一啊,这个意思 未逻辑预算,未逻辑预算,刚才这个 a n l o r l 这个也都提过啊,斜杠是未取反啊,不影响数,这个操作数本身值,这个提过了啊。 好,我们这部分内容先讲到这里,然后后面给大家带来的是这个这一部分的一个题型的讲解。 我们来看第一道题,让你读程序,回答问题,执行下列程序段中第二条指令之后,问你 a 的 内容是什么? 第三条指令之后, a c、 c 点三等于什么?好,我们来看一下这个指令给的是什么哈,这个是啊,让你目 a 零 f f h, 也就是说把这个立即数是不是送给 a 这个计算器啊? 做这种题我们有一个技巧,我们在后面一直一般写一下每行代码之后这个注视,方便我们更好去理解,这个就是注视的一个好处所在啊,也就是说 a 的 内容现在是谁啊?是不是零? f f h? 好, 然后啊, i n c a 是 不是让他自增,自增的话,我们把这个 a 给单拿出来,对不对?他是幺幺幺幺幺幺幺幺,对吧?这个是 啊,把它一个二进一,对吧?就做加法嘛。这个其实大家可以看出来,就直接就知道它是有一个溢出的,然后后面都是零,对吧?我写,写多了一个零哈,写多了 它是有一个这个溢出的啊,所以说这个时候呢,我们的 cy 位就变成一了,对吧? 有精位, c y 是 等于一,然后我这个 o b 也是等于一,这个时候我们要了解它有溢出,然后呢, 他问你 a 的 内容是什么? a 的 内容我们就看这一部分, a 的 部分其实就是零,这个题答案就是零,然后他让你和这个七三 s 进行一个语音算式,这个就很简单呀, 你零和任何数都是零,对不对?你不论是这个,你第几位,他都是零。但是这题呢,主要想啊,跟大家说什么呢?比如说你 a c c 点三是什么意思呢?或者是 p 二点六啊,是什么意思呢? 点三表示的是第三位啊,这样,但是我们就是按中文理解,其实是第四位,为什么呢?因为我们是从第七排到第零的啊,第七、第六、第五、第四、第三、第二、第一、第零, 大家看到他是从零到七,所以其实是八位啊,所以他这个说是点三点三就是第三,第三其实是我们的第四位 啊,是这个意思,那我 p 二点六呢?同理也就是从二点零排到二点七,二点六其实是什么呀?其实是第七位啊,是这样,这个大家要理解啊。 好,这个题我们结束,我们看第二题。第二题啊,让你这个考的是易货的,这个啊,原则对不对?易货是什么原则呀?易货 就是相同为零,对不对?相同为零,不同为一。好,我们来画一下这两个数哈,三二 h 当中的内容是不是七七 h 就是 零幺幺幺零幺幺幺,对吧?然后这个 a 的 内容是什么?八七 h 就是 幺零零零零幺幺幺,对吧?然后我给他进行一个异或运算,异或运算相同为零, 不同为一,对吧?所以我们这个得的是 f 零 h 啊,我们全加一个零,这样会更标准一点, 叫零 f 零 h。 我 这个数最后是传给谁的呢?是传给这个三二 h, 对 吧?三二 h 当中内容就是零 f 零 h。 好, 我们考察一下 p 这个位,也就是 p 是 这个基友标志位,我们看一下结果。 p 怎么判断呢?就是看零的个数零,如果个数是偶数的话, p 就是 谁, p 就是 零,如果是奇数的话, p 就是 一,那因为它是四个零,所以我们的 p 就 等于几,等于零。第二题没问题哈, 然后这个第三题,第三题考的是什么? r l c 带 c 的 啊,然后 l 左,也就是说循环左移,然后这个是带进位的, 带 c y 位的,对不对?那这种题怎么做?我们先把 c y 给出来的值放到最左边, c y 是 一,然后说把 a 进行一个循环的左移,那 a 是 切 h, 我 们把它画一下,是不是 零幺幺幺,然后是幺零幺零,对吧?把它们看成一个整体,我要循环左移,对吧?我现在要循环左移了,循环左移后面 他是不是要掉到前面来?然后他再怎么他,他再往前,他再往前,我们这样一个递进的,所以他就变成什么了呀?零变成什么了?是不是就变成零幺幺幺幺零 幺幺,对不对?是这样的吧, 零幺幺幺幺零幺,我露了一个幺零幺,这个时候我们的答案是什么? 是不是就变成 c y 等于零了?然后幺幺幺是 f, 这个是五,对吧?所以就 f 五 h 嘛,零 f 五 h 是 我最后的这个 a 当中存的内容, 然后 c y 是 零,那我们考察一下 p 位的话, f 五这个是几个零,两个零吧,所以 p 还是零,对吧?因为它是偶数 啊。大家注意,这个左移的过程是带着这个 cy 位一起移的,那如果左移的话,如果是带着 cy 的 话,你把它就肯定是移到后面去,然后把它提前,是这样一个递进的一个过程, 大家去看一下课本上它的这个循环的一个仔细的一个过程,大家去理解一下啊。 然后我们来看第四题,第四题他说是这个 a 是 等于零, f h 就是 零零零零幺幺幺幺 h, 这个,然后他让你进行 c p l c p l 就是 取反操作的。那很简单呀,其实你这题不画这个二进制啊,不画二进制也没问题,其实就是 f 零也行, 对吧?但是你这个为了呃,我们讲题哈,所以就是你给它一步一步来,这是把 f, 这是零啊,所以答案就是什么零 f 零,所以 a 的 结果 a 当中的内容就是它这个比较简单,好看一下答案了哈,这个给出来 是零 h, 好, 没问题,好,我们来看第三题,第三题是这样,第三题给出了 a, 然后 r 零,然后四维是它们当中的一个内容, 让你执行的是这个 o r l, 这个是考的是货运算,然后加上什么呀?加上监止寻止吧。 好,监止寻止,先看第一个框,他说让你 a 的 内容是什么,那我们就得做这个,先做货运算,对不对? 先做货运算的话,这个题是怎么考你的?问, r 零是给的是四五 h, 然后监理群里是不是就是把这个四五 h 当中的内容,也就是说我三九 h, 然后传给 a 了, 是不是这个意思,对吧?也就是说让这个三九 h 当中的内容和四五 h 当中的内容,然后进行一个货运算,那你原来 a 的 内容是不是 e a h a 的 内容是不是 e a? e a 是 怎么表示?零零零幺,然后 a 是 什么? a 是 幺零幺零,这是 a 原来的内容, 然后我要和 r 零当中的这个内容, r 零所占的内容是不是三九 h, 它们两个进行一个互运算吧。三九 h 怎么表示?是不是零零幺幺,然后是幺零幺呀? 然后我们进行一个货运算,货运算用这个符号,这个数学可能应该是学过的, 对吧?他们两个进行一个货运算,货运算的原则是什么?是不是有一为一,全零才为零,对吧?好,拿这个原则我们去做题,就是一一零幺幺幺零零, 然后把它画一下,这是什么呀?这是 b 吧?这是谁啊?这是三吧,所以答案 a 的 结果是谁啊?是不是零三 b h, 然后接下来他问你这个二零的内容是多少?二零的内容其实不变,对不对?它不影响 这个存储器当中,这个计算机当中内容,然后他问你这个四五 h 的 内容是多少?四五 h, 四五 h 当中内容变了吗?也没变,对吧?是还是三九 h, 对 不对?还是三九 h? 然后问你 p p 就 看零的个数呗,这是几个零啊?三个零对不对? p 就是 一,这个啊,是这道题。 嗯,大家注意这个 r 二零的内容和四维式内容,其实出的有点多余哈,它就是为了考你,我执行这个 o、 r、 l 之后呢?我影不影响我们的这个 啊?一些就是比如标志位啊,或者是说我们处理器的内容啊,这一种考点主要来考大家, 我们不作为一个啊,比较重要的一个考察重点来命题的啊,所以说大家这部分理解就可以,主要是理解它这个运算的过程啊,执行的过程。 好,我们来看第四题,第四题这个就相对于前面几个题就综合一点啊,他问你分析程序段执行之后 a 的 内容是什么?然后三菱也是当中,好,我们一个一个看啊, 啊,一步一步来看,我们把零 a 四 h 立即数传给三零 h 单元是第一步,然后把这个零 d 六 h 这个内容传给了 a, 然后把三零 h 的 内容传给了二零,然后五 e、 h 立即数传给了二二, 它让你把 a 的 内容和 r 的 内容进行一个语,我们先找 a 的 内容, a 的 内容是谁啊?是不是在这呢? a 的 内容是不是就是零 d 六 h 啊?好, r 的 内容是谁啊? 在这,对吧?五 e h。 好, 那这一步 a、 n、 l a 和二二是不是就是让零 d 六 h 和这个五 e h 进行一个语音算好,把零 d 六 h 表示一下, d 是 谁啊?是不是幺幺 零幺,对吧?然后六是零幺幺零五, e 是 幺幺零,对不对? 然后他们两个做一个语文算啊,就是零一一零幺零幺零啊,这个是我们的啊,这一步的结果,这一步 a 的 结果是谁呀? a 的 结果是, 这是五吧,这是谁啊?这是六吧,这个是五六 h, 对 不对?哎,这结果是五六 h, 这是我们做完这个语音算这一步的啊,这个结果。然后下一步是我们把这个 二零所在单元的内容和 a 进行一个互运算,二零的这个时候他的内容是谁啊?是不是三零 h? 三零 h 是 这个二零当中的内容,但是我这个是什么?是不是监制寻址啊? 我要的是三零 h 单元内容,内容内容吧,对不对?三零 h 单元当中的内容是谁呢?我们看第一条指令是不是给了, 也就是说三零 h 单元当中内容是不是零 a 四 h? 所以 这个这一步就说 o r l a, 然后艾特二零,其实是谁啊?其实是让零 a 四 h 和谁进行一个货运算,和五六 h 进行一个货运算吧, 这个五六 h 是 不是在这呢?我把它写下来,零幺零幺零幺幺零零 a 四 h, 我 们重新表示一下是不就可以了,对吧? a 是 幺零幺零四是零幺零零,好,我们进行换算 或预算,零幺幺零幺幺幺幺,对吧?所以这个结果是什么? f 六 h 吧, f 六 h 是 不是存到 a 里了?这个时候我 a 的 内容又变了,是 f 六 h 了, 好,然后我这个 swap a, swap a 是 什么?是不是高低字节互换啊?高低字节互换,高低四位换,那是不是就变成零幺幺零幺幺幺了?这个是 swap, 这一步对不对? 是不是变成它了?它现在是谁啊?是不是就是六 f h 啊?然后下一步是什么?这个时候 a 是 六 f h, 对 不对?好,下一步 c p l 按位取反吧。幺零零幺零零零零,对不对?好,这个时候 a 就 变成它了, a 变成了,是, 就是九零 h, 对 吧?然后 x r l a 零 f e h, 也就是说把 a 的 内容和这个数进行一个异或吧, 那这个结果跟零 f e h f 就是 全幺嘛,对吧?然后 e 是 幺幺幺零,它们两个进行一个啊,异货,异货啊,是这样,异货怎么写? 相同为零对不对?不同为一,相同为零,不同为一,是不是这个结果?这是谁?这是六,这是 e, 这是零六 e h 吧?这个时候我 a 当中存的内容就是零六 e h 了。 好,最后一步,把三零 h 当中的内容和 a 再进行一个货运算啊,我就到这步了啊,零六一 h 是 不是零幺幺零幺幺幺零啊?三零 h 当中存的内容是谁啊?是不是啊?在这呢?零 a 四 h 对 不对?零 a 四 h 是 不是在这写过了? 零 a 四 h 是不是这个呀?然后我们两个做一个互运算,对吧?大家看最后结果是多少啊?零幺幺幺零幺幺,对吧?这是什么? e e, 对 吧?答案就是零 e e h, 这个时候我们的这个三零 h 当中的内容 就是零 e h, 然后 a 的 内容呢?就是零六 e h, 所以 这个题的结果哈,在这零六 e h, 然后这个是零 e h 啊,这道题啊,它不难,它就是一步一步的进行一个计算啊,这样这个题啊,它答案是错的,这个题答案是给错的, 这个是参考,答案是错的,答案是零 e h。 好, 这道题我们就结束了,那结束, 然后我们来看第五题,第五题它让你用三种方法实现哪家七、 a 和计算器 b 的 内容交换。我们先不看答案,直接想一下我怎么交换啊?其实我需要两个计算器,对不对?一个是 a, 一个是 b, 然后我把一个数传给 a 了之后,然后我是用什么?其实用交换这个 x 写的数就可以了, 对吧?这是第一种啊,这相当于第二种,用这个这个指令来写,对吧?第一种其实就是我进行一个最基本的一个传送, 是不是就可以了?传给他,然后我们两个再把他就互传一下,就是交换,对吧?然后第三种我们可以用什么呢?其实是可以用用这个站指的, 也就是说我把这个就是铺是 a, 然后铺是 b, 对 吧?我给他入站,然后我再怎么样,我再给他泡泡 a, 泡泡 b, 这个也可以进行一个交换啊,这个我们在数学结构当中其实是学过的, 那如果说你泡个 b, 泡个 a 呢,就相当于一个正常的一个设置,这样的话呢是不可能实现交换的,所以这个呢是比较一个比较重要的一个,就是我们实现交换的一个方式啊,就是用我们这个 push 的 泡泡指令,我们来看一下答案,那我们来看一下答案, 第一个他把 a 的 内容传给二零了啊,所以说我这一步呢, 所以我这一步二二零当中的内容其实是存的是 a, 对 不对? a 的 内容给二二零了,其实是 a 的 内容,然后我这时候把 b 的 内容又给 a 了,也就是说我这个 a 的 内容其实是 b 的, 然后我再把这个二零的内容又给 b 了,就是把这个 a 的 内容又传给 b 了,是不是相当于一个交换,这个是最基本的一个 传送指令,对吧?这是第一种就是可行的,然后第二种就是把老师刚才讲的这个就是 push, push 啊,我把它 a 和 b 分 别压占 a, b 分 别压占,然后把它给嗯 弹战啊,这样是能够实现这个 a 和 b 的 内容互换,然后第三种,第三种就是我刚才说的啊,我们用这个交换指令,交换指令把 b 送到二零里,然后我我拿这个 a 的 内容和二零互换, 然后我再给它移进去,其实是一个 s、 c、 h 指令,然后加上一个我们基本的一个目录指令,一个结合,对吧?好,这个大家去学习一下啊,理解它的这个啊。交换的一个过程我们不再细说, 然后我们来看第二题编程啊,这个是将内部 ram 三零 h 单元内容与这个内部的三页 h 单元相加,大家看到这个都是内部了就好好写啊,都是内部就都好写,那只要不涉及到这个外部和内部互传,大家的这个思考 就不用特别的这个啊整,也就是说不用特别的去注意到我的指令需不需要改啊?我应该用哪些计算器啊?都是很简单的一些操作,因为他是内部,内部,他的内容和三 h 内容相加,存放到他,其实就是啊, 一个很简单的传送,然后再相加,对不对?相加我们呢会想要用这个 add, 对 吧? a d, d, 然后内部三零也是单元内容和它相加,其实就是什么呀? 就是木木,然后我把这个 a, 然后我把三零 h 内容先放进去,放到 a 里,对吧?然后我 a d d 谁呀? a d, d 谁? a d d 三一 h 和三这个 a 就 可以了,就结束了。 三零 h 里面是不是存着这个三零 h 单元当中内容是不是 a 呀?也就说 a 里放的是三零 h 单元内容, 然后我再把三点一单元内容和三 e h 单元内容相加,他说最后存到三 e h 当中,所以我们的这个目的操作数是不就放到三 e h 就 可以, 对吧?所以这个题就这个题就结束了,这个很简单,然后这个是说这个内部,然后传送到外,我这是我说这个内外的这个互相传送数据的这个啊,这个题的技巧。第一步, 内部二零 h 单元内容传到外部,你先把外部的写啊,第一个先写木什么呢?外部两二零零零 a 是 用十六位的,所以要把 gtr 先写, 然后二零零零 a 是 要先写啊,这个用立即寻址。然后第二步呢,我们看一下结果,结果它要传送到外部,所以我最后一个一定是落到木板 x 这个指令上面, 传送到外部的这个单元当中,所以传到外部,所以我目的操作数一定是 dptr, 对 不对?然后我们来想一下我这个圆操作数是谁?圆操作数用 a 就 可以,对不对?用 a 就 可以,那我第一步应该是怎么写? 目 v 二零 h 是 不是就可以了,对吧?也就是我把二零 h 的 内容然后移到 a 当中啊,然后接下来呢,我用一个立即授群指啊,给出这个 二零零零 h, 把这个数据给到这个 d g r, 然后我用一个片外片内的这个寻址方式,用这个木五 s 这个指令,我把二零 h 单元当中的内容,然后给他这个题我们就结束了。 好,来看一下答案哈,是这样的, 嗯,应该没有什么问题。然后我们这部分第二章第一节就结束了啊,祝大家能够期末高分通过。好,谢谢大家。
