shuiyu 发表于 2017-7-14 23:44:01

《零基础入门学习汇编语言》第三十讲

本帖最后由 shuiyu 于 2017-7-15 22:39 编辑

首先先道歉,对不起!对不起!!对不起!!!{:5_111:} {:5_111:} {:5_111:}

因为这两天感冒发烧了,而且还在打着暑假工;只有晚上有时间,但是这两天下班回来发烧一直反复都39.5度了;所以我断更了{:5_104:}
现在先更新今天的,欠着的等我那天休息了补回来{:5_96:} (PS:2017.7.12与2017.7.13这两天的任务没完成{:5_109:} )

越努力,越幸运。欢迎大家来看我的笔记{:10_297:} 小白刚学,不对的请各位大佬指正,谢谢{:10_254:}

一、在代码段中使用栈(复习一下{:5_109:} )
(1)我们首先要有一段可当作栈的内存空间。如前所述,这段空间应该由系统来分配。我们可以在程序中通过定义数据来取得一段空间,然后将这段空间当作栈空间来用。
(2)栈:记住以下两点应该差不多了
1.任意时刻,SS:SP指向栈顶元素。
2.出栈(push):减2。      入栈(pop): 加2。寄存器出栈的顺序要和入栈的顺序相反。
(3)dw和db:dw为定义字型数据(十六位),db为定义字节型数据(八位)。


二、将数据、代码、栈放入不同的段


PS:发现一个小问题,就是用LOOP S实现循环的时候,在同一个源程序中;可以有多个循环,只要把S改成不重复的就好了(S0,S1,S2....)


(1)我们应该考虑用多个段来存放数据、代码和栈。这样思路可以更清晰,共同放在一个段了的确有点绕了。
(2)怎样做呢?
1.程序中“data”段中的数据“0abch”的地址就是:data:6。(因为是字型数据十六位的,故占两个内存单元)
2.我们要将它送入bx中,就要用如下的代码:
         mov ax,data
         mov ds,ax
         mov bx,ds:
   我们不能用下面的指令:
         mov ds,data         
         mov ax,ds:
其中指令“mov ds,data” 是错误的,因为8086CPU不允许将一个数值直接送入段寄存器中(只能通用寄存器哦AX、BX、CX、DX)
3.“代码段”、“数据段”、“栈段”完全是我们的安排。

(3)CPU如何知道去执行它们?(用C语言来讲就是:把start放在主函数也就是main函数开始的地方)
我们在源程序的最后用“end start”说明了程序的入口,这个入口将被写入可执行文件的描述信息,可执行文件中的程序被加载入内存后,CPU的CS:IP被设置指向这个入口,从而开始执行程序中的第一条指令。标号“start”在“code”段中,这样CPU就将code段中的内容当作指令来执行了。


(4)总之,CPU到底如何处理我们定义的段中的内容,是当作指令执行,当作数据访问,还是当作栈空间,完全是靠程序中具体的汇编指令,和汇编指令对CS:IP、SS:SP、DS等寄存器的设置来决定的。

谢谢小甲鱼带来的视频教程,感谢!! {:10_303:}   

本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记{:10_297:} 小白刚学,不对的请各位大佬指教,谢谢{:10_254:}

小甲鱼 发表于 2017-7-14 23:53:33

注意休息哈,越努力,越幸运!

怡然1992 发表于 2017-7-15 12:07:03

支持楼主!注意身体!

shuiyu 发表于 2017-7-15 22:35:12

小甲鱼 发表于 2017-7-14 23:53
注意休息哈,越努力,越幸运!

嗯嗯,谢谢小甲鱼{:5_106:}我会加油的,越努力,越幸运!{:5_109:}

shuiyu 发表于 2017-7-15 22:35:48

怡然1992 发表于 2017-7-15 12:07
支持楼主!注意身体!

谢谢谢谢{:5_109:}
页: [1]
查看完整版本: 《零基础入门学习汇编语言》第三十讲