粉丝90获赞175

并请一下雷军三十年前写的代码是什么感受?我没有写过诗,但是有人说我写过的代码像诗一样优雅。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈。 安装成功,启动 msbos, 进入 msbos, 代码和变异工具已经拷贝,净系统开始变异源码 用苔粉编译,哈哈,编译成功, 用托令可连接系统 链接成功,运行成功,同时按左右 ctrl 键 唤醒,程序还没有动静。呃,这程序是用来清除指定软件所占用的内存的。由于我没有安装这些远古时代的软件,所以,所以大家觉得雷布斯写代码是什么水平呢?现在写代码容易还是三十年前写代码容易?

通过这几天私信的一些情况,我了解到很多同学月底左右就快要开学,开学呢就面临着没有手机的情况。嗯,那我就先针对这部分同学的情况, 把教辅资料分享的视频放到前面更新,便于在没有手机的情况下进行更好的学习。 第一个就是数学。之前在很多平台上,我看到很多人说刷题没用,然后我相信啊,我真的没有刷。但是当我认认真真的刷完一一轮数学题的时候, 我的成绩有了明显的提高。这时候我才明白,不是刷题没用,是方法不对。刷题是一件需要集中时间与精力的事,建议大家决定刷题的时候,就做好牺 一些东西的准备。第一个成绩在及格线左右和及格线以下的,我推荐的是五三数学基础一千五百题,就是这个 成绩在及格线以上的呢,建议刷套题。关键是针对高三同学来说的话,我推荐的是经考卷四十五套的这个,还有高考卷题。最后,为什么我说刷题会牺牲一些东西?我高三刷数学的两个月内, 我两个月是刷了数学的这个四十五套,三份的,三份不一样的。但是呢,我几乎没有听过地理课,我的地理在高考的时候也是马马虎虎。但是通过我的上一个视频, 大家都知道我们学校的作息时间安排的非常紧凑,根本没有大量的时间给我们自主刷题,我只能在一些课上刷题。这里需要澄清一点,我没有鼓励你们不听课,我自己不听的课,是我认为对我自己提高不大的课。 这个是我推荐的金考卷四十五套的数学。然后我们可以看到这里是全国二三卷吗?现在已经分成甲卷乙卷了。那呃,同学们可以根据自己的需求去买。他的答案。有一个非常 好的点,就是他的答案很详细,给大家看一下。他的这里会标出一些题眼,然后大题他会给出一些评分标准。就像这个二十一题,他 是一个导数题吗?然后他可以告诉你,第一问他是四分,然后第二问他写到哪里是八分,最后才是什么题眼,然后最后评论标准是十二分。 这是他的答案的一个优点。这是我当时刷题做的一些标记,因为我只做了大题,所以我的成绩就只有后面大题的七十分,七十分是总分。 大家可以看到,其实我的成绩是有波动的。当然这只是我自己的一个评分。 但是刷到后面就比较好了。我会把我觉得这些 套题里面比较有参考价值,能够再次拿出来复习的题圈出来,或者打上一些标记。就像这样。 比如说这个第十三套,我给他标记出来,是因为有一道题,他涉及到了一些转化,从男的转成容易的这样的题目, 这样就比较有借鉴意义。就在我对我以后的解题有一些帮助。后面也是一样的。圈起来的题,我是想把它进行再次的复习。比如说圆锥曲线,其实圆锥曲线在很大意义上来说不是非常非常的难, 大多数圆润曲线题都有一个套路。最后你可以按照他的套路进行一些类题的推减。就是这样。这是我 的一个刷题记录,然后说我刷题的时候呢,是把我会在答题卡上写到的步骤全部写下来,我不会省略, 就是像这样。 第二个就是我不推荐买的,尤其是我不推荐高三同学买的。就是这这种模式的专题训练,还有什么小提炼之类的。 因为高三同学的时间确实非常的近,高三的同学就没有时间去做一些专题训练,或者说老师就已经会带着做 专题训练了,不需要我们进行额外的练习。我们在高三最主要练习的是解题速度,还有一些题型的积累与扩充。 所以我觉得刷套题是最好的。在高三的时候。

各位同学大家好,我是蚂蚁期末团队的叶老师,今天很高兴和大家一块分享会编语音程序设计期末突击课程的啊内容。那么在本节课我们将正式进入指令系统的学习, 那在本节课中,我们要讲的是数据传送的指令,那数据传送的指令呢?在指令系统中的难度呢,比较简单,但是呢考频还是比较高, 所以各位同学一定要认真记,那尤其是要注意各个指令怎么用以外呢?还要注意的就是说啊,我们指令的一些注意事项。 那除此之外呢,我们考点呢,一是会放到放到课程知识点讲完之后的这个课程罗列里面,二呢也是会直接放到我们的课程内,也就说我讲一个考点就对应出这个考题考法,所以同学们一定要认真听讲。 那么第一个我们讲的是数据传送类指令,那么数据传送类指令是用于寄存器之间、寄存器和存储单元之间或 cpu l 端之间进行传送信息,传送的信息为数据或地址。 第一个我们要讲的是木指令,指令格式就是木 d s t s r c 啊,那么 我们在之前其实见过这个指令,那么这个指令呢,意义就是说将 r s r c 里的内容呢去送到 d s t 里面,那么传送对象呢,可以是数据,也可以是地址啊,比如说我们在之前已经学过了 m a x b x, 那 意思就是将 b x 东西传到 ax 里面,对吧?如果初识的值 ax 等于幺零零零 h, 那么在经过这个指令以后, ax 也会变成二零零零 h, 对 吧?那么大家听起来感觉到比较简单,但是我们要注意一个问题, 就是一是 dst 和 src 数据类型必须保持一致, 什么意思呢?我们不能出现 move axbl 这样的情形, 为什么?因为 bl 呢,是一个八位的数据,而 ax 是 一个十六位的数据,不能将八位的向十六位的传,也不能将十六位的向八位传,所以这个是禁止的,那么当然这个我们已经学过了,会发现非常浅。那么还有我们会说,比如说 move al 三百, 同学一看合理哎,但是要知道我们 a l 呢,是一个八位的计算器,三百用二净值表示的话,如果我们只有八位,那只能表示到二的八字方,也就是二百五十六,他呢大于了这个, 比如说他其实超出了八位,对吧?这个是隐含的,所以同学一定要注意这个问题啊,那这个呢,很可能会作为一个选择题的考点去呈现好,那么 呃,除此之外,那还有肯定就是比如说目啊, ax 负三千啊,负三万两千八百,那它也是超出了十六位啊,其实和之前是一样的,我们就不再过多的赘述。 那么还有一个啊,我们要知道的就是说 src 呢,它是可以使用的是寄存器立即寻址以及各种存储器的寻址方式, 而 dst 呢,只能采用这个寄存器寻址和各种处理器的寻址寻址方式,对吧? dst 你 不可能再做立即寻址,我们不可能说是目十二 a l, 对 吧?你把 a l 赋给十二没有什么意义。好吧,那在这个情况下,我们要知道 啊, dst src 不 能同时采用存储器寻址, 也就是说不能,它不能在两个存储单元之间寻址,比如说我们木五 b x 啊 si 加二十 h, 这两个存储单元之间是不能传数据的好吧,也不能说,比如说木五三十二 h 啊,四十七 h, 不 能出现两个存储单元之间相互存数据。第三点要注意的是, d s t 不能是 cs 断寄存器啊,因为如果你随意去改变代码断寄存器,那么会导致程序无法进行的啊。那么第四点就是当 dst 为断寄存器时, 对吧?除了这个 cs 以外,我们还有三个断计算器,对吧? s r c 不 能为立即数或断计算器, 也就是不能出现木 d s 两千 h 或者说是木 e s d s, 对 吧?这些都是错的,所以啊,同学们要看好这个。 呃,那出题可能会给一个选择题,请选出下列指定有误的一项,对吧?那么其他的考点呢?我们放在后面。 好,第二个我们要讲的是 x c h j 指令,那它的功能就是将操作数 o p r 一 和 o p r 二的内容去互换。那么需要注意的一点,注意的点或者是它的考点在哪里呢?还是说一 数据类型必须一致 啊,那因为在上面我们已经讲好了啊,我们就不在这个地方赘述。二呢,我们是讲 h x c h j 只能在 通用寄存器之间 或通用寄存器和存储单元之间 进行一个交换。好吧,那我们啊,更简单的表示方法的话,其实是这样,对吧? 呃,那么我们就会发现,我们只我们讲给大家讲的是讲错的啊,比如说 x c h j 啊, ax ds, 那 是错的,为什么?因为 ds 是 断集成器, x c h j a l 五十六 h 也是错的,为什么?因为操作数产生了立即寻址的方式。 好,那我们就讲到第三个注意点啊,因为这个其实刚刚没有给大家讲到哈,呃,其实就是说 s h j 中呢 o p r r 一 呢? o p r 二啊,它其实是交换,它不能采用立即寻址 啊,那么其实在这一题中的话,其实是啊,就是这样,对吧?好,那么 s h j 呢,它的注意点其实大概就来说,就这三点。好,同学们 啊,也要记住,考法呢,其实和上是一样的,要么就让大家编程序啊,要么就是让你找准音,错误可以出现在选择,也可以出现在解答。大家要搞懂的是,一是它的功能,二是注意事项。 好,第三个 l e a 指令, l e a 的 指令呢,就是说啊,将 s r c 它的这个偏移地址去送到这个 d s t 中,其中呢,我们要知道啊,一 s r c 必须是存储器寻址, d s t 必须是除断寄存器以外 十六位寄存器。 好吧,那两个限制啊,是,第一是除单寄存器以外,第二呢是十六位寄存器。 嗯,那对于它来说,其实啊,我们并不用来去深究,我们可以举个例子啊,比如说 lea s i b x 加六,那同学们要知道这个指令含义是表示的是什么?是将 p b x 加六,它的偏移地址去送到 s i 里面, 对吧?好,那么,呃,其实我们在这是其中呢,会发现,之前呢,我们在举偏移地址的时候,我们讲到一个指令符,叫 offset 为指令符,对吧?啊,那幕 s i offset b x 加六和这个是等价的吗?啊,这是考点哦,是等价的吗? 并不能等效啊。不能等效原因在于,其实我们在介绍 offset 的 时候也介绍过了, offset 是 运用于会编过程的, 而在会编中呢, b x 加六的值是未知的,表达是 b x 加六还没有明确的值,所以能这样写吗?不能啊,他们也不得笑。 好,第四个指令是 x l a t 指令,那它的这个指令的功能呢,就是将 b x 加 a l 这两个值 啊,为片 a 地址去访问数据段,然后呢,读一个字节的数据去转给 a l。 为什么是一个字节?因为 a l 是 八位数据好吧,嗯,那 x l, e, t 呢?通常是用于在一个字节数据中去查找相应的元素,所以呢,它也被叫做查表指令。 嗯,呃,那么在使用这个指令前呢,我们要将表首的拼音地址放到 b x 里面,对吧?然后呢,将查到元素存 这个,这个这个啊,代查的元素,至于 a l 中,对吧?从零开始,然后执行这个查表指令,查到元素呢,会存到 a l 里面啊。那其实这个来说的话,一般要考就要考到一个编程题啊,我们可以给大家举一个例子啊。呃, d s, e j segment 啊,在这个数据里面呢,这个数据叫 table, 然后 d b 里面有三十 h, 三十一 h 三十二啊,我就省略一些。好吧,三十一直到三十九 h。 那 我们放的是这个数字符号的阿拉伯表,然后 截止,大家注意是 end 还是 end 呢啊? end? 那 我们如何用 x 这个 l a t 指令去查出数字符是三的阿萨码值 啊?我们刚才说过了,要将表首的拼音地址放到 b x 里面啊,呃,那叫什么? l e a b x table 是 不是这?这个就是将二次码表首的拼音地址放到 b x 里面,然后呢,将代查的元素从零号开始至 a l, 代查的什么?是三,是不是 幕五 a l 三,然后看什么查表,就单纯一个 excel 啊,那么这个就是一个,呃,当然这个是个伪代码,对吧?因为它不完整。我们之前还要做一个幕五 ax d s, e j, 把数据段传给 ax, 然后在幕五 d s a x 去设置数据段 啊,但是我们通过这个指令我们会发现啊,或者是通过这一道题,我们发现将 lea 指令, mv 指令还有 x l a t 指令全都用上了。 好,那么下面要讲的是这个 push 和 pop 指令,那么 push 和 pop 呢?是对站的一个进站和出站的操作指令,那么我们要知道的其他概念就是说堆站区的高地址叫占地啊,低地址呢叫占地。 好,这个可能会和大家平常所想的不一样,所以大家在这里要注意。那么汇编语言所用的对战呢?由对战段定义啊,对战段计算器为 s s, 对 战指征为十六位的计算器 s p 啊,数据的进站和出站都是要以字为单位进行,那我画五角星的这两个大家一定要注意 好。那么进一步来看 push 和 pop 指令, push 指令的格式是什么?就是 push o p r, 讲的就是将字类型的操作数 o p r 存到堆栈里,注意是字类型。那么在进行 push 操作的时候,其实我们有两个动作,一呢是将, 哎 s p, 大家还记得是什么吗?是不是我们之前讲了堆栈 s s p 对 吧?堆栈指征好,那么 存入对战,首先让你这个 s p 减二,要注意,为什么减二?因为高端是占低,低端是占顶,所以 s p 要减二,然后呢再将你的这个操作数去入站,对吧?就是将 o p r 的 这个值去放到这个里面。 好,那么我们在这里面要注意的呢,就说一啊,我们这个部署指令中的这个 o p r 呀,它可以采用的是这个寄存器寻址,也可以是所有存储器寻址,但不能用这个 立即寻址啊,也就是说不能将立即数去运站啊,不是入站, 不能说 push 是 散错的啊,一定呢,是怎么样先把它放到这个寄存器里面,再把这个寄存器 push 进去啊? 好,呃,还有一个呢,要注意的就是我们刚才一直在给大家强调的 o p r 呢,一定是次类型啊,不能说你去呃入一个八位的字节型,这都是不对的。 好,那么和入站相对的,大家肯定知道,就是出站呗,出站的话我们用的是 pop, 对 吧? pop opr, 那 就是将站顶元素取出并存入这个字类型的 opr 啊,那么我们怎么去做啊?首先呢是将这个 sp 啊,它这个 让它作为一个偏移地址呢,去给到 o p r, 然后呢再 s p 再加一,比如说第一步呢,是将占顶指征的这个占顶元素取出来,对吧?然后存入到 o p r 里面, 第二步呢,是将这个占顶的指征向下移动,一个字啊,也就两个字节,指向新的一个占顶元素。 呃,那么 pop 指令那种 o p r 呢啊,也是可以采用的计算机寻址和所有的存储性寻址啊。呃,但是呢,还有和这个是一样的,就是不能是立即数寻址啊,必须是一个字类型。除此之外呢,我们要知道的啊,就是 o p r 对 pop 来说啊,不能是代码段计算器 cs 啊,那我想知道,我们给一个例题吧,好吧,就是如何将 cs 的 内容传给 ds, 大家先暂停思考, 嗯,答案很简单,对吧?首先呢先将 c s 去入产,然后呢再 pop d s, 是 不是啊?先把 c s 存进去,然后呢再把这个存进去的这个数取出来,放到 d s 里面,这个就是将 c s 和 d s 一个转换,对吧? 啊,因为我们说了木的限制。好,那么我们来看这个例题啊,数据段有一个如下的这个字类型的一个数组,我们要编写一个指令,将数组的元素次序都颠倒过来,怎么做 肯定首先要什么怎么颠倒,对于对战来说,我们是不是要把它先 怎么样部署进去,然后再泡出来,对吧?所以呢,非常简单,就是先部署 d a t, 那 么这个注意一定是 d a t 加二,为什么加二?因为这些都是字类型的, 所以一定是加二,而不是加一,全部部署以后再全部泡出来,那么我们这个就是利用堆栈的什么原则,后进先出原则特性 来进行一个操作啊,那这个来说的话,也是比较常考的,那大家呢,可以去多多的去关注,那么考法呢,一呢是让你直接写代码啊,就是你把这个代码写出来,二呢是给代码读功能 好,再往下的话,我们讲的是 in 和 out 这个指令,那么 in 和 out 呢,是八零八六系统中的这个输入输出指令,输入输出指令呢是用于哪里?是用于 cpu 和 i o 之间的一个呃,这个传送, 呃,那我们在这个端口寻址中呢,有两种寻址方式,一种呢就是直接寻址,一种是间接寻址, 那么我们后面会一个一个讲,嗯,那么我们直接看这个指令的格式吧。那么硬指令我们说 啊,我们大家只要记住怎么样是直接指什么样的境界就好了啊。那么格式对于硬来说有四个硬, a l, p o r t 啊,这个就是直接寻址方式, p o r t 是 什么?是端口的地址? int a l dx 就是 间接寻址, d x 是 端口的地址, in a x port 呢? 哎,我们发现也是直接寻址,对吧?所以说到底是直接寻址和间接寻址,我们看到底是 port 呢?还是 d x 就 可以了。那我们来看这个啊,要从六十一 h 端口去输数据呢,我们就是 in 六十一,哎,不好意思, in a l 六十一 h 是 吧?我们这样的话就将这个六十一的这个 h 数据去传送到 a l 或 ax 接收器。那么要从六十一 h 和六十二 h 两个端口呢?是不是 in ax 六十一 h, 然后呢 执行后六十一 h 的 数据就会传到 a l 啊? port 呢,等于六十 h 指向我们一个较小的一个端口,对吧?所以呢六十二端口的数据就传送到 a h 里面 好,那么如果说是要从三百端口去输入数据,我们用的是木 d x 三百 h 为什么要用 d x 做一个辅助呢?因为我们说了三百 h 呢,超过了可以直接选址的一个范围,所以只能用间接选址。 那么其实 alt 来说呢,也是一样的啊,只不过呢是这个呃,我们的这个位置做一个交换,那么 alt 指令是一个输出指令,它的功能就是将 a x, a l 或者 ax 计算器的数据呢去输送到 l 端口。 那么呃,我们直接看例子, al 计算机输入到四十二 h 端口就是 alt 四十二 h al al 计算机数据出到三零三 h, 那 就是木 dx 三零三 h alt dx 什么呀? al 啊,那原因我们在 in 里面已经解释过了,对吧?它已经超出了它这个传 传输来,只能用间接寻址将 al 数据传输到四十一 h a h 传输到四十二 h, 怎么样?就是啊,这个 alt 四十一 h a x 啊,然后我们这直接寻方式,对吧?然后 port 就 等于什么呀?四十一 h。 那 么但是我们要说的就是 i o 指令呢,一般很少的直接去用在这个普通程序中,因为普通程序中的输入输出呢,一般都是来调用操作系统的这个 i o 历程来完成啊。那大家在这里面只要去会分辨什么时候是直接寻值,什么时候是间接寻值啊, 这里就好了。然后呢,就是一些写指令啊,不是写代码,对吧,也就是写指令的一个功能啊,就好了。好,那么下面来看一下这个考点考法啊,就是这个两个呢,主要就是围绕让你写指令来去讲要将 vr 五的数据传送给 vr 四数据怎么写? 有同学一上来就写木 v a r 四 vr 五 啊,肯定是错,我们说过了啊,两个变量之间是不能直接传送数据的,要以一个寄存器作为中转啊,那看好这是自结型,所以我们应该是写 m a l v a r 五,然后呢木五 v a r 四 a l, 对 吧?这样我们就完成这道题啊,非常简单,但是,呃,对于初学者来说比较易错。然后呢,交换自结型变量 v r 八和 v r 九呢? 有同学说还用上一个啊,呃,用上一个怎么交换你的,然后我们再目一次是吧?啊,那当然比较麻烦,我们应该是要想到的是什么?是想到这个 x c h g 指令对不对?这是一个交换的,但是 自结型和自结型交换我们能不能直接交换呢?也是不行的,对吧?所以要先怎么样先目 a l v a r 八加把 v a r 八只传到 a l, 然后呢? x c h j a l v a r 九, 然后呢?再木啊 v a r 八 a l 再把它这个传回去啊,这样的话去完成了一个交换,那么其实交换和传送 变量和变量的这个传送和交换自解性的变量其实是在编程中比较常用的啊,如果说在这方面错的话,那其实啊,隐患很大啊,隐患大可能会导致你以为你变对了,但实际上你错了,这种情况出现。

为什么没有人用汇编写代码了?就是所有的一线工程师,没有谁傻乎乎的在拿汇编写代码了,拿汇编去做驱动的,那也是屈指可数的工程师,那大家就即使做驱动也是 c 元节这个汇编语言是比 c 更低一层的, 汇编是唯一一个夹在二进制和人类写代码语言中间的一层,但是汇编的这个东西开发效率太低了,你写完了之后,你最终跑出来这个模型,跟人家拿顶层的跑出来模型是一样的,我为什么不拿这个更高效的、更抽象层次的来表达呢?

各位同学大家好,我是蚂蚁期末团队的叶老师,今天很高兴和大家一块分享会编语言程序设计期末突击课的内容,那这也是我们的最后一节课, 我们将讲述指令系统的基本串指令,但是啊,还是呃,非常艰难的告诉大家啊,我们这个串的操作呢,也是比较难的啊,因为呢还是同样会涉及到啊,我们之前说的这个判断啊,我们这个串的操作呢,也是比较难的啊,因为呢还是同样会涉及到啊,我们这个串的操作呢,也是比较难的啊, 和这个循环问题啊,所以还是比较难的,大家呢还是要放平心态啊。那呃,还要说明一点呢,就是我们上节课讲的这个循环计数型呢,是非常非常高频的考点啊,大家一定要记住, 一定要会啊。好,那么我们现在来进入这个基本串指令啊,基本串指令呢,其实啊,很多呢,我们会发现非常熟悉,我们第一个要讲的是传送类啊,木 s 类, 我们之前讲过木是传送什么?传送数据,传送地址啊,那木 s 呢,就是传送串啊, stream, 对 吧。 那么对于这个来说的话,我们啊也是有一个隐含寻址的问题啊,你的这个原创和目的串的地址是 隐含的,它是干什么的?是和目是一样的,就是将这个原创所指的这个串元素送到目的串和传送数据一样的目啊,三零零 a h 什么意思啊?就是将我们这个原数据去传到你的目的, 记存其中,对吧,所以它们俩的这个含义是一模一样的啊, 与木的功能类似。好,那么我们来看木 s 类的有两个,一个是木 s b 啊, s b 呢,指的是 b 是 指的是 bet 的 意思啊,大家不要多想, 那 w 呢,是指的是 word, 也就说一个呢,是传送的是自结型,一个是传送自形的数据。那么区别在哪?区别在这个修改串序,真到底是加减一呢?还是加减二?哎,那有同学说,为什么要加减而不是加或者是纯减啊,我们先不着急 好,木 s b, 它呢,我们就怎么用呢?你就一个木 s b 就 结束了,不需要你写任何的。为什么?因为我们已经说了,都是隐含的,那隐含到哪呢?哎,原创在哪?在 d s s i 这,这是原创, 把圆串送到哪?送到 esdi 这,这就是目的串啊,各位同学记好记牢。那么对于这个自串呢,同样的啊,是一模一样的,唯一不同的就是到底是加减一还是加减二,那么自结型的是占八位,所以是加减一。 呃,字型的是占十六位,所以是加减二。好,那这个没有什么要多说的, 我们先直接来看一道例题啊,看到底是怎么做好。那么到这以后呢,我们来看设 ds 等于 e s 啊, 它的等于两千 h, 然后呢,二零零幺零 h, 这个地址上呢,元素呢是八十六 h, 二零零幺幺 h 呢是五 c h 啊,那执行下列的这个指令,虚列 第一个 cld, 哎,有同学突然说了, cld 是 什么啊? cld 呢,是我们上节课中的给大家啊,一笔带过的一个这个啊,处理器控制类的指令。那我们来现在再给大家细讲一下啊, cld 呢, 是指的是让你的这个 d f 变成零,那 d f 是 干什么呢?是控制你的这个串值到底是增量还是减量?比如说你的串呢,是一个往上增还是一个往上减,对吧?那当地 f 为一的时候呢?是啊, sorry, d f 为零的时候呢? 我们先讲的是 c l d 是 零啊,那为零的时候呢,是以增量的方式去修改的,这就代表什么?各位回到前面, 代表你的 s i 和 d i 是 完了以后是要加一的,对吧? 那我们要就写在这里吧。好吧,当你的使用到这个 cld 命令的时候啊,你的 df 是为零的,采用增量形式展开,那么增量就意味着完事以后你的 si 是 加减一啊,或者如果你是自行就是加减 i 啊,加减二, d i 呢,也是加减一或者加减二, 那么它相对的是 std, std 呢,就是让 df 为一,也就是减量,那对应的也就是 si。 哎,我,我已经傻了,这个 s i 啊,是加一或加二, d i 是 加一或加二,那这是 s i 减一或减二,这是 d i 减一或者减二。 好,那我们在这个地方呢,就把这个处理器控制类啊,去 s d d 和这个 cl d 去讲清楚了,那大家呢,要对它进行一个清楚的记忆。好吧,好,那回到这道题来。 呃,这样说明什么?说明你在对串经操作的时候,你要先用 cld 或者 std 去表明你要让它是去增亮呢?还是去做减量。好吧, 好,那第一个就是 cld 代表的是我要以这个增亮的方式去修改,对吧?然后呢?木 s i 零零幺零 h 啊,那么注意啊, 你的这个 si 对 应的这个断地址是两千 h, 那 么现在表明的就是二零零零零,加上这个零零幺零,也就是二零零幺零 h 这个地方的元素 啊,不好意思啊,是是是是,是这个地址吧,对不对?然后完了以后呢?是木零零五零 d i 稍微有点问题啊,就是我们刚才不应该去深究它的这个元素,对不对?这 s i 的 目的是干嘛?是不是去设置你的这个圆串指针,对吧?啊?刚才稍微有一点点失误,那么对于你的 d i 呢?它的目的去设置的是你的目的串, 对吧?然后做什么?做木 s b, 木 s b 干什么?是不是将你的这个 d s s i 上面的这个内容去送到 e s d i 这里,那我们看 d s s i, 然后要求的是二零零五零 h, 那 二零零五零 h 是是在哪里?是不是和 d i 这个地方是对着的, 对吧?那这个地方呢?这个地址是不是二零零五零?完了以后呢?是不是把这个 d s s i 的 东西就送到这个 d i 的 这方来?那 d s s i 是 什么? 这方地址是不是二零零幺零啊?刚才分析的顺序稍微有一点问题,那么二零零幺零 h 这方的元素是八十六,所以把它传到二零五零来,这方就是八十六。 那么每完成一个木 s b 以后,我的这个以增量的形式, s i 呢?要加一, d i 呢也要加一,那么原来的 s h 这里零零幺零,那这方就是零零幺幺 h, 那 d i 呢?就是 零零五幺 h 啊,就是这样去分析,那么接着 啊,接着在原程序的这个上的基础上,将最后一条串串指令由木 s b 变成木 s w, 这会发生什么?是不是将以前原来的这个八十六 h 不 再是作为自洁性去传播,而是作为自行传播,那我们就要看二零零幺零旁边还有什么,是不是还有二零零幺幺啊,对吧?他们俩应该传过来,是不是? 哎,那这样的话,我们就是二零零五零,这方是八十六 h 啊,二零零五幺这方就传过来的是多少?是五 c h, 那 么 s i d i 就 不再是加一了,是加二,所以这份零零幺二,这份是零零五二 h。 那其实刚才呃,我们第一步这样分析的话是,呃,有点是,呃,因为已经知道要怎么做去分析了,那我们应该正常的分析是我们先把这个地方啊,是知道他在设置什么,然后呢再去分析。 好吧,啊,那希望大家呢,之后呢,也可以直接有这样的一个觉悟啊,那么接着往下我们要讲的是创比较之力, 那么串比较指令呢,是比较两个等长的串是否相同。有的人说,哎,这比 c 元方面能直接用啊,但是很抱歉的告诉你啊,串比较指令本身并不做比较工作,只是将原创元素和你的目的串 做一个减法,然后怎么比它怎么出,这个结果是变换 标志位啊,各位同学,你还是要从标志位去看他到底是不是一样。那么实际上呢,这个串比较指令呢,会和我们后面要讲的一个,呃,这个这个这个重复前缀一起连用啊,先说好啊,与 重复前缀一起连用,所以呢,我们讲完这个以后呢,大家会发现,哎,我没有跳到例题, 因为考法都是两个放一块儿。好,那我们来看 c m p 啊,那实际上呢,还是和之前的 c m p 功能是类似的,对不对?就是实行一个比较的功能, 那么还是 b 代表的是 bat 啊,字节,那么 w 呢,代表是 word, 是 一个字形,那么它干成操作什么?我们已经说了,就是用圆串去减掉目的串,同时呢这个圆串和目的串还是隐含的 啊,那其实和上部分是一样,就是 d s, s i 啊, e s d i, 能发现每个都是这样做的,还是呢去设置,去设置各种标志位,然后呢就是修改串执行,和刚才我们讲的这个啊,串传送,串串传送啊,也是一样的, 自结型就加减一,自型就加减二啊,那到底是增量还是减量?我们也讲了如何去控制,对吧?好,那么下一个呢,我们要讲的是串搜索,那串搜索呢,主要是用于在一个串中查找一个特定的元素,比如说我要在这个元素中找 x, 或者找一个字母 a 啊, 那它的方法呢,其实和我们当时讲那个数组里面找优秀是一样的,就是在各个串元素中依次进行一个比较啊,那对应的 s a c 啊, s c a s b 和 s c a s w, 那 b 和 w 就是 自结和自行, 那它呢也是引韩啊,我们讲的这个串呢,基本上都是引韩,那这边呢,是原操作数 a l 和目的串地址引韩,那么它也是做减法, a l 减去 e s, d, i, 如果说你搜索成功了,那代表你这个是不是零啊?因为两个元素相等,比如说我都是找 a, 那 a 减 a 是 不是应该等于零?零的话,是不是让你的标志被 z f 变成一啊?那还有一个要说的,这个串搜索呢,也是常常和重复前缀连用 好,那么这里的话我们还要要做的也是第二步修改串止针,那么同样也是加减一,加减二啊,那么要注意的就是自斜形加减一,次形加减二,然后呢是什么? c, l, d 去修改你的串是增量还是减量好?第四个要学的是串串存数 s, t, o, s, 那 它呢?是将一个元素值去存入目的串啊,就是把这个数据存到那么的串里面,那它呢?还是啊,我也说了都是什么引韩,对吧? 嗯,那么来看啊,那它是将什么?是将圆操作数 ai 去送到你的目的地值里面,是不是就将 ai 里面的这个值去送到 e, s, d, i 中?完了以后呢,你的 d, i 要加减一啊,那你是自结型加减一,那么 s, t, o, s, w 我 就不讲了啊,因为还是一模一样的,是将 ax 中的这个数送到 e, s, d, i, 然后加减二。 好,有存数,那必有取数,那取数的话也是取出原创地址所指的串元素的值,各位同学自己看啊,是用 l o, d, s, b 和 l o d, s, w, 那 么和它正好是相反的,对不对?是将你这名的数取到 a l 里面,你这名的数取到 a, x 里面, 完事还是加减一,加减二啊,一模一样,一模一样。好,下面我们要进入稍微有点困难的就是呃,重复前缀的这个问题。 重复前缀,那个重复前缀呢?啊,我们刚才讲的这些串命令啊,什么串串送呀啊,这个这个串比较呀,还是串搜索什么?我们这些都叫串基本操作指令, 那么重复前缀是干什么呢?重复前缀就是,至于这些串基本操作指令之前去用于控制你的这个基本指令要连续重复多少次, 同样还是用 cx 作为计数器,然后呢采用的是减一,是不是和循环我们之前讲的这个 loop 是 一样的,对吧?啊?大家还有印象吧? 好,那么所以呢,我们调整一下课程的顺序,我们是先讲的之前的这个控制,然后再讲的这个啊串的指令,那么第一个要讲的是 r e p, 那 么 r e p 指中呢,我们已经说好了,先预制的这个重复次数 是 c x, 然后呢每执行一次串止针呢,自动减一,然后呢?呃,当你的 c x 等于零的时候,串就要停止,那么用法我们要知道 r e p 和哪三个连用啊? r e p 就是前面我们讲的三个都能用啊, moose stoves a a law 啊,前三个啊,这是这三个啊,分别就是咱们的什么呀,取出啊,然后存述和传送啊,那么它的功能就是 啊,我们刚才在这一方说的啊,那呃,我们呢,现在的话就可以砍一个例题, 编写一个指令,将数据段从拼音地址从零零二零 h 开始以后的连续一百个字清零。 啊,那怎么清零?一种方法呢?就是我们之前说的这个按的,对吧?啊,当然呢,这个其实在这里面来说就是不够用了,对吧?你不可能把每一个和它按的,那么实际上还有一种方法,比如说我这个数是六十 一,一种话呢,六十减六十等于零,那么还有一种呢,我们可以直接让这个六十变成零,就是把零传送到这覆盖它,这,这样呢是我们这节课要讲的这个,呃,这个问题, 那么同样我们说了涉及到串,我们第一个先要考虑 clds 还是 skd, 那 么其实没有关系,和你自己的编程习惯有关啊,我们一般的话都采用的是 cld, 那 么 cld 呢?我们再说一遍啊,是至 df 为零,使的是正向操作啊,然后干什么? 然后目啊,这个 axds 啊,我们是什么加起来这个数据段啊,然后呢?目 e s a x, 有 时候这是干什么啊?因为呢,我们这个,呃,要用到这个存数,就是把每一个数都存成零嘛,对吧?那 s t o s w 这个指令呢?它会涉及到, 会涉及到这个目的串,对吧?而且呢,这个串呢,是在数据段中,对不对?我们是不是说在数据段中,所以呢,你要使这个 e s 和 d s 是 呃相同的,然后我们干什么去设计?呃,这个设置目的串指针对不对? 设置墓地串时针,墓地串时针是什么? d i 对 不对?拼音地址从哪?零零二零啊,零零二零 h, 那这个是设计什么?断裂值对吧?好,然后呢,重复多少次?一百次,重复次数放到哪儿?放到 c x 里,所以呢是 m c x 一 百。 然后呢,我们是不是要用到这个 s t o w 啊? s t o s w 重复一百次,但是呢,我们说它隐含的是我们要把需要存入的元素放在哪里, 一百个字是不是要放到 ax 里,而不是 a l 里,对不对?所以是木 ax 等于零,然后我们执行一个啊,这个重复循环, r e p 啊, s t s w, 这样的话就会使用一百次存零进去, 也就是完成了我们这个清零的操作。好,那么这个我们就讲完了,那么讲完这个以后呢,我们还要讲的是 r e p e 和 r e p z 前缀,那么 r e p e 和 r e p z 我 们再说一遍,它是等效的,那么它是和 c m p s 和刚才的这个 s c a s 配合使用。 好,那么它的功能是什么?它的功能是当 c x 不 等于零,且 z f 等于一的时候,重复执行指定的串操作指令,否则停止执行, 每执行一次串指令自动修改,且 c x 技术减一。好,那么我们来分析一下它是怎么去做的啊?首先呢,我们先分析了 c n p s 去做。首先啊,我们画一个流程图,好吧,操作流程啊,我们画一个这样不规范的流程图,好吧, 首先呢,是开始对吧?啊,当然还是比较规范的吧,我们尽量规范好吧,开始的时候,我们先判断 c x 是 不是等于零,因为 c x 等于零,你计数就停止了嘛,对不对?我们就是 c x 等于零啊,等于零吗?如果说等于零, yes, 对 吧? 我们是不是就让它指向?结束了,我们就写个 e n d 啊?那有的同学说,是不是接着判断 z f 等于 e 啊?不是啊,你得要先 c m p 才能触发 z f, 这是我们讲 c m p 的 时候就讲过的,你得先触发才能有条件, 这个标志位都是来等你出发的,所以我们要先干什么?先 c m p, 但是开始前我们要做,如果说你这个玩意儿呢?不等于零,我们要 c x 先减一啊, 好,那完了以后呢,我们这地方要做的是什么?做的就是你的这个。呃, c m p s 的 这个操作,那 c m p s 操作是什么? 就是两个这个目标串和圆串进行相减嘛?是不是就 d s i。 呃, d s s i 和这个 e s d i 去减, 然后同时呢,你的这个 s i 是 加减一或者加减二, d i 呢?也是加减一或者加减二, 然后呢?解完以后会触发什么?会触发你的 z f 啊,所以这一方就会有个 z f 的 判断。 z f 等于一吗?如果 z f 等于一,怎么样? 是不是回去对吧? y 如果不等于一呢?到 n 结束啊,那这个时候 c m p s 的 一个流程,那我们来看一下它到底是干什么的? 是不是说我们当这个 cs 不 等于零的时候,如果说你的这个原创和目的创的地址是相同,也就说是相同是代表什么?是你的 cs 等于一的时候,是不是我重复去执行 c m p s 这个操作 干什么?去继续比下比较下一段这个元素。当你的 cs 等于零的时候啊, cs 等于零的时候,说明你的这个每个串就比较完了, 或者说你的 z f 等于零的时候。哎,比较出一个串不相同的时候,它就会结束操作。那所以说 r e p e 啊,或者 r e p z 和 c m p s 指令去配合使用的时候,就是用来去比较两个串是否相同好啊, r e p e 啊,或者 r e p z 与 c m p s 比较,就是判断串是否相同? 同样啊,同样还有一个呢,就是说这个 r e p 和这个,咳, s c s 的 一个操作流程。同样呢,也是啊,当然这个地方按照标准的应该我们这应该是一个菱形,对吧?这方也是啊,开始 同样的,这个先判断 c x 等于零吗?啊,如果说 yes, 我 们就直接等什么结束了,如果说 no, 我 们就继续。 第一步还是什么呀? c x 减一对吧? c x 等于 c x 减一啊,我们这一方的写法呢,是和 c 类 c 的 一个写法啊,然后完了以后,呃, s e s 干什么?也是减法嘛,对不对?这个 al 或者 ax 和这个减去你的这个 d s, 呃, e s 啊, e s d i 啊,所以大家一定要对这个要记住啊。然后呢,你的 d i 是 加减一或者加减二,完了以后就判断你的 z f 对 吧? z f 等于一吗?如果等于回去,如果不等于,怎么样 and 结束? 好,那么我们来看这个流程,当你的 c x 的 值不等于零的时候,且目的串时针的这个串元素与待搜索的值匹配匹配什么? z f 等于一,对不对? 重复执行 s a s 继续搜索下去,当 cs 等于零,说明你的串元素搜索完,或者 z f 等于零,说明它不匹配的时候,是结束操作的。那么因此呢, r e p e r p z 和 s e s 操作指令配合使用的时候,可以理解为串中搜索与 a l a x 不 同的元素。 也就是说,你重复执行结束时,若 z f 等于一,说明这个你的串中的元素和 a l a x 是 匹配的,否则就是不匹配啊,那就是 z f 等于一。呃,搜索匹配 好,不匹配的情况,那就是反例嘛,我们就呃,不去做了啊,不去做这个参数。 好,那这个讲完以后呢,我们可以来看一个立体啊,设出句段,在偏移地址零零幺零 h 和零六零 h 处均有一个长度为五十的字母串偏斜折令,判断两串是否相同? 好,两串声母相同,大家应该和哪个相邻连用,是不是?哎?是不是 r e p e 和 c m p s 类相连用?那字母的话, c m p s b 是 不是 好?那么首先第一步干什么?对串的操作先设 cld 还是什么,对吧?所以第一个一定是我一般都说了什么?刚说了 cld, 对 吧?我们在这边是置 d f 为零,然后呢?正向操作。好,那么下一步呢? 啊?下一步呢?是我们在这个语语句结构里面要记的,就是目 a x d s 加在这个放到数据段里面,对吧?然后呢, 然后呢,是不是设置 e s 呀?是让这个木 e s 和这个数据段也是相同的,对吧?因为它本来就放到这个,呃,这个这个,这个,这个数据段中嘛,对吧?这个题目也写了数据段的偏移地址,然后干嘛设置原创之争? 原创之神啊,你设哪个其实没有什么关系的,因为两个比较嘛,对吧?所以是我们就先按顺序吧,就目 x s s 零零幺零 h 给它设为原创,然后呢,目的串是谁? 是 d i, 对 吧?那大家要记住目的串的寄存器是什么?不能说哎,考场我知道要设成目的串,但是我不知道设计哪个寄存器。零零六零 h 好,再往下,呃,长度为五十,代表我要循环五十次,五十次放到哪?放到 c x 里,所以是目 c x 五十,对吧?然后干什么?串比较串,比较 r e p e c m p s b 啊?这个在一开始我们就说了要用这个,那么然后再次再往后啊,你要去判断 z f 是 否为一啊,那这后面的这个怎么去判断?各位,我们在上节课中讲过了啊,而且讲了很长,也也举了很多例子,考题好,那么,呃,再往后我们还有一个 啊,一个前缀啊,这也是最后一个前缀了, r e p n e 或者 r e p n z 前缀。 那它的功能就是当 c x 不 等于零且 z f 等于零的时候,重复执行指定的串操作,否则停止执行,每执行一次,串中这个指数自动修改 c x 的 值减一 好,那么要注意啊,它是也是和 c m p s 和 s a s 连配合使用啊,配合 好还是我们画出的流程图啊?那流程图的话,其实我个人觉得和上一个没有什么太大差别。我们先来画这个 c m ps 的 啊,和 c m ps 连用的 首先还是什么呀?开始对吧?开始以后要判断这地方,要判断什么是 c x 还是 cs 时候为零,如果说你不是零,对吧,我们才能继续,对不对?然后还是干什么?还是我们还是让 c x 减一嘛? 再往下呢,再往下就是 c m p s 的 一个,这个这个,这个操作啊,我们啊,大家呢,作为复习来好也是怎么样?来好,我们再写一遍 d s i 啊,减去 e s d i, 这都是 c m p s 的 操作哦,然后呢, s i 加减一或者加减二,什么时候加一,什么时候减一?用 cld 或者 s t d 控制。为什么是一,为什么是二?是有 d b 还是 word 对 吧?啊,这个大家应该写这么多遍,已经非常熟了好,再往后呢, 和什么有关? z f 对 吧? z f 是 否为零啊?如果是零怎么样回去?如果不是零结束, 那这是少画一个啊, cx, 呃,如果说已经为零了,我们就结束画的太过了吧? 好,那么我们来分析一下我们当这个,呃 r e p n e 前缀和 c m p s 指令配合使用的时候,我们可以理解为什么? 理解为判断两个串是否完全不同,对吧?因为当重复执行结束的时候,如果 z f 等于零的情况下,哎,是不是相反,如果说啊,和 c m p s 结束后,如果说你的 z f 等于零,说明两串完全不同, 对吧?呃,也就是说当你重复执行的时候, z f 等于零,串中没有和 a l 和 x p 的 元素,否则就存在,也就是最后一次存在的话,就是最后一次搜索到的就是串元素啊,那么,其实, 呃,嗯,那么和 c, 呃,我们和这个 scs 的, 我们就不画图了,就是 scs 的 话就是进行一个搜索啊,那刚也说了,就是 cf 等于零的时候,说明怎么样?没有别的元素对吧? 好,那么相对而言啊,其实我们发现因为和 cms 去更好的配合使用,因为我们要去找一下到底有没有这个元素啊,如果说你的这个 cf 等于一的时候,怎么样 就是存在匹配的元素,就是最后搜索到的元素,就是刚说的,对吧?好,嗯,那么我们还是再看一道题啊,设数据段 p e 值零零幺零 h 有 一个长度为五十的 字母串,编辑指令在这个字母串中搜索字母 x, 我 们说搜索,刚讲完,对不对?是用什么 r e, p e 和谁联合?和 s c a s 联合,因为,呃,长度为五十的字母串去搜索。呃,搜索串搜索的话,我们是用 b 还是用 w? 小字母 k 嘛,那就是一个 b 就 好了啊啊啊, x 嘛,就是一个 b 就 好了。嗯,那怎么去做?第一步涉及到串,先设置到底是正向还是反向,对吧?我们说这是什么? d f 等于零,呃,设计的是正向,对吧?然后呢?加载数据段 啊,再数据段,对不对?让你的这个 e s 和 d s 相同,所以目 e s a x, 然后干嘛?设置目的串,对吧? 怎么设置目?设置谁? d i, 对 吧?设置到哪里? p a 地址零零幺零 h 好,长度为五十,搜索循环多少次?循环五十次,循环五十次,放到哪里?放到 cx 里,对吧?所以 m 啊, cx 五十 下面找谁?找 x x, 隐含放到哪里?放到 a l 里,所以是 m a l x, 最后干什么?串,哎,我串搜索对吧?啊,这方少写个 n 啊,不好意思,那就是 r e p n e s c a s b, 对吧?啊,那实际上就是这样的一个问题。好,那么在这个地方的话,我们其实就讲到了这个前缀和这个这基本的串指令的一个组合使用啊,那这个呢,也会作为考察串的一个重要的考点,所以各位同学要记住, 那么这个呢,也是我们的最后一节课啊,后面的话,可能有些同学说,哎,怎么少了一些这个编程的这个题的讲解啊, 那编程题呢,我们都放到科内去讲了,那么不管是多么复杂的编程题呢,都是由每一个小部分去组成的,因为后面肯定就是分支呀,循环呀。啊,那红会编等等这种东东西对吧?啊,这个子程序等等,那 还是想要跟大家说的,就是会编呢,是一门语言,是与一门语言,那就会有它相应的一些语法,那对应的就是他自己的一些规则,所以 理解也好,还是。嗯,死记硬背的同学也罢,你一定要把这个我们的指令怎么写去搞清楚,不能说光有编程的思维没有办法将它转换为实际 啊,这样是拿不到分的。那最后呢,也祝大家在期末考试中呢,取得好成绩。好,那这节课啊,我们就讲到这里。

各位同学大家好,我是蚂蚁期末团队的叶老师,今天很高兴和大家一块分享会编语言程序设计期末突击课的内容。 在本节课中呢,我们主要去介绍会编的语句结构,那么这张呢,其实啊,整体内容呢,比较简单,其实是一到两星之间,但是呢,考虑到大家啊,这张可能会有一些需要大家记忆的东西,所以我们把难度还是设定为两星啊,整体呢还是比较简单,大家好好听哦 啊,但是呢,还要注意的,这张是比较重要的,如果说你连这个语句结构都不知道,你是不可能去写出一个会编的一个程序。 好,那么开始的时候,我们要先说一下红会编呢,是微软推出的八零八六系统中最为流行的会编语言版本,那么其他的版本呢,和它是大同小异的,大家呃,只要精通其中一个,另外的也就是出类旁通了,对吧?那么会编语句呢,我们要语言程序,我们 编辑它是要采用的是分段结构,那么将源程序的这个代码数据堆占分开来放啊,所以说呢,一个源程序就会包含三个段,就是代码段,数据段和堆占段。 那么要注意的是,一个源程序可包含的这个段数是不受限制的,但是八零八六 cpu 只提供了四个 段记存器,所以呢,在一个源程序中,最多只能同时操作四个段,那么这四个段记存器是我们上节课介绍的,大家应该有印象。那么如果说需要操作当前四个段之外的其他段,必须先将该段的段地主 断地址去存入某个寄存器啊,一定要存入某个段寄存器,这样才会使呃该段寄存器原来定位的段变为不可操作。好,那么这只是一个我们为了介绍语这个这个语句结构的一个铺垫啊,那他只是来讲一下他的一个分段结构, 那么下面呢,我们来看它的这个语句结构,会编语言的语句结构呢,是这四项组成哎,那么其中带这个中括号的表示是可选项,什么意思啊?就是可以没有,哎,也就是说必须要有的是谁啊?操作项 啊,那么呢,根据这个会编语言语句所起的作用不同啊,是我们是通过作用将它分为三类, 一个呢是为指令语句,那为指令语句呢,其实就是用来说明程序运行的处理器平台啊,比如说进行断定义,变量常量定义,过程红定义啊这些,那么要注意的是什么呢?为指令是作用于会编过程的, 也就是说为指令语句是来指令会编程序如何进行原程序会编的,而不是去实现程序操作功能,对吧?要知道不是实现操作, 那么注意我画波浪线的和我写的这个字是一考在这个选择题里的。 那么第二是指令程序,那么指令程序呢,是包含一条红会编语言指令啊,它的操作功能是由指令语句去实现的,哎,指令语句呢,经过这个会编形成机器指令,然后呢在这个程序运行的时候去执行。 第三个呢,我们要讲的是这个红红指令语句,那么红指令语句呢,是红会变语言允许程序员自定义的一个特殊形式指令,那他通常的一个红指令是由若干个指令语句去组成的 啊,那么有点像什么呢?我们在 c 语言中学会一个东西叫函数,对吧?那么其实红指令语句和这个是差不多的。 那呃,他们来说,我们应该逐个去介绍,比如说名字,像他涉及的内容哪些啊?比如说是定义语境中的宾朗明等等等。但是呢,呃,由于这个课程的关系呢,我们不对它深入展开,我们只对它的这个考点进行展开,就是说他可能会考什么?我们在这课中讲什么? 首先第一个对于名字象来说呢,名字象是一个符合特定规则的字母串,它的最长限度不超过三十一个字母啊,那当然这个一般不好。 然后呢,它的规定是什么?它呢?是可以由二十六个英文字母不区分大小写,然后数字负零到九以及问号啊,下划线,艾特,还有这个 dollar 符号去组成的。 但是要注意的这两点,第一数字不能作为名字下的第一个字母,第二点只能作为第一个字服用。比如说我们取一个名字叫 a 三,哎,这是认可的。那当然注意不区分大小写的话, a 三和 a 三是等价的啊,这个大 a 三小 a 三是等价的,那么可能会出什么呢?他说,请问九 at 呦, 是一个合法的字母吗? no, 不是, 对吧?那请问 a at 点是一个合法的字母吗? no, 因为点只能在第一个用,九不能作为 第一个字母啊,这个就是选择题里面常出的。那么第二个的话就是操作项,那操作项要知道它是一个必不可少的部分,对吧?我们在刚开始也讲过了,只有操作项,这没有加什么中括号。 第三呢是操作的属相啊,那么操作属相呢?其实并一般来说呢,不作为考点啊,那么他可以是一个两个人,没有也会常亮计算器什么什么等等的,大家有一个了解就好。 那么第四个这个注视项我觉得也不用讲,那么比如说呢,在 c 语言中,我们是不是用一个两个呃,这个斜杠来表示注视,或者说是斜杠星号点点点星号斜杠来表示注视,对吧?那么其实在会边呢,其实我们只是用个分号,那么分号后面的这个就是注视啊,我们在后面也会给大家举例。 好,呃,那这些呢,大家做一个了解,就算要考也只会在选择题里考大家的概念。那么下面的话,我们来说的话,就是要看一些常用的为指令, 第一个呢就是断定义的为指令,那其实会编是一个死板的语言,它给你固定好了它的格式,就是这样,看好断名 segment, 然后, 呃,定位类型,组合类型类别,然后这个点点点代表什么?就是你段里面你应该有那些代码,哎,注意这是什么呀?这就是刚才我们所说的注示,对吧?然后 结束的时候一定要选段名 ends, 注意这有一个 s 啊,注意是段名 ends, 不是 and。 好, 那么我们摊开来讲,其实在用的时候,一般比如说我们段名起叫 s s e 吧啊?段名是自己起的嘛? segment, 一般来说其实后三个什么定位类型,组合类型类别我们都是不写的啊,一般不写,那然后呢?是你的代码,然后呢是段名,就是 s e n s, 这就结束了 好,但是呢,我们还是他来展开来讲,因为在后面的这个啊,如果是写代码的话会比较困难,不讲的话,那么定位类型的话,我们来说有这五种,那么实际上它是对什么进行要求呢?它是对断地址 或啊,不好意思,应该是断手地址进行要求。 一般来说,如果你什么都不写,对吧?你这可以省略不写,那它默认的就是这个 p r a 啊,它呢,只是要求你的这个断手地址能被十六整住就好了啊,这是我们之前讲的,这是最基本的啊,不是,是它要求的,所以它才是默认。那么对于 bat 来说,它的也是允许它是,呃,是,是允许它是任何 啊?也说你不背十六整除也可以,譬如 bet, 那 么 word 呢,是规定你的断手地址必须是一个偶数。第 word 呢,是要求你的断手地址背四整除, 配置是被二百五十六整除,大家做一个了解哈。然后呢,组合类型啊,是三种, public, stack、 common。 那 public 呢,其实是将多个模块中具有该组合类型的同名同类别 啊,连成一个段,但是它的总容量不能超过六十四 kb, 那 stack 呢,其实和 public 是 一样的,那它组合的段必须是一个堆栈段啊,那你从它的名字 stack 里看出来,那么 common 呢?是,呃,将该组合中的同名同类别合成一个段, 那它的这个段容量和这个六十四 kb 不是 这样的哦,它的段容量是你在组合段中的 最大段,才是它的容量。比如说我一个段是三十二 kb, 一个段是十六 kb 啊,那如果用 public 就是 将它什么相连完了以后就是四十八 kb, 对 吧?那么如果是 common 呢? 取最大的就是三十二 kb。 好, 那么类别的话就是大家自己定义的啊,它可以是一个任何的字母串,起到一个组合作用,但是要注意的就是它一定是要有这两个单引号之间的啊,一定要将这个字母串放到单引号之间, 然后下一个常用的是 a sum。 a sum 的 作用是干什么?它就是来记建立这个断寄存器和断之间的一个关系,它一定是必不可少的。 对于数据段,你要建立数据段和数据计算器的关系,对于代码段,你要建立断,呃,这个代码段和代码断计算器的关系 好。呃,那么还有一个讲的就是原程序结束为指令啊,比如说我的这个程序代码已经开始了,我怎么让它结束呢?是有一个 and 加这个标号。 哎,大家一听一头雾水,你都给我给一堆这个格式是吧?什么? so, 我 们断记和命名冒号,断名什么什么什么啊,大家不要慌啊,不要慌,我们给大家提供了一个标准的堆栈段,数据段, 这个代码段的一个框架结构啊,这是标准的,也是什么?也是一般的,就说只要你是这样,框架结构都是这样的,那么我们先将它区分好,好吧,那么这是第一个段,这是第二个段,这是 第三个段啊,那么这个的话,我们是他做一个这个圆圈圈的结束的为指令,对吧?这是刚才都讲过的,那么摊开来讲来,第一个 s, s, e, j 是 我们刚讲的,这是什么呀?这是断明,对吧? sega 们是必要的 stack 是 啥组合方法啊?那因为你这地方是堆栈的容量,你就是必须这么定义,必须它是 stack, 对 吧?然后呢, s s, e, j ends, 注意这 s 一定不要丢。然后呢,这个地方是 d s, e, j, 那 么 d 的 话,其实我们这个 s 呢,也表示是 stack, d 呢表示 date 啊,然后这个 c 呢表示是扣的。那么哎,你说刚才 assume 是 干嘛的呢?放这个 assume 啊,那你看干什么 assume? c s 冒号 c s d j c s 是 段寄存器名 啊, c s e j 是 段名,也就是说它呢,将 c s 的 这个这个代码寄存器和 c s, e, j 这个段进行联合。那 d s 呢,是和 d s, e, j 联合, s s 呢,是和 s s, e j 联合。那么你要注意,只要你有段,你就必须要和它这个段寄存器联合在一起。 这 s u m d 上写的 start 表示你的程序开始,表示你程序开始啊,这是个标号,你也可以写 hello 啊,这是个标号,自己定义无所谓啊。然后呢,比如说我们一般啊,开始第一个句是目 a x d s, 意思是把这个 a x 的 东西呢,呃,去 传到数据段计算器 d s 完成对 d s 的 装载。所以这个也是必要啊,我们说了,这是一般的标准的,那么在你这个结束时,一定不要忘了这两个 move, a h 四四 h 还有 int 二十一 h。 不要问为什么,大家 已经要突击了, g 就 好。那么这两条指令的作用是干嘛的啊?就是用于结束程序运行,返回操作系统命令状态, 相当于什么 return 零啊。当然大家如果对这有兴趣的话,其实它们两个作用是一样的,一样的啊,然后结束 c, s, e, j, n s, 然后注意,我们刚才还说了要进行一个原程序结束的为指令,对吧? and 加标号,注意啊,这儿没有 s, 一定是断结束有 s, 原程序没有 s, 好 吧, 好,那完了以后呢,其实我们要对这里面进行一个学习,比如说,哎,我要定义数据段,那这个内容怎么写?这是大家需要关心的,对吧?那我们在这地方用到的这个为指令的格式就是变量名, 就是从标准格式引上来的变量名,然后呢类型还有这个数据项 啊,这个就是定义的一个格式,那么我们要讲的一个类别,我们就分为 d b, d w, d, d q, d t。 啊,那一般来说的话,我们最多就用到前三个就比较多了啊,那 d b 呢?表示字节,我们说了字节是一字节,对吧?啊?字呢,就是两个字节, 双字就是四字节,四字八字节,那十字节他说的就是十字节嘛,对吧?每个字节是八位。那么举个例子,比如说我们变量一 v l, 定义一个字节型的就是四十六 h v l 二 b w, 这个二 a 零五 h, 对 吧?我们相当于定义一个这个 呃字形的这个数据就是二 a 零五,然后呢 db, 哎,你们发现这里面可以是什么数据项,也可以是什么表达式啊,这就是你的一个定义的过程,那负五十三,那么你会发现这里面也可以写 呃,十帧值,也可以写二帧值,对吧?那大家一定要注意要有这个表示啊,那一般来说我们通常使用都是六帧值, 然后呢 vr 四是 dw 型啊,也是字型,那么十二 h 零 a 幺八六 h, 哎,那么 vr 五呢,是一个字节类型,我们发现一二三四五六七八九十十个问号。 哎,那对于这个十个问号,大家觉得这样很麻烦,对吧?那么实际上呢,呃,八零八六呢,也提供一个非常简单的一个操作符,叫 dup 操作符。 dup 操作符呢?它 怎么去表示十个问号呢?哎,我要几次,十次就在十,然后注意这地方要空一格,然后 d u p 括号问号啊,那么 v a r 五 d b 这么多问号啊,和这个是等价的。 好,那我们在这里要注意 d o p 操作符的一个使用。好,那么再往后的话,我们还要学的一些是属性操作符啊,属性表示,那么 offset 就是 取 变量或者标号的段内地址啊,怎么写呢?比如说我要取一个变量 e 的 这个段内偏移地址,我们就写个 offset, v a r e 啊,就这样非常简单。那么 s e j 呢?是取什么断地址,那用法是一样的,对吧?就是 s e j v r e p d r 啊, p d r 是 干什么的? p d r 呢,是用于重新指定变量标号或者地址表达式的一个访问类型 啊,那么可以重新指定类型就是 bad word d word near far。 那 么 bad 呢,我们就不多说了,是字节对吧? word 呢,就是字 d word 双字 near 是 什么?叫近类型啊? far 呢,叫远类型。 那么举个例子怎么使用,我们就看四就好了,那么前前两课我们因为举过例了,就不再赘述,那我们意思是将这个 v a r 三重新去指定它的类型是什么型?是字型啊,就是 word p t r 三。好 啊,下面来讲的就是替代符定义为指令。 第一个讲的是 equ 啊,那 equ 呢,其实就和等号呢是一样的呃,我们可以去定义一个值,比如说 n 一 等于 d a t 一 啊,那或者是 n e e q u 啊, d a t e, 那 么实际上呢,它就是用它来去指代它,就是替换它啊,那它的作用其实就是去提高程序的一个可读性,让你知道你在干什么。 那么呃,要注意的就是替代符呢,和变量是有一个本质的区别的,就是我们比如创建一个变量 v a r e 啊,我们会给他去分配一个存储空间,但是替代符不会,他只是某个表达式的别名。会编程序在对齐啊,这个齐啊,不好意思, 对齐进行会编时,会用表达式的值将它直接替换,比如说我这个代替一,其实本来呢是什么?是二,对吧?我在会编的时候,他这方显示的 n 一 就是二, a 就是 二啊,不是说你什么 d a t e 等于什么。那么还有一个注意的就是 equ 呢,其实等于呢啊,是一个等价的,但是唯一的区别就是这个等于号呢,可以在同一程序中重复定域,那么意思就是 equ 只能定一次啊,有点像什么 const 一 q 有 两项 cos 的, 对吧? c 语言中的,那么等于的话就是可以重复定义,那有效范围呢,就是从这次定义开始到下一次被定义,那非常好理解,大家都是学过 c 语言的,对吧?好,那么 呃,还有一个要大家注意的就是这个段内偏移地址指令设置为指令,一个呢,就是段内偏移地址的这个时针 dollar dollar 负, 呃,还有一个呢,就是段内拼音地址,段内拼音地址指真设置为指令 o r g 啊,那其实我们来看一个例子吧,呃,比如说这个 d s e j segment segment, 对 吧?这些 e 是 d b 十四 h d o p 问号,那么十四 h 表示一个什么次数,对不对啊?也就是说有这个当然是十六斤之类的这个问号啊,这么多 o r g 呢,设置的是一百 h, 然后呢 date 二是 dw, 幺三七五 h, 二四六八 h。 呃,那其实啊,我们在这个存折空间来说,我们把这一次去掉完美的方式,我们这一方应该是有这个,我们从零开始啊,或者说幺零零零零开始,我们这一方应该是先有十四个这样的问号,对吧? 那么按理来说呢,我在定义这个 dw 的 这个数据的时候,这个幺三五七,我应该是接着他去定义,对吧?这一方应该是七五,这一方幺三,对吧?幺三七五啊,但是呢,因为我们用这个 o g r 一 百 h, 因此呢,我们这个 date 二的这个定义,它就会从偏移的这个地址啊,就会变成了一百 h 啊,当然可能是在上面啊,那才会去这个重新定义它,好吧, 啊,或者我们还是用这是零吧,好吧,因为好表示嘛,那其实这一方的话应该是十四 h, 而十四个,对吧?完了以后呢,这个地方 o r g 一 百 h, 那 将它从这一方变成了一百,那其实这就不是这,这是其他的或者是别的,然后空空空空一直等,等到这个一百 h, 然后才去存你的幺三七五 h, 然后呢什么二四六八 h 啊,是这样子的,那么其实他呢就是去改变你的一个锻炼拼音地址,那么这个当然呢,就是取你当时的这个拼音地址啊,我们通 过细品来看,好吧,好,那么针对之前所讲的这些东西呢,呃,我们概念的考法已经在讲课的过程中给大家说了,那么需要注意的就是一些其他的啊, 常考的题一个就是画出存储空间的印象,呃,这个一般来说如果要考的话,你都说了画嘛就会作为一个简答题 或者分析题吧,好吧,那要看你们出现的类型,那么图中数据我们首先到都要以这个十六位静止去表示,怎么画呢?首先呢,你就画一个这么大的一个框好吧, 啊,然后你这一般开始都是点点点,或者说他会告诉你你的断手地址, 如果题目没有告诉的话啊,你就按照你的去写, 然后呢每一个小格就代表着他们的啊小家吧,好不好。那么首先来看定义的第一个是 v r e d b 四十六 h 自结型啊,我们每一个框呢就是一个自结型的来表示啊,那么 v r e 在 这方呢是我们的段内偏移地址, 好,那么第一个地方就是 v a r 一 吧, v a r 一 是个自结型对吧,所以是可以放下就是四十 h v a r 二呢 d w 型,所以这方应该是放在 v a r 二, 注意我们这地方用的存储是小端存储,比如说你的这个二 a 呢,先会放到下面,上面呢才是零五, 哎,也就是把它逆序一下就好啊,这是它的一个存储的习惯,然后呢, vr 三 啊,是二十六乘三,那二十六乘三的话,转化为十六帧至应该是四 e h 啊,当然你如果直接写二十六乘三的话,呃,不太好啊你,反正咱们要统一表示,要么就是全用二进制,要么全用十六进制啊,也用十进制,很少,因为我们知道在会编中我们都用的是二进制,只是为了方便表示,我们改成十六进制 啊。然后呢,负五十三,负五十三,你要换成这个十六进制就是零 c b h, 再往下 啊,零零幺零幺零零幺 b 啊,那这一方的话就是二十九 h 啊,换成是有紧致,就这样好,嗯,那么这样表示的话,其实如果你要表示它偏低时候,就 v r 三加一啊, v r 三加二, 但是这个一般大家不用去写啊,然后完了以后呢,又是一个 db, 对 吧? db, 我 发现这是十二 h, 哎,那我这直接写十二 h 对 吗?不对啊,一定要把前面的零也补上啊,零零 h, 这就是 vr 四。 好,把这些写完以后啊,你就打一个省略号啊,或者这样打省略号,这就是他的一个存储空间印象啊,这样的就是分,一般就是满的,但是要注意,一定是要采用统一的表示,要么全用二进制,要么全用十六进制,好吧, 好,那么这个问题就是说在上一题的基础上,我们现在去看这些,这个,呃,属性表达式是干什么? 第一个 offset, v r e, 它是干什么的?我刚说 offset 是 去求段内拼音地址,所以它是去求 v a r e 的 段内拼音地址 是多少零,对吧?所以它的答案就是零。 offset, v a r 二加一,那 v a r 二在这儿,这个什么 v a r 二加一,所以是多少呀?就是二, sega, vr 三, sega 是 干什么?是取段地址,对吧?取段地址,那么同一个段里,这都在一个段里,这些数据都在一个段里,都是一样的,我们刚写的是 i, 对 不对?所以这就是 i 啊,那么在这个段里,它的属性这都是相同的,然后呢? word, ptrvr 三, ptr 是 干嘛?重定义类型对吧?那么重新定义 vr 三的访问地址,访问一个字, vr 三在哪?在这访问一个字是什么? 两个字节,就把这个圈出来就好了,一定是往下取,往下取完了以后呢,我们是小段重组,一定是从下往上读,那这方就变成什么零 c b e h, 注意啊,一定是从下往上读,存的时候也是啊,小端存储,一定要是小端存储好,这个啊,分析表达式的话,一般考的话就是选填啊,或者呢,就是上一题的延伸, 就是简答题的延伸啊,好,那么下一题呢,就是去分析段内偏移地址值的作用啊,因为刚才我给大家举了一个这个 o r n g 的 例子,那么我们就来看下 dollar, 那 其实这个 dollar 的 话,考频呢,反而是大于这个 o r n g 的 啊, 来去分析一下段内偏移地址指的作用,那么大家不要说,哎,段内偏移地址指的是什么啊?就是个 dollar 啊,哥们啊,大家不要忘了,好吧,然后呢,我们来分析一下,哎, date 一 是不是就定义了花一长串数据对吧?啊,这是一个什么?这是个数据段嘛?然后呢, n 一 就是 dollar 减 date 一, date 二呢?又哗啦啦定一群数据,然后这一方就是 date 二啊, sorry dollar 减 date 二再除以二, 哎,那我们来看啊,在定义代替负 n e 的 语句中,这个 dollar 它是指出了什么呀?定义完 date 一 以后的这个下一个片形地址,对吧?定义完 date 一 的下一个地址, 哎,那就比如说啊,你看我哗啦啦啦啦啦,你看这一二三,我们不说这个一二三,哎,这是我的地址,比如说我的地址其实是零,然后呢,他指向的是哪?是这儿,是吧? 所以呢,我们用这个刀刃指向的这个这个地方去减你这个零,也就是说这方是三,减去零等于三,那这个三是什么?是不是就是它的元素个数? 那么所以第一个 dollar 的 这个作用其实就是去啊,表示出这个 date 一 的啊,这个数组的元素个数。 那么对于 n 二呢? n 二是减 d a、 t 二再除以二。那么要注意的是, date 一定义的是 d b, 比如自结型 date 二定义的是 dw 型, 它其实也是说它占的这个数组的这个这个这个元素个数,但是呢,因为它是这个字类型,它每个元素占两个存储单元,所以表达是二还是 d a、 t 二的这个元素的什么呀?个数 它们是一样的,对吧?所以说不同除以二在于一个是 dw 占两个字节,一个是 db 占一个字节,都表示的是这个元素的个数,所以说考试很可能会考大家去分析段内偏移地址这个指征的作用。

各位同学大家好,我是蚂蚁期末团队的叶老师,今天很高兴和大家一块分享汇编语言程序设计期末突击课的内容,那么在今天我们主要讲解的是算数运算类,那么算数运算是干什么?那无非就是加减乘除。 好,那除此之外,我们可能还要去考虑一些增量啊,减量和比较 这样的啊,一些事情。那么我们首先来讲加法的指令,那么加法的指令,那么就是 add, add 这个键轮之意,对吧?这就是加的意思嘛,那它的功能也就说是将 dst 和 src 的 值相加送到这个 dst 里,对吧? 啊,那呢,这它是执行一些常规的加法,那么其中呢,我们要知道 dst 呢,是可以采用寄存器和所有的这个存储器 寄和存,那 s, r, c 呢?是采用寄存器啊,所有存储器还有一个立即行驶这三种方式,我们简写 j, c, l, 呃,那么我们要知道 a, d, d 指令会对什么产生影响,这个大家要注意啊,会对我们之前讲的标志位有哪些?还记得吗? c, f, z, f, a, f, s f, o f, p f 啊,这是我们之前讲过的六个标志位,大家一定要知道 cf 是 干什么呢?是敬畏位,对吧?啊,敬畏标志位 啊,比如说 o f 是 干什么呢? s f 是 干什么呢?大家一定要自己记清楚。那么怎么影响呢?我们先把它翻到后面的这道题来看, 欸,大家看啊,设 a l 为七十六 h, dl 为零, c 五 h 分 析指令的执行结果,指出对各标志位的影响啊,欸,指令没有写上来啊,指令就是 add, a l dl 就是 减去了加加。 好,那七十六 h 二进制是多少呢?啊?我给大家直接写出来了,零幺幺幺零幺幺零,各位如果不知道它的二进制的,一定要去好好复习一下二进制是怎么转换的?零 c 五 h 的 二进制,幺幺零零零 幺零幺。好,我们对它进行一个加法,对吧?零加一,一二一零向前进一,对吧?然后一一 零向前进,一零向前进,一。好,这就是我们的结果。那么很显然啊,我们在最高位上产生了一个敬费,所以说我们的 c f 要等于一, 那么第三位是哪一位啊?你看,大家要注意啊,这是零,这是一,这是二,这是三,这个才是第三位啊,那么在第三位的时候有没有进位?没有进位,所以说 a f 等于零。好,呃,那运算结果是多少 啊?我们如果用十六英寸表示的话,是三 b h, 当然大家肉眼看出来是不等于零,对吧?所以说 z f 是 等于零的,运算处的这个最高位为零啊,我们是保留后的啊,那 所以说 sf 等于多少是零吧,对吧?啊,我们说对于带符号数而言啊,如果呢,将它设为带符号数的补满,则使一号数相加,它的和不会溢出,对吧?所以说 o f 等于零, 那运算结果中八个二进出中有几个一,一个一,两个一,三个一,四个一、五个一、六个一, 对吗?所以是偶数? no, 我 们说了只保留后八位,所以这个一不能被计算出去,只有五个一啊,五个一的话,记住, p f 等于零啊,那么对于加法指令中对这几个。呃,这个这个标志位的考察基本上是必考啊,那么考察方法呢?根据各学各学校各有所不同啊,可以选择可以填空啊,也可以是简答。好,那么再回到 i 的 这个指令来 回答下,指令,我们要注意的什么就我们要讲什么。我们回到这个指令,我们要讲这个指令的注意事项。还是第一个我们不讲啊,为什么?因为第一个我们讲的是类型一致的问题啊,就说你 d s t 和 s r c 必须类型一致。 不,不讲了,因为之前已经讲过了。那么二就说 d s t 和 s r c 不能同时采用存储器的寻址方式,也就说怎么样不能将两个存储单元的数相加。为什么? 因为相加没有意义啊,对吧?我相加这个 vr 十七和这个 s i 我送到哪里去是吧?没有给我给地址。你只是变量,变量,变量之间都不行的,所以这一定是不行的。那第三就是 d s, d 和 s r c 呢?不能, 均,不能啊,我们说均不能为断继承器。断继承器有哪些? c s, d, s, e s 啊? sorry s s 对 吧?啊,那我们就比如说 add ds 两千 h 或者是 add 两千 h s 啊,都是错的,都会打八叉,那这个就是 i 的 指令的。呃,要的注意事项。那么我们要想说的是啊, i 的 指令呢, 和后面我们要讲的减法指令是类似的啊,所以说大家,呃,后面我们就触类旁通,我们只讲其中的一个好,下一个指令呢,是 a d c 指令, a d c 指令。哎,好像也是说是这个这个这个加呀,那这个 c 是 什么意思呢? c 其实源自于 c f, 也就是我们的这个进位位。哎,我们发现和 a d d 不 同的是他在这后面加了一个 c f, 所以 说 a d c 指令呢,是一个带进位加法的指令啊,也就是说,如果说你偏进位了, c f 是 不是等于一啊? 哎,那我就把你的这个加上,那用这个来有什么好处呢?比如说我们在进行八位加八位的一个这个算术方法的时候,我们可能会产生一个更高位的, 对吧?可能九位,可能是这样子,或者说我们如何去进行一个三十二位的一个加法?哎,这个时候我们用 a d c 指令显然更合适。 好,那么,呃,对于这个指令的注意事项呢,我们其实不需要多呃,再多的这个赘述。为什么?因为呢?呃,它和 a d d 的 用法呢?是一样的啊,我们只需要看后面的例题啊,看例题来讲怎么考? 看如何考好。那么下面讲的指令是 mac, mac 呢是什么意思?就是叫加一指令,那么它是用来干啥的?我们一呢,要么就用来计数,要么就是来修改地址的指征。 呃,那么使用 mac 的 时候必须要注意一啊,我们这个 o p r 不 能为立即数 或者是断计算器, 比如说 i n c 二十五或者 n c 四 s 啊,这都是错的。第二, o p r 必须有明确的数据类型。 什么意思?不能说 i n c b x, 为什么?因为 b x 表示的是一个存储单元的地址,但是我并不知道你的这个数据的类型是什么, 对于系统来说是未知的,可能你自己心里认为这是个自洁性或者是自行,但是系统并不知道一定要有明确的类型啊。那么还有的话,我们要讲的就是 m c 呢,它是不影响 cf 的, 什么意思呢?意思是其他五个它都影响啊啊,就是它不会改变 c f 标志的一个状态。好,那么这个就是 n c 指令,那么我们也叫加 e 指令,它的用处是干什么的?大家也知道是用来技术和修改地址的,为什么知道它的用处是干啥的?我们是用来编程的, 比如说我们考虑一下循环啊等等。好,那么下面我们讲的是 sub 指令,那么 sub 指令呢?是一个常规的减法指令,那么它呢,在使用要求下和 a d d 是 相同的,要注意的就是是将 d s t 减去 s r c 的 值去存入到 哪里啊? d s t 里,对吧?啊,那么我们可以给一个例子吧,比如说 sub a l d l, 那 么其中呢, a l 呢是七十六 h, 然后呢 d l 呢是零 c 五 h, 我 们可以分析下它的一个结果是不是? 呃,那我们还是刚才我们已经讲了七十六 h 的 这个运程结果。呃,二金制表示零幺幺幺零零零 幺零幺相减,大家会减吗?零减一一啊,这里是零,然后呢,这里是零零一一零一,对吧?减完呢,这个的十六斤表示呢是零 b 幺 h, 那实际上在减这个的时候,我们是不是产生一个借位啊?所以说你的这个 c f 应该是要等于一的,为什么还要强调 c f 这个事呢啊?因为我们有一个这个待进位的加法,那必然会有一个待借位的减法 啊,这就是个带筋的减法。 sb 指令呢,是把这个 u 呢改成了 b, 对 吧?在原来的基础上有一个减去的 c f 的 一个标志位啊,那它可以用于多结啊,多字结的数,一个相减, 它的用法呢?和之前我们讲的这个 adc 啊,是一致的,所以呢,我们不对它进行一个过多的表述。那么好,还有一个,我们有加一指令,肯定有一个简易指令,就是 dec 指令,它用来干什么?还是说用来计数和修改定值时针? 呃,那么它呢,和这个 i n c 的 指令呢?其实也是完全相同的啊,那么 i n c 指令是一个顺计数,那 d e c 呢?是一个啊,逆计数,对吧?所以说它更像一个什么倒计时嘛,对吧? 那对于这样的一个倒计时来说,我们一般用循环,为什么?比如说我们有个 will 啊, 哎,仅仅,哎,这啊,或者说是一幅什么什么啊?那当然。嗯,这个减法我们用什么来实现?我们就用 d e c 来实现,对吧? 用在编程上。然后呢,我们刚才在一开始我们讲除了加减乘除,我们要讲一个增量减量,一个比较量,对吧?那么 c m p 呢?就是一个比较之力啊,那其实也是 键名之意,对吧?源于它的这个英文,那 c m p 呢?它就是去功能,就是 d s t 减去 s r c, 哎,我们发现在之前的指令的时候,我们都会有一个将它存到哪里,对不对?比如说存到 d s t 或者存到 s r c 啊,那注意在 c m p 中是没有的, 他是干什么?他是执行减法指令影响状态位,也就是说我们刚练出六状态位,但不保存预算结果,所以说他才不用把指令存到别的地方。那么在使用的这个要求上啊,和 sub 指令完全相同,所以不过多的赘述。 呃,那么其实 c m p 是 比较指令,那它本身并不能完成这种比较,它只是通过什么呀?通过你的这个条件位去发现你到底是不是啊?这个你比如 c f 等于一,或者 c f 等于一,我们去判定。呃,比如说我们对于一个呃,两个无符号数吧。好吧,我们来 具体指出一下,对于无符号数 d s t s r c, 如果我们执行 c m p 指令以后, 哎,我们发现 c f 等于一了,代表什么?代表 d s d 减 s r c 的 时候发生了借位,所以说我们可以断定 t d s t 是 小于 s r c 的, 如果执行后 z f 等于一呢? z f 等于等于什么?它是零了,对不对?那说明 d s t 是 等于 s r c 的, 那么这个大家想一想就非常的容易。 然后还要讲的是一个求补指令啊,那求补的话大家都知道怎么求对吧?从刚开始学计算机去二进制的时候就知道怎么求补用于求有符号处的啊,补码形式表示的一个相反数,那标志位是会被影响的,对吧?按照什么进行预算?零减去 o p r 啊。 呃,那么 o p r 要注意的事项就是它不能是以立即数或者断计算器,并且呢必须要有明确的数据类型。好,两个注意点 好,那么我们在这里就把加减去讲好了啊。呃,那么制定的功能我们也就看到零减 o p r 再存到 o p r 里面。好,那讲完加减以后,我们就来看乘啊,乘的时候,大家记得我们在讲寻址方式的时候,给大家讲了一种寻址方式叫引寒寻址, 隐含性质的时候,我们当时就提了 m ul, 我 们说会在讲到这个指令的时候深入啊,去展开,那么我们发现 m ul 的 这个格式呢,就是 m ul src。 哎,那我平时学的乘法是三乘二或者是二乘四,那你只给我一个数,我跟谁乘呢? 那就说明他的被陈述是被隐含的。 m u l 呢?是,首先我们要知道它是个无符号数的一个指令,当 s、 r、 c 为字节类型的数据的时候,陈述默认是什么 被陈述啊?默认是存放到 a l, 然后呢,将他的成绩去存放到 ax 里。如果你是一个这个自行的数据, 那么被乘数默认是 ax。 乘积呢?存到 d x ax 里,那么被乘积的高十六倍存到 d x 里,低十六倍存到 ax 里 啊,这个很好理解,对吧?这样是个八位的,你这个八位,八位相乘,那么,呃,还是在我这十六位范围里面,那如果你这个是十六位的呢,是放到这个三十二位里面啊,其中 d x 呢是高位, ax 是 低位啊,这个大家一定要记住,如果记不住这个,你的乘法是算不成的。 那么好,那么讲完这个以后,我们当然还要讲它的注意事项。一、 s r、 c 不 能是立即数或断积分器。很好理解啊,我刚才 就已经声明了啊,它肯定不是断积分器,要不然啊,我要这个没有意义啊,没有意义。二呢,就是 s、 r、 c 必须有明确的数据类型, 也非常好理解,如果你不给我明确的类型,我没有办法判断我的被乘数到底是 a l 还是 ax, 对 吧?那计算机没有办法判断,那你的乘法就没有办法进行下去。那么呃,还有一个要注意的就是我们的这个 m o l 的 这个指令是影响 c f 和 o f, 那 换句话说,其他的是无定义啊,就这状态呢,不会被定义。 那么对于这些乘法啊,如果说这个乘积的有效数字不超过八位,或者说对字乘法乘积的有效数不超过十六位啊,那么就是 c f 等于 o f 等于零啊,否则呢,就是 c f 等于 o f 等于一。 好,那么在这里面我们可能一会会讲到这个乘法的一个边乘啊,我们后面再说,然后呢,我们刚说 ml 是 一个无符号乘法,那 i m u l 啊,就是一个有乘号的乘法, 那么它在用法上呢,和这个 ml 指令呢?是啊,完全相同的,所以呢,我们不展开讲,大家呢只要遵循这个 ml 去做就好。好,那么第四类我们要讲的是出发指令, 出发指令呢,也是根据它的英文怎么来的,对吧?叫 dmv 啊,那么 dml 是 lc, 那 么这个也是一个引韩宣旨 啊,和这个乘法是一样的。那么 d r v 呢,是一个无符号,当 s r c 是 自结类型的时候,被除数默认放到哪里?放到 ax 里, 然后呢,商存到 a l 里,当余数是字形的时候啊,被除数默认是 d x ax, 最后呢,商存到 ax 里面,余数存到 dx 里面。 各位同学,这些都是要记忆的,为什么要这么做?这是人为的定义,不存在为什么,大家一定要记住 啊,那我们例如 d i v b l, 那 么就是 b l, 什么?自结型对不对?自结型被除数放在 a x 里面,完了以后呢,这个商存 l, 余数存到 a h 啊,这个,这个没有写清楚啊,哎, 好,那么如果是 c x 代表它是个自形十六位,那么我们的被除数就是 d x, 那 么商存 x 余数存到 d x 里面啊,就是这样。 呃,那么 d r v 指令的话,我们其实和这个之前乘法我们要讲的这个 m l 指令呢,是一样的,它的注意事项,一呢就是不能是立即数或者是这个断计算器啊,二呢就是也是要明确数据类型 啊,理由和这些是也是一样的。那么三呢,就是说当你的商超出了这个表示范围, 这个时候啊,他就会有一个叫除法溢出的这个错误, 那么系统呢,就会自动的终止这个程序,然后呢,呃,就会告诉你啊,那我们举个例子,就是比如说木 a x 五千,就是将被除数五千存到 a x 里面,对吧?然后呢末 b l 二将除数二存到 b l 里面,然后呢再 d i v b l, 哎,那商为两千五,对吧?那么超出了 a l 计算的表示范围,是吧? 所以呢,他会就会产生叫除法一出错误,那么系统就会自动终止这个程序。好,那么和乘法对应呢?还有一个 i d i v, 对 吧?那么 i d i v 呢,是有符号的,这个指令那么和 i m u l 是 一样的,那和 d i v 是 一样的,我们就不做过多的表述。那么唯一不要这个要注意的就是对于有符号数除法啊,那余数的符号和被除数的符号是相同的, 好,再往下我们要讲的是这个符号拓展指令,哎,有的同学说我以前是八位,你拓展它有什么用 啊?那很多时候,比如说你的数据存到八位里面,但是在用到,比如说用到木木指令,我要把它放到十六位的数据里面,我必须让它拓展到十六位啊,这个时候就体现出它的作用。 好,那么此类指令呢,就是用于有符号数补满的位数拓展,以满足有符号数计算对数据位数的要求。第一个讲的是啊,指令是 c、 b、 w, 那 么引涵的操作数是 a l 啊,什么意思呢?它就是将 a l 的 有符号数扩展到 ax 中,那么实际上呢,是将 a l 的 符号位去扩展到 ax 中,所以叫做符号扩展。 哎,我们来看木 l 幺零幺幺零幺幺零 b 啊,这是负七十四的一个八位补码,表示我们用个 c p、 w 就 把它扩展到什么十八位,那么补码前面就什么 全补 e, 对 吧?啊,那这个地方我们还是会涉及到一个补码表示的问题啊,那因为不是在这一课程中,大家需要去看这个的前驱课程啊,学学清楚。 那么第二只面是 cbw, 那 么 cbw 的 这个隐藏操作数是 ax, 那 么就是将 ax 中的有符号数去拓展到 dxax 之中 啊,也就是将十六位的有符号数扩展到三十二位啊,那么实际上和这个 cbw 是 一样的,所以呢,我们也不过度的敞开。好吧,那么下面就进入我们的这个 cbw 是 一样的,所以呢,我们也不过度的敞开。好吧,那么第一题我们来看第二题啊, 编辑指令程序,完成三十二位数的相加啊,各位,我们的计算机都十六位的,如何去完成三十二位的相加呢? 是不是要用到我们之前所讲的一个指令叫代进位的加法,还记得吗?大家先暂停思考一下, 好,呃,那么这个八零八六 a d 指令我们玩错了,只有十六位的加法进行加法计算,无法完成三十二位的,所以怎么办?所以我们的思想就是将三十二位,三十二位去分成高十六位和低十六位, 然后呢,先对低十六位相加, 然后再加高十六位。为什么这个时候我们对低十六位的相加,我们可能会产生一个进位,或者不产生啊,把它再传送到高十六位的这个加法中,我们就可以 完成一个三十二位的。那么怎么做指令?首先啊,首先,呃,这个二零零零零八 a 零四二三四五九 d 零零 h, 我 们先找到第四位是谁?八 a 零四和 呃,这,这是这个 d 十六位,对吧?然后呢,高十六位是两千,那么这里面对他来说的这个 d 十六位是九 d 零零,高十六位是二三四五,那么我们首先啊,把这个呃被 被加数的这个高十六位存到 d x 里面,然后 d 十六位去存到 ax 里面啊,那大家这个指令肯定还是会写的,对吧? 八一零四 h, 然后呢目 d x 两千 h, 然后呢?呃,我们还有计算器,对吧?将这个呃加数的 d 十六位存到 c x, 就是 九 d 零零 h, 高十六位存到 b x, 好,那我们怎么做?先将第一位的怎么样相加? a d d a x c x, 对 吧?注意啊,这是第一位啊,这是第一位, 那相加以后,我们是不是会对这个 c f 产生影响,但产生影响是什么?这个你不需要关注,它可以是零,那就是没有影响,也可以是一有影响,有影响就把它加到后面,加到后面要用什么指令?要用带进位的加法,所以是 a, d, c, 然后 d x, b x, 哎,这样的话,我们就可以满足一个带进位的加法,然后呢,将它存到 d x 里面啊,那么题目数据可能会告诉你,将它存到哪里,你就存到哪里就好啊,如果说是,比如说它再让你存到 x 里面,那你再默五 d x, a x 就 可以了啊, 好,那么下一道题呢,就是关于一个乘法,那么乘法呢?就是让你完成无符号乘法的呃,一个运算,那么我们会发现啊,这个三百四十五是什么?是大于二百五十六的对吧? 大于二的八字方的,对吧?那么我们就不能用自结清,我们得用自清,那么自清被乘除存到哪里 还记得吗?存到 ax 里,所以是木五 ax, 三百四十五,对吧?然后呢,木五 b x 六十在 m u, l b x, 这样的话,会让你的这个乘法的结果存到哪里? 存到 d x, a x 啊,大家这些一定要记住啊,大家知道你乘完以后结果放到哪里啊?好,完了以后呢,我们再讲一个除法吧,除法的话是讲的是五千除以二, 五千除以二,大家可以先算一下,我们商是两千五百,对吧?我们刚您说了两千五百会除法一出,对吧?所以不能用八位,对不对?我们商应该用多少位?商用十六位。 好,那么这个本例中的这个除数二,我们就要用十六位去将它表示。被除数五千呢,就要用三千啊,不是三十二位去表示。那么首先末五 a x 五千, 末五 d x 零啊,那为什么要这样子啊?五千是 d 是 六位,零是高是六位啊。然后目 b x 二,将这个除数聚到 b x 里面,然后 d i v b x。 啊,这样的话我们商就会存到 a x 里面,对吧?是多少 啊?我们因为二十到二十这把就两千五百,然后呢?余数存到哪里还记得吗? d x 就是 零嘛,没有余数。好,那这个就是这个除法的课程好了。

各位同学大家好,我是蚂蚁期末团队的叶老师,今天很高兴和大家一块分享会编语言程序设计的期末突击课程内容。 那么在本节中我们要去讲的是选址方式,那选址方式的考点呢?一般是出现在填空选择会更多一些,那么难度呢?不难,希望大家呢认真理解,但是呢,虽然难度不难,这个也是作为一个必考题。 好,那么首先我们来看操作数的寻址方式,首先知道寻址方式是什么,就是说指令去指定操作数的位置,即给出地址信息, 在执行时需要这个地址信息去找到需要的操作数,这样寻找操作数的过程就是寻址,那寻操作数呢,就叫寻址方式, 那么立即数,立即数的话,实际上就是指操作数存放在何处,一般来说呢,操作数呢,可以跟随在指令操作码之后就称为立即数, 还有呢就是寄存器操作数和存储器操作数呢,可以存放到寄存器中,也可以存放到存储器中啊,那当然呢,这只是一个存储的地方。好,那么我们接下来看有哪些存储方式。首先呢,第一个叫寄存器寻址 啊,那么来说的话,就是说参加操作的操作数在 cpu 的 通用寄存器中,那么对于八零八六来说,这些通用寄存器是哪些呢?就是我们刚之前介绍的,前四个是我们着重介绍的,那么 s i d i s p d p 呢?是我们简要介绍的啊, 那要知道这个是十六位,不可分解,这个呢是八位,十六位啊,就是它可以分解为八位,那分解为八位呢?也就是下面这些,对吧?啊,那我们就不一一展开了,也就是说,比如说母 a x b x 指的什么? 就是说你的这个操作数就是放到 b x 里面,我们就只用盯紧这个就能区别,你到底是哪一个寻址方式啊?那么来看这个 b x b x 什么通用计算机,所以这就是计算机寻址啊。 好,第二个是立即寻址,操作数是立即数,也就是说它就叫立即寻址,那么我们来说观看哪地方,就观看我们后面的,对吧?二四零零 h 是 什么?是立即数,也就是它数据本身。 好,我们这个图也看出来是它的这个数据本身,这就是立即寻址。第三呢,我们讲的是存储级寻址,那么存储级寻址呢?比较多啊,其实它呢可以具体去分为直接寻址、寄存器间接啊,寄存器相对寄址,寄的地址, 那怎么去分别?我们要看啊,只要存在相对这两个字, 那对应的它肯定是加了某数啊。我们先把提纲告诉大家,只要是相对,那就是加了某数,间接呢? 间接说明它一次到不了,所以叫间接啊。那我们后面接着来看啊,直接选址, 哎,是什么?是不是就是立即数放到了这里面?是不是?那么一定要注意,它是在默认在数据段中的直接寻址的,它是默认在数据段中, 哎,这样给出操作数的这个拼音地址的这个方式,我们就把它叫做直接寻址。 好,下面的是讲的是寄存器间接,我们刚知道寄存器寻址是什么,对吧?比如就是木五 ax, 这样叫寄存寻址,那间接什么意思?我们再给这个打个框 啊,也就是说我们操作数是存放在内存中的,它的拼音地址是指定中寄存器的内容啊,它不是说是 b s 就是 它的叫做操作数,而是是指它的拼音地址为指定中寄存器的内容。比如说我们先要到寄存器中看这是什么,然后再从这个数我们再找到它, 好吧,那么十六位寻址中可以用的寄存器就是 b s, d i, s i p i 啊, b p, 那 么这个呢,也是大家需要记清楚的, 然后还有呢,就是这个相对啊,我们说了,只要看相对,说明他什么加长量啊,加一个数加长数,你看就是这样加 si 啊,大家先不要慌啊,我们后面会给大家举例子去判断,只要加了这个 si, 那 么他还有一个表达方式就是 count si 啊,那实际上他的这个就是他另一种写法而已,这只是表示方法的不同, 具体的含义就是 count 加上 s i 啊,那寄存器相对寻址是指的是操作出的有效地址啊,为基址寄存器或变址寄存器的内容中指定的位量之合啊,那有效成分呢?是由两个成分组成的, 这个 s i 呢,指的就是它指明要有一个这个位量啊,那么十六位寻址的计算器是 b s, d r, s i, b p, 还有呢是基址变址,那基址变址有效地址呢?是基址寄存器加变址寄存器的内容之合啊, 那么大家要知道啊,这里面如果我们基址寄存器用的是 b x, 那 么断寄存器默认 d s, 如果基址寄存寄存器是 bp, 那 断寄存器一定要是默认是 s s s 啊,不是 s s, 那 么这地方你们看到的,我们看到的可能就是两个寄存器相加 啊,这就是基质变值勋值。那么相对基质变值勋值什么呢?肯定是在原来两个寄存器 相加的基础上,我们再加一个谓语量,就是我们说的常数嘛,对不对?再加一个谓语量,就叫做相对基质变值勋值, 那还是同样的啊,这个是没有变化的,没有变化,然后我们表达的形式就是目 n x d b x s i 啊,或者 d b x s i 或者这样子,那么我们还是要声明,这个只是他写的形式不同,他最终的表示的含义就是他们这三个指数相加啊。我们说了有效地址是三个成分组成, 那么实际紧张我们在突击课程中不去讲它具体到底是怎么去仿存这个过程啊,我们只用看怎么去判别它到底是哪一种寻址方式。 呃,那么第四种叫隐含寻址,那么隐含寻址是什么呢?就是在有些指令中啊,它的这个默认操作数的存放,是某个特定的计算器中省略对它的一个描述,比如说我们后面会学到一个叫乘法这个指令 啊,那他的这个背沉住,其实是已经他设定好的,就是你,他是隐含的,好吧,就是你不可见的,所以叫隐含的。那么我们后续呢?对相对这个指令啊,有相关的这个指令,我们再去给大家去重申这是个隐含寻址。好吧,那这节课中不是我们讨论重点, 好,我们讨论重点就是如何考,对吧? 考法就是这面东西是不给你的,只给你这个筐里的东西啊,那大家根据筐里东西去告去选,这到底什么选址好?我们上技巧啊上技巧。 呃,首先我们说了怎么判断选址方式,我们只看后面的这些,对吧?好,三零六九 h 是 无框的数, 我们就是叫立即寻址。寄存器寻址是什么?无框的寄存器 就是寄存器寻址。那什么是直接寻址呢?就是有框的树。 好来看啊,寄存器间接寻址,什么有框的寄存器? 寄存器相对寻值,我们说只要遇见相对就说明它加了偏移量,就是加了一个常数,对吧?所以说只要出现加,那一定是要有相对,是什么寄存器加常数 基值变值。什么两寄存器相加 相对?记着变值呢,我们就不说了,就是两寄存器相加,再加添一辆也是加一个乘数。 好,只要呢你把这个记住啊,那那就没有什么大家这个这个这个需要害怕了。好吧,那么呃我们给大家这个给个例子吧,比如说哈, m a x 呃, b x 加 s i 这什么 两个基数相加是基址变址的寻址方式。好吧,那如果这里面再加个三呢, 就是相对基址变址啊,那一般来说考的就是这七种,大家只要认熟于心就好。那么除了这个之外的话其实还会讲的一个就是啊,可能有些地方不讲,就是转移地址的一个寻寻址方式。 呃,那么只我们呢只介绍两啊,几种比较常见的一个群制方式啊,一般来说可能大家只是只讲,但不考, 就是段内群值呢,一般就是段内直接段内进阶,那么它的一个这个格式啊,就是 gmp, near, ptr next, 然后呢段内接呢就是 gmp 啊, table bx 断间之间寻址呢就是 gmp far, ptr 啊,这个 next, 然后断间间接呢就是 gmp t word, ptr, bx 啊,那这个大家呢,只做一个了解就好啊,一般来说呢,不会出题去考。大家好,呃,那么。


大家好,我是蚂蚁期末团队的叶老师,今天很高兴和大家一块分享会编语言程序设计的期末突击课,在今天呢,我们来讲解的考点是其他寄存器语段,那么具体呢来包括的就是,首先呢是我们上节课中没有讲完的三个通用寄存器, 以及呢专用计算器,还有段计算器,同时呢我们给出了一个段的定义,还有涉及到的这个,呃,物理地址啊,还有这个段地址拼音地址之间的一个关系,或者说它的一个计算好,但这就是我们这节课要讲的内容 好,首先呢是 bps i d i, 那 么实际上 bps i, d i 呢?呃,和我们上节的这个讲的 a x, b x, c x d x 这四个通用计算器来说比较大的一个区别,就是说它呢是一个不可以分解的十六位寄存器 啊,那么 dp 呢,它的内容呢,可以是存放十六倍的数据,也可以生成一个存储器的地址,而 s d i 呢,其实它的这个用途呢和 bp 呢是非常相似的 啊,且呢在某些指令中呢也会被指定使用,那么大家也就是用来存存数据啊,在编程中使用的,那大家目前呢只要有个印象就好。那么下面呢是专用寄存器,那么这专用寄存器它每一个都有非常专一的用途, 它有明显的指向性,那么首先呢是叫 s p 存器, s p 存器呢,对应的就是叫堆站指征,那么都呢是十六位寄存器,它存放的是堆站站顶的指征啊,内容呢随着出站,入站,入站是进行一个动态改变的, 那么和它对应的其实是有个断记存器叫 s s, 那 么其实它俩呢才去呃组成,那么至于为什么这样写,那大家一会学了这个呃物理地址呀,断地址呀这些就知道了。 那么 ip 呢,是叫做指令指征,它呢也是一个十六倍记存器,它是用来提供下一条执行指令的地址,那和它对应的其实叫 c s 啊,那大家呢,先不要着急,我们慢慢学,知道就好。然后还有 讲的这个专用计算器呢,是 flex 计算器,那 flex 计算器的话,它呢,其实是去表示 cpu 中的一个状态标志计算器,所以呢,也有的就会将它直接写为标志计算器, 那么我们主要呢就会将它直接写为标志计算器,那么我们主要呢记好 第一个呢是 cf, 叫 carry flag, 那 么它是一个进位的标志位,在加减法预算的时候,如果是最高位有进位或者借位,那 cf 等于一。比如说我们举个例子,幺幺零零和零 零幺幺啊,那这个来说比较简单,就幺幺幺幺,那肯定是在最高位,没有经纬,也没有介位,那或者比如说是零零幺零零零幺零相加,我们在这会发现零一加一,我们这是二进值啊,说好二进值的, 那一加一的话,肯定是命令向前进一,然后是零,对吧?哎,有同学说这有进位,所以说 c f 等于一,对吗?不对,一定要注意是最高位有进位,也就是说,比如说这是一,这也是一,那我会向前进一个一,在这这样的时候,是不是这样 叫最高位进位呢?不对,这是次高位啊,各位,这才是最高位,当他有进位的时候,我们才会标志 c f 等于一, 那么还有一个呢,就是 p f 讲的是基偶标志位运算结果中低八位的一的个数为偶数的时候, p f 等于一,很好理解,幺幺幺幺零零零,那这个就是偶数,偶数的话, p f 等于一, 比如说是其中的一个一变成零,或者这个零变成一了,哎,那就变成基数,那 p f 等于零, a f 讲的是辅助进位标志费,那么其他的就是说是 第三个比特位,像第四个比特位有介位或者介位的时候,哎,那注意,也就是他们的这两个位是不相同的,对吧?这是他们的一个区别。 那还有要知道就是 z f 叫零标志位,那正好理解,计算结果为零的时候, z f 等于一,不为零的时候, z f 等于零,对吧?然后呢, s f 讲的是符号标志位,如果是负数, s f 等于零,也非常好理解。 overfloor flag 是 溢出标志位,当算数运算的结果超出了有符号数的可表达范围时, o f 等于一,未超出时, o f 等于零啊,那就看是否溢出啊。这三个呢,其实比较好理解,对吧? 然后呢,我们来看分析一下,哎,这个加法运算各条件标志位的一个状态,哎,我们在例子里学习啊,那么注意这个的话,也是一个考法,就是给你一个算数,那当然你是自己算啊,自己算,首先呢是自己算, 然后呢再写出标志位状态。 好,那我们来看,那加法,大家应该都会,对吧?二减指的零加一等于一,一加一,零相乘进一,一加一又是零相乘进一,是吧?然后一,然后一一零相乘进一零零零零一,好,你猜,这都非常简单,对吧?那么通过运算结果,我们可以知道最高位上是不是进了一位, 因此呢,我们就知道 c f 是 等于一的啊,那在计算机中呢,这个镜位不会被纳入到计算结果,而是记录在 c f 等于一的这个标志位上,如果后续计算需要用到这个镜位,那么他要从 c f 这个位上去取得 由适中。哎,第三位,也就是我们这个画下线的这个位上,是吧,没有产生镜位, 所以说 a f 是 等于零的,那预算结果为零吗?不为零,所以 z f 等于零。最高位啊,对于有符号数而言的为符号位为零,所以 s f 呢,也等于零。 如将适中的两数视为带符号的补码,则为 e 号数相加其和不会溢出,所以说 o f 呢,等于零。 那这个这八位的这个中有几个一啊?是不是三个一,三个一说明什么? 在第八位中,三为基数,所以 p f 等于什么等于零啊?那这就是 flash 计算机的一个考法啊,那可能也会只是单纯的一个选择填空,也有可能是一个简答题,让你分析,对吧?好,呃,那除此之外呢,我们就要进入的就是第三个计算器,就是断计算器, 那么断寄存器的话,呃,八零八六系统由于硬件条件的限制,对于处理器的这个使用采用的是分段模式啊,是在我们之后会讲,那么处理器的地址呢?其实就是分为断地址和偏移地址 啊,那么断寄存器是来干嘛呢?就是来存放断地址的,那么每个断寄存器都有它自己的用处。首先第一个叫 cs 寄存器, cs 这个 c 呢代代表是 code, 所以呢叫做代码断寄存器, 代码断计算器啊,我就不写了。然后 d 呢表示的是 date 啊,也就是说它是数据数据断计算器, e, x 呢是 extra 是 吧?那代表它是附加的, 附加的断计算器。然后最后 s 呢是代表是 stack 啊, stack 说明它是一个堆栈断计算器。 那么想必大家刚才还记得吗?我们刚才说有个 s p 叫堆站之针,对吧,所以说呢,其实它们俩就构成的是 s s, s p, 还有呢,是一个 ip 之争叫 构成的,什么 c, s, i p, 对 吧?嗯,那么可能有人会有疑问,为什么要这样来写?那么就像我刚才刚刚说的,它的地址是由断地址和拼音地址去构成的, 对吧?那么所以在八零八六系统中,逻辑地址它表示的方式就是断地址, 然后一个冒号段内偏移地址, 哎,那这是它的一个表示形式,一般的话,我们来说会用十六静止去表示,比如说啊,我直接给大家写个例子,比如说 幺三八 d, 然后冒号零二零零,哎,那我想问一下,那它实际的逻辑地址怎么表示呢?方法就是一个公式啊,大家把这个公式记好就好,就是断地址 乘以十六加上偏移地址, 非常简单,但是这个公式一定一定要记住啊,这是必考的,肯定要考,那怎么来算这个式子的 逻辑地址?幺三八 d 乘十六。各位同学要知道,幺三八 d 是 十六尽置,那我这个地方乘十六表示什么?是个实尽置的意思啊,这地方十六是实尽置意思,那么对于十六尽置 的数实进值数乘十六,对于十六的进来说,就是给它末尾补一个零就行了,非常简单,就是幺三八 d 零 h, 再加上零二零零, 就是这什么零 d 八加二,什么 a 啊,八加二是 a 啊,大家不会的,要自己会算啊,幺啊幺三 a d 零 h。 好, 那它的这个最终的逻辑地址啊,就是这么表示的,这个计算方法是一定要考的 好,那么我们再来讲讲段啊,那段的划分呢,是来自于 cpu 的, 那么在编程的时候,可以根据需要 将若干连续的内存单元作为一个段,那么用段地址乘以十六去定位段的起始位置,用偏移地址来定位段的内存单元,那么需要注意的一点是什么? 就是说你看我的这个断的起始地址是用断地址乘以十六来定位的,那么对于这个十六进来说,是不是我的这个末尾一定要是个零啊, 因为他一定必须是十六的倍数,对不对?这是第一个要注意点。第二呢,偏移地址啊,我们八零八六规定他是十六位,他的寻址能力就是二点十六次方,也就六十四 kb, 也就说一个断你的最大的长度不能超过六十四 kb, 这个啊,一般呢会作为题目里的陷阱啊,他看你会不会跳出坑啊。具体呢,我们来看一下题目吧。 来第一题,已知断地址为二一 f 零 h, 偏一地址为零零六零 h, 求物理地址,物理地址就是刚我们才说的这个逻辑地址啊, 那非常简单,就是断地址乘以十六加上偏移地址,那么对于十六级来说就是二一 f 零零哎,就补个零 h, 再加上零零六零 h, 答案呢就是零六 f 幺二啊,当然正过来念啊,那大家发现就是第二题的物理地址是不是?那么第二题和第一题呢,是一个互为相邻的题,大家第二题就自己去做一下好吧,那么第三题 给定断地址零零幺 h, 仅变化偏移地址, cpu 的 寻址范围是从哪到哪? 哎,这个地方需要用到我们刚才说的一个问题,就是说偏移地址是十六位的,它的寻址能力是六十四 kb, 它的一个断的最大长度是六十四 kb, 你 不要超过 给定断地址,我们求它的寻址范围是不是?首先你要断地址零零零幺 h 啊,先乘以十六对吧?乘以十六,那么乘以十六的话,其实我这方标注一下实景的十六啊,那就是什么零零零幺零 h, 仅变化偏移地址,那么偏偏移地址是范围是哪?是不是就从零零零零到 f f 啊?那非常简单,就是零零零幺零去加上零零零零或者是 f f f f f, 对 吧?计算完结果最小就是幺零零幺 啊。 sorry, 结果是零零零幺零 h 到幺零零 f h 好,那么第四题呢,其实是针对哪呢?是针对这个一个断了期的地址必须是十六的倍数做的一个陷阱题,那答案呢,是幺零零幺 h 和二零零 h 啊,那么大家呢,也是通过第三题啊,这两个题是类比的,这道题呢,留给大家好吧。呃,那第二题的这个断地址呢,其实就是在这里对吧?啊,答案都已经给到大家了好。

在这一讲我要讲述的是会编过程中的细节问题,我们把上一讲的实验过程把它复盘来讲一讲在会编过程中他的一些细节问题。 输入 m a s m 会编这个笑脸程序,不需要后缀,直接回车。他说你是要生成一个 x l 点 ob 键吗?这是一个默认的文件名, x l 点 ob 键 yes 的 话,就不需要打这个文件名,直接回车。 他说你是要生成一个 l s t 文件吗?如果说直接回车的话,他就不生成,如果说你一定要生成的话, 那么你就给他一个文件名,一般的情况下是与这一个工程的名字相同的,他是笑脸,你就是笑脸,点 l s t, 那么这里面那就是个细节了, l s t 究竟是什么文件呢?这个等一会我们再说。同样的这个 c r f 是 一个什么文件呢?我们也给他一个 x l 点 c r f, 好, 他生成的说是零错误。 好,这几个文件呢,都在这里了。首先我们来看这个 l s t 的 后缀文件是一个什么东西, 我们在 windows 下面,它是一个文本文件,我们点右键,用 editplus 或者是那写字板的记事本都可以把它打开, 打开呢,就看到这一些。哦,这这个地方呢,就跟我们前面的第八个那个就很相似了,这个相当于是地址,这个地方呢是机器码,这边呢是咒器符。哦,原来他是跟我像这样的,他不仅有这一个, 他还有一个,还有一个组啊,下面还有一个符号之类的。哦,原来这是一个什么呢?这是一个列表文件, 这个列表文件呢,他管的是什么?管的是你在翻译过程中,我这个工作过程是怎么搞的?就是说你的这个木五 d 二零幺,我给你变成了一个什么东西,就这个意思, 还有一些,还有如果说你的这个程序里面有符号定义的话,那么我告诉你这个符号是定义了哪一些,那么这样的话就对调试和排错有很大的帮助。 这个 c r f 文件,它是一个交叉缩影文件, 它列出了程序中定义的一些符号和引用这些符号的情况。 你想要打开这个 crf 文件,你就要用 crf 的 那个命令,这个命令呢在这里面提供的这个地方有一个 crf 要打开这个 c r f 文件,要用这个 c r e f 这个命令去打开 它,不是先打开它,不是直接打开它是一个产生一个中间文件,所以你你输入回车的时候,它呢就问你, 你是要看哪一个 c r f 呢?我是要看笑脸的 c r f 回车,他说你是要把它生成一个呃笑脸的 r e f 吗? 你说是的就回车,好,他说一个 x l 点 r e f 呢,就是它生成的, 生成的 x l 点 ff 文件,那实际上就是一个文本文件了,我们呢就可以打开看一看, x l 点 ff 文件是什么, 它这里面呢就实际上是你的程序中定义的符号啊、变量啊、标号啊等这些的使用情况。 好,我们再来说一下会编元代码中的细节,我们打开会编元代码,其实呢这里面的语句他的完整的写法是这样的, 前面这里面有一个标号,然后呢是这个木称之为操作符 d l 零幺呢,它是叫做操作数,后面还有一个以分号开头的,这个叫做驻时制氮,所以呢,它的驻时制氮是以分号开头啊,与 c 语言里面的两个斜杠是不一样的, 当然这个地方也是按照需要来的,如果你不需要,可以补写好。关于会编过程中的这些细节问题,我就说到这里,如果说你喜欢我的视频,请关注我的头条号,编程学与做。

绘编语言作为计算机程序设计中一种与机器语言紧密相关的低级编程语言,其存在形式与特性往往依赖于特定的计算机架构和指令级。一、基于指令级的分类一、 x 八十六绘编 x 八十六架构是 intel 推出的三十二微处理器架构, 广泛应用于个人计算机领域。 x 八十六绘编语言是基于这一架构的指令级设计的,具有高度的灵活性和强大的功能。 此外, x 八十六会编语言还广泛应用于操作系统开发、以层驱动编写以及高性能计算等领域。二、 r n 会编 r n 架构是一种广泛应用于陷入式系统和移动设备中的 r i s c 架构。 arm 会编语言基于 arm 指令级设计,具有简洁的指令格式、高效的执行效率以及低功耗的特点。 arm 会编语言在智能手机、平板电脑、互联网设备等领域发挥着重要作用。三、 m i p s 会编 m i p s 架构是一种 r s c 架构, 由 m i p s technologies 公司设计并推广。 m i p s 会编语言基于 m i p s 指令级,具有简洁明了的指令格式、高效的流水线执行以及强大的分支预测能力等特点。 m i p s 会编语言在高性能计算、网络设备以及嵌入式系统等领域有着广泛的应用。 四、 power pc 会编 power pc 架构是由 apple 一、 ibm 和 modero 等公司共同开发的 risc 架构。 power pc 会编语言基于 power pc 指令级设计,具有高性能、高可信和可扩展性等特点。 power pc 会编语言在服务器、工作站以及高性能切入式系统等领域有着广泛的应用。二、基于指令级特性的分类一、 cic 会编 cic 架构的会编语言,如 x 八十六会编语言 支持丰富的指令级和复杂的寻址模式。这类会编语言通常具有高度的灵活性和强大的功能,但也可能导致指令执行效率低下和功耗增加。 c i s c 会编语言在需要高度控制和灵活性的场合具有显著优势。二、 r i s c 会编 r i s c 架构的会编语言, 如 arm 和 m i p s 会编语言采用简洁明了的指令格式和固定的指令长度。这类会编语言通常具有高效的执行效率、低功耗以及异于实线、流水线执行等特点。 r s c 会编语言在需要高性能和低功耗的场合具有显著优势。 三、会编语言的跨平台与兼容性尽管会编语言多样性,但随着技术的发展,一些会编语言的跨平台解决方案逐渐涌现,例如通过使用模拟器或交叉翻译器等技术手段,可以在不同硬件平台上运行特定架构的会编代码。 此外,一些高级编程语言,如 c c 加加提供了内联会编功能,允许程序员在高级语言中嵌入会编代码,以实现特定的性能优化需求。